Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
python:
- "3.12"
plone:
- "6.1-dev"
- "6.2-dev"

steps:
- uses: actions/checkout@v6
Expand Down
2 changes: 1 addition & 1 deletion .meta.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ commit-id = "2.3.1"

[pyproject]
codespell_ignores = "foo,bar"
codespell_skip = "*.min.js,*.min.js.map,*.min.css.map,*.svg,yarn.lock,*.json,*/tiles.xml"
codespell_skip = "*.config.js,*.min.js,*.min.js.map,*.min.css.map,*.svg,yarn.lock,*.json,*/tiles.xml"

[gitignore]
extra_lines = """
Expand Down
2 changes: 1 addition & 1 deletion constraints.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
-c https://dist.plone.org/release/6.0-dev/constraints.txt
-c https://dist.plone.org/release/6.2-dev/constraints.txt
1 change: 1 addition & 0 deletions news/+layoutwidget.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update LayoutWidget to use latest z3c.form extendable attributes. @petschki
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"license": "GPL-2.0-only",
"dependencies": {
"@patternslib/patternslib": "^9.10.2",
"@plone/mockup": "^5.5.0"
"@plone/mockup": "^5.5.1"
},
"devDependencies": {
"@patternslib/dev": "3.8.1",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ target-version = ["py38"]

[tool.codespell]
ignore-words-list = "discreet,assertin,thet,foo,bar"
skip = "*.po,*.min.js,*.min.js.map,*.min.css.map,*.svg,yarn.lock,*.json,*/tiles.xml"
skip = "*.po,*.config.js,*.min.js,*.min.js.map,*.min.css.map,*.svg,yarn.lock,*.json,*/tiles.xml"
##
# Add extra configuration options in .meta.toml:
# [pyproject]
Expand Down
1 change: 0 additions & 1 deletion resources/js/mosaic.pattern.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ export default Base.extend({
// extend options
self.options = {
...self.default,
...JSON.parse(JSON.stringify(self.options.data)),
...self.options,
};

Expand Down
1 change: 1 addition & 0 deletions resources/scss/mosaic.tinymce.scss
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
div.mce-content-body[contenteditable="true"] {
border: none;
border-radius: 0;
padding: 0;

&::after {
// special fix when only one floating image is in editor
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

This file was deleted.

This file was deleted.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/plone/app/mosaic/browser/static/plone-mosaic.min.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

14 changes: 10 additions & 4 deletions src/plone/app/mosaic/tests/test_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,23 @@ def test_pattern_options__pattern(self):
(ILayoutAware["customContentLayout"], self.request), IFieldWidget
)

# Test pattern name
# Test pattern name (default disabled)
self.assertEqual(widget.pattern, "layout-disabled")

# enable "layout_view" on widget context
widget.context = self.layer["portal"]
widget.context.setLayout("layout_view")
self.assertEqual(widget.pattern, "layout")

def test_pattern_options__settings(self):
widget = getMultiAdapter(
(ILayoutAware["customContentLayout"], self.request), IFieldWidget
)

# get_options need a context on the widget.
# get_options need a context with the proper layout view on the widget.
widget.context = self.layer["portal"]
options = widget.get_options()["data"]
widget.context.setLayout("layout_view")
options = widget.get_pattern_options()

# Test default disable_edit_bar value
self.assertIn("disable_edit_bar", options)
Expand All @@ -45,5 +51,5 @@ def test_pattern_options__settings(self):
plone.api.portal.set_registry_record(
name="plone.app.mosaic.settings.disable_edit_bar", value=False
)
options = widget.get_options()["data"]
options = widget.get_pattern_options()
self.assertEqual(options["disable_edit_bar"], False)
53 changes: 16 additions & 37 deletions src/plone/app/mosaic/widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,18 @@
from plone.app.mosaic.interfaces import IMosaicRegistryAdapter
from plone.app.mosaic.utils import getContentLayoutsForType
from plone.app.mosaic.utils import getUserContentLayoutsForType
from plone.app.z3cform.utils import dict_merge
from plone.app.z3cform.widgets.base import BaseWidget
from plone.app.z3cform.widgets.patterns import TextareaWidget
from plone.app.z3cform.interfaces import ITextAreaWidget
from plone.app.z3cform.widgets.richtext import get_tinymce_options
from plone.app.z3cform.widgets.text import TextAreaWidget
from plone.dexterity.browser.base import DexterityExtensibleForm
from plone.memoize.view import memoize
from plone.registry.interfaces import IRegistry
from plone.z3cform.fieldsets.extensible import FormExtender
from plone.z3cform.fieldsets.interfaces import IFormExtender
from Products.CMFDynamicViewFTI.interfaces import ISelectableBrowserDefault
from z3c.form.browser.textarea import TextAreaWidget
from z3c.form.interfaces import HIDDEN_MODE
from z3c.form.interfaces import IAddForm
from z3c.form.interfaces import IFieldWidget
from z3c.form.interfaces import ITextAreaWidget
from z3c.form.util import getSpecification
from z3c.form.widget import FieldWidget
from zope.component import adapter
Expand All @@ -44,13 +41,18 @@ class ILayoutWidget(ITextAreaWidget):


@implementer_only(ILayoutWidget)
class LayoutWidget(BaseWidget, TextAreaWidget):
class LayoutWidget(TextAreaWidget):
"""Layout widget for z3c.form."""

_base = TextareaWidget
@property
def pattern(self):
"""add check for disabled layout attribute"""
name = "layout"

if not self.enabled:
name = name + "-disabled"

pattern = "layout"
pattern_options = BaseWidget.pattern_options.copy()
return name

@property
@memoize
Expand Down Expand Up @@ -87,7 +89,10 @@ def obtainType(self): # noqa
except AttributeError:
pass

def get_options(self):
def get_pattern_options(self):
# skip options if widget is disabled
if not self.enabled:
return {}
registry = queryUtility(IRegistry)
adapted = IMosaicRegistryAdapter(registry)
pt = self.obtainType()
Expand Down Expand Up @@ -144,33 +149,7 @@ def get_options(self):
result["available_layouts"] = getContentLayoutsForType(pt, self.context)
result["user_layouts"] = getUserContentLayoutsForType(pt)

return {"data": result}

def _base_args(self):
"""Method which will calculate _base class arguments.

Returns (as python dictionary):
- `pattern`: pattern name
- `pattern_options`: pattern options
- `name`: field name
- `value`: field value

:returns: Arguments which will be passed to _base
:rtype: dict
"""
args = super()._base_args()
args["name"] = self.name
args["value"] = self.value

args.setdefault("pattern_options", {})
args["pattern_options"] = dict_merge(
self.get_options(), args["pattern_options"]
)

if not self.enabled:
args["pattern"] = self.pattern + "-disabled"

return args
return result

def _add_form_portal_type_default_view(self):
"""Return the default view of the portal type of this add form
Expand Down
32 changes: 0 additions & 32 deletions tests/test-pattern-mosaic.js

This file was deleted.

4 changes: 2 additions & 2 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,10 @@ commands =
deps = zope.testrunner
test =
rfbrowser init
zope-testrunner --all --test-path={toxinidir}/tests -s plone.app.mosaic {posargs}
zope-testrunner --all --test-path={toxinidir}/src -s plone.app.mosaic {posargs}
coverage =
rfbrowser init
coverage run --branch --source plone.app.mosaic {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/tests -s plone.app.mosaic {posargs}
coverage run --branch --source plone.app.mosaic {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s plone.app.mosaic {posargs}
coverage report -m --format markdown
coverage xml
coverage html
Expand Down
Loading