Compare commits

..

3 Commits

Author SHA1 Message Date
2f7f2e42a4 Tower: upload web_responsive 19.0.1.0.2 (was 19.0.1.0.2, via marketplace)
All checks were successful
addon-qualify / qualify (push) Successful in 13s
2026-05-14 17:52:50 +00:00
OdooSky v3
0bba5fcf42 ci: vendor qualify-addon.py (Pillar 1 self-contained)
All checks were successful
addon-qualify / qualify (push) Successful in 7s
2026-05-09 13:38:34 +02:00
OdooSky v3
5df745d1fa ci: addon qualification gate (Pillar 1)
Some checks failed
addon-qualify / qualify (push) Failing after 46s
2026-05-09 13:33:40 +02:00
113 changed files with 10639 additions and 0 deletions

393
.gitea/qualify-addon.py Normal file
View File

@@ -0,0 +1,393 @@
#!/usr/bin/env python3
"""
qualify-addon.py — Pillar 1 of the addon qualification gate.
Static checks against an Odoo addon source tree:
manifest __manifest__.py parses, has 'name', 'version' starts with '<digit>.0.'
pip-deps every non-stdlib import is declared in external_dependencies['python']
app-name every <app> element in any view XML has a name= attribute
menu-icon top-level <menuitem web_icon=> is set OR the addon ships
static/description/icon.png
hoot-import no JS file under static/src/ imports from '@odoo/hoot' or '@odoo/hoot-dom'
webpack-name no JS file under static/lib/ uses self.webpackChunk_<unprefixed-name> —
chunk array names must be addon-namespaced (e.g. webpackChunk_am5_<addon>)
Usage:
python3 scripts/qualify-addon.py <addon-dir> [<addon-dir> ...]
python3 scripts/qualify-addon.py --json <addon-dir>
Exit codes:
0 all checks passed for every addon
1 at least one addon failed at least one check
2 bad usage / I/O error
Each finding is (severity, check, message). Severity:
ERROR — the addon is broken-by-construction; refuse to admit to catalog
WARN — likely problem but could be intentional; admit-with-warning posture
"""
from __future__ import annotations
import ast
import json
import re
import sys
from dataclasses import dataclass, asdict
from pathlib import Path
from xml.etree import ElementTree as ET
# Python stdlib modules. Conservative — anything imported NOT in here AND not in
# ODOO_BUILTINS is flagged as needing declaration. Better to false-positive (fixable
# by adding to external_dependencies) than miss a real missing dep.
STDLIB = frozenset({
'abc', 'argparse', 'ast', 'asyncio', 'base64', 'binascii', 'bisect', 'calendar',
'collections', 'configparser', 'contextlib', 'contextvars', 'copy', 'csv', 'ctypes',
'dataclasses', 'datetime', 'decimal', 'difflib', 'dis', 'email', 'enum', 'errno',
'fcntl', 'fnmatch', 'functools', 'gc', 'getpass', 'gettext', 'glob', 'gzip', 'hashlib',
'heapq', 'hmac', 'html', 'http', 'imaplib', 'importlib', 'inspect', 'io', 'ipaddress',
'itertools', 'json', 'keyword', 'locale', 'logging', 'math', 'mimetypes',
'multiprocessing', 'numbers', 'operator', 'os', 'pathlib', 'pickle', 'pkgutil',
'platform', 'pprint', 'queue', 'random', 're', 'select', 'selectors', 'shlex',
'shutil', 'signal', 'smtplib', 'socket', 'sqlite3', 'ssl', 'stat', 'string', 'struct',
'subprocess', 'sys', 'tempfile', 'textwrap', 'threading', 'time', 'timeit', 'token',
'tokenize', 'traceback', 'types', 'typing', 'unicodedata', 'unittest', 'urllib',
'uuid', 'warnings', 'weakref', 'xml', 'xmlrpc', 'zipfile', 'zlib', 'zoneinfo',
'__future__',
})
# Modules shipped by Odoo's base image. Never need declaration.
ODOO_BUILTINS = frozenset({
'odoo', 'psycopg2', 'lxml', 'PIL', 'requests', 'dateutil', 'pytz', 'passlib',
'werkzeug', 'jinja2', 'markupsafe', 'docutils', 'reportlab', 'babel', 'xlsxwriter',
'xlrd', 'xlwt', 'qrcode', 'vobject', 'polib', 'PyPDF2', 'cryptography', 'pyOpenSSL',
'OpenSSL', 'suds', 'num2words', 'pyldap', 'ldap', 'xmltodict', 'zeep', 'gevent',
'greenlet', 'libsass', 'idna', 'pyusb', 'serial', 'qrcode', 'mock', 'freezegun',
'phonenumbers',
})
# Bare-name webpackChunk arrays we know collide. Detector flags any
# `self.webpackChunk_<name>` where <name> doesn't have an addon-derived suffix.
# We allow the canonical chunk array names listed here ONLY if the addon's
# directory name matches — i.e. we suggest namespacing.
WEBPACK_CHUNK_RE = re.compile(r'self\.(webpackChunk[a-zA-Z0-9_]+)\b')
# JS imports of the hoot test framework that should never appear in production code.
HOOT_IMPORT_RE = re.compile(
r'''(?:from\s+['"]@odoo/hoot[a-z\-]*['"]|require\s*\(\s*['"]@odoo/hoot[a-z\-]*['"]\s*\))'''
)
@dataclass
class Finding:
severity: str # 'ERROR' | 'WARN'
check: str # short check id
message: str # human-readable
file: str | None = None # relative path, if applicable
line: int | None = None # 1-indexed, if applicable
# ---------------------------------------------------------------------------- #
# Check 1 — manifest parses + has required keys
# ---------------------------------------------------------------------------- #
def check_manifest(addon_dir: Path) -> tuple[list[Finding], dict | None]:
findings: list[Finding] = []
mf_path = addon_dir / '__manifest__.py'
if not mf_path.exists():
findings.append(Finding('ERROR', 'manifest', 'no __manifest__.py'))
return findings, None
try:
manifest = ast.literal_eval(mf_path.read_text())
except (SyntaxError, ValueError) as e:
findings.append(Finding('ERROR', 'manifest',
f'__manifest__.py does not parse as Python literal: {e}',
file='__manifest__.py'))
return findings, None
if not isinstance(manifest, dict):
findings.append(Finding('ERROR', 'manifest',
'__manifest__.py top-level is not a dict',
file='__manifest__.py'))
return findings, None
if not manifest.get('name'):
findings.append(Finding('ERROR', 'manifest',
"missing 'name' key (Odoo refuses install)",
file='__manifest__.py'))
version = manifest.get('version', '')
if not re.match(r'^\d+\.0\.\d+\.\d+\.\d+$', version):
findings.append(Finding('WARN', 'manifest',
f"version {version!r} is not in '<odoo_major>.0.x.y.z' form — "
"Odoo will prepend the running Odoo major and may refuse install "
"on a different major (incident #9)",
file='__manifest__.py'))
return findings, manifest
# ---------------------------------------------------------------------------- #
# Check 2 — pip deps: every non-stdlib import is in external_dependencies
# ---------------------------------------------------------------------------- #
def check_pip_deps(addon_dir: Path, manifest: dict) -> list[Finding]:
findings: list[Finding] = []
declared = set(manifest.get('external_dependencies', {}).get('python', []))
addon_name = addon_dir.name
# Pre-scan: collect this addon's submodule names so we don't flag intra-addon imports.
own_submodules = {p.stem for p in addon_dir.rglob('*.py') if p.stem != '__init__'}
own_submodules.add(addon_name)
seen_imports: set[tuple[str, str, int]] = set() # (toplevel, file, line)
for py_file in addon_dir.rglob('*.py'):
if any(part.startswith('.') for part in py_file.parts):
continue
try:
tree = ast.parse(py_file.read_text())
except (SyntaxError, UnicodeDecodeError):
continue
rel = py_file.relative_to(addon_dir).as_posix()
for node in ast.walk(tree):
if isinstance(node, ast.Import):
for alias in node.names:
seen_imports.add((alias.name.split('.')[0], rel, node.lineno))
elif isinstance(node, ast.ImportFrom):
if node.level: # relative import — intra-addon, skip
continue
if node.module:
seen_imports.add((node.module.split('.')[0], rel, node.lineno))
for top, rel, lineno in sorted(seen_imports):
if top in STDLIB or top in ODOO_BUILTINS or top in own_submodules:
continue
if top in declared:
continue
# PEP 8 names that are clearly local helpers (e.g. utils, models) — skip if
# they look like a sibling module we missed in own_submodules.
if (addon_dir / top).is_dir() or (addon_dir / f'{top}.py').exists():
continue
findings.append(Finding(
'ERROR', 'pip-deps',
f"imports '{top}' but it is not in external_dependencies['python'] "
"(install will fail with ModuleNotFoundError — incident #5)",
file=rel, line=lineno,
))
return findings
# ---------------------------------------------------------------------------- #
# Check 3 — every <app> element has a name= attribute
# ---------------------------------------------------------------------------- #
def check_app_name(addon_dir: Path) -> list[Finding]:
findings: list[Finding] = []
# XML files in views/ + data/ may contain res_config_settings <app> elements.
for xml_file in list(addon_dir.rglob('views/*.xml')) + list(addon_dir.rglob('data/*.xml')):
try:
text = xml_file.read_text()
except UnicodeDecodeError:
continue
rel = xml_file.relative_to(addon_dir).as_posix()
# Multi-line tolerant regex: <app ... > with everything between.
for m in re.finditer(r'<app\b[^>]*?>', text, re.DOTALL):
tag = m.group()
if 'name=' in tag:
continue
line = text[:m.start()].count('\n') + 1
findings.append(Finding(
'ERROR', 'app-name',
"<app> element missing name= attribute. Odoo 18 SettingsFormCompiler "
"calls toStringExpression(null) and crashes the entire Settings page "
"(incident #7)",
file=rel, line=line,
))
return findings
# ---------------------------------------------------------------------------- #
# Check 4 — top-level menus declare web_icon OR addon ships static/description/icon.png
# ---------------------------------------------------------------------------- #
def check_menu_icon(addon_dir: Path) -> list[Finding]:
findings: list[Finding] = []
has_default_icon = (addon_dir / 'static' / 'description' / 'icon.png').exists()
for xml_file in addon_dir.rglob('*.xml'):
try:
text = xml_file.read_text()
except UnicodeDecodeError:
continue
rel = xml_file.relative_to(addon_dir).as_posix()
# Find <menuitem ... > whose XML has no parent= attribute (top-level menu).
for m in re.finditer(r'<menuitem\b[^>]*?/?>', text, re.DOTALL):
tag = m.group()
if 'parent=' in tag:
continue
if 'web_icon=' in tag:
continue
if has_default_icon:
# Odoo 18's auto-fallback path. Soft warning since it works for top-level
# menus that get web_icon auto-populated from the module's icon.png.
# But our incident #6 showed even with icon.png present, web_icon often
# ends up empty in DB. So WARN, not ERROR.
line = text[:m.start()].count('\n') + 1
findings.append(Finding(
'WARN', 'menu-icon',
"top-level <menuitem> has no web_icon=. Will fall back to "
"static/description/icon.png IF Odoo's auto-populate fires; "
"if not, menu shows blank (incident #6). Set web_icon explicitly.",
file=rel, line=line,
))
else:
line = text[:m.start()].count('\n') + 1
findings.append(Finding(
'ERROR', 'menu-icon',
"top-level <menuitem> has no web_icon= AND addon ships no "
"static/description/icon.png — menu will render blank.",
file=rel, line=line,
))
return findings
# ---------------------------------------------------------------------------- #
# Check 5 — no @odoo/hoot* imports in static/src/
# ---------------------------------------------------------------------------- #
def check_hoot_import(addon_dir: Path) -> list[Finding]:
findings: list[Finding] = []
src_dir = addon_dir / 'static' / 'src'
if not src_dir.exists():
return findings
for js_file in src_dir.rglob('*.js'):
try:
text = js_file.read_text()
except UnicodeDecodeError:
continue
rel = js_file.relative_to(addon_dir).as_posix()
for m in HOOT_IMPORT_RE.finditer(text):
line = text[:m.start()].count('\n') + 1
findings.append(Finding(
'ERROR', 'hoot-import',
"imports from @odoo/hoot* in production code (static/src/). "
"@odoo/hoot is the test framework; the production bundle does not "
"register it. Page will white-screen (incident #3 class)",
file=rel, line=line,
))
return findings
# ---------------------------------------------------------------------------- #
# Check 6 — webpack chunk arrays in static/lib/ must be addon-namespaced
# ---------------------------------------------------------------------------- #
def check_webpack_chunk(addon_dir: Path) -> list[Finding]:
findings: list[Finding] = []
lib_dir = addon_dir / 'static' / 'lib'
if not lib_dir.exists():
return findings
addon_name = addon_dir.name
seen: set[str] = set()
for js_file in lib_dir.rglob('*.js'):
try:
text = js_file.read_text()
except UnicodeDecodeError:
continue
rel = js_file.relative_to(addon_dir).as_posix()
for m in WEBPACK_CHUNK_RE.finditer(text):
chunk_name = m.group(1)
if chunk_name in seen:
continue
seen.add(chunk_name)
# Acceptable if chunk name contains: full addon name OR any 4+ char
# sub-token of the addon name (e.g. 'ksdn' for 'ks_dashboard_ninja')
# OR a known-namespaced suffix (anything past the standard library
# prefix). We just need confidence the chunk array is unique-per-addon.
addon_lower = addon_name.lower()
chunk_lower = chunk_name.lower()
tokens = [addon_lower.replace('_', '')] + [
t for t in addon_lower.split('_') if len(t) >= 4
]
# Also accept any short 4+ char abbrev derived from initials of
# underscore-separated parts (ks_dashboard_ninja -> ksdn)
initials = ''.join(t[0] for t in addon_lower.split('_') if t)
if len(initials) >= 3:
tokens.append(initials)
if any(t in chunk_lower for t in tokens):
continue
line = text[:m.start()].count('\n') + 1
findings.append(Finding(
'ERROR', 'webpack-chunk',
f"uses bare webpack chunk array '{chunk_name}'. Two addons that ship "
f"the same library (e.g. amCharts) collide on this global → bundle "
f"execution aborts (incident #4). Rename to '{chunk_name}_{addon_name}' "
"or similar.",
file=rel, line=line,
))
return findings
# ---------------------------------------------------------------------------- #
# Runner
# ---------------------------------------------------------------------------- #
def qualify_addon(addon_dir: Path) -> dict:
findings: list[Finding] = []
manifest_findings, manifest = check_manifest(addon_dir)
findings.extend(manifest_findings)
if manifest is not None:
findings.extend(check_pip_deps(addon_dir, manifest))
findings.extend(check_app_name(addon_dir))
findings.extend(check_menu_icon(addon_dir))
findings.extend(check_hoot_import(addon_dir))
findings.extend(check_webpack_chunk(addon_dir))
errors = sum(1 for f in findings if f.severity == 'ERROR')
warns = sum(1 for f in findings if f.severity == 'WARN')
return {
'addon': addon_dir.name,
'path': str(addon_dir),
'qualified': errors == 0,
'errors': errors,
'warns': warns,
'findings': [asdict(f) for f in findings],
}
def main(argv: list[str]) -> int:
json_out = False
args: list[str] = []
for a in argv[1:]:
if a == '--json':
json_out = True
elif a in ('-h', '--help'):
print(__doc__)
return 0
else:
args.append(a)
if not args:
print(__doc__, file=sys.stderr)
return 2
results = []
for path_str in args:
path = Path(path_str).resolve()
if not path.is_dir() or not (path / '__manifest__.py').exists():
print(f'ERROR: {path} is not an Odoo addon directory '
'(missing __manifest__.py)', file=sys.stderr)
return 2
results.append(qualify_addon(path))
if json_out:
print(json.dumps(results, indent=2))
else:
for r in results:
badge = '\033[32mQUALIFIED\033[0m' if r['qualified'] else '\033[31mFAILED\033[0m'
print(f"\n{badge} {r['addon']} ({r['errors']} error(s), {r['warns']} warning(s))")
if not r['findings']:
continue
for f in r['findings']:
tag = '\033[31m' if f['severity'] == 'ERROR' else '\033[33m'
loc = ''
if f['file']:
loc = f" [{f['file']}" + (f":{f['line']}" if f['line'] else '') + ']'
print(f" {tag}{f['severity']:5}\033[0m {f['check']:<14} {f['message']}{loc}")
any_failed = any(not r['qualified'] for r in results)
return 1 if any_failed else 0
if __name__ == '__main__':
sys.exit(main(sys.argv))

View File

@@ -0,0 +1,40 @@
# Pillar 1 of the addon-qualification proposal — runs on every push to any
# branch and on every PR. Runs the vendored qualify-addon.py against every
# addon directory in this repo.
#
# admit-with-warning posture: lint findings are reported but do NOT fail
# the build (matches Pillar 3 informed-consent posture).
#
# To update the qualifier itself, edit scripts/qualify-addon.py in
# odoo-tower/odooskyv3 then sync it here.
name: addon-qualify
on:
push:
pull_request:
workflow_dispatch:
jobs:
qualify:
runs-on: ubuntu-latest
steps:
- name: Checkout addons repo
uses: actions/checkout@v4
- name: Run qualifier on every addon
run: |
set +e
ADDONS=()
for d in addons/*/; do
[ -f "$d/__manifest__.py" ] && ADDONS+=("${d%/}")
done
if [ ${#ADDONS[@]} -eq 0 ]; then
echo "No addons under addons/ — nothing to qualify"
exit 0
fi
echo "Qualifying ${#ADDONS[@]} addons..."
python3 .gitea/qualify-addon.py "${ADDONS[@]}"
QUAL_RC=$?
echo
echo "::notice ::qualifier exit code $QUAL_RC (admit-with-warning — not failing build)"
exit 0

View File

@@ -0,0 +1,222 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
==============
Web Responsive
==============
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:af4d0ea2eb2c3d5f3c6eabad336e0da11b01c52d16a24e4114129b4185a10b6a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
:target: https://github.com/OCA/web/tree/19.0/web_responsive
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_responsive
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=19.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module adds responsiveness to web backend.
**Features for all devices**:
- Redirect to the dashboard after logging in. Users will only be
redirected to the home page after login if they have enabled the
'Redirect to Home' option in their profile settings.
|image|
- New navigation with the fullscreen app menu
|image1|
- Quick menu search inside the app menu
|image2|
- Sticky header & footer in list view
|image3|
- Sticky statusbar in form view
|image4|
- Bigger checkboxes in list view
|image5|
**Features for mobile**: \* View type picker dropdown displays
comfortably
- Control panel buttons use icons to save space.
|image6|
- Followers and send button is displayed on mobile. Avatar is hidden.
|image7|
- Big inputs on form in edit mode
**Features for desktop computers**:
- Keyboard shortcuts for easier navigation, **using \`Alt + Shift +
[NUM]\`** combination instead of just Alt + [NUM] to avoid conflict
with Firefox Tab switching. Standard Odoo keyboard hotkeys changed to
be more intuitive or accessible by fingers of one hand. F.x. Alt + S
for Save
|image8|
- Autofocus on search menu box when opening the app menu
|image9|
- When the chatter is on the side part, the document viewer fills that
part for side-by-side reading instead of full screen. You can still
put it on full width preview clicking on the new maximize button.
|image10|
- When the user chooses to send a public message the color of the
composer is different from the one when the message is an internal
log.
|image11|
.. |image| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/redirecthome.gif
.. |image1| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/appmenu.gif
.. |image2| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/appsearch.gif
.. |image3| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/listview.gif
.. |image4| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/formview.gif
.. |image5| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/listview.gif
.. |image6| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/form_buttons.gif
.. |image7| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/chatter.png
.. |image8| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/shortcuts.gif
.. |image9| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/appsearch.gif
.. |image10| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/document_viewer.gif
.. |image11| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/chatter-colors.png
**Table of contents**
.. contents::
:local:
Usage
=====
The following keyboard shortcuts are implemented:
- Navigate app search results - Arrow keys
- Choose app result - ``Enter``
- ``Esc`` to close app drawer
Known issues / Roadmap
======================
- App navigation with keyboard.
- Handle long titles on forms in a better way
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_responsive%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* LasLabs
* Tecnativa
* ITerra
* Onestein
Contributors
------------
- Dave Lasley <dave@laslabs.com>
- Jairo Llopis <jairo.llopis@tecnativa.com>
- `Onestein <https://www.onestein.nl>`__:
- Dennis Sluijk <d.sluijk@onestein.nl>
- Anjeel Haria
- Sergio Teruel <sergio.teruel@tecnativa.com>
- Alexandre Díaz <dev@redneboa.es>
- Mathias Markl <mathias.markl@mukit.at>
- Iván Todorovich <ivan.todorovich@gmail.com>
- Sergey Shebanin <sergey@shebanin.ru>
- David Vidal <david.vidal@tecnativa.com>
- Taras Shabaranskyi <shabaranskij@gmail.com>
- Angel Patel <patelangel1414@gmail.com>
- Mohamed Alkobrosli <malkobrosly@kencove.com>
- `Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>`__
- Bhavesh Heliconia
- `IKU Solutions <https://www.iku.solutions>`__
- Yan Chirino <yan.chirino@iku.solutions>
Maintainers
-----------
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
.. |maintainer-Tardo| image:: https://github.com/Tardo.png?size=40px
:target: https://github.com/Tardo
:alt: Tardo
.. |maintainer-SplashS| image:: https://github.com/SplashS.png?size=40px
:target: https://github.com/SplashS
:alt: SplashS
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-Tardo| |maintainer-SplashS|
This module is part of the `OCA/web <https://github.com/OCA/web/tree/19.0/web_responsive>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1,4 @@
# Copyright 2023 Taras Shabaranskyi
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from . import models

View File

@@ -0,0 +1,61 @@
# Copyright 2016-2017 LasLabs Inc.
# Copyright 2017-2018 Tecnativa - Jairo Llopis
# Copyright 2018-2019 Tecnativa - Alexandre Díaz
# Copyright 2021 ITerra - Sergey Shebanin
# Copyright 2023 Onestein - Anjeel Haria
# Copyright 2023 Taras Shabaranskyi
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
{
"name": "Web Responsive",
"summary": "Responsive web client, community-supported",
"version": "19.0.1.0.2",
"category": "Website",
"website": "https://github.com/OCA/web",
"author": "LasLabs, Tecnativa, ITerra, Onestein, Odoo Community Association (OCA)",
"license": "LGPL-3",
"installable": True,
"depends": ["web", "web_tour", "mail"],
"development_status": "Production/Stable",
"maintainers": ["Tardo", "SplashS"],
"excludes": ["web_enterprise"],
"data": [
"views/res_users_views.xml",
],
"assets": {
"web._assets_primary_variables": {
"/web_responsive/static/src/legacy/scss/form_variable.scss",
"/web_responsive/static/src/legacy/scss/primary_variable.scss",
},
"web.assets_backend": [
"web_responsive/static/src/lib/fuse/fuse.basic.min.js",
"/web_responsive/static/src/legacy/scss/web_responsive.scss",
"/web_responsive/static/src/legacy/scss/big_boxes.scss",
"/web_responsive/static/src/legacy/scss/list_sticky_header.scss",
"/web_responsive/static/src/legacy/js/web_responsive.esm.js",
"/web_responsive/static/src/legacy/xml/form_buttons.xml",
"/web_responsive/static/src/legacy/xml/custom_favorite_item.xml",
"/web_responsive/static/src/components/apps_menu_tools.esm.js",
"/web_responsive/static/src/components/apps_menu/*",
"/web_responsive/static/src/components/apps_menu_item/*",
"/web_responsive/static/src/components/menu_canonical_searchbar/*",
"/web_responsive/static/src/components/menu_odoo_searchbar/*",
"/web_responsive/static/src/components/menu_fuse_searchbar/*",
"/web_responsive/static/src/components/menu_searchbar/*",
"/web_responsive/static/src/components/hotkey/*",
"/web_responsive/static/src/components/file_viewer/*",
"/web_responsive/static/src/components/chatter/*",
"/web_responsive/static/src/components/control_panel/*",
"/web_responsive/static/src/components/command_palette/*",
"/web_responsive/static/src/views/form/*",
],
"web.assets_clickbot": [
"/web_responsive/static/src/clickbot/clickbot.esm.js",
],
"web.qunit_suite_tests": [
"/web_responsive/static/tests/apps_menu_tests.esm.js",
"/web_responsive/static/tests/apps_menu_search_tests.esm.js",
],
},
"sequence": 1,
}

View File

@@ -0,0 +1,250 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-11-07 15:08+0000\n"
"Last-Translator: Waleed Mohsen <Mohsen.Waleed@gmail.com>\n"
"Language-Team: none\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 3.10\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "تجاهل"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "تكبير"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "تصغير"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "حفظ"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "بحث في القوائم..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Create"
#~ msgstr "إنشاء"
#~ msgid "Chatter Position"
#~ msgstr "موقع الدردشة"
#, python-format
#~ msgid "Edit"
#~ msgstr "تعديل"
#~ msgid "Normal"
#~ msgstr "عادي"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "اجراءات سريعة"
#~ msgid "Sided"
#~ msgstr "جانبي"
#~ msgid "Users"
#~ msgstr "المستخدمون"
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgid "Close"
#~ msgstr "إغلاق"
#~ msgid ""
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
#~ "none"
#~ msgstr ""
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
#~ "none"
#~ msgid "false"
#~ msgstr "false"
#~ msgid ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
#~ msgstr ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"

View File

@@ -0,0 +1,234 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-02-02 22:13+0000\n"
"Last-Translator: eduardgm <eduard.garcia@qubiq.es>\n"
"Language-Team: none\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.10\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Descartar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maximitzar"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimitzar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Guardar"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Cercar menús..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Create"
#~ msgstr "Crear"
#~ msgid "Chatter Position"
#~ msgstr "Posició del chatter"
#, python-format
#~ msgid "Edit"
#~ msgstr "Editar"
#~ msgid "Normal"
#~ msgstr "Normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Accions ràpides"
#~ msgid "Sided"
#~ msgstr "Lateral"
#~ msgid "Users"
#~ msgstr "Usuaris"
#~ msgid "Close"
#~ msgstr "Tancar"
#~ msgid "false"
#~ msgstr "fals"

View File

@@ -0,0 +1,231 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2018-09-02 05:11+0000\n"
"Last-Translator: Hans Henrik Gabelgaard <hhg@gabelgaard.org>\n"
"Language-Team: none\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.1.1\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#~ msgid "Chatter Position"
#~ msgstr "Log position"
#~ msgid "Sided"
#~ msgstr "Side"
#~ msgid "Users"
#~ msgstr "Brugere"
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
#~ msgstr "<span class=\"sr-only\">Skift App skuffe</span>"
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
#~ msgstr "<span class=\"sr-only\">Skift navigation</span>"
#~ msgid "Apps"
#~ msgstr "Applikationer"
#~ msgid "More"
#~ msgstr "Mere"
#~ msgid "More <b class=\"caret\"/>"
#~ msgstr "Mere <b class=\"caret\"/>"
#~ msgid "Task"
#~ msgstr "Opgave"

View File

@@ -0,0 +1,278 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
# Translators:
# Niki Waibel <niki.waibel@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-03 01:37+0000\n"
"PO-Revision-Date: 2023-06-20 11:09+0000\n"
"Last-Translator: Nils Coenen <nils.coenen@nico-solutions.de>\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Verwerfen"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Home-Menü"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Protokollnotiz"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "maximieren"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "minimieren"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Neu"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Speichern"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Such-Menüs..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Nachricht senden"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Activities"
#~ msgstr "Aktivitäten"
#, python-format
#~ msgid "All"
#~ msgstr "Alles"
#, python-format
#~ msgid "Attachment counter loading..."
#~ msgstr "Anhangszähler wird geladen..."
#, python-format
#~ msgid "Attachments"
#~ msgstr "Anhänge"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "LÖSCHEN"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "SIEHE ERGEBNIS"
#, python-format
#~ msgid "Search..."
#~ msgstr "Suche..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Ansichtsumschalter"
#, python-format
#~ msgid "Create"
#~ msgstr "Erstellen"
#~ msgid "Chatter Position"
#~ msgstr "Chatter-Position"
#, python-format
#~ msgid "Edit"
#~ msgstr "Ändern"
#~ msgid "Normal"
#~ msgstr "normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Schnell-Aktion"
#~ msgid "Sided"
#~ msgstr "Seitlich"
#~ msgid "Users"
#~ msgstr "Benutzer"
#~ msgid "Close"
#~ msgstr "Schließen"
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
#~ msgstr "<span class=\"sr-only\">App Ordner umschalten</span>"
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
#~ msgstr "<span class=\"sr-only\">Navigation umschalten</span>"
#~ msgid "Apps"
#~ msgstr "Apps"
#~ msgid "More <b class=\"caret\"/>"
#~ msgstr "Mehr <b class=\"caret\"/>"

View File

@@ -0,0 +1,291 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
# Translators:
# Pedro M. Baeza <pedro.baeza@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-01-10 10:49+0000\n"
"PO-Revision-Date: 2025-05-15 16:03+0000\n"
"Last-Translator: \"Leonardo J. Caballero G.\" <leonardocaballero@gmail.com>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr "Acción"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr "Icono de la Aplicación"
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr "Preferencias del Menú Aplicaciones"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr "Menú Aplicaciones Tipo de Búsqueda"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr "Tema del Menú de Aplicaciones"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr "Canónico"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr "Paleta de Comandos"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr "Comunidad"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Descartar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr "Salida"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr "Fusible"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr "Enrutamiento HTTP"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Menú de Inicio"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Nota de registro"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maximizar"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr "Leche"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimizar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Nuevo"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr "Nada que mostrar"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr "Redirigir al inicio"
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr "Redirigir al panel después de iniciar sesión"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Guardar"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr "Tipo de Búsqueda"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr "Tipo de Búsqueda Ayuda"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Buscar menús..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Enviar mensaje"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr "Tema"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr "Usuario"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr "se utiliza un nuevo algoritmo de búsqueda"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr "la herramienta de búsqueda estándar de odoo"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr "utiliza un algoritmo estándar"
#, python-format
#~ msgid "Activities"
#~ msgstr "Actividades"
#, python-format
#~ msgid "All"
#~ msgstr "Todos"
#, python-format
#~ msgid "Attachment counter loading..."
#~ msgstr "Carga del contador de archivos adjuntos..."
#, python-format
#~ msgid "Attachments"
#~ msgstr "Archivos adjuntos"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "LIMPIAR"
#, python-format
#~ msgid "FILTER"
#~ msgstr "FILTRAR"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "VER RESULTADO"
#, python-format
#~ msgid "Search..."
#~ msgstr "Búsqueda..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Vista del conmutador"
#, python-format
#~ msgid "Create"
#~ msgstr "Crear"
#~ msgid "Chatter Position"
#~ msgstr "Posición del chatter"
#, python-format
#~ msgid "Edit"
#~ msgstr "Editar"
#~ msgid "Normal"
#~ msgstr "Normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Acciones rápidas"
#~ msgid "Sided"
#~ msgstr "Lateral"
#~ msgid "Users"
#~ msgstr "Usuarios"
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgid "Close"
#~ msgstr "Cerrar"
#~ msgid "Shift"
#~ msgstr "Turno"
#~ msgid ""
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
#~ "none"
#~ msgstr ""
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
#~ "none"
#~ msgid "false"
#~ msgstr "falso"
#~ msgid ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
#~ msgstr ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"

View File

@@ -0,0 +1,183 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: es_VE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "Discard"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
msgid "Maximize"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
msgid "Minimize"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "Save"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
msgid "Search menus..."
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""

View File

@@ -0,0 +1,290 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-05-07 12:58+0000\n"
"Last-Translator: timbreckx <thomas.imbreckx@imio.be>\n"
"Language-Team: none\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.10.4\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr "Action"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Annuler"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Menu daccueil"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Enregistrer une note"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maximiser"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimiser"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Enregistrer"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Rechercher dans les menus..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Envoyer un message"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Activities"
#~ msgstr "Activités"
#, python-format
#~ msgid "All"
#~ msgstr "Tout"
#, python-format
#~ msgid "Attachment counter loading..."
#~ msgstr "Chargement du compteur de pièces jointes..."
#, python-format
#~ msgid "Attachments"
#~ msgstr "Pièces Jointes"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "NETTOYER"
#, python-format
#~ msgid "FILTER"
#~ msgstr "FILTRER"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "VOIR RÉSULTAT"
#, python-format
#~ msgid "Search..."
#~ msgstr "Rechercher…"
#, python-format
#~ msgid "View switcher"
#~ msgstr "Bascule de vue"
#, python-format
#~ msgid "Create"
#~ msgstr "Créer"
#~ msgid "Chatter Position"
#~ msgstr "Position de la messagerie"
#, python-format
#~ msgid "Clear"
#~ msgstr "Nettoyer"
#, python-format
#~ msgid "Edit"
#~ msgstr "Editer"
#~ msgid "Normal"
#~ msgstr "Normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Actions rapides"
#~ msgid "Sided"
#~ msgstr "À coté"
#, python-format
#~ msgid "Today"
#~ msgstr "Aujourdhui"
#, python-format
#~ msgid "Undefined"
#~ msgstr "Non défini"
#~ msgid "Users"
#~ msgstr "Utilisateurs"
#, python-format
#~ msgid "props.withAccessKey ? 'x' : false"
#~ msgstr "props.withAccessKey ? 'x' : false"
#, python-format
#~ msgid "props.withAccessKey ? 'z' : false"
#~ msgstr "props.withAccessKey ? 'z' : false"
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgid "Close"
#~ msgstr "Fermer"

View File

@@ -0,0 +1,185 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-05-07 15:23+0000\n"
"Last-Translator: timbreckx <thomas.imbreckx@imio.be>\n"
"Language-Team: none\n"
"Language: fr_BE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.10.4\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
msgid "App Icon"
msgstr "Icône d'application"
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr "Préférences du menu d'applications"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr "Type de recherche du menu d'applications"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr "Thème du menu d'applications"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr "Canonique"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr "Palette de commandes"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr "Communauté"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "Discard"
msgstr "Ignorer"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
msgid "Exit"
msgstr "Quitter"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr "Fusionner"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr "Routage HTTP"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
msgid "Home Menu"
msgstr "Menu d'accueil"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
msgid "Maximize"
msgstr "Maximiser"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
msgid "Minimize"
msgstr "Minimiser"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "New"
msgstr "Nouveau"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
msgid "Nothing to show"
msgstr "Rien à afficher"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr "Rediriger vers la page d'accueil"
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr "Rediriger vers le tableau de bord après l'authentification"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "Save"
msgstr "Enregistrer"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr "Type de recherche"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
msgid "Search menus..."
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
msgid "Send message"
msgstr "Envoyer un message"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr "Thème"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr "Utilisateur"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr "un nouvel algorithme de recherche est utilisé"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr "l'outil de recherche standard d'odoo"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr "utilise un algorithme standard"

View File

@@ -0,0 +1,228 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-11 18:46+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: none\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Annuler"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maximiser"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimiser"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Sauvegarder"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Rechercher dans les menus..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Create"
#~ msgstr "Créer"
#~ msgid "Chatter Position"
#~ msgstr "Position du Chatter"
#, python-format
#~ msgid "Edit"
#~ msgstr "Editer"
#~ msgid "Normal"
#~ msgstr "Normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Actions rapides"
#~ msgid "Sided"
#~ msgstr "À coté"
#~ msgid "Users"
#~ msgstr "Utilisateurs"

View File

@@ -0,0 +1,256 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-28 18:03+0000\n"
"PO-Revision-Date: 2023-04-03 13:22+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.14.1\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Odustani"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Glavni izbornik"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Zabilježi napomenu"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maksimiziraj"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimiziraj"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Novi"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Spremi"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Pretraži izbornike..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Pošalji poruku"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Activities"
#~ msgstr "Aktivnosti"
#, python-format
#~ msgid "All"
#~ msgstr "Sve"
#, python-format
#~ msgid "Attachment counter loading..."
#~ msgstr "Učitavam brojač priloga..."
#, python-format
#~ msgid "Attachments"
#~ msgstr "Prilozi"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "OČISTI"
#, python-format
#~ msgid "FILTER"
#~ msgstr "TRAŽI"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "VIDI REZULTAT"
#, python-format
#~ msgid "Search..."
#~ msgstr "Pretraži..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Izmjena pogleda"
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
#~ msgstr "<span class=\"sr-only\">Izmjeni izbornik aplikacije</span>"
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
#~ msgstr "<span class=\"sr-only\">Izmjeni navigaciju</span>"
#~ msgid "Apps"
#~ msgstr "Apikacije"
#~ msgid "More <b class=\"caret\"/>"
#~ msgstr "Više <b class=\"caret\"/>"

View File

@@ -0,0 +1,204 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-07-18 06:35+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr "Azione"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr "Icona app"
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr "Preferenze menu app"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr "Tipo ricerca menu app"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr "Tema menu app"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr "Canonico"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr "Tavolozza controllo"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr "Comunità"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Abbandona"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr "Uscita"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr "Fondi"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr "Instradamento HTTP"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Menu home"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Registra nota"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Massimizza"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr "Latte"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimizza"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Nuovo"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr "Nulla da visualizzare"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr "Inoltra alla home"
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr "Inoltra al cruscotto dopo l'accesso"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Salva"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr "Tipo ricerca"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr "Aiuto tipo ricerca"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Menù ricerca..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Invia messaggio"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr "Tema"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr "Utente"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr "è stato utilizzato un nuovo algoritmo di ricerca"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr "lo strumento di ricerca standard Odoo"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr "usa un algoritmo standard"

View File

@@ -0,0 +1,242 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-05-17 20:47+0000\n"
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
"Language-Team: none\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Negeren"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maximaliseren"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimaliseren"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Opslaan"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Zoek menu's..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Create"
#~ msgstr "Aanmaken"
#~ msgid "Chatter Position"
#~ msgstr "Chatter Positie"
#, python-format
#~ msgid "Edit"
#~ msgstr "Bewerken"
#~ msgid "Normal"
#~ msgstr "Normaal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Snelle Acties"
#~ msgid "Sided"
#~ msgstr "Aan de zijkant"
#~ msgid "Users"
#~ msgstr "Gebruikers"
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgid "Close"
#~ msgstr "Sluit"
#, fuzzy
#~ msgid "Shift"
#~ msgstr "Shift"
#, fuzzy
#~ msgid "false"
#~ msgstr "false"

View File

@@ -0,0 +1,268 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-08-08 23:07+0000\n"
"Last-Translator: Jacek Michalski <michalski.jck@gmail.com>\n"
"Language-Team: none\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Odrzuć"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Zmaksymalizuj"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Zminimalizuj"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Zapisz"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Przeszukaj menu..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "All"
#~ msgstr "Wszystkie"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "WYCZYŚĆ"
#, python-format
#~ msgid "FILTER"
#~ msgstr "FILTRUJ"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "ZOBACZ WYNIK"
#, python-format
#~ msgid "Search..."
#~ msgstr "Szukaj..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Przełącznik widoku"
#, python-format
#~ msgid "Create"
#~ msgstr "Utwórz"
#~ msgid "Chatter Position"
#~ msgstr "Pozycja Czatu"
#, python-format
#~ msgid "Clear"
#~ msgstr "Wyczyść"
#, python-format
#~ msgid "Edit"
#~ msgstr "Edytuj"
#~ msgid "Normal"
#~ msgstr "Normalna"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Szybkie akcje"
#~ msgid "Sided"
#~ msgstr "Z boku"
#, python-format
#~ msgid "Today"
#~ msgstr "Dzisiaj"
#, python-format
#~ msgid "Undefined"
#~ msgstr "Niezdefiniowane"
#~ msgid "Users"
#~ msgstr "Użytkownicy"
#~ msgid "fade"
#~ msgstr "wygasanie"

View File

@@ -0,0 +1,228 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-08-12 11:44+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
"Language-Team: none\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 3.7.1\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Descartar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Gravar"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Procurar menus..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Create"
#~ msgstr "Criar"
#~ msgid "Chatter Position"
#~ msgstr "Posição do Chatter"
#, python-format
#~ msgid "Edit"
#~ msgstr "Editar"
#~ msgid "Normal"
#~ msgstr "Normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Ações rápidas"
#~ msgid "Sided"
#~ msgstr "Lateralizado"
#~ msgid "Users"
#~ msgstr "Utilizadores"

View File

@@ -0,0 +1,297 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
# Translators:
# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatic4@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-22 08:27+0000\n"
"PO-Revision-Date: 2023-10-28 16:10+0000\n"
"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
"teams/23907/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Descartar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Menu Inicial"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Nota de Registro"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Maximizar"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Minimizar"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Novo"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Salvar"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Pesquisar menus..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Enviar menssagem"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Activities"
#~ msgstr "Atividades"
#, python-format
#~ msgid "All"
#~ msgstr "Tudo"
#, python-format
#~ msgid "Attachment counter loading..."
#~ msgstr "Carregando do contador de anexos..."
#, python-format
#~ msgid "Attachments"
#~ msgstr "Anexos"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "LIMPAR"
#, python-format
#~ msgid "FILTER"
#~ msgstr "FILTRAR"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "VER RESULTADO"
#, python-format
#~ msgid "Search..."
#~ msgstr "Procurar..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Ver alternador"
#, python-format
#~ msgid "Create"
#~ msgstr "Criar"
#~ msgid "Chatter Position"
#~ msgstr "Posição do Chatter"
#, python-format
#~ msgid "Edit"
#~ msgstr "Editar"
#~ msgid "Normal"
#~ msgstr "Normal"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Ações rápidas"
#~ msgid "Sided"
#~ msgstr "Frente e verso"
#~ msgid "Users"
#~ msgstr "Usuários"
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgid "Close"
#~ msgstr "Fechar"
#~ msgid "false"
#~ msgstr "falso"
#~ msgid ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
#~ msgstr ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
#~ msgstr "<span class=\"sr-only\">Aplicativo Desenhador Alternativo</span>"
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
#~ msgstr "<span class=\"sr-only\">Navegação Alternativa</span>"
#~ msgid "Apps"
#~ msgstr "Aplicativos"
#~ msgid "HTTP routing"
#~ msgstr "roteamento HTTP"
#~ msgid "More <b class=\"caret\"/>"
#~ msgstr "Mais <b class=\"caret\"/>"

View File

@@ -0,0 +1,264 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-03-31 16:36+0000\n"
"Last-Translator: SplashS <sergey@shebanin.ru>\n"
"Language-Team: none\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Отменить"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Увеличить"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Уменьшить"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Сохранить"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Поиск по меню..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "All"
#~ msgstr "Все"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "Очистить"
#, python-format
#~ msgid "FILTER"
#~ msgstr "Фильтр"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "Применить"
#, python-format
#~ msgid "Search..."
#~ msgstr "Поиск..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Сменить вид"
#, python-format
#~ msgid "Create"
#~ msgstr "Создать"
#~ msgid "Chatter Position"
#~ msgstr "Расположение Чата"
#, python-format
#~ msgid "Edit"
#~ msgstr "Править"
#~ msgid "Normal"
#~ msgstr "Снизу"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "Действия"
#~ msgid "Sided"
#~ msgstr "Справа"
#, python-format
#~ msgid "Today"
#~ msgstr "Сегодня"
#, python-format
#~ msgid "Undefined"
#~ msgstr "Не определено"
#~ msgid "Users"
#~ msgstr "Пользователи"
#~ msgid "Display Name"
#~ msgstr "Видимое имя"

View File

@@ -0,0 +1,232 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-09-15 16:42+0000\n"
"Last-Translator: Betül Öğmen <betulo@eska.biz>\n"
"Language-Team: none\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.10.4\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr "Eylem"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr "Uygulama simgesi"
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr "Uygulamalar Menüsü Tercihleri"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr "Uygulamalar Menüsü Arama Türü"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr "Uygulamalar Menü Teması"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr "Komut Paleti"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr "Topluluk"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "Vazgeç"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr "Çıkış"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr "Sigorta"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr "HTTP Yönlendirme"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Ana Menü"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr "Not Ekle"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Büyütme"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr "Süt"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Küçültme"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Yeni"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr "Gösterilecek bir şey yok"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr "Ana Sayfaya Yönlendir"
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr "Oturum açtıktan sonra panoya yönlendir"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Kaydet"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr "Arama Türü"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr "Arama Türü Yardımı"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Arama menüleri..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Mesaj Gönder"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr "Tema"
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr "Kullanıcı"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr "yeni bir arama algoritması kullanılıyor"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr "standart odoo arama aracı"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr "standart bir algoritma kullanır"
#, python-format
#~ msgid "All"
#~ msgstr "Hepsi"
#, python-format
#~ msgid "CLEAR"
#~ msgstr "TEMİZLEME"
#, python-format
#~ msgid "FILTER"
#~ msgstr "FİLTRE"
#, python-format
#~ msgid "SEE RESULT"
#~ msgstr "SONUCU GÖR"
#, python-format
#~ msgid "Search..."
#~ msgstr "Arama..."
#, python-format
#~ msgid "View switcher"
#~ msgstr "Görüntü Değiştiriciyi"
#, python-format
#~ msgid "Create"
#~ msgstr "Oluşturma"

View File

@@ -0,0 +1,204 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0-20231123\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-25 15:27+0000\n"
"PO-Revision-Date: 2023-11-25 15:27+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr "Головне меню"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "Збільшити"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "Згорнути"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr "Новий"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr "Нема чого показати"
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "Зберегти"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "Пошук..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr "Надіслати повідомлення"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""

View File

@@ -0,0 +1,194 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "Discard"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_ir_http__display_name
#: model:ir.model.fields,field_description:web_responsive.field_res_users__display_name
msgid "Display Name"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_ir_http__id
#: model:ir.model.fields,field_description:web_responsive.field_res_users__id
msgid "ID"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
msgid "Maximize"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
msgid "Minimize"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
msgid "Save"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
msgid "Search menus..."
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""

View File

@@ -0,0 +1,249 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_responsive
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2020-07-08 05:19+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.10\n"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
#, python-format
msgid "Action"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "App Icon"
msgstr ""
#. module: web_responsive
#: model:ir.actions.act_window,name:web_responsive.res_users_view_form_apps_menu_preferences_action
msgid "Apps Menu Preferences"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_search_type
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Search Type"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__apps_menu_theme
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Apps Menu Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__canonical
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Canonical"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__command_palette
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Command Palette"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__community
msgid "Community"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Discard"
msgstr "丢弃"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/command_palette/main.xml:0
#, python-format
msgid "Exit"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_search_type__fuse
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Fuse"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
#, python-format
msgid "Home Menu"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Log note"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Maximize"
msgstr "最大化"
#. module: web_responsive
#: model:ir.model.fields.selection,name:web_responsive.selection__res_users__apps_menu_theme__milk
msgid "Milk"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
#, python-format
msgid "Minimize"
msgstr "最小化"
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "New"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#, python-format
msgid "Nothing to show"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,field_description:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to Home"
msgstr ""
#. module: web_responsive
#: model:ir.model.fields,help:web_responsive.field_res_users__is_redirect_home
msgid "Redirect to dashboard after signing in"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
#, python-format
msgid "Save"
msgstr "保存"
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Search Type Help"
msgstr ""
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml:0
#: code:addons/web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml:0
#, python-format
msgid "Search menus..."
msgstr "搜索菜单..."
#. module: web_responsive
#. odoo-javascript
#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
#, python-format
msgid "Send message"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "Theme"
msgstr ""
#. module: web_responsive
#: model:ir.model,name:web_responsive.model_res_users
msgid "User"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "a new search algorithm is used"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "the standard odoo search tool"
msgstr ""
#. module: web_responsive
#: model_terms:ir.ui.view,arch_db:web_responsive.res_users_view_form_apps_menu_preferences
msgid "uses a standard algorithm"
msgstr ""
#, python-format
#~ msgid "Create"
#~ msgstr "创建"
#~ msgid "Chatter Position"
#~ msgstr "聊天位置"
#, python-format
#~ msgid "Edit"
#~ msgstr "编辑"
#~ msgid "Normal"
#~ msgstr "正常"
#, python-format
#~ msgid "Quick actions"
#~ msgstr "快捷方式"
#~ msgid "Sided"
#~ msgstr "侧面"
#~ msgid "Users"
#~ msgstr "用户"
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
#~ msgid "Close"
#~ msgstr "关闭"
#~ msgid ""
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
#~ "none"
#~ msgstr ""
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
#~ "none"
#~ msgid "false"
#~ msgstr "false"
#~ msgid ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
#~ msgstr ""
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"

View File

@@ -0,0 +1,5 @@
# Copyright 2023 Taras Shabaranskyi
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from . import res_users
from . import ir_http

View File

@@ -0,0 +1,19 @@
# Copyright 2023 Taras Shabaranskyi
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo import models
class IrHttp(models.AbstractModel):
_inherit = "ir.http"
def session_info(self):
session = super().session_info()
user = self.env.user
return {
**session,
"apps_menu": {
"search_type": user.apps_menu_search_type,
"theme": user.apps_menu_theme,
},
}

View File

@@ -0,0 +1,42 @@
# Copyright 2023 Taras Shabaranskyi
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
from odoo import api, fields, models
class ResUsers(models.Model):
_inherit = "res.users"
apps_menu_search_type = fields.Selection(
[
("canonical", "Canonical"),
("fuse", "Fuse"),
("command_palette", "Command Palette"),
],
default="canonical",
required=True,
)
apps_menu_theme = fields.Selection(
[
("milk", "Milk"),
("community", "Community"),
],
default="milk",
required=True,
)
is_redirect_home = fields.Boolean(
string="Redirect to Home",
help="Redirect to dashboard after signing in",
compute="_compute_redirect_home",
store=True,
readonly=False,
)
@api.depends("action_id")
def _compute_redirect_home(self):
"""
Set is_redirect_home to False
when action_id has a value.
:return:
"""
self.filtered("action_id").is_redirect_home = False

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,30 @@
- Dave Lasley \<<dave@laslabs.com>\>
- Jairo Llopis \<<jairo.llopis@tecnativa.com>\>
- [Onestein](https://www.onestein.nl):
- Dennis Sluijk \<<d.sluijk@onestein.nl>\>
- Anjeel Haria
- Sergio Teruel \<<sergio.teruel@tecnativa.com>\>
- Alexandre Díaz \<<dev@redneboa.es>\>
- Mathias Markl \<<mathias.markl@mukit.at>\>
- Iván Todorovich \<<ivan.todorovich@gmail.com>\>
- Sergey Shebanin \<<sergey@shebanin.ru>\>
- David Vidal \<<david.vidal@tecnativa.com>\>
- Taras Shabaranskyi \<<shabaranskij@gmail.com>\>
- Angel Patel \<<patelangel1414@gmail.com>\>
- Mohamed Alkobrosli \<<malkobrosly@kencove.com>\>
- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io)
- Bhavesh Heliconia
- [IKU Solutions](https://www.iku.solutions)
- Yan Chirino \<<yan.chirino@iku.solutions>\>

View File

@@ -0,0 +1,69 @@
This module adds responsiveness to web backend.
**Features for all devices**:
- Redirect to the dashboard after logging in.
Users will only be redirected to the home page after login
if they have enabled the 'Redirect to Home' option in
their profile settings.
![image](../static/img/redirecthome.gif)
- New navigation with the fullscreen app menu
![image](../static/img/appmenu.gif)
- Quick menu search inside the app menu
![image](../static/img/appsearch.gif)
- Sticky header & footer in list view
![image](../static/img/listview.gif)
- Sticky statusbar in form view
![image](../static/img/formview.gif)
- Bigger checkboxes in list view
![image](../static/img/listview.gif)
**Features for mobile**: \* View type picker dropdown displays
comfortably
- Control panel buttons use icons to save space.
![image](../static/img/form_buttons.gif)
- Followers and send button is displayed on mobile. Avatar is hidden.
![image](../static/img/chatter.png)
- Big inputs on form in edit mode
**Features for desktop computers**:
- Keyboard shortcuts for easier navigation, **using \`Alt + Shift +
\[NUM\]\`** combination instead of just Alt + \[NUM\] to avoid
conflict with Firefox Tab switching. Standard Odoo keyboard hotkeys
changed to be more intuitive or accessible by fingers of one hand.
F.x. Alt + S for Save
![image](../static/img/shortcuts.gif)
- Autofocus on search menu box when opening the app menu
![image](../static/img/appsearch.gif)
- When the chatter is on the side part, the document viewer fills that
part for side-by-side reading instead of full screen. You can still
put it on full width preview clicking on the new maximize button.
![image](../static/img/document_viewer.gif)
- When the user chooses to send a public message the color of the
composer is different from the one when the message is an internal
log.
![image](../static/img/chatter-colors.png)

View File

@@ -0,0 +1,2 @@
- App navigation with keyboard.
- Handle long titles on forms in a better way

View File

@@ -0,0 +1,5 @@
The following keyboard shortcuts are implemented:
- Navigate app search results - Arrow keys
- Choose app result - `Enter`
- `Esc` to close app drawer

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,533 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="web-responsive">
<h1>Web Responsive</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:af4d0ea2eb2c3d5f3c6eabad336e0da11b01c52d16a24e4114129b4185a10b6a
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/license-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/web/tree/19.0/web_responsive"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_responsive"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/web&amp;target_branch=19.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module adds responsiveness to web backend.</p>
<p><strong>Features for all devices</strong>:</p>
<ul>
<li><p class="first">Redirect to the dashboard after logging in. Users will only be
redirected to the home page after login if they have enabled the
Redirect to Home option in their profile settings.</p>
<p><img alt="image" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/redirecthome.gif" /></p>
</li>
<li><p class="first">New navigation with the fullscreen app menu</p>
<p><img alt="image1" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/appmenu.gif" /></p>
</li>
<li><p class="first">Quick menu search inside the app menu</p>
<p><img alt="image2" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/appsearch.gif" /></p>
</li>
<li><p class="first">Sticky header &amp; footer in list view</p>
<p><img alt="image3" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/listview.gif" /></p>
</li>
<li><p class="first">Sticky statusbar in form view</p>
<p><img alt="image4" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/formview.gif" /></p>
</li>
<li><p class="first">Bigger checkboxes in list view</p>
<p><img alt="image5" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/listview.gif" /></p>
</li>
</ul>
<p><strong>Features for mobile</strong>: * View type picker dropdown displays
comfortably</p>
<ul>
<li><p class="first">Control panel buttons use icons to save space.</p>
<p><img alt="image6" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/form_buttons.gif" /></p>
</li>
<li><p class="first">Followers and send button is displayed on mobile. Avatar is hidden.</p>
<p><img alt="image7" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/chatter.png" /></p>
</li>
<li><p class="first">Big inputs on form in edit mode</p>
</li>
</ul>
<p><strong>Features for desktop computers</strong>:</p>
<ul>
<li><p class="first">Keyboard shortcuts for easier navigation, <strong>using `Alt + Shift +
[NUM]`</strong> combination instead of just Alt + [NUM] to avoid conflict
with Firefox Tab switching. Standard Odoo keyboard hotkeys changed to
be more intuitive or accessible by fingers of one hand. F.x. Alt + S
for Save</p>
<p><img alt="image8" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/shortcuts.gif" /></p>
</li>
<li><p class="first">Autofocus on search menu box when opening the app menu</p>
<p><img alt="image9" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/appsearch.gif" /></p>
</li>
<li><p class="first">When the chatter is on the side part, the document viewer fills that
part for side-by-side reading instead of full screen. You can still
put it on full width preview clicking on the new maximize button.</p>
<p><img alt="image10" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/document_viewer.gif" /></p>
</li>
<li><p class="first">When the user chooses to send a public message the color of the
composer is different from the one when the message is an internal
log.</p>
<p><img alt="image11" src="https://raw.githubusercontent.com/OCA/web/19.0/web_responsive/static/img/chatter-colors.png" /></p>
</li>
</ul>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-2">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
<p>The following keyboard shortcuts are implemented:</p>
<ul class="simple">
<li>Navigate app search results - Arrow keys</li>
<li>Choose app result - <tt class="docutils literal">Enter</tt></li>
<li><tt class="docutils literal">Esc</tt> to close app drawer</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h2>
<ul class="simple">
<li>App navigation with keyboard.</li>
<li>Handle long titles on forms in a better way</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_responsive%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
<ul class="simple">
<li>LasLabs</li>
<li>Tecnativa</li>
<li>ITerra</li>
<li>Onestein</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
<ul class="simple">
<li>Dave Lasley &lt;<a class="reference external" href="mailto:dave&#64;laslabs.com">dave&#64;laslabs.com</a>&gt;</li>
<li>Jairo Llopis &lt;<a class="reference external" href="mailto:jairo.llopis&#64;tecnativa.com">jairo.llopis&#64;tecnativa.com</a>&gt;</li>
<li><a class="reference external" href="https://www.onestein.nl">Onestein</a>:<ul>
<li>Dennis Sluijk &lt;<a class="reference external" href="mailto:d.sluijk&#64;onestein.nl">d.sluijk&#64;onestein.nl</a>&gt;</li>
<li>Anjeel Haria</li>
</ul>
</li>
<li>Sergio Teruel &lt;<a class="reference external" href="mailto:sergio.teruel&#64;tecnativa.com">sergio.teruel&#64;tecnativa.com</a>&gt;</li>
<li>Alexandre Díaz &lt;<a class="reference external" href="mailto:dev&#64;redneboa.es">dev&#64;redneboa.es</a>&gt;</li>
<li>Mathias Markl &lt;<a class="reference external" href="mailto:mathias.markl&#64;mukit.at">mathias.markl&#64;mukit.at</a>&gt;</li>
<li>Iván Todorovich &lt;<a class="reference external" href="mailto:ivan.todorovich&#64;gmail.com">ivan.todorovich&#64;gmail.com</a>&gt;</li>
<li>Sergey Shebanin &lt;<a class="reference external" href="mailto:sergey&#64;shebanin.ru">sergey&#64;shebanin.ru</a>&gt;</li>
<li>David Vidal &lt;<a class="reference external" href="mailto:david.vidal&#64;tecnativa.com">david.vidal&#64;tecnativa.com</a>&gt;</li>
<li>Taras Shabaranskyi &lt;<a class="reference external" href="mailto:shabaranskij&#64;gmail.com">shabaranskij&#64;gmail.com</a>&gt;</li>
<li>Angel Patel &lt;<a class="reference external" href="mailto:patelangel1414&#64;gmail.com">patelangel1414&#64;gmail.com</a>&gt;</li>
<li>Mohamed Alkobrosli &lt;<a class="reference external" href="mailto:malkobrosly&#64;kencove.com">malkobrosly&#64;kencove.com</a>&gt;</li>
<li><a class="reference external" href="https://www.heliconia.io">Heliconia Solutions Pvt. Ltd.</a><ul>
<li>Bhavesh Heliconia</li>
</ul>
</li>
<li><a class="reference external" href="https://www.iku.solutions">IKU Solutions</a><ul>
<li>Yan Chirino &lt;<a class="reference external" href="mailto:yan.chirino&#64;iku.solutions">yan.chirino&#64;iku.solutions</a>&gt;</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/Tardo"><img alt="Tardo" src="https://github.com/Tardo.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/SplashS"><img alt="SplashS" src="https://github.com/SplashS.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/19.0/web_responsive">OCA/web</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@@ -0,0 +1,45 @@
/* Copyright 2025 Tecnativa - Carlos Roca
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
const checkCalledFromClickEverywhere = function () {
// Simulate an error to have the stack trace to check if
// functions are thrown from clickEverywhere
const error = new Error();
const stack = error.stack || "";
// Check that the stack has clickEverywhere function
return stack.includes("clickEverywhere");
};
// We modified the behavior of querySelector and querySelectorAll so
// that when attempting to access .o-dropdown--menu .o_app
// or .o_navbar_apps_menu .dropdown-toggle, they are replaced with
// the correct selector and the click everywhere functionality
// continues to work.
// Note: This will only be loaded when the option to trigger clicks on
// all elements is selected.
const originalQuerySelector = document.querySelector;
document.querySelector = function (selector) {
if (checkCalledFromClickEverywhere()) {
if (selector === ".o-dropdown--menu .o_app") {
selector = ".o-app-menu-list .o_app";
} else if (selector === ".o_navbar_apps_menu .dropdown-toggle") {
selector = ".o_navbar_apps_menu .o_grid_apps_menu__button";
} else if (
selector.includes('.o-dropdown--menu .dropdown-item[data-menu-xmlid="')
) {
selector = selector.replace(
".o-dropdown--menu .dropdown-item",
".o-app-menu-list .o_app"
);
}
}
return originalQuerySelector.call(this, selector);
};
const originalQuerySelectorAll = document.querySelectorAll;
document.querySelectorAll = function (selector) {
if (checkCalledFromClickEverywhere()) {
if (selector === ".o-dropdown--menu .o_app") {
selector = ".o-app-menu-list .o_app";
}
}
return originalQuerySelectorAll.call(this, selector);
};

View File

@@ -0,0 +1,202 @@
/* global document, location, window */
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {Component, onWillStart, useState} from "@odoo/owl";
import {useBus, useService} from "@web/core/utils/hooks";
import {AppMenuItem} from "@web_responsive/components/apps_menu_item/apps_menu_item.esm";
import {AppsMenuSearchBar} from "@web_responsive/components/menu_searchbar/searchbar.esm";
import {NavBar} from "@web/webclient/navbar/navbar";
import {WebClient} from "@web/webclient/webclient";
import {browser} from "@web/core/browser/browser";
import {patch} from "@web/core/utils/patch";
import {router} from "@web/core/browser/router";
import {session} from "@web/session";
import {useHotkey} from "@web/core/hotkeys/hotkey_hook";
import {user} from "@web/core/user";
import {BurgerMenu} from "@web/webclient/burger_menu/burger_menu";
// Patch WebClient to show AppsMenu instead of default app
patch(WebClient.prototype, {
setup() {
super.setup();
useBus(this.env.bus, "APPS_MENU:STATE_CHANGED", ({detail: state}) => {
document.body.classList.toggle("o_apps_menu_opened", state);
});
this.user = user;
onWillStart(async () => {
const is_redirect_home = await this.orm.searchRead(
"res.users",
[["id", "=", this.user.userId]],
["is_redirect_home"]
);
user.updateContext({
is_redirect_to_home: is_redirect_home[0]?.is_redirect_home,
});
});
this.redirect = false;
},
_loadDefaultApp() {
if (user.context.is_redirect_to_home) {
this.env.bus.trigger("APPS_MENU:STATE_CHANGED", true);
} else {
super._loadDefaultApp();
}
},
});
export class AppsMenu extends Component {
setup() {
super.setup();
this.state = useState({open: false});
this.theme = session.apps_menu.theme || "milk";
this.menuService = useService("menu");
browser.localStorage.setItem("redirect_menuId", "");
if (user.context.is_redirect_to_home) {
this.router = router;
const menuId = Number(this.router.current.menu_id || 0);
this.state = useState({open: menuId === 0});
}
useBus(this.env.bus, "ACTION_MANAGER:UI-UPDATED", () => {
this.setOpenState(false);
});
this._setupKeyNavigation();
}
setOpenState(open_state) {
this.state.open = open_state;
this.env.bus.trigger("APPS_MENU:STATE_CHANGED", open_state);
}
/**
* Setup navigation among app menus
*/
_setupKeyNavigation() {
const repeatable = {
allowRepeat: true,
};
useHotkey(
"ArrowRight",
() => {
this._onWindowKeydown("next");
},
repeatable
);
useHotkey(
"ArrowLeft",
() => {
this._onWindowKeydown("prev");
},
repeatable
);
useHotkey(
"ArrowDown",
() => {
this._onWindowKeydown("next");
},
repeatable
);
useHotkey(
"ArrowUp",
() => {
this._onWindowKeydown("prev");
},
repeatable
);
useHotkey("Escape", () => {
this.env.bus.trigger("ACTION_MANAGER:UI-UPDATED");
});
}
_onWindowKeydown(direction) {
const focusableInputElements = document.querySelectorAll(".o-app-menu-item");
if (focusableInputElements.length) {
const focusable = [...focusableInputElements];
const index = focusable.indexOf(document.activeElement);
let nextIndex = 0;
if (direction === "prev" && index >= 0) {
if (index > 0) {
nextIndex = index - 1;
} else {
nextIndex = focusable.length - 1;
}
} else if (direction === "next") {
if (index + 1 < focusable.length) {
nextIndex = index + 1;
} else {
nextIndex = 0;
}
}
focusableInputElements[nextIndex].focus();
}
}
onMenuClick() {
if (!user.context.is_redirect_to_home) {
this.setOpenState(!this.state.open);
} else {
const redirect_menuId =
browser.localStorage.getItem("redirect_menuId") || "";
if (!redirect_menuId) {
this.setOpenState(true);
} else {
this.setOpenState(!this.state.open);
}
const {href, hash} = location;
const menuId = this.router.current.menu_id;
if (menuId && menuId !== redirect_menuId) {
browser.localStorage.setItem(
"redirect_menuId",
this.router.current.menu_id
);
}
if (href.includes(hash)) {
window.history.replaceState(null, "", href.replace(hash, ""));
}
}
}
}
// Add this patch after the WebClient patch
patch(NavBar.prototype, {
setup() {
super.setup();
useBus(this.env.bus, "APP_MENU:TOGGLE_SIDEBAR", () => {
this._openAppMenuSidebar();
});
},
openAppMenu() {
this.env.bus.trigger("APP_MENU:OPEN_APP_MENU");
this._closeAppMenuSidebar();
},
});
Object.assign(AppsMenu, {
template: "web_responsive.AppsMenu",
props: {
slots: {
type: Object,
optional: true,
},
},
});
Object.assign(NavBar.components, {AppsMenu, AppMenuItem, AppsMenuSearchBar});
// Add this patch after the WebClient patch
patch(BurgerMenu.prototype, {
setup() {
super.setup();
},
_openAppMenuSidebarMobile() {
this.env.bus.trigger("APP_MENU:TOGGLE_SIDEBAR");
},
});

View File

@@ -0,0 +1,117 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
:root {
.o_grid_apps_menu[data-theme="milk"] {
--app-menu-background:
url("../../img/home-menu-bg-overlay.svg"),
linear-gradient(
to bottom,
#{$app-menu-background-color},
#{desaturate(lighten($app-menu-background-color, 20%), 15)}
);
}
.o_grid_apps_menu[data-theme="community"] {
--app-menu-background:
url("../../img/home-menu-bg-overlay.svg"),
linear-gradient(
to bottom,
#{$o-brand-primary},
#{desaturate(lighten($o-brand-primary, 20%), 15)}
);
}
}
@mixin full-screen-dropdown {
border: none;
box-shadow: none;
height: 100%;
max-height: calc(var(--vh100, 100vh) - #{$o-navbar-height});
max-height: calc(100dvh - #{$o-navbar-height});
position: fixed;
margin: 0;
width: 100vw;
z-index: 1000;
left: 0 !important;
}
.o_apps_menu_opened .o_main_navbar {
.o_menu_brand,
.o_menu_sections {
display: none !important;
}
}
// hide and save odoo default QUnit tests
.o_navbar_apps_menu.hide .dropdown-toggle {
position: absolute !important;
z-index: -100 !important;
}
// Iconized full screen apps menu
.o_grid_apps_menu {
&__button {
background: unset;
border: unset;
outline: unset;
margin-right: 0.25rem;
min-height: $o-navbar-height;
height: $o-navbar-height;
width: $o-navbar-height;
color: $o-navbar-brand-color;
&:hover,
&:focus {
background: $o-navbar-entry-bg--hover;
}
}
.o-app-menu-list {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
width: 100%;
gap: 0.25rem;
@include media-breakpoint-up(sm) {
grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
}
}
}
.app-menu-container {
@include full-screen-dropdown();
overflow: auto;
background-clip: border-box;
padding: 1rem 0.5rem;
gap: 1rem;
background: var(--app-menu-background);
background-size: cover;
border-radius: 0;
// Display apps in a grid
align-content: flex-start;
display: flex !important;
z-index: 1024 !important;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
// Hide app icons when searching
.has-results ~ .o-app-menu-list {
display: none;
}
@include media-breakpoint-up(lg) {
padding: {
left: calc((100vw - 850px) / 2);
right: calc((100vw - 850px) / 2);
}
}
}
// Sidebar positioning
.o_app_menu_sidebar {
transform: translateX(-100%);
}

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2021 ITerra - Sergey Shebanin
Copyright 2023 Onestein - Anjeel Haria
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<t t-inherit="web.NavBar.AppsMenu" t-inherit-mode="extension">
<!-- odoo 18 has created a left sidebar where the button of all apps
and the dropdown for the user where can logout
we had to disable the lef sidebar to keep our web_resposive toggle button working
and to keep the user dropdown in its original place -->
<xpath expr="//t[@t-if='this.ui.isSmall']" position="attributes">
<attribute name="t-if">false</attribute>
</xpath>
<!-- The kanban dropdown is replaced with the odoo default one
as the default one took physical place in the DOM -->
<xpath expr="//Dropdown" position="replace">
<t t-if="this.ui.isSmall">
<t t-call="web.NavBar.AppsMenu.Sidebar" />
</t>
<t t-else="" />
<AppsMenu>
<t t-set-slot="search_bar">
<AppsMenuSearchBar />
</t>
<AppMenuItem
t-foreach="apps"
t-as="app"
t-key="app.id"
app="app"
currentApp="currentApp"
href="getMenuItemHref(app)"
onClick="onNavBarDropdownItemSelection.bind(this)"
/>
</AppsMenu>
</xpath>
</t>
<!-- Apps menu -->
<t t-name="web_responsive.AppsMenu">
<div class="o_grid_apps_menu" t-att-data-theme="theme">
<button
class="o_grid_apps_menu__button"
title="Home Menu"
data-hotkey="h"
t-on-click.stop="onMenuClick"
>
<i class="oi oi-apps fs-4" />
</button>
<div t-if="state.open" class="app-menu-container">
<t t-slot="search_bar" />
<div class="o-app-menu-list">
<t t-slot="default" />
</div>
</div>
</div>
</t>
<!-- Apps Menu Sidebar -->
<t t-inherit="web.NavBar.AppsMenu.Sidebar" t-inherit-mode="extension">
<xpath expr="//i[hasclass('fa fa-bars')]" position="replace">
<!-- Remove the burger menu icon -->
</xpath>
<xpath expr="//div[hasclass('o_app_menu_sidebar')]" position="attributes">
<attribute
name="class"
>o_app_menu_sidebar position-fixed top-0 bottom-0 start-100 d-flex flex-column flex-nowrap</attribute>
</xpath>
</t>
<!-- Section Menu Items -->
<t t-inherit="web.SectionMenu" t-inherit-mode="extension">
<!-- Add cursor pointer to menu items -->
<xpath expr="//li[@t-on-click]" position="attributes">
<attribute name="class">cursor-pointer</attribute>
</xpath>
</t>
<!-- Burger Menu -->
<t t-inherit="web.BurgerMenu" t-inherit-mode="extension">
<xpath expr="//button[hasclass('o_mobile_menu_toggle')]" position="after">
<button
class="o_mobile_menu_toggle o_nav_entry o-no-caret d-md-none border-0 pe-3"
t-on-click.prevent="_openAppMenuSidebarMobile"
>
<i class="oi oi-panel-right" />
</button>
</xpath>
</t>
</templates>

View File

@@ -0,0 +1,39 @@
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {Component, xml} from "@odoo/owl";
import {registry} from "@web/core/registry";
import {useService} from "@web/core/utils/hooks";
import {user} from "@web/core/user";
class AppsMenuPreferences extends Component {
setup() {
this.action = useService("action");
this.user = user;
}
async _onClick() {
const onClose = () => this.action.doAction("reload_context");
const action = await this.action.loadAction(
"web_responsive.res_users_view_form_apps_menu_preferences_action"
);
this.action.doAction({...action, res_id: this.user.userId}, {onClose}).then();
}
}
AppsMenuPreferences.template = xml`
<div class="o-dropdown dropdown o-dropdown--no-caret">
<button
role="button"
type="button"
title="App Menu Preferences"
class="dropdown-toggle o-dropdown--narrow"
t-on-click="_onClick">
<i class="fa fa-tint fa-lg px-1"/>
</button>
</div>
`;
registry
.category("systray")
.add("AppMenuTheme", {Component: AppsMenuPreferences}, {sequence: 100});

View File

@@ -0,0 +1,52 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {Component, onWillUpdateProps} from "@odoo/owl";
import {getWebIconData} from "@web_responsive/components/apps_menu_tools.esm";
export class AppMenuItem extends Component {
setup() {
super.setup();
this.webIconData = getWebIconData(this.props.app);
onWillUpdateProps(this.onUpdateProps);
}
get isActive() {
const {currentApp} = this.props;
return currentApp && currentApp.id === this.props.app.id;
}
get className() {
const classItems = ["o-app-menu-item"];
if (this.isActive) {
classItems.push("active");
}
return classItems.join(" ");
}
onUpdateProps(nextProps) {
this.webIconData = getWebIconData(nextProps.app);
}
onClick() {
if (typeof this.props.onClick === "function") {
this.props.onClick(this.props.app);
}
}
}
Object.assign(AppMenuItem, {
template: "web_responsive.AppMenuItem",
props: {
app: Object,
href: String,
currentApp: {
type: Object,
optional: true,
},
onClick: Function,
},
});

View File

@@ -0,0 +1,76 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
:root {
.o_grid_apps_menu[data-theme="milk"] {
--app-menu-text-color: #{$app-menu-text-color};
--app-menu-text-shadow: 1px 1px 1px #{rgba($white, 0.4)};
--app-menu-hover-background: #{rgba(white, 0.4)};
}
.o_grid_apps_menu[data-theme="community"] {
--app-menu-text-color: white;
--app-menu-text-shadow: 1px 1px 1px #{rgba(black, 0.4)};
--app-menu-hover-background: #{rgba(white, 0.2)};
}
}
.o-app-menu-item {
display: flex;
flex-direction: column;
border-radius: 4px;
gap: 0.25rem;
transition:
ease box-shadow,
transform,
0.3s;
background: unset;
outline: unset;
border: unset;
padding: 0.75rem 0.5rem;
justify-content: flex-start;
align-items: center;
white-space: normal;
user-select: none;
height: -moz-available;
height: max-content;
&__name {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
font-size: 1em;
text-shadow: var(--app-menu-text-shadow);
color: var(--app-menu-text-color);
text-align: center;
}
&__icon {
height: auto;
max-width: 64px;
width: 64px;
aspect-ratio: 1;
padding: 10px;
background-color: white;
box-shadow: $app-menu-box-shadow;
}
&__active {
position: absolute;
bottom: 2px;
right: 2px;
text-shadow: 0 0 2px rgba(250, 250, 250, 0.6);
color: $app-menu-text-color;
}
&:focus,
&:hover {
transform: translateY(-4px);
box-shadow: 0 6px 12px -8px transparentize($app-menu-text-color, 0.6);
background-color: var(--app-menu-hover-background) !important;
backdrop-filter: blur(2px);
}
}

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2021 ITerra - Sergey Shebanin
Copyright 2023 Onestein - Anjeel Haria
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<t t-name="web_responsive.AppMenuItem">
<a
t-att-class="className"
role="button"
t-att-data-menu-xmlid="props.app.xmlid"
t-att-href="props.href"
t-on-click="onClick"
draggable="false"
>
<div
class="position-relative o_app"
t-att-data-menu-xmlid="props.app.xmlid"
>
<img
class="o-app-menu-item__icon rounded-3"
draggable="false"
t-att-src="webIconData"
/>
<i t-if="isActive" class="fa fa-check-circle o-app-menu-item__active" />
</div>
<span class="o-app-menu-item__name" t-att-title="props.app.name">
<t t-out="props.app.name" />
</span>
</a>
</t>
</templates>

View File

@@ -0,0 +1,80 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
export function getWebIconData(menu) {
const result = "/web_responsive/static/img/default_icon_app.png";
const webIcon = menu.webIcon;
if (webIcon && webIcon.split(",").length === 2) {
const path = webIcon.replace(",", "/");
return path.startsWith("/") ? path : "/" + path;
}
const iconData = menu.webIconData;
if (!menu.webIcon) {
return result;
}
const prefix = iconData.startsWith("P")
? "data:image/svg+xml;base64,"
: "data:image/png;base64,";
if (iconData.startsWith("data:image")) {
return iconData;
}
return prefix + iconData.replace(/\s/g, "");
}
/**
* @param {Object} menu
*/
export function updateMenuWebIconData(menu) {
menu.webIconData = menu.webIconData ? getWebIconData(menu) : "";
}
export function updateMenuDisplayName(menu) {
menu.displayName = menu.name.trim();
}
/**
* @param {Object} menu
* @returns {Boolean}
*/
export function isRootMenu(menu) {
return menu.actionID && menu.appID === menu.id;
}
/**
* @param {Object[]} memo
* @param {Object|null} parentMenu
* @param {Object} menu
* @returns {Object[]}
*/
export function collectSubMenuItems(memo, parentMenu, menu) {
const menuCopy = Object.assign({}, menu);
updateMenuDisplayName(menuCopy);
if (parentMenu) {
menuCopy.displayName = `${parentMenu.displayName} / ${menuCopy.displayName}`;
}
if (menuCopy.actionID && !isRootMenu(menuCopy)) {
memo.push(menuCopy);
}
for (const child of menuCopy.childrenTree || []) {
collectSubMenuItems(memo, menuCopy, child);
}
return memo;
}
/**
* @param {Object[]} memo
* @param {Object} menu
* @returns {Object}
*/
export function collectRootMenuItems(memo, menu) {
if (isRootMenu(menu)) {
const menuCopy = Object.assign({}, menu);
updateMenuWebIconData(menuCopy);
updateMenuDisplayName(menuCopy);
memo.push(menuCopy);
}
return memo;
}

View File

@@ -0,0 +1,27 @@
/* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {Chatter} from "@mail/chatter/web_portal/chatter";
import {patch} from "@web/core/utils/patch";
import {useEffect} from "@odoo/owl";
patch(Chatter.prototype, {
setup() {
super.setup();
useEffect(this._resetScrollToAttachmentsEffect.bind(this), () => [
this.state.isAttachmentBoxOpened,
]);
},
/**
* Prevent scrollIntoView error
* @param {Boolean} isAttachmentBoxOpened
* @private
*/
_resetScrollToAttachmentsEffect(isAttachmentBoxOpened) {
if (!isAttachmentBoxOpened) {
this.state.scrollToAttachments = 0;
}
},
});

View File

@@ -0,0 +1,42 @@
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
.o-mail-Composer {
grid-template-areas:
"sidebar-header core-header"
"core-main core-main"
"sidebar-footer core-footer";
.o-mail-Composer-sidebarMain {
display: none;
}
@include media-breakpoint-up(sm) {
grid-template-areas:
"sidebar-header core-header"
"sidebar-main core-main"
"sidebar-footer core-footer";
.o-mail-Composer-sidebarMain {
display: block;
}
.o-mail-SuggestedRecipient {
margin-left: 42px;
}
}
}
.o-mail-Form-chatter {
.o-mail-SuggestedRecipient,
.o-mail-Chatter-recipientList {
margin-left: 0;
}
@include media-breakpoint-up(sm) {
.o-mail-SuggestedRecipient,
.o-mail-Chatter-recipientList {
margin-left: 42px;
}
}
}

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<t
t-name="web_responsive.Chatter"
t-inherit="mail.Chatter"
t-inherit-mode="extension"
>
<xpath
expr="//button[hasclass('o-mail-Chatter-sendMessage')]"
position="replace"
>
<button
class="o-mail-Chatter-sendMessage btn text-nowrap me-1"
t-att-class="{
'btn-secondary': state.composerType !== 'message',
'btn-primary active': state.composerType === 'message',
'my-2': !props.compactHeight
}"
t-att-disabled="!state.thread.hasWriteAccess and !(state.thread.hasReadAccess and state.thread.canPostOnReadonly) and props.threadId"
data-hotkey="m"
t-on-click="() => this.toggleComposer('message')"
>
<i class="fa fa-envelope me-sm-1" />
<span class="d-none d-sm-inline">Send message</span>
</button>
</xpath>
<xpath expr="//button[hasclass('o-mail-Chatter-logNote')]" position="replace">
<button
class="o-mail-Chatter-logNote btn text-nowrap me-1"
t-att-class="{
'btn-primary active': state.composerType === 'note',
'btn-secondary': state.composerType !== 'note',
'my-2': !props.compactHeight
}"
t-att-disabled="!state.thread.hasWriteAccess and !(state.thread.hasReadAccess and state.thread.canPostOnReadonly) and props.threadId"
data-hotkey="shift+m"
t-on-click="() => this.toggleComposer('note')"
>
<i class="fa fa-sticky-note me-sm-1" />
<span class="d-none d-sm-inline">Log note</span>
</button>
</xpath>
<xpath
expr="//button[hasclass('o-mail-Chatter-activity')]/span"
position="before"
>
<i class="fa fa-clock-o me-sm-1" />
</xpath>
<xpath
expr="//button[hasclass('o-mail-Chatter-activity')]/span"
position="attributes"
>
<attribute name="class" add="d-none d-sm-inline" separator=" " />
</xpath>
<!-- remove extra padding between the activity separator and the search message -->
<xpath
expr="//span[hasclass('o-mail-Chatter-topbarGrow')]"
position="attributes"
>
<attribute name="class" remove="pe-2" add="px-0" separator=" " />
</xpath>
</t>
</templates>

View File

@@ -0,0 +1,19 @@
import {CommandPalette} from "@web/core/commands/command_palette";
import {patch} from "@web/core/utils/patch";
import {useService} from "@web/core/utils/hooks";
import {useState} from "@odoo/owl";
export const unpatchCommandPalette = patch(CommandPalette.prototype, {
setup() {
super.setup();
this.ui = useState(useService("ui"));
},
get small() {
return this.ui.size < 2;
},
get contentClass() {
return `o_command_palette ${this.small ? "" : "mt-5"}`;
},
});

View File

@@ -0,0 +1,28 @@
.o_command_palette {
.o_command_palette_exit {
display: none;
}
@include media-breakpoint-down(sm) {
.o_command_palette_root {
display: flex;
max-height: 100vh;
max-height: 100dvh;
flex-direction: column;
height: 100%;
justify-content: space-between;
}
.o_command_palette_exit {
display: block;
}
.o_command_palette_search {
flex-shrink: 0;
}
.o_command_palette_listbox {
max-height: unset;
}
.o_command_palette_footer {
flex-shrink: 0;
}
}
}

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<templates>
<t
t-name="web_responsive.CommandPalette"
t-inherit="web.CommandPalette"
t-inherit-mode="extension"
>
<xpath expr="//Dialog" position="attributes">
<attribute name="contentClass">contentClass</attribute>
</xpath>
<xpath expr="//div[@t-ref='root']" position="attributes">
<attribute name="class">o_command_palette_root</attribute>
</xpath>
<xpath expr="//div[hasclass('o_command_palette_search')]" position="before">
<div class="o_command_palette_exit">
<button
type="button"
class="btn btn-secondary w-100"
t-on-click="props.close"
>Exit</button>
</div>
</xpath>
</t>
</templates>

View File

@@ -0,0 +1,74 @@
/* global clearTimeout, setTimeout */
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {ControlPanel} from "@web/search/control_panel/control_panel";
import {browser} from "@web/core/browser/browser";
import {patch} from "@web/core/utils/patch";
export const STICKY_CLASS = "o_mobile_sticky";
/**
* @param {Number} delay
* @returns {{collect: function(Number, (function(Number, Number): void)): void}}
*/
export function minMaxCollector(delay = 100) {
const state = {
id: null,
items: [],
};
function min() {
return Math.min.apply(null, state.items);
}
function max() {
return Math.max.apply(null, state.items);
}
return {
collect(value, callback) {
clearTimeout(state.id);
state.items.push(value);
state.id = setTimeout(() => {
callback(min(), max());
state.items = [];
state.id = null;
}, delay);
},
};
}
export const unpatchControlPanel = patch(ControlPanel.prototype, {
scrollValueCollector: undefined,
/** @type {Number}*/
scrollHeaderGap: undefined,
setup() {
super.setup();
this.scrollValueCollector = minMaxCollector(100);
this.scrollHeaderGap = 2;
},
onScrollThrottled() {
if (this.isScrolling) {
return;
}
this.isScrolling = true;
browser.requestAnimationFrame(() => (this.isScrolling = false));
/** @type {HTMLElement}*/
const rootEl = this.root.el;
const scrollTop = this.getScrollingElement().scrollTop;
const activeAnimation = scrollTop > this.initialScrollTop;
rootEl.classList.toggle(STICKY_CLASS, activeAnimation);
this.scrollValueCollector.collect(scrollTop - this.oldScrollTop, (min, max) => {
const delta = min + max;
if (delta < -this.scrollHeaderGap || delta > this.scrollHeaderGap) {
rootEl.style.top = `${delta < 0 ? -rootEl.clientHeight : 0}px`;
}
});
this.oldScrollTop = scrollTop;
},
});

View File

@@ -0,0 +1,74 @@
/* global document, window, requestAnimationFrame */
/* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {onMounted, onWillStart, useExternalListener, useRef} from "@odoo/owl";
import {FileViewer} from "@web/core/file_viewer/file_viewer";
import {patch} from "@web/core/utils/patch";
const formChatterClassName = ".o-mail-Form-chatter";
const formViewSheetClassName = ".o_form_view_container .o_form_sheet_bg";
export function useFileViewerContainerSize(ref) {
function updateActualFormChatterSize() {
/** @type {HTMLDivElement}*/
const chatterElement = document.querySelector(formChatterClassName);
/** @type {HTMLDivElement}*/
const formSheetElement = document.querySelector(formViewSheetClassName);
if (chatterElement && formSheetElement && ref.el) {
/** @type {CSSStyleDeclaration}*/
const elStyle = ref.el.style;
const width = `${chatterElement.clientWidth}px`;
const height = `${chatterElement.clientHeight}px`;
const left = `${formSheetElement.clientWidth}px`;
elStyle.setProperty("--o-FileViewerContainer-width", width);
elStyle.setProperty("--o-FileViewerContainer-height", height);
elStyle.setProperty("--o-FileViewerContainer-left", left);
}
}
useExternalListener(window, "resize", () => {
requestAnimationFrame(updateActualFormChatterSize);
});
onMounted(() => {
requestAnimationFrame(updateActualFormChatterSize);
});
}
export const unpatchFileViewer = patch(FileViewer.prototype, {
setup() {
super.setup();
this.root = useRef("root");
Object.assign(this.state, {
allowMinimize: false,
maximized: true,
});
useFileViewerContainerSize(this.root);
onWillStart(this.setDefaultMaximizeState);
},
get rootClass() {
return {
modal: this.props.modal,
"o-FileViewerContainer__maximized": this.state.maximized,
"o-FileViewerContainer__minimized": !this.state.maximized,
};
},
setDefaultMaximizeState() {
this.state.allowMinimize = Boolean(
document.querySelector(`${formChatterClassName}.o-aside`)
);
this.state.maximized = !this.state.allowMinimize;
},
/**
* @param {Boolean} value
*/
setMaximized(value) {
this.state.maximized = value;
},
});

View File

@@ -0,0 +1,58 @@
/* Copyright 2019 Tecnativa - Alexandre Díaz
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
.o-FileViewerContainer {
--o-FileViewerContainer-width: #{$o-mail-Chatter-minWidth};
--o-FileViewerContainer-height: var(--100vh, calc(100vh - #{$o-navbar-height}));
--o-FileViewerContainer-left: unset;
--o-FileViewerContainer-right: 0;
position: fixed;
right: 0;
z-index: $zindex-fixed;
&__maximized {
top: 0;
left: 0;
right: 0;
}
&__minimized {
width: 100%;
max-width: var(--o-FileViewerContainer-width, #{$o-mail-Chatter-minWidth});
height: var(--o-FileViewerContainer-height);
top: unset;
right: var(--o-FileViewerContainer-right, 0);
left: var(--o-FileViewerContainer-left, unset);
bottom: 0;
.o-FileViewer-main {
padding: $o-navbar-height 0 0 0;
}
.o-FileViewer-viewPdf {
width: 100% !important;
}
}
.o-FileViewer-navigation {
background-color: rgba(255, 255, 255, 0.2);
text-shadow: 0 0 rgba(30, 30, 30, 0.8);
box-shadow: 0 0 1px 0 rgba(30, 30, 30, 0.4);
transition:
background-color 0.2s,
box-shadow 0.2s;
&:hover {
background-color: rgba(255, 255, 255, 0.8);
text-shadow: 0 0 black;
box-shadow: 0 0 2px 0 rgba(30, 30, 30, 0.8);
}
}
}
.o_apps_menu_opened .o-FileViewerContainer {
display: none !important;
}

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2019 Tecnativa - Alexandre Díaz
Copyright 2021 Sergey Shebanin
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<template>
<t
t-name="web_responsive.FileViewer"
t-inherit="web.FileViewer"
t-inherit-mode="extension"
>
<xpath expr="div[hasclass('justify-content-center')]" position="attributes">
<attribute name="class" add="o-FileViewerContainer" separator=" " />
<attribute name="t-att-class">rootClass</attribute>
<attribute name="t-ref">root</attribute>
</xpath>
<xpath expr="//iframe[@t-ref='iframeViewerPdf']" position="attributes">
<attribute name="class" add="o-FileViewer-viewPdf" separator=" " />
</xpath>
<xpath expr="//div[@t-on-click.stop='close']" position="before">
<t t-if="state.allowMinimize">
<div
t-if="!state.maximized"
t-on-click="setMaximized.bind(this, true)"
class="o-FileViewer-headerButton d-flex align-items-center mb-0 px-3 h4 text-reset cursor-pointer"
role="button"
name="maximize"
title="Maximize"
aria-label="Maximize"
>
<i class="fa fa-fw fa-window-maximize" role="img" />
</div>
<div
t-if="state.maximized"
class="o-FileViewer-headerButton d-flex align-items-center mb-0 px-3 h4 text-reset cursor-pointer"
t-on-click="setMaximized.bind(this, false)"
role="button"
name="minimize"
title="Minimize"
aria-label="Minimize"
>
<i class="fa fa-fw fa-window-minimize" role="img" />
</div>
</t>
</xpath>
</t>
</template>

View File

@@ -0,0 +1,24 @@
import {patch} from "@web/core/utils/patch";
import {AttachmentList} from "@mail/core/common/attachment_list";
patch(AttachmentList.prototype, {
setup() {
super.setup();
this._wr_isOpeningFileViewer = false;
},
onClickAttachment(attachment) {
// Prevent duplication for opening FileViewer within the same tick/frame
if (this._wr_isOpeningFileViewer) {
return;
}
this._wr_isOpeningFileViewer = true;
try {
super.onClickAttachment(attachment);
} finally {
setTimeout(() => {
this._wr_isOpeningFileViewer = false;
}, 0);
}
},
});

View File

@@ -0,0 +1,12 @@
/* Copyright 2021 ITerra - Sergey Shebanin
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
// Shortcut table ui improvement
.o_shortcut_table {
width: 100%;
white-space: nowrap;
max-width: 400px;
td {
padding: 0 20px;
}
}

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2021 ITerra - Sergey Shebanin
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
-->
<templates id="template" xml:space="preserve">
<t t-inherit="web.NavBar.SectionsMenu" t-inherit-mode="extension" owl="1">
<xpath
expr="//t[@t-foreach='sections']//t[@t-set='hotkey']"
position="attributes"
>
<attribute
name="t-value"
>'shift+' + ((section_index + 1) % 10).toString()</attribute>
</xpath>
<xpath
expr="//t[@t-if='currentAppSectionsExtra.length']//t[@t-set='hotkey']"
position="attributes"
>
<attribute
name="t-value"
>'shift+' + (sectionsVisibleCount + 1 % 10).toString()</attribute>
</xpath>
</t>
</templates>

View File

@@ -0,0 +1,236 @@
/* global console */
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {Component, onPatched, onWillPatch, useRef, useState} from "@odoo/owl";
import {
collectRootMenuItems,
collectSubMenuItems,
} from "@web_responsive/components/apps_menu_tools.esm";
import {useAutofocus, useService} from "@web/core/utils/hooks";
import {debounce} from "@web/core/utils/timing";
import {escapeRegExp} from "@web/core/utils/strings";
import {fuzzyLookup} from "@web/core/utils/search";
import {scrollTo} from "@web/core/utils/scrolling";
/**
* @extends Component
*/
export class AppsMenuCanonicalSearchBar extends Component {
setup() {
super.setup();
this.state = useState({
rootItems: [],
subItems: [],
offset: 0,
hasResults: false,
});
this.searchBarInput = useAutofocus({refName: "SearchBarInput"});
this._searchMenus = debounce(this._searchMenus, 200);
this.menuService = useService("menu");
this.searchItemsRef = useRef("searchItems");
this.rootMenuItems = this.getRootMenuItems();
this.subMenuItems = this.getSubMenuItems();
onWillPatch(this._computeResultOffset);
onPatched(this._scrollToHighlight);
}
/**
* @returns {String}
*/
get inputValue() {
const {el} = this.searchBarInput;
return el ? el.value : "";
}
/**
* @returns {Boolean}
*/
get hasItemsToDisplay() {
return this.totalItemsCount > 0;
}
/**
* @returns {Number}
*/
get totalItemsCount() {
const {rootItems, subItems} = this.state;
return rootItems.length + subItems.length;
}
/**
* @param {Number} index
* @param {Boolean} isSubMenu
* @returns {String}
*/
highlighted(index, isSubMenu = false) {
const {state} = this;
let _index = index;
if (isSubMenu) {
_index = state.rootItems.length + index;
}
return _index === state.offset ? "highlight" : "";
}
/**
* @returns {Object[]}
*/
getRootMenuItems() {
return this.menuService.getApps().reduce(collectRootMenuItems, []);
}
/**
* @returns {Object[]}
*/
getSubMenuItems() {
const response = [];
for (const menu of this.menuService.getApps()) {
const menuTree = this.menuService.getMenuAsTree(menu.id);
collectSubMenuItems(response, null, menuTree);
}
return response;
}
/**
* Search among available menu items, and render that search.
*/
_searchMenus() {
const {state} = this;
const query = this.inputValue;
state.hasResults = query !== "";
if (!state.hasResults) {
state.rootItems = [];
state.subItems = [];
return;
}
const searchField = (item) => item.displayName;
// Update search results paths
for (const root in this.rootMenuItems) {
// Root is an app
if (this.rootMenuItems[root]?.actionPath) {
this.rootMenuItems[root].path =
`/odoo/${this.rootMenuItems[root].actionPath}`;
}
// Root is a module
else {
this.rootMenuItems[root].path =
`/odoo/action-${this.rootMenuItems[root].actionID}`;
}
}
for (const item in this.subMenuItems) {
for (const root in this.rootMenuItems) {
if (this.subMenuItems[item].appID === this.rootMenuItems[root].appID) {
// Root is an app
if (this.rootMenuItems[root]?.actionPath) {
this.subMenuItems[item].path =
`/odoo/${this.rootMenuItems[root].actionPath}/action-${this.subMenuItems[item].actionID}`;
}
// Root is a module
else {
this.subMenuItems[item].path =
`/odoo/action-${this.subMenuItems[item].actionID}`;
}
}
}
}
state.rootItems = fuzzyLookup(query, this.rootMenuItems, searchField);
state.subItems = fuzzyLookup(query, this.subMenuItems, searchField);
}
_onKeyDown(ev) {
const code = ev.code;
if (code === "Escape") {
ev.stopPropagation();
ev.preventDefault();
if (this.inputValue) {
this.searchBarInput.el.value = "";
Object.assign(this.state, {rootItems: [], subItems: []});
this.state.hasResults = false;
} else {
this.env.bus.trigger("ACTION_MANAGER:UI-UPDATED");
}
} else if (code === "Tab") {
if (this.searchItemsRef.el) {
ev.preventDefault();
if (ev.shiftKey) {
this.state.offset--;
} else {
this.state.offset++;
}
}
} else if (code === "ArrowUp") {
if (this.searchItemsRef.el) {
ev.preventDefault();
this.state.offset--;
}
} else if (code === "ArrowDown") {
if (this.searchItemsRef.el) {
ev.preventDefault();
this.state.offset++;
}
} else if (code === "Enter") {
const element = this.searchItemsRef.el;
if (this.hasItemsToDisplay && element) {
ev.preventDefault();
this._selectHighlightedSearchItem(element);
}
} else if (code === "Home") {
this.state.offset = 0;
} else if (code === "End") {
this.state.offset = this.totalItemsCount - 1;
}
}
/**
* @param {HTMLElement} element
* @private
*/
_selectHighlightedSearchItem(element) {
const highlightedElement = element.querySelector(
".highlight > .search-item__link"
);
if (highlightedElement) {
highlightedElement.click();
} else {
console.warn("Highlighted search item is not found");
}
}
_splitName(name) {
if (!name) {
return [];
}
const value = this.inputValue;
const splitName = name.split(new RegExp(`(${escapeRegExp(value)})`, "ig"));
return value.length && splitName.length > 1 ? splitName : [name];
}
_scrollToHighlight() {
// Scroll to selected element on keyboard navigation
const element = this.searchItemsRef.el;
if (!(this.totalItemsCount && element)) {
return;
}
const activeElement = element.querySelector(".highlight");
if (activeElement) {
scrollTo(activeElement, element);
}
}
_computeResultOffset() {
// Allow looping on results
const {state} = this;
const total = this.totalItemsCount;
if (state.offset < 0) {
state.offset = total + state.offset;
} else if (state.offset >= total) {
state.offset -= total;
}
}
}
AppsMenuCanonicalSearchBar.props = {};
AppsMenuCanonicalSearchBar.template = "web_responsive.AppsMenuCanonicalSearchBar";

View File

@@ -0,0 +1,112 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
:root {
.o_grid_apps_menu[data-theme="milk"] {
--apps-menu-scrollbar-background: #{$o-brand-odoo};
--apps-menu-empty-search-color: $app-menu-text-color;
}
.o_grid_apps_menu[data-theme="community"] {
--apps-menu-scrollbar-background: white;
--apps-menu-empty-search-color: white;
}
}
.o_grid_apps_menu .search-container {
// Allow to scroll only on results, keeping static search box above
.search-list {
display: flex;
flex-direction: column;
gap: calc(0.25rem + 1px);
overflow: auto;
padding: 0.25rem 0;
margin: 0.25rem 0;
max-height: calc(100vh - #{$o-navbar-height} - 5.25rem);
max-height: calc(100dvh - #{$o-navbar-height} - 5.25rem);
max-width: calc(100vw - 1rem);
position: relative;
width: 100%;
height: 100%;
&::-webkit-scrollbar {
width: 10px;
}
&::-webkit-scrollbar-thumb {
background: var(--apps-menu-scrollbar-background);
border-radius: 6px;
}
@include media-breakpoint-down(md) {
&::-webkit-scrollbar {
width: 4px;
}
}
}
.search-item-divider {
margin: 0 4px;
hr {
margin: 0.5rem 0;
background-color: $o-brand-odoo;
}
}
.search-item {
display: block;
align-items: center;
background-position: left;
background-repeat: no-repeat;
background-size: contain;
white-space: normal;
font-weight: 100;
background-color: white;
box-shadow: $app-menu-box-shadow;
margin: 0 4px;
border-radius: 4px;
&__link {
display: flex;
gap: 0.5rem;
padding: 0.25rem 0.5rem;
align-items: center;
cursor: pointer;
}
&__name {
color: $app-menu-text-color;
text-shadow: 0 0 $app-menu-text-color;
}
&__image {
max-height: 40px;
max-width: 40px;
width: 40px;
object-fit: contain;
padding: 4px;
}
&.highlight,
&:hover {
background-color: $app-menu-item-highlight;
box-shadow: $app-menu-box-shadow-highlight;
font-weight: 300;
}
b {
font-weight: 700;
}
}
.empty-search-item {
display: inline-block;
width: 100%;
text-align: center;
padding: 0.25rem 0.5rem;
color: var(--apps-menu-empty-search-color);
}
}

View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2021 ITerra - Sergey Shebanin
Copyright 2023 Onestein - Anjeel Haria
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<!-- Search bar -->
<t t-name="web_responsive.AppsMenuCanonicalSearchBar">
<div class="search-container" t-att-class="{'has-results': state.hasResults}">
<div class="search-input">
<i class="fa fa-search search-icon fs-4 my-auto d-none d-sm-flex" />
<input
type="search"
t-ref="SearchBarInput"
t-on-input="_searchMenus"
t-on-keydown="_onKeyDown"
autocomplete="off"
placeholder="Search menus..."
class="form-control"
/>
</div>
<ul
t-if="hasItemsToDisplay"
class="list-unstyled search-list"
t-ref="searchItems"
>
<t t-foreach="state.rootItems" t-as="menu" t-key="menu.id">
<li t-attf-class="search-item {{highlighted(menu_index)}}">
<a
t-attf-class="search-item__link"
t-att-href="menu.path"
t-att-data-menu-id="menu.id"
t-att-data-action-id="menu.actionID"
draggable="false"
tabindex="-1"
>
<img
class="search-item__image"
t-att-src="menu.webIconData"
alt="App Icon"
/>
<span class="search-item__name" t-att-title="menu.name">
<t
t-foreach="_splitName(menu.displayName)"
t-as="name"
t-key="name_index"
>
<b t-if="name_index % 2" t-out="name" />
<t t-else="" t-out="name" />
</t>
</span>
</a>
</li>
</t>
<li
class="search-item-divider"
t-if="state.rootItems.length and state.subItems.length"
>
<hr class="w-100" />
</li>
<t t-foreach="state.subItems" t-as="menu" t-key="menu.id">
<li t-attf-class="search-item {{highlighted(menu_index, true)}}">
<a
t-attf-class="search-item__link"
t-att-href="menu.path"
t-att-data-menu-id="menu.id"
t-att-data-action-id="menu.actionID"
draggable="false"
tabindex="-1"
>
<span
class="search-item__name px-2 py-1"
t-att-title="menu.name"
>
<t
t-foreach="_splitName(menu.displayName)"
t-as="name"
t-key="name_index"
>
<b t-if="name_index % 2" t-out="name" />
<t t-else="" t-out="name" />
</t>
</span>
</a>
</li>
</t>
</ul>
<ul
t-if="!hasItemsToDisplay and inputValue"
class="list-unstyled search-list"
>
<li class="empty-search-item">
<strong>Nothing to show</strong>
</li>
</ul>
</div>
</t>
</templates>

View File

@@ -0,0 +1,31 @@
/* global Fuse */
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {AppsMenuCanonicalSearchBar} from "@web_responsive/components/menu_canonical_searchbar/searchbar.esm";
/**
* @extends AppsMenuCanonicalSearchBar
*/
export class AppsMenuFuseSearchBar extends AppsMenuCanonicalSearchBar {
setup() {
super.setup();
this.fuseOptions = {
keys: ["displayName"],
threshold: 0.43,
};
this.rootMenuItems = new Fuse(this.getRootMenuItems(), this.fuseOptions);
this.subMenuItems = new Fuse(this.getSubMenuItems(), this.fuseOptions);
}
_searchMenus() {
const {state} = this;
const query = this.inputValue;
state.hasResults = query !== "";
state.rootItems = this.rootMenuItems.search(query);
state.subItems = this.subMenuItems.search(query);
}
}
AppsMenuFuseSearchBar.props = {};
AppsMenuFuseSearchBar.template = "web_responsive.AppsMenuFuseSearchBar";

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<!-- Search bar -->
<t
t-name="web_responsive.AppsMenuFuseSearchBar"
t-inherit="web_responsive.AppsMenuCanonicalSearchBar"
t-inherit-mode="primary"
>
<xpath expr="//t[@t-foreach='state.rootItems']" position="attributes">
<attribute name="t-as">result</attribute>
<attribute name="t-key">result.item.xmlid</attribute>
</xpath>
<xpath expr="//t[@t-foreach='state.rootItems']/li" position="before">
<t t-set="menu" t-value="result.item" />
</xpath>
<xpath expr="//t[@t-foreach='state.rootItems']/li" position="attributes">
<attribute
name="t-attf-class"
>search-item {{highlighted(result_index)}}</attribute>
</xpath>
<xpath expr="//t[@t-foreach='state.subItems']" position="attributes">
<attribute name="t-as">result</attribute>
<attribute name="t-key">result.item.xmlid</attribute>
</xpath>
<xpath expr="//t[@t-foreach='state.subItems']/li" position="before">
<t t-set="menu" t-value="result.item" />
</xpath>
<xpath expr="//t[@t-foreach='state.subItems']/li" position="attributes">
<attribute
name="t-attf-class"
>search-item {{highlighted(result_index, true)}}</attribute>
</xpath>
</t>
</templates>

View File

@@ -0,0 +1,64 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {Component, useState} from "@odoo/owl";
import {useAutofocus, useService} from "@web/core/utils/hooks";
/**
* @extends Component
* @property {{el: HTMLInputElement}} searchBarInput
*/
export class AppsMenuOdooSearchBar extends Component {
setup() {
super.setup();
this.state = useState({
rootItems: [],
subItems: [],
offset: 0,
hasResults: false,
});
this.searchBarInput = useAutofocus({refName: "SearchBarInput"});
this.command = useService("command");
}
/**
* @returns {String}
*/
get inputValue() {
const {el} = this.searchBarInput;
return el ? el.value : "";
}
set inputValue(value) {
const {el} = this.searchBarInput;
if (el) {
el.value = value;
}
}
_onSearchInput() {
if (this.inputValue) {
this._openSearchMenu(this.inputValue);
this.inputValue = "";
}
}
_onSearchClick() {
this._openSearchMenu();
}
/**
* @param {String} [value]
* @private
*/
_openSearchMenu(value) {
const searchValue = value ? `/${value}` : "/";
this.command.openMainPalette({searchValue}, null);
}
}
AppsMenuOdooSearchBar.props = {};
AppsMenuOdooSearchBar.template = "web_responsive.AppsMenuOdooSearchBar";

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2021 ITerra - Sergey Shebanin
Copyright 2023 Onestein - Anjeel Haria
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<!-- Search bar -->
<t t-name="web_responsive.AppsMenuOdooSearchBar">
<div class="search-container">
<div class="search-input">
<i class="fa fa-search search-icon fs-4 my-auto d-none d-sm-flex" />
<input
type="search"
t-ref="SearchBarInput"
t-on-input="_onSearchInput"
t-on-click="_onSearchClick"
autocomplete="off"
placeholder="Search menus..."
class="form-control"
/>
</div>
</div>
</t>
</templates>

View File

@@ -0,0 +1,25 @@
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {AppsMenuCanonicalSearchBar} from "@web_responsive/components/menu_canonical_searchbar/searchbar.esm";
import {AppsMenuFuseSearchBar} from "@web_responsive/components/menu_fuse_searchbar/searchbar.esm";
import {AppsMenuOdooSearchBar} from "@web_responsive/components/menu_odoo_searchbar/searchbar.esm";
import {Component} from "@odoo/owl";
import {session} from "@web/session";
export class AppsMenuSearchBar extends Component {
setup() {
super.setup();
this.searchType = session.apps_menu.search_type || "canonical";
}
}
Object.assign(AppsMenuSearchBar, {
props: {},
template: "web_responsive.AppsMenuSearchBar",
components: {
AppsMenuOdooSearchBar,
AppsMenuCanonicalSearchBar,
AppsMenuFuseSearchBar,
},
});

View File

@@ -0,0 +1,45 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
.o_grid_apps_menu .search-container {
width: 100%;
.search-input {
display: flex;
justify-items: center;
gap: 0.75rem;
box-shadow: $app-menu-box-shadow;
border-radius: 4px;
padding: 0.5rem 0.75rem;
background-color: white;
.search-icon {
color: $app-menu-text-color;
font-size: 1.5rem;
padding-top: 1px;
}
.form-control {
height: 1.75rem;
background: none;
border: none;
color: $app-menu-text-color;
display: block;
padding: 0;
box-shadow: none;
&::placeholder {
color: $app-menu-text-color;
opacity: 0.5;
}
}
}
}
.o_command_palette_search .form-control {
&:focus {
box-shadow: unset;
}
}

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Copyright 2018 Tecnativa - Jairo Llopis
Copyright 2021 ITerra - Sergey Shebanin
Copyright 2023 Onestein - Anjeel Haria
Copyright 2023 Taras Shabaranskyi
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
<templates>
<!-- Search bar -->
<t t-name="web_responsive.AppsMenuSearchBar">
<AppsMenuCanonicalSearchBar t-if="searchType==='canonical'" />
<AppsMenuOdooSearchBar t-if="searchType==='command_palette'" />
<AppsMenuFuseSearchBar t-if="searchType==='fuse'" />
</t>
</templates>

View File

@@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="2000" height="1128" viewBox="0 0 2000 1128">
<polygon fill-opacity=".03" points="0 1077.844 392.627 778.443 1504.99 1127.745 0 1127.745"/>
<polygon fill-opacity=".02" points="392.216 778.443 283.294 0 0 0 0 666.504"/>
<polygon fill-opacity=".03" points="1000 0 2000 1009.98 2000 439.94 1749.817 0"/>
</svg>

After

Width:  |  Height:  |  Size: 366 B

View File

@@ -0,0 +1,26 @@
/* global requestAnimationFrame, window, document */
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
import {debounce} from "@web/core/utils/timing";
// Fix for iOS Safari to set correct viewport height
// https://github.com/Faisal-Manzer/postcss-viewport-height-correction
export function setViewportProperty(doc) {
function handleResize() {
requestAnimationFrame(function () {
doc.style.setProperty("--vh100", doc.clientHeight + "px");
});
}
handleResize();
return handleResize;
}
window.addEventListener(
"resize",
debounce(setViewportProperty(document.documentElement), 25)
);

View File

@@ -0,0 +1,95 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
$big-checkbox-size: 1.5em;
// Big checkboxes
.o_list_view,
.o_setting_container .o_setting_box {
.o_setting_right_pane {
margin-left: 34px;
}
.o-checkbox:not(.o_boolean_toggle) {
margin-right: 10px;
margin-top: -6px;
&.d-inline-block {
display: block !important;
}
.form-check-input {
height: $big-checkbox-size;
width: $big-checkbox-size;
}
}
.o_optional_columns_dropdown {
.o-dropdown--menu {
display: flex !important;
flex-direction: column;
margin: 0;
}
.o-checkbox {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin: 0;
}
.form-check-input {
margin-bottom: 2px;
}
}
}
.o_add_favorite + .o_accordion_values {
.o_add_favorite_props {
display: flex;
flex-direction: column;
margin: 0;
}
.o_add_favorite_name {
margin-bottom: 0.5rem;
max-width: 100%;
}
.form-check-input {
height: $big-checkbox-size;
width: $big-checkbox-size;
}
.form-check-label {
line-height: normal;
}
.o-checkbox {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin: 0;
}
}
.o_setting_container .o_setting_box {
.o-checkbox:not(.o_boolean_toggle) {
.form-check-label {
&::after {
width: 24px;
height: 24px;
}
&::before {
outline: none !important;
border: 1px solid #4c4c4c;
width: 24px;
height: 24px;
}
}
}
}

View File

@@ -0,0 +1,5 @@
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
$o-form-renderer-max-width: 3840px;
$o-form-view-sheet-max-width: 2560px;

View File

@@ -0,0 +1,26 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
.o_mobile_sticky {
transition: top 0.5s;
}
// Sticky Header & Footer in List View
.o_list_view {
.o_list_table {
thead {
box-shadow: 0 1px 0 0 var(--ListRenderer-thead-border-end-color);
}
.o_list_footer {
position: sticky;
bottom: 0;
z-index: 2;
background-color: var(--ListRenderer-thead-bg-color);
box-shadow: 0 -1px 0 -1px var(--ListRenderer-thead-border-end-color);
}
}
}

View File

@@ -0,0 +1,18 @@
/* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
$app-menu-text-color: #374151 !default;
$app-menu-background-color: rgb(233, 230, 249) !default;
$app-menu-item-highlight: rgb(243, 240, 259) !default;
$app-menu-box-shadow:
inset 0 0 0 1px rgba(0, 0, 0, 0.16),
0 2px 2px rgba(0, 0, 0, 0.016),
0 4px 4px rgba(0, 0, 0, 0.016),
0 8px 8px rgba(0, 0, 0, 0.016),
0 16px 16px rgba(0, 0, 0, 0.016) !default;
$app-menu-box-shadow-highlight:
inset 0 0 0 1px rgba(0, 0, 0, 0.26),
0 2px 2px rgba(0, 0, 0, 0.026),
0 4px 4px rgba(0, 0, 0, 0.026),
0 8px 8px rgba(0, 0, 0, 0.026),
0 16px 16px rgba(0, 0, 0, 0.026) !default;

View File

@@ -0,0 +1,221 @@
/* Copyright 2018 Tecnativa - Jairo Llopis
* Copyright 2021 ITerra - Sergey Shebanin
* Copyright 2023 Onestein - Anjeel Haria
* Copyright 2023 Taras Shabaranskyi
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
$chatter_zone_width: 35% !important;
// Allow sticky header
.o_action_manager {
.o_form_view {
overflow: unset;
.o_form_view_container {
overflow: auto;
}
}
}
@include media-breakpoint-down(sm) {
.ui-menu-item-wrapper {
display: inline-flex !important;
align-items: center;
height: 35px;
}
.o_calendar_view .o_calendar_widget {
.fc-timeGridDay-view .fc-axis,
.fc-timeGridWeek-view .fc-axis {
padding-left: 0px;
}
.fc-dayGridYear-view {
padding-left: 0px;
> .fc-month-container {
width: 95%;
}
}
.fc-timeGridDay-view {
.fc-day-header {
vertical-align: middle;
}
}
}
.o_kanban_view .o_cp_pager .btn-group {
top: -1px;
}
.o_kanban_renderer {
width: 100%;
}
}
// Normal views
.o_content,
.modal-content {
max-width: 100%;
// Form views
.o_form_editable {
.o_cell .o_form_label:not(.o_status):not(.o_calendar_invitation) {
min-height: 23px;
@include media-breakpoint-up(md) {
margin-bottom: 10px;
}
}
.o_horizontal_separator {
font-size: 14px;
}
// Some UX improvements for form in edit mode
@include media-breakpoint-down(sm) {
&.o_form_editable .o_field_widget {
&:not(.o_stat_info):not(.o_readonly_modifier):not(
.oe_form_field_html
):not(.o_field_image) {
min-height: 35px;
}
.o_x2m_control_panel {
margin-bottom: 10px !important;
}
&.o_field_float_percentage,
&.o_field_monetary,
&.o_field_many2many_selection,
.o_field_many2one_selection {
align-items: center;
}
.o_field_many2one_selection .o_input_dropdown,
&.o_datepicker,
&.o_partner_autocomplete_info {
input {
min-height: 35px;
}
}
.o_external_button {
margin-left: 5px;
}
.o_dropdown_button,
.o_datepicker_button {
top: 50%;
right: 6px;
bottom: auto;
transform: translateY(-50%);
}
}
}
@include media-breakpoint-down(sm) {
min-width: auto;
// Avoid overflow on modals
.o_form_sheet {
min-width: auto;
}
// Render website inputs properly in phones
.o_group .o_field_widget.o_text_overflow {
// Overrides another !important
width: auto !important;
}
}
}
//No content message improvements on mobile
@include media-breakpoint-down(md) {
.o_view_nocontent {
top: 53px;
}
.o_nocontent_help {
box-shadow: none;
}
.o_sample_data_disabled {
display: none;
}
}
}
.o-mail-Form-chatter {
&.o-isInFormSheetBg:not(.o-aside) {
background-color: $white;
&:not(.o-aside) {
width: auto;
border-top: 1px solid $border-color;
}
}
&.o-aside {
flex: 0 0 $chatter_zone_width;
max-width: initial;
min-width: initial;
overflow: auto;
}
}
body:not(.o_statusbar_buttons) {
.oe-toolbar {
z-index: 0 !important;
}
}
.o_inner_group > .mb-sm-0 {
margin-bottom: 0 !important;
}
.o_searchview_autocomplete {
z-index: 999;
}
// Color clue to tell the difference between a note and a public message
// HACK: has() pseudo class is broadly supported in desktop, even FF will deploy
// full support soon (now it's available behind a config flag)
// https://caniuse.com/css-has
.o-mail-Chatter-top:has(.o-mail-Chatter-sendMessage.active) {
.o-mail-Composer {
background-color: lighten($o-brand-primary, 35%);
padding-top: 0.25rem !important;
}
@include media-breakpoint-up(sm) {
.o-mail-Composer {
padding-top: 0.5rem !important;
}
}
}
@include media-breakpoint-up(md) {
.app_settings_block > h2,
.app_settings_block > div > h2 {
@include o-position-sticky(0);
z-index: 10;
}
}
.o_list_table {
.o_handle_cell,
.o_list_record_remove {
vertical-align: middle;
}
}
.o_action_manager {
.dropdown-menu {
max-height: 70vh;
max-height: 70dvh;
}
.o_searchview_input {
padding-top: 0;
padding-bottom: 0;
}
.o_control_panel_main {
.btn {
white-space: nowrap;
}
}
}

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" ?>
<templates>
<t
t-name="web_responsive.CustomFavoriteItem"
t-inherit="web.CustomFavoriteItem"
t-inherit-mode="extension"
>
<xpath expr="//AccordionItem/div[1]" position="attributes">
<attribute name="class" add="o_add_favorite_props" separator=" " />
</xpath>
<xpath
expr="//AccordionItem/div[1]/input[hasclass('o_input')]"
position="attributes"
>
<attribute name="class" add="o_add_favorite_name" separator=" " />
</xpath>
</t>
</templates>

Some files were not shown because too many files have changed in this diff Show More