跳转到主要内容

参考浏览器小部件(维护者 Mathias Leimgruber)

项目描述

ftw.referencewidget

此小部件提供了一个参考浏览器和搜索字段,允许用户选择参考。

基本查询是所有不在“types_not_searched”属性中的类型,对允许类型的所有修改都是相对于此查询进行的。

可以通过IReferenceSettings注册接口或每个小部件的参数来更改所有小部件的遍历或选择能力。

该小部件接受以下参数
  • allow_traversal:要添加为可遍历的类型列表。如果将“override”设置为True,则将作为完整的配置执行。

  • block_traversal:要添加为不可遍历的类型列表。如果将“override”设置为True,则将忽略。

  • selectable:要添加为可选择的类型列表。如果将“override”设置为True,则将作为完整的配置执行。

  • nonselectable:要添加为不可选择的类型列表。如果将“override”设置为True,则将忽略。

  • start:首先打开的路径。可以是可调用的或路径。还可以使用字符串“parent”、“navroot”、“ploneroot”。

  • allow_nonsearched_types:如果设置为true,则所有类型都将可遍历和可选择。

  • override:如果向小部件传递列表,则丢弃所有全局配置和基本查询。如果设置为true,则“selectable”和“allow_traversal”不是累加的,而是作为完整的配置执行。将忽略“nonselectable”和“block_traversal”。

  • traversal_query:通过给定的字典更新用于遍历的查询。传递的字典将在一切完成后更新。因此,请确保不要覆盖sort_on/sort_order属性。

  • 显式类型过滤器:可以使某些类型完全不显示。重要:为此,restapi需要支持NOT查询:例如 portal_type.not=Image。

使用方法

  • ftw.referencewidget 添加到您的buildout配置或作为包的依赖项

[instance]
eggs +=
    ftw.referencewidget
  • 安装默认的通用导入配置文件。

安装/开发

$ make install
$ make run

我们支持这两种选项,因为makefile方法还没有支持zope2instance配方中的所有功能。例如,控制脚本尚不支持。但是,设置docker测试镜像更快、更方便。

JavaScript开发

从版本4开始,小部件基于boorstrap 5.2和Vuejs 3。它还不是一种模式,但它可能可以用模式包装。

$ npm install

开发JS

$ npm run dev

为生产构建

$ npm run build

JavaScript公共API

您可以在代码中运行“window.initReferenceWidget”。它将扫描所有参考浏览器小部件,如果尚未初始化,则将初始化JS小部件。

从1.x升级到2.x

ftw.referencewidget包没有设置版本号。因此,从ftw.upgrade中不会显示升级步骤 ../@@manage-upgrades。因此,第一个升级步骤 Upgrade ftw.referencewidget:default to 20181112105705: Fix registry field frontend edit 必须通过ZMI在 ../portal_setup/manage_fullImport 下安装。这将为包设置版本,因此可以通过 ../@@manage-upgrades 安装进一步的升级。

版本4.x

ftw.referencewidget的4.x版本仅与Plone 6和Python 3.9(可能还有3.7和3.8)兼容。它使用模块联邦功能和Plone 6的boostrap 5。

上下文源绑定器

使用 RelationeChoiceRelationListRelationChoice,可以配置与字段一起的源。确保只能选择有效的内容。

默认情况下,源绑定器在选择内容时仅检查有效的 portal_type。

因此,默认_filter 实现如下所示

def default_filter(source, value):
    """"
    Return ``True`` when the object is selectable, ``False``
    when it is not selectable.

    """"
    return value.portal_type in get_selectable_types_by_source(source)

请随意添加您自己的过滤方法作为字段中的源参数。示例

from ftw.referencewidget.filter import DefaultSelectable

class CustomClass(DefaultSelectable):
    def is_selectable(self):
        return bool(..)
...

directives.widget(realtionchoice_restricted_title=ReferenceWidgetFactory)
realtionchoice_restricted_title = RelationChoice(
    title=_(u'Related Choice Restricted Title'),
    source=ReferenceObjSourceBinder(
        selectable_class=CustomClass),
    default=None,
    required=False,
)

filter接受两个参数,实际的源对象和值,即内容对象。

仅支持 ReferenceObjSourceBinder。源绑定器接受以下参数

  • selectable:添加这些类型作为可选。如果 override 设置为 True,则将作为完整的配置。

  • nonselectable:添加这些类型不可选。如果 override 设置为 True,则会被忽略。

  • allow_nonsearched_types:如果设置为true,则所有类型都将可遍历和可选择。

  • override:如果传递给小部件的列表,则丢弃所有全局配置和基本查询。如果设置为 true,则 selectable 不是可添加的,而是作为完整的配置。 nonselectable 将被忽略。

  • selectable_class:自定义 ISelectable 类以确定内容是否可选。

参数与小部件相同(与1.x版本向后兼容)。

字段组合(已注册转换器)

以下组合受支持

  • RelationList与value_type Relation –> 存储一系列RelationValues

  • RelationList与value_type RelationChoice –> 存储一系列RelationValues

  • Relation –> 存储一个RelationValue

  • RelationChoice列表 –> 存储一系列绝对路径,不带门户根部分

  • TextLine –> 存储一个绝对路径作为字符串,不带门户根部分

使restapi支持通过@search端点进行NOT查询

def parse_complex_query(self, idx_query):
    idx_query = idx_query.copy()
    parsed_query = {}
    if "query" not in idx_query and "not" not in idx_query:
        raise QueryParsingError(
            "Query for index %r is missing a 'query' or 'not' key!" % self.index
        )
    if "query" in idx_query:
        qv = idx_query.pop("query")
        parsed_query["query"] = self.parse_simple_query(qv)
    if "not" in idx_query:
        nt = idx_query.pop("not")
        parsed_query["not"] = self.parse_simple_query(nt)

    for opt_key, opt_value in idx_query.items():
        if opt_key in self.query_options:
            opt_type = self.query_options[opt_key]
            try:
                parsed_query[opt_key] = opt_type(opt_value)
            except ValueError:
                raise QueryParsingError(
                    "Value %r for query option %r (index %r) could not be"
                    " casted to %r" % (opt_value, opt_key, self.index, opt_type)
                )
        else:
            log.warning(
                f"Unrecognized query option {opt_key!r} for index {self.index!r}"
            )
            # Pass along unknown option without modification
            parsed_query[opt_key] = opt_value

    return parsed_query

变更日志

4.2.2 (2024-08-09)

  • 修复折叠元素上的aria-hidden属性。[mathias.leimgruber]

4.2.1 (2024-07-08)

  • 将ignore_nav_root参数添加到面包屑端点。[mathias.leimgruber]

4.2.0 (2024-05-29)

  • 使引用项可拖动。[mathias.leimgruber]

4.1.0 (2024-05-22)

  • 重构小部件,使其对所有查询使用@search端点。[mathias.leimgruber]

  • 添加新的显式类型过滤器参数。[mathias.leimgruber]

4.0.3 (2024-05-14)

  • 检查对引用的查看权限以避免未授权错误。[mathias.leimgruber]

4.0.2 (2024-05-13)

  • 针对Plone 6.0.9进行测试。[mathias.leimgruber]

  • 删除基于buildout的设置。[mathias.leimgruber]

  • 删除plone根的FakeEditView。[mathias.leimgruber]

4.0.1 (2023-06-09)

  • 修复分页查询字符串重复。[mathias.leimgruber]

4.0.0 (2023-05-30)

  • 不再将*添加到搜索词。[mathias.leimgruber]

4.0.0b2 (2023-05-22)

  • 通过patternslib加载和注册小部件。[mathias.leimgruber]

  • 修复小部件中选中项的选中状态,并为选中项添加标题。[mathias.leimgruber]

  • 使用开关代替复选框以提高可读性。[mathias.leimgruber]

  • 修复文件和图像的mimetype图标。[mathias.leimgruber]

  • 支持supermodel RelationChoice字段。[mathias.leimgruber]

4.0.0b1 (2022-08-11)

  • 改进样式。[mathias.leimgruber]

  • 添加翻译js小部件的选项,并添加翻译(德语)[mathias.leimgruber]

  • 显示图标和wf状态标题 [mathias.leimgruber]

4.0.0a6 (2022-07-13)

  • 使用基于vite的设置。[mathias.leimgruber]

  • 使Plone 6.0.0a6兼容。[mathias.leimgruber]

4.0.0a5 (2022-07-06)

  • 将ref浏览器实现为可折叠元素,以避免嵌套覆盖。[mathias.leimgruber]

  • webpack模块联邦配置修复 [mathias.leimgruber]

4.0.0a4 (2022-06-26)

  • 使datagridfield可选。[mathias.leimgruber]

4.0.0a3 (2022-06-17)

  • 更新readme。[mathias.leimgruber]

  • 修复modal id。[mathias.leimgruber]

4.0.0a2 (2022-06-17)

  • 修复classifierts并制作可安装的发布版。[mathias.leimgruber]

4.0.0a1 (2022-06-17)

  • Plone5.2/6和Python3兼容性。[gbastien]

  • 基于bootstrap 5.2 + vuejs + webpack模块联邦对小部件(JS)进行完全重写。[mathias.leimgruber]

3.0.6 (2022-06-02)

  • 处理边缘情况,如果上下文是plone根,而不是根的编辑视图。[mathias.leimgruber]

3.0.5 (2022-06-02)

  • 为plone网站根添加fake编辑视图,以便在根上的添加视图中使用小部件。[mathias.leimgruber]

3.0.4 (2021-07-13)

  • 修复tinymce内部链接集成问题。[mathias.leimgruber]

3.0.3 (2021-03-31)

  • 修复DictRow、DataGridFieldFactory导入以兼容collective.z3cform.datagridfield的1.x和2.x版本。[mathias.leimgruber]

3.0.2 (2021-01-07)

  • 在初始化小部件时设置初始request_path,以便在当前区域中进行搜索。[mathias.leimgruber]

3.0.1 (2020-12-15)

  • 修复js包:与已登录用户合并,无依赖,因为它通过requireJS加载。[mathias.leimgruber]

3.0.0 (2020-12-15)

  • 用ftw.reference widget版本替换plone select2基于的内部链接引用小部件。[mathias.leimgruber]

  • 为plone 5.x tinymce准备使用。[mathias.leimgruber]

2.2.1 (2020-01-15)

  • 将handlebars.js限制为认证用户。[tinagerber]

2.2.0 (2019-12-16)

  • 修复使用portal_url,它不再全局可用。[mathias.leimgruber]

  • 添加单独的Plone 5配置文件。[tinagerber]

  • 为Plone 5添加卸载配置文件。[tinagerber]

2.1.1 (2019-11-29)

  • 使用unittest而不是unittest2。[jone]

2.1.0 (2019-03-06)

  • 禁用amd对handlbar.js的检查 [mathias.leimgruber]

  • 添加Plone 5.1支持。[mathias.leimgruber]

2.0.0 (2018-11-19)

  • 修复前端无法编辑portal_registry条目的问题 [Nachtalb]

    ftw.referencewidget包没有设置版本号。因此,从ftw.upgrade中不会显示升级步骤 ../@@manage-upgrades。因此,第一个升级步骤 Upgrade ftw.referencewidget:default to 20181112105705: Fix registry field frontend edit 必须通过ZMI在 ../portal_setup/manage_fullImport 下安装。这将为包设置版本,因此可以通过 ../@@manage-upgrades 安装进一步的升级。

1.5.4 (2018-01-26)

  • 修复UnicodeDecodeError。[mbaechtold]

1.5.3 (2017-11-24)

  • 不再使用“plone.directives.form”。[mbaechtold]

  • 修复加载包含 GridDataField 的页面时出现的错误问题 [Nachtalb]

1.5.2 (2017-10-23)

  • 修复旧版 Chrome 浏览器中仅搜索当前路径的显示问题。 [mathias.leimgruber]

1.5.1 (2017-10-23)

  • 仅修复搜索当前路径的问题。 [mathias.leimgruber]

  • 修复显示新闻日期时的 UniCodeDecodeError。 [mathias.leimgruber]

1.5.0 (2017-10-23)

  • 添加在当前路径中搜索的选项。 [Nachtalb]

  • 将所有新闻条目的新闻日期标题本地化显示 [Nachtalb]

1.4.2 (2017-08-29)

  • 修复当 Plone 站点位于挂载点内时 DataGridField 的 Bug。 [mbaechtold]

1.4.1 (2017-08-08)

  • 添加对“collective.z3cform.datagridfield”的支持。 [mbaechtold]

1.4.0 (2017-07-07)

  • 实现参考小部件的显示模式。 [mathias.leimgruber]

  • 更改示例内容构建注册条目名称以避免冲突。 [mathias.leimgruber]

  • 实现路径限制选项。 [mathias.leimgruber]

  • 为给定的参考渲染隐藏的输入元素,而不是仅通过 JavaScript 渲染它们。这样,小部件的行为更像其他所有 plone 小部件。 [mathias.leimgruber]

  • 为小部件实现一个额外的 traversal_query 参数。 [mathias.leimgruber]

  • 为 IRelationChoice 字段实现 ReferenceObjPathSource。 [mathias.leimgruber]

1.3.0 (2016-11-09)

  • 实现一些排序选项。 [mathias.leimgruber]

  • 使用 plone.app.redirector 跟踪重命名和移动的内容。如果内容已被删除,则不会失败。 [mathias.leimgruber]

1.2.3 (2016-10-18)

  • 修复如果传递给 IList/Widget 转换器的值不是列表而是字符串时的边缘情况(主要针对测试)。 [raphael-s]

1.2.2 (2016-10-18)

  • 实现测试浏览器小部件。 [raphael-s]

1.2.1 (2016-10-17)

  • 尊重字段设置的 missing_value。 [tschanzt]

  • 仅通过 ReferenceWidget 实现对 ITextLine 的支持。 [mathias.leimgruber]

1.2.0 (2016-10-04)

  • 显示从 plone 根目录开始的选定值的绝对路径。 [mathias.leimgruber]

  • 移除选定元素中的列表样式类型和过时的间距。 [mathias.leimgruber]

  • 明确实现对 IList 和 IRelationChoice 的支持。请参阅 Readme 获取更多信息 [mathias.leimgruber]

1.1.0 (2016-09-27)

  • 忽略多值字段的空值。 [mathias.leimgruber]

  • 通过不渲染 handlebar 模板支持 chameleon。 [jone]

1.0.4 (2016-09-19)

  • 使能够删除给定的内部参考(单选按钮)。 [mathias.leimgruber]

  • 忽略单值字段的空值。 [mathias.leimgruber]

  • 修复按下“enter”按钮时的搜索。 [mathias.leimgruber]

  • 在绑定新事件之前,始终取消绑定 ref 按钮上的点击事件。 [mathias.leimgruber]

1.0.3 (2016-09-14)

  • 与 1.0.2 相同,但已上传到 PyPI。 [mbaechtold]

1.0.2 (2016-09-14)

  • 当覆盖层重新加载时重新加载项目。 [tschanzt]

  • 在搜索中尊重类型约束。 [tschanzt]

1.0.1 (2016-09-09)

  • 在转换器中忽略空字符串。 [tschanzt]

  • 改进覆盖层行为(在覆盖层外点击时关闭 + 按 ESC 键关闭)。 [mathias.leimgruber]

  • 在创建覆盖层时获取小部件名称。 [tschanzt]

1.0.0 (2016-09-07)

  • 初始版本 [tschanzt]

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

ftw.referencewidget-4.2.2.tar.gz (914.7 kB 查看哈希值)

上传时间 源代码

由以下组织支持