def _render(request, content, path_or_url, markup, highlight, strip_html): markup_no = None if markup: if markup not in MARKUPS: return _error(request, "Include error.", "Can't include: Unknown markup %r (Available: %s)" % (markup, ", ".join(MARKUPS.keys())) ) markup_no = MARKUPS[markup] if markup_no: content = apply_markup(content, markup_no, request, escape_django_tags=False) # xxx: escape_django_tags if highlight == True: highlight = "html" if highlight == True: highlight = os.path.splitext(path_or_url)[1] if highlight is not None: content = make_html(content, highlight) if not (markup_no or highlight): if strip_html: content = strip_tags(content) content = escape(content) return content
def get_html(self): """ return the marker_text as html """ request = ThreadLocal.get_current_request() html = apply_markup( raw_content=self.marker_text, markup_no=self.markup, request=request ) # Needed for JavaScript: html = html.strip().replace("\n", "").replace('"', '\"') return mark_safe(html)
def _edit_page_preview(request): """ AJAX preview """ if request.method != 'POST': return HttpResponse("ERROR: Wrong request") edit_page_form = EditPageForm(request.POST) if not edit_page_form.is_valid(): return HttpResponse("ERROR: Form not valid: %r" % edit_page_form.errors) content = edit_page_form.cleaned_data["content"] pagemeta, pagecontent = _get_pageobjects(request) raw_content = edit_page_form.cleaned_data["content"] html_content = apply_markup(raw_content, pagecontent.markup, request, escape_django_tags=True) return HttpResponse(html_content)
def get_html(self, request=None, escape_django_tags=False, render_django_tags=False): """ return self.content rendered as html: 1. apply markup 2. parse lucidTags/django template tags """ if request is None: # e.g. called from template request = get_current_request() content1 = apply_markup(self.content, self.markup, request, escape_django_tags=escape_django_tags) if not render_django_tags: return content1 else: context = request.PYLUCID.context content2 = render.render_string_template(content1, context) return content2
def markup_preview(request): """ markup preview AJAX view. """ if not request.user.is_authenticated(): raise PermissionDenied() if not request.is_ajax() or request.method != 'POST': raise SuspiciousOperation() form = MarkupPreviewForm(request.POST) if not form.is_valid(): return HttpResponse("Error: Form not valid: %r" % form.errors) content = form.cleaned_data["content"] markup = form.cleaned_data["markup"] html = apply_markup(content, markup, request, escape_django_tags=True) return HttpResponse(html)
def _edit_page(request, form_url): pagetree = request.PYLUCID.pagetree if pagetree.page_type != PageTree.PAGE_TYPE: messages.info(request, "Current page is not a content page.") return pagemeta, pagecontent = _get_pageobjects(request) preview_html = "" if request.method == 'POST': edit_page_form = EditPageForm(request.POST) if edit_page_form.is_valid(): if "preview" in request.POST: raw_content = edit_page_form.cleaned_data["content"] preview_html = apply_markup(raw_content, pagecontent.markup, request, escape_django_tags=True) else: new_content = edit_page_form.cleaned_data["content"] pagecontent.content = new_content pagecontent.save() messages.success(request, _("Page content updated.")) return HttpResponseRedirect(request.path) else: edit_page_form = EditPageForm(initial={"content": pagecontent.content}) context = { "form_url": form_url, "abort_url": request.path, "preview_url": "%s?page_admin=preview" % request.path, "preview_html": preview_html, "edit_page_form": edit_page_form, "pagecontent": pagecontent, "pagemeta": pagemeta, } return render_pylucid_response(request, 'page_admin/edit_inline_form.html', context, context_instance=RequestContext(request))
def _edit_page(request, form_url): pagetree = request.PYLUCID.pagetree if pagetree.page_type != PageTree.PAGE_TYPE: messages.info(request, "Current page is not a content page.") return pagemeta, pagecontent = _get_pageobjects(request) preview_html = "" if request.method == 'POST': edit_page_form = EditPageForm(request.POST) if edit_page_form.is_valid(): if "preview" in request.POST: raw_content = edit_page_form.cleaned_data["content"] preview_html = apply_markup( raw_content, pagecontent.markup, request, escape_django_tags=True ) else: new_content = edit_page_form.cleaned_data["content"] pagecontent.content = new_content pagecontent.save() messages.success(request, _("Page content updated.")) return HttpResponseRedirect(request.path) else: edit_page_form = EditPageForm(initial={"content":pagecontent.content}) context = { "form_url": form_url, "abort_url": request.path, "preview_url": "%s?page_admin=preview" % request.path, "preview_html": preview_html, "edit_page_form": edit_page_form, "pagecontent": pagecontent, "pagemeta": pagemeta, } return render_pylucid_response(request, 'page_admin/edit_inline_form.html', context, context_instance=RequestContext(request) )
return page_plugin_response elif isinstance(page_plugin_response, basestring): # Plugin replace the page content context["page_content"] = page_plugin_response elif page_plugin_response is not None: # Use plugin response raise TypeError( "Plugin view must return None or basestring or HttpResponse! (returned: %r)" ) % type(page_plugin_response) if context["page_content"] is None: # Plugin has not filled the page content pagecontent_instance = _get_page_content(request) request.PYLUCID.pagecontent = request.PYLUCID.updateinfo_object = pagecontent_instance context["page_content"] = apply_markup( pagecontent_instance.content, pagecontent_instance.markup, request ) # put update information into context for itemname in ("createby", "lastupdateby", "createtime", "lastupdatetime"): context["page_%s" % itemname] = getattr(request.PYLUCID.updateinfo_object, itemname, None) # Render django tags in PageContent with the global context context["page_content"] = render.render_string_template(context["page_content"], context) template_name = context["template_name"] # Added in pylucid.context_processors page_template= loader.get_template(template_name) pre_render_global_template.send(sender=None, request=request, page_template=page_template) # Render django tags in global template with global context complete_page = page_template.render(context)
example.startswith("{%% lucidTag %s " % plugin_name) or \ example.startswith("{%% lucidTag %s." % plugin_name) ): messages.info(request, _("Info: lucidTag %(plugin_name)s has wrong tag example: %(example)r") % { "plugin_name": plugin_name, "example": example } ) examples = [escape(example) for example in examples] lucidtag_doc = lucidtag_doc.split("example:", 1)[0].strip() lucidtag_doc = unicode(lucidtag_doc) doc = apply_markup(lucidtag_doc, markup_no=MARKUP_CREOLE, request=request, escape_django_tags=True ) if not examples: # No DocString or it contains no examples -> generate a example fallback_example = escape("{%% lucidTag %s %%}" % plugin_name) lucid_tags.append({ "plugin_name": plugin_name.replace("_", " "), "fallback_example": fallback_example, "examples": examples, "doc": doc, }) # Sort by plugin name case-insensitive lucid_tags.sort(cmp=lambda x, y: cmp(x["plugin_name"].lower(), y["plugin_name"].lower()))
raise else: transaction.savepoint_commit(sid) messages.info( request, _("Content page %r updated.") % pagecontent) return http.HttpResponseRedirect( pagecontent.get_absolute_url()) # preview markup convert: context["new_markup"] = new_markup converted_html = converter.apply_markup( new_markup, dest_markup_no, request, escape_django_tags=True) context["converted_html"] = converted_html if cleaned_data["verbose"]: context["original_markup"] = original_markup orig_html = converter.apply_markup(original_markup, pagecontent.markup, request, escape_django_tags=True) context["orig_html"] = orig_html def strip_whitespace(html): return "\n".join([
def render_page(request, url_lang_code, url_path): """ render a PageContent page """ path_info = request.PYLUCID.path_info pagetree = request.PYLUCID.pagetree pagemeta = request.PYLUCID.pagemeta # Should never happen, because all Plugin Pages should be catched # in url.py before assert pagetree.page_type == PageTree.PAGE_TYPE url_lang_code = path_info.url_lang_code # Check the language code in the url, if exist if url_lang_code.lower() != pagemeta.language.code.lower(): # The language code in the url is wrong. e.g.: The client followed a external url with was wrong. # Note: The main_manu doesn't show links to not existing PageMeta entries! # change only the lang code in the url: new_url = i18n.change_url(request, new_lang_code=pagemeta.language.code) if settings.DEBUG or settings.PYLUCID.I18N_DEBUG: messages.error(request, "Language code in url %r is wrong! Redirect to %r." % (url_lang_code, new_url) ) # redirect the client to the right url return http.HttpResponsePermanentRedirect(new_url) # Create initial context object context = request.PYLUCID.context = RequestContext(request) # it will be filled either by plugin or by PageContent: context["page_content"] = None # call a pylucid plugin "html get view", if exist get_view_response = PYLUCID_PLUGINS.call_get_views(request) if isinstance(get_view_response, http.HttpResponse): # Plugin would be build the complete html page return get_view_response elif isinstance(get_view_response, basestring): # Plugin replace the page content context["page_content"] = get_view_response elif get_view_response is not None: # Use plugin response raise # Should never happen here, because PYLUCID_PLUGINS.call_get_views() should raise before if context["page_content"] is None: # Plugin has not filled the page content pagecontent_instance = _get_page_content(request) request.PYLUCID.pagecontent = request.PYLUCID.updateinfo_object = pagecontent_instance context["page_content"] = apply_markup( pagecontent_instance.content, pagecontent_instance.markup, request ) # put update information into context for itemname in ("createby", "lastupdateby", "createtime", "lastupdatetime"): context["page_%s" % itemname] = getattr(request.PYLUCID.updateinfo_object, itemname, None) # Render django tags in PageContent with the global context context["page_content"] = render.render_string_template(context["page_content"], context) template_name = context["base_template_name"] # Added in pylucid.context_processors page_template = loader.get_template(template_name) pre_render_global_template.send(sender=None, request=request, page_template=page_template) # Render django tags in global template with global context complete_page = page_template.render(context) # create response object response = http.HttpResponse(complete_page, mimetype="text/html") response["content-language"] = context["page_language"] return response
pagecontent.markup = dest_markup_no pagecontent.save() except: transaction.savepoint_rollback(sid) raise else: transaction.savepoint_commit(sid) messages.info(request, _("Content page %r updated.") % pagecontent) return http.HttpResponseRedirect(pagecontent.get_absolute_url()) # preview markup convert: context["new_markup"] = new_markup converted_html = converter.apply_markup( new_markup, dest_markup_no, request, escape_django_tags=True ) context["converted_html"] = converted_html if cleaned_data["verbose"]: context["original_markup"] = original_markup orig_html = converter.apply_markup( original_markup, pagecontent.markup, request, escape_django_tags=True ) context["orig_html"] = orig_html def strip_whitespace(html): return "\n".join([line.strip() for line in html.splitlines() if line.strip()]) # Remove whitespace from html code.
def render_page(request, url_lang_code, url_path): """ render a PageContent page """ path_info = request.PYLUCID.path_info pagetree = request.PYLUCID.pagetree pagemeta = request.PYLUCID.pagemeta # Should never happen, because all Plugin Pages should be catched # in url.py before assert pagetree.page_type == PageTree.PAGE_TYPE url_lang_code = path_info.url_lang_code # Check the language code in the url, if exist if url_lang_code.lower() != pagemeta.language.code.lower(): # The language code in the url is wrong. e.g.: The client followed a external url with was wrong. # Note: The main_manu doesn't show links to not existing PageMeta entries! # change only the lang code in the url: new_url = i18n.change_url(request, new_lang_code=pagemeta.language.code) if settings.DEBUG or settings.PYLUCID.I18N_DEBUG: messages.error( request, "Language code in url %r is wrong! Redirect to %r." % (url_lang_code, new_url)) # redirect the client to the right url return http.HttpResponsePermanentRedirect(new_url) # Create initial context object context = request.PYLUCID.context = RequestContext(request) # it will be filled either by plugin or by PageContent: context["page_content"] = None # call a pylucid plugin "html get view", if exist get_view_response = PYLUCID_PLUGINS.call_get_views(request) if isinstance(get_view_response, http.HttpResponse): # Plugin would be build the complete html page return get_view_response elif isinstance(get_view_response, basestring): # Plugin replace the page content context["page_content"] = get_view_response elif get_view_response is not None: # Use plugin response raise # Should never happen here, because PYLUCID_PLUGINS.call_get_views() should raise before if context["page_content"] is None: # Plugin has not filled the page content pagecontent_instance = _get_page_content(request) request.PYLUCID.pagecontent = request.PYLUCID.updateinfo_object = pagecontent_instance context["page_content"] = apply_markup(pagecontent_instance.content, pagecontent_instance.markup, request) # put update information into context for itemname in ("createby", "lastupdateby", "createtime", "lastupdatetime"): context["page_%s" % itemname] = getattr( request.PYLUCID.updateinfo_object, itemname, None) # Render django tags in PageContent with the global context context["page_content"] = render.render_string_template( context["page_content"], context) template_name = context[ "base_template_name"] # Added in pylucid.context_processors page_template = loader.get_template(template_name) pre_render_global_template.send(sender=None, request=request, page_template=page_template) # Render django tags in global template with global context complete_page = page_template.render(context) # create response object response = http.HttpResponse(complete_page, mimetype="text/html") response["content-language"] = context["page_language"] return response