def slider_effect_choices(context): return SimpleVocabulary([ SimpleTerm(title=_(u"Horizontal"), value='scrollHorz'), SimpleTerm(title=_(u"Vertical"), value='scrollVert'), SimpleTerm(title=_(u"Tile slide"), value='tileSlide'), SimpleTerm(title=_(u"Tile blind"), value='tileBlind') ])
def slider_navigation_type_choices(context): return SimpleVocabulary([ SimpleTerm(title=_(u"Arrows"), value='arrows'), SimpleTerm(title=_(u"Bullets"), value='bullets'), SimpleTerm(title=_(u"Both"), value='both'), SimpleTerm(title=_(u"None"), value='none'), ])
class ISlide(Interface): configuration = schema.Choice( source="slide_configuration_choices", title=_(u"Layout"), description=_(u"Choose a layout for this slide."), required=False) heading = schema.TextLine( title=_(u"Heading"), required=False, ) image = schema.Bytes(title=_(u"Image"), required=False) slide = schema.Text(title=_(u"Text"), required=False) link_reference = schema.Choice( title=_(u"Link to content"), description=_(u"Choose a content item to link this slide to."), source=SearchableTextSourceBinder({}, default_query='path:'), required=False, ) url = schema.URI( title=_(u'External link'), description=_( u'Please enter a full URL. Has precedence before the above field.' ), required=False, ) index = schema.Int(title=u'', required=False)
class IPageSliderSettings(Interface): """ difference here is the user creates all his slides """ show = schema.Bool(title=_(u"Show the slider"), description=_(u"Uncheck to hide the slider."), default=True, required=True) sliderposition = schema.Choice(title=_(u"Slider position"), default="portal_top", vocabulary=SimpleVocabulary([ SimpleTerm(title=_(u"Portal top"), value='portal_top'), SimpleTerm(title=_(u"Above content"), value='above_content'), SimpleTerm(title=_(u"Below title"), value='below_content_title'), SimpleTerm(title=_(u"Below content"), value='below_content'), ]), required=True) slides = schema.List( title=_(u"Slides"), description=_(u"Reorder the slides with drag & drop."), default=[])
def handle_save_action(self, action, data): if form.applyChanges(self.context, self.form_fields, data, self.adapters): zope.event.notify( zope.lifecycleevent.ObjectModifiedEvent(self.context)) zope.event.notify(ploneformbase.EditSavedEvent(self.context)) IStatusMessage(self.request).addStatusMessage(_("Changes saved."), type="info") else: zope.event.notify(ploneformbase.EditCancelledEvent(self.context)) IStatusMessage(self.request).addStatusMessage( _("No changes made."), type="info") self.settings = PageSliderSettings(self.context) slides = self.settings.slides index = data.get('index', -1) image = data.get('image') image_type = None if image != None: scale_width = getUtility(IRegistry)[ 'tx.slider.configlet.ISliderControlPanel.image_scale_width'] (image, image_type, image_size) = scaleImage(image, width=scale_width) else: if index != -1: image = slides[index].get('image') image_type = slides[index].get('image_type') # create new uuid on each save uuid = uuid4().hex value = { 'configuration': data.get('configuration'), 'heading': data.get('heading'), 'html': data.get('slide'), 'image': image, 'image_type': image_type, 'link_reference': data.get('link_reference'), 'url': data.get('url'), 'uuid': uuid } if index == -1: slides.append(value) index = len(slides) - 1 else: slides[index] = value self.settings.slides = slides url = getMultiAdapter((self.context, self.request), name='absolute_url')() + "/@@tx-slider-settings" self.request.response.redirect(url)
def handle_cancel_action(self, action, data): IStatusMessage(self.request).addStatusMessage(_("Changes canceled."), type="info") url = getMultiAdapter((self.context, self.request), name='absolute_url')() + "/@@tx-slider-settings" self.request.response.redirect(url) return ''
class SliderPageSettingsForm(FieldsetsEditForm): """ The page that holds all the slider settings """ settings = FormFieldsets(ISliderSettings) settings.id = 'settings' settings.label = _(u'Settings') slides = FormFieldsets(IPageSliderSettings) slides.id = 'slides' slides.label = _(u'Slides') form_fields = FormFieldsets(slides, settings) #our revised SlidesWidget that only displays slides really form_fields['slides'].custom_widget = SlidesWidget label = _(u"Slider Settings") description = _(u'Configure this slider.')
class ISliderSettings(Interface): """ The actual slider settings """ configuration = schema.Choice( source="slider_configuration_choices", title=_(u"Slider layout"), description=_(u"Choose a layout for all sliders."), required=False) only_here = schema.Bool( title=_(u'Show only on this page'), description=_(u"If unchecked slider will be shown on subpages"), default=True, required=True) effect = schema.Choice( source="slider_effect_choices", title=_(u"Effect"), description=_(u"Leave on 'nothing selected' for default effect."), required=False) speed = schema.Int( title=_(u"Speed"), description= _(u"Speed at which the slides will transition (in milliseconds). '0' for Default." ), default=0, required=False) pause = schema.Int( title=_(u"Pause"), description= _(u"Duration of the pause between transitions (in milliseconds). '0' for Default." ), default=0, required=False) continuous = schema.Bool(title=_(u"Continuous"), description=_(u"Loop the slider continuously."), default=True) navigation_type = schema.Choice( source="slider_navigation_type_choices", title=_(u"Type of navigation"), description=_( u"Leave on 'nothing selected' for default navigation type."), required=False) randomize = schema.Bool(title=_(u"Randomize the slides"), default=False, required=False)
class AddSlideForm(formbase.EditFormBase): """ The add/edit form for a slide """ form_fields = form.FormFields(ISlide) form_fields['index'].custom_widget = HiddenWidget #form_fields['image'].custom_widget = ImageWidget form_fields['slide'].custom_widget = WYSIWYGWidget form_fields['link_reference'].custom_widget = UberSelectionWidget label = _(u"Edit slide") #description = _(u'description_add_slide_form', default=u"") form_name = _(u"Add/Update Slide") @form.action(_(u"Save"), condition=form.haveInputWidgets, name=u'save') def handle_save_action(self, action, data): if form.applyChanges(self.context, self.form_fields, data, self.adapters): zope.event.notify( zope.lifecycleevent.ObjectModifiedEvent(self.context)) zope.event.notify(ploneformbase.EditSavedEvent(self.context)) IStatusMessage(self.request).addStatusMessage(_("Changes saved."), type="info") else: zope.event.notify(ploneformbase.EditCancelledEvent(self.context)) IStatusMessage(self.request).addStatusMessage( _("No changes made."), type="info") self.settings = PageSliderSettings(self.context) slides = self.settings.slides index = data.get('index', -1) image = data.get('image') image_type = None if image != None: scale_width = getUtility(IRegistry)[ 'tx.slider.configlet.ISliderControlPanel.image_scale_width'] (image, image_type, image_size) = scaleImage(image, width=scale_width) else: if index != -1: image = slides[index].get('image') image_type = slides[index].get('image_type') # create new uuid on each save uuid = uuid4().hex value = { 'configuration': data.get('configuration'), 'heading': data.get('heading'), 'html': data.get('slide'), 'image': image, 'image_type': image_type, 'link_reference': data.get('link_reference'), 'url': data.get('url'), 'uuid': uuid } if index == -1: slides.append(value) index = len(slides) - 1 else: slides[index] = value self.settings.slides = slides url = getMultiAdapter((self.context, self.request), name='absolute_url')() + "/@@tx-slider-settings" self.request.response.redirect(url) @form.action(_(u'Cancel'), validator=null_validator, name=u'cancel') def handle_cancel_action(self, action, data): IStatusMessage(self.request).addStatusMessage(_("Changes canceled."), type="info") url = getMultiAdapter((self.context, self.request), name='absolute_url')() + "/@@tx-slider-settings" self.request.response.redirect(url) return ''
class ISliderControlPanel(Interface): """ The actual slider settings """ configuration = schema.List( title=_(u'Configuration'), description= _(u"Enter one configuration per line. Format: 'Name|css-class-name'. First entry is default." ), value_type=schema.TextLine(), required=True) slide_configuration = schema.List( title=_(u'Slide configuration'), description= _(u"Additional configuration for individual slides. Format: 'Name|css-class-name'." ), value_type=schema.TextLine(), required=False) effect = schema.Choice( source="slider_effect_choices", title=_(u"Effect"), description=_(u"Please choose the default effect type."), default="scrollHorz", required=True) speed = schema.Int( title=_(u"Speed"), description=_( u"Speed at which the slides will transition (in milliseconds)."), default=800, required=True) pause = schema.Int( title=_(u"Pause"), description=_( u"Duration of the pause between transitions (in milliseconds)."), default=4000, required=True) navigation_type = schema.Choice( source="slider_navigation_type_choices", title=_(u"Type of navigation"), description=_(u"Please choose the default navigation type."), default="arrows", required=True) image_scale_width = schema.Int( title=_(u"Image scale width"), description=_( u"All uploaded images will be scaled down to this value."), default=1200, required=True)
class ControlPanelForm(RegistryEditForm): form.extends(RegistryEditForm) schema = ISliderControlPanel label = _(u"Slider default settings") description = _(u'Default settings to use for all sliders.')