src/pyams_content/component/paragraph/zmi/milestone.py
changeset 936 2b31cde8c028
parent 935 8a7ec586dce1
child 938 eb83447d4c68
equal deleted inserted replaced
930:814f7c5e04d1 936:2b31cde8c028
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 import json
    17 import json
    18 
    18 
       
    19 from pyramid.decorator import reify
       
    20 from pyramid.view import view_config
       
    21 from z3c.form import field, button
       
    22 from z3c.form.interfaces import INPUT_MODE
       
    23 from z3c.table.column import GetAttrColumn
       
    24 from z3c.table.interfaces import IValues, IColumn
       
    25 from zope.interface import implementer, Interface
       
    26 from zope.schema.vocabulary import getVocabularyRegistry
       
    27 
       
    28 from pyams_content import _
    19 # import interfaces
    29 # import interfaces
    20 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
    30 from pyams_content.component.paragraph.interfaces import IParagraphContainerTarget, IParagraphContainer, \
    21     PARAGRAPH_HIDDEN_FIELDS
    31     PARAGRAPH_HIDDEN_FIELDS
    22 from pyams_content.component.paragraph.interfaces.milestone import MILESTONE_PARAGRAPH_TYPE, IMilestoneParagraph, \
    32 from pyams_content.component.paragraph.interfaces.milestone import MILESTONE_PARAGRAPH_TYPE, IMilestoneParagraph, \
    23     IMilestoneContainer, IMilestoneContainerTarget, IMilestone
    33     IMilestoneContainer, IMilestoneContainerTarget, IMilestone
    24 from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
       
    25 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
       
    26 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
       
    27 from pyams_content.shared.common import IWfSharedContent
       
    28 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
       
    29 from pyams_i18n.interfaces import II18n
       
    30 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
       
    31 from pyams_skin.layer import IPyAMSLayer
       
    32 from z3c.form.interfaces import INPUT_MODE
       
    33 from z3c.table.interfaces import IValues, IColumn
       
    34 
       
    35 # import packages
    34 # import packages
    36 from pyams_content.component.paragraph.milestone import MilestoneParagraph, Milestone
    35 from pyams_content.component.paragraph.milestone import MilestoneParagraph, Milestone
    37 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    36 from pyams_content.component.paragraph.zmi import BaseParagraphAddMenu, BaseParagraphAJAXAddForm, \
    38     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
    37     BaseParagraphPropertiesEditForm, BaseParagraphAJAXEditForm
       
    38 from pyams_content.component.paragraph.zmi import IParagraphContainerView, IParagraphEditFormButtons
       
    39 from pyams_content.component.paragraph.zmi.interfaces import IParagraphInnerEditor
    39 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
    40 from pyams_content.features.renderer.zmi.widget import RendererFieldWidget
       
    41 from pyams_content.interfaces import MANAGE_CONTENT_PERMISSION
       
    42 from pyams_content.shared.common import IWfSharedContent
    40 from pyams_form.form import AJAXAddForm, ajax_config
    43 from pyams_form.form import AJAXAddForm, ajax_config
       
    44 from pyams_form.interfaces.form import IInnerForm, IInnerSubForm
    41 from pyams_form.security import ProtectedFormObjectMixin
    45 from pyams_form.security import ProtectedFormObjectMixin
    42 from pyams_i18n.column import I18nAttrColumn
    46 from pyams_i18n.column import I18nAttrColumn
       
    47 from pyams_i18n.interfaces import II18n
    43 from pyams_pagelet.pagelet import pagelet_config
    48 from pyams_pagelet.pagelet import pagelet_config
    44 from pyams_skin.container import switch_element_visibility
    49 from pyams_skin.container import switch_element_visibility
    45 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_table_row_refresh_event, \
    50 from pyams_skin.event import get_json_switched_table_refresh_event, get_json_table_row_refresh_event, \
    46     get_json_widget_refresh_event
    51     get_json_widget_refresh_event
       
    52 from pyams_skin.interfaces.viewlet import IToolbarAddingMenu, IWidgetTitleViewletManager
       
    53 from pyams_skin.layer import IPyAMSLayer
    47 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    54 from pyams_skin.table import BaseTable, SorterColumn, I18nColumn, TrashColumn, VisibilitySwitcherColumn
    48 from pyams_skin.viewlet.toolbar import ToolbarAction
    55 from pyams_skin.viewlet.toolbar import ToolbarAction
    49 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    56 from pyams_utils.adapter import adapter_config, ContextRequestViewAdapter
    50 from pyams_utils.traversing import get_parent
    57 from pyams_utils.traversing import get_parent
    51 from pyams_utils.url import absolute_url
    58 from pyams_utils.url import absolute_url
    52 from pyams_viewlet.viewlet import viewlet_config
    59 from pyams_viewlet.viewlet import viewlet_config
    53 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
    60 from pyams_zmi.form import AdminDialogAddForm, AdminDialogEditForm
    54 from pyams_zmi.zmi.table import InnerTableView
    61 from pyams_zmi.zmi.table import InnerTableView
    55 from pyramid.decorator import reify
       
    56 from pyramid.view import view_config
       
    57 from z3c.form import field, button
       
    58 from z3c.table.column import GetAttrColumn
       
    59 from zope.interface import implementer, Interface
       
    60 from zope.schema.vocabulary import getVocabularyRegistry
       
    61 
       
    62 from pyams_content import _
       
    63 
    62 
    64 
    63 
    65 class IMilestonesView(Interface):
    64 class IMilestonesView(Interface):
    66     """Milestones view marker interface"""
    65     """Milestones view marker interface"""
    67 
    66 
    72 
    71 
    73 @viewlet_config(name='add-milestone-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
    72 @viewlet_config(name='add-milestone-paragraph.menu', context=IParagraphContainerTarget, view=IParagraphContainerView,
    74                 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=600)
    73                 layer=IPyAMSLayer, manager=IToolbarAddingMenu, weight=600)
    75 class MilestoneParagraphAddMenu(BaseParagraphAddMenu):
    74 class MilestoneParagraphAddMenu(BaseParagraphAddMenu):
    76     """Milestone paragraph add menu"""
    75     """Milestone paragraph add menu"""
    77     
    76 
    78     label = _("Milestones...")
    77     label = _("Milestones...")
    79     label_css_class = 'fa fa-fw fa-arrows-h'
    78     label_css_class = 'fa fa-fw fa-arrows-h'
    80     url = 'add-milestone-paragraph.html'
    79     url = 'add-milestone-paragraph.html'
    81     paragraph_type = MILESTONE_PARAGRAPH_TYPE
    80     paragraph_type = MILESTONE_PARAGRAPH_TYPE
    82     
    81 
    83     
    82 
    84 @pagelet_config(name='add-milestone-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    83 @pagelet_config(name='add-milestone-paragraph.html', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    85                 permission=MANAGE_CONTENT_PERMISSION)
    84                 permission=MANAGE_CONTENT_PERMISSION)
    86 @ajax_config(name='add-milestone-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    85 @ajax_config(name='add-milestone-paragraph.json', context=IParagraphContainerTarget, layer=IPyAMSLayer,
    87              base=BaseParagraphAJAXAddForm)
    86              base=BaseParagraphAJAXAddForm)
    88 class MilestoneParagraphAddForm(AdminDialogAddForm):
    87 class MilestoneParagraphAddForm(AdminDialogAddForm):
    89     """Milestone paragraph add form"""
    88     """Milestone paragraph add form"""
    90     
    89 
    91     legend = _("Add new milestone paragraph")
    90     legend = _("Add new milestone paragraph")
    92     icon_css_class = 'fa fa-fw fa-arrows-h'
    91     icon_css_class = 'fa fa-fw fa-arrows-h'
    93 
    92 
    94     fields = field.Fields(IMilestoneParagraph).select('title', 'renderer')
    93     fields = field.Fields(IMilestoneParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
    95     edit_permission = MANAGE_CONTENT_PERMISSION
    94     edit_permission = MANAGE_CONTENT_PERMISSION
    96 
    95 
    97     def create(self, data):
    96     def create(self, data):
    98         return MilestoneParagraph()
    97         return MilestoneParagraph()
    99     
    98 
   100     def add(self, object):
    99     def add(self, object):
   101         IParagraphContainer(self.context).append(object)
   100         IParagraphContainer(self.context).append(object)
   102 
   101 
   103 
   102 
   104 @pagelet_config(name='properties.html', context=IMilestoneParagraph, layer=IPyAMSLayer,
   103 @pagelet_config(name='properties.html', context=IMilestoneParagraph, layer=IPyAMSLayer,
   116         return II18n(content).query_attribute('title', request=self.request)
   115         return II18n(content).query_attribute('title', request=self.request)
   117 
   116 
   118     legend = _("Edit milestone paragraph properties")
   117     legend = _("Edit milestone paragraph properties")
   119     icon_css_class = 'fa fa-fw fa-arrows-h'
   118     icon_css_class = 'fa fa-fw fa-arrows-h'
   120 
   119 
   121     fields = field.Fields(IMilestoneParagraph).select('title', 'renderer')
   120     fields = field.Fields(IMilestoneParagraph).omit(*PARAGRAPH_HIDDEN_FIELDS)
   122     fields['renderer'].widgetFactory = RendererFieldWidget
   121     fields['renderer'].widgetFactory = RendererFieldWidget
   123 
   122 
   124     edit_permission = MANAGE_CONTENT_PERMISSION
   123     edit_permission = MANAGE_CONTENT_PERMISSION
   125 
   124 
   126 
   125 
   318     """Milestone add form"""
   317     """Milestone add form"""
   319 
   318 
   320     legend = _("Add new milestone")
   319     legend = _("Add new milestone")
   321     icon_css_class = 'fa fa-fw fa-arrow-h'
   320     icon_css_class = 'fa fa-fw fa-arrow-h'
   322 
   321 
   323     fields = field.Fields(IMilestone).omit(*PARAGRAPH_HIDDEN_FIELDS)
   322     fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
   324     edit_permission = MANAGE_CONTENT_PERMISSION
   323     edit_permission = MANAGE_CONTENT_PERMISSION
   325 
   324 
   326     def create(self, data):
   325     def create(self, data):
   327         return Milestone()
   326         return Milestone()
   328 
   327 
   345     prefix = 'milestone_properties.'
   344     prefix = 'milestone_properties.'
   346 
   345 
   347     legend = _("Edit milestone properties")
   346     legend = _("Edit milestone properties")
   348     icon_css_class = 'fa fa-fw fa-arrows-h'
   347     icon_css_class = 'fa fa-fw fa-arrows-h'
   349 
   348 
   350     fields = field.Fields(IMilestone).omit(*PARAGRAPH_HIDDEN_FIELDS)
   349     fields = field.Fields(IMilestone).omit('__parent__', '__name__', 'visible')
   351     edit_permission = MANAGE_CONTENT_PERMISSION
   350     edit_permission = MANAGE_CONTENT_PERMISSION
   352 
   351 
   353     def get_ajax_output(self, changes):
   352     def get_ajax_output(self, changes):
   354         output = super(self.__class__, self).get_ajax_output(changes)
   353         output = super(self.__class__, self).get_ajax_output(changes)
   355         updated = changes.get(IMilestone, ())
   354         updated = changes.get(IMilestone, ())