示例#1
0
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
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
文件: views.py 项目: BIGGANI/PyLucid
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)
示例#5
0
    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
示例#6
0
文件: views.py 项目: xuanxu11/PyLucid
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)
示例#7
0
文件: views.py 项目: BIGGANI/PyLucid
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)
示例#8
0
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)
示例#9
0
文件: views.py 项目: xuanxu11/PyLucid
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))
示例#10
0
文件: views.py 项目: BIGGANI/PyLucid
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)
    )
示例#11
0
    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
示例#12
0
文件: views.py 项目: BIGGANI/PyLucid
            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)
示例#13
0
                        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()))
示例#14
0
                        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([
示例#15
0
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
示例#16
0
                        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.
示例#17
0
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