def get_edit_links(self, request): """ Yields the edit links shown on the private view of this trait. """ if self.editable: yield Link( _("Edit"), request.link(Editor('edit', self)), classes=('edit-link', ) ) yield Link( _("Copy"), request.link(Clipboard.from_url(request, request.path_info)), classes=('copy-link', ) ) if request.browser_session.has('clipboard_url'): yield Link( _("Paste"), request.link(Editor('paste', self.paste_target)), classes=('paste-link', 'show-new-content-placeholder'), ) if self.deletable: trait_messages = self.trait_messages[self.trait] safe_delete = False if self.children else True if safe_delete or request.current_role == 'admin': if not safe_delete: extra_warning = _( "Please note that this page has subpages " "which will also be deleted!" ) else: extra_warning = "" yield DeleteLink( _("Delete"), request.link(self), confirm=_(trait_messages['delete_question'], mapping={ 'title': self.title }), yes_button_text=trait_messages['delete_button'], extra_information=extra_warning, redirect_after=request.link(self.parent) ) else: yield DeleteLink( text=_("Delete"), url=request.link(self), confirm=_("This page can't be deleted."), extra_information=_( "This page has subpages. Only administrators can " "delete pages with subpages. To delete this page, " "delete all subpages first or ask an administrator " "to do it for you." ) )
def get_form_class(editor, request): src = Clipboard.from_session(request).get_object() if src and editor.action == 'paste': if src and src.trait in editor.page.allowed_subtraits: return editor.page.get_form_class(src.trait, request) return editor.page.get_form_class(editor.trait, request)
def handle_page_form(self, request, form): if self.action == 'new': return handle_new_page(self, request, form) elif self.action == 'edit': return handle_edit_page(self, request, form) elif self.action == 'paste': clipboard = Clipboard.from_session(request) src = clipboard.get_object() clipboard.clear() return handle_new_page(self, request, form, src) else: raise NotImplementedError
def test_clipboard(town_app): request = CoreRequest(environ={ 'PATH_INFO': '/', 'SERVER_NAME': '', 'SERVER_PORT': '', 'SERVER_PROTOCOL': 'https' }, app=town_app) clipboard = Clipboard.from_url(request, 'https://google.ch') assert clipboard.url == 'https://google.ch' clipboard.store_in_session() assert clipboard.from_session(clipboard.request).url == 'https://google.ch' clipboard.clear() assert clipboard.from_session(clipboard.request).url is None clipboard = Clipboard(request, clipboard.token + 'x') assert clipboard.url is None