Exemple #1
0
 def caption(self, project=None):
     if hasattr(self.caption, '__call__'):
         c = force_text(self.caption(project))
         if not c:
             c = humanize(force_text(self.name))
         return c
     else:
         if self.caption is None:
             return l_or_humanize(self.name, prefix='label_')
         else:
             return self.caption
Exemple #2
0
 def caption(self, project=None):
     if hasattr(self.caption, '__call__'):
         c = force_text(self.caption(project))
         if not c:
             c = humanize(force_text(self.name))
         return c
     else:
         if self.caption is None:
             return l_or_humanize(self.name, prefix='label_')
         else:
             return self.caption
Exemple #3
0
    def try_to_login(self, request, login, password, active_only=True):
        '''Returns the user that matches provided login and pwd, or None'''
        login = force_text(login)
        password = force_text(password)

        # Make sure no one can sign in with an empty login or password
        if not login or not password:
            return None

        user = auth.authenticate(login, password)
        if not user or (not user.active and active_only):
            return None
        auth.login(request, user)
        return user
Exemple #4
0
 def __init__(self, name, url, options):
     if options['if'] and not hasattr(options['if'], '__call__'):
         raise ValueError("Invalid option 'if' for menu item '#{name}'")
     if options['html'] and not isinstance(options['html'], dict):
         raise ValueError("Invalid option 'html' for menu item '#{name}'")
     if options['parent'] == name:
         raise ValueError("Cannot set the 'parent' to be the same"
                          " as this item")
     if options['children'] \
        and not hasattr(options['children'], '__call__'):
         raise ValueError("Invalid option 'children' for"
                          " menu item '#{name}'")
     self.name = name
     self.url = url
     self.condition = options['if']
     self.param = options['param'] or 'id'
     self.caption = options['caption']
     self.html_options = options['html'] or {}
     # Adds a unique class to each menu item based on its name
     self.html_options['class'] = ' '.join(
         set(filter(None,
             [self.html_options['class'], dasherize(force_text(self.name))]
         )))
     self.parent = options['parent']
     self.child_menus = options['children']
     self.last = options['last'] or False
     super(self, self.name)
    def set_home_view(self, request, object_id):
        page_content = self.get_object(request, object_id=unquote(object_id))

        if page_content is None:
            raise self._get_404_exception(object_id)

        page = page_content.page
        if not page.has_change_permission(request.user):
            raise PermissionDenied("You do not have permission to set 'home'.")

        if not page.is_potential_home():
            return HttpResponseBadRequest(
                force_text(_("The page is not eligible to be home.")))

        new_home_tree, old_home_tree = page.set_as_homepage(request.user)

        # Check if one of the affected pages either from the old homepage
        # or the homepage had an apphook attached
        if old_home_tree:
            apphooks_affected = old_home_tree.has_apphooks()
        else:
            apphooks_affected = False

        if not apphooks_affected:
            apphooks_affected = new_home_tree.has_apphooks()

        if apphooks_affected:
            # One or more pages affected by this operation was attached to an apphook.
            # As a result, fire the apphook reload signal to reload the url patterns.
            set_restart_trigger()

        info = (self.model._meta.app_label, self.model._meta.model_name)
        return HttpResponseRedirect(
            reverse("admin:{}_{}_changelist".format(*info)))
Exemple #6
0
 def __init__(self, name, url, options):
     if options['if'] and not hasattr(options['if'], '__call__'):
         raise ValueError("Invalid option 'if' for menu item '#{name}'")
     if options['html'] and not isinstance(options['html'], dict):
         raise ValueError("Invalid option 'html' for menu item '#{name}'")
     if options['parent'] == name:
         raise ValueError("Cannot set the 'parent' to be the same"
                          " as this item")
     if options['children'] \
        and not hasattr(options['children'], '__call__'):
         raise ValueError("Invalid option 'children' for"
                          " menu item '#{name}'")
     self.name = name
     self.url = url
     self.condition = options['if']
     self.param = options['param'] or 'id'
     self.caption = options['caption']
     self.html_options = options['html'] or {}
     # Adds a unique class to each menu item based on its name
     self.html_options['class'] = ' '.join(
         set(
             filter(None, [
                 self.html_options['class'],
                 dasherize(force_text(self.name))
             ])))
     self.parent = options['parent']
     self.child_menus = options['children']
     self.last = options['last'] or False
     super(self, self.name)
Exemple #7
0
    def render(self, name, value, attrs=None):

        if value is None:
            value = ''

        final_attrs = self.build_attrs(attrs, name=name)

        html = loader.render_to_string('sub_rst_hints.html')
        return format_html(html, flatatt(final_attrs), force_text(value))
Exemple #8
0
    def render(self, name, value, attrs=None, renderer=None):

        if value is None:
            value = ''

        final_attrs = self.build_attrs(attrs, {'name': name})

        html = loader.render_to_string('sub_rst_hints.html')
        return format_html(html, flatatt(final_attrs), force_text(value))
Exemple #9
0
 def strip_tags(string, replacement=""):
     """
     Returns the given HTML with all tags stripped.
     Based off of django.utils.html.strip_tags
     """
     try:
         # attempt to add space for removed html elements in django 1.5.1
         return django_html.strip_tags_re.replace(replacement, django_html.force_text(string))
     except:
         return django_html.strip_tags(string)
Exemple #10
0
 def __init__(self, name, value, attrs, choice, index):
     super(
         WizardOptionWidgets.WizardOptionRenderer.
         WizardOptionInput,
         self).__init__(name, value, attrs, choice, index)
     try:
         wizard = wizard_pool.get_entry(choice[0])
         self.label = force_text(choice[1])
         self.description = wizard.widget_attributes[
             'description']
     except (ValueError, KeyError):
         pass
Exemple #11
0
def rest_json(value, arg=None):
    """
    Renders a `ReturnDict` as used by the REST framework into a safe JSON string.
    """
    if isinstance(value, (dict, OrderedDict, list, tuple)):
        data = JSONRenderer().render(value)
    elif not value:
        data = '{}'
    else:
        msg = "Given value must be of type dict, OrderedDict, list or tuple but it is {}."
        raise ValueError(msg.format(value.__class__.__name__))
    return mark_safe(force_text(data))
Exemple #12
0
 def render(self, context):
     try:
         cart = CartModel.objects.get_from_request(context['request'])
         serializer = CartSerializer(instance=cart, context=context, label='dropdown', with_items=self.with_items)
         cart_data = JSONRenderer().render(serializer.data)
     except CartModel.DoesNotExist:
         cart_data = {'total_quantity': 0, 'num_items': 0}
     context.update({
         'cart_as_json': mark_safe(force_text(cart_data)),
         'has_dropdown': self.with_items != CartItems.without,
     })
     return self.get_template().render(context)
Exemple #13
0
def rest_json(value, arg=None):
    """
    Renders a `ReturnDict` as used by the REST framework into a safe JSON string.
    """
    if isinstance(value, (dict, OrderedDict, list, tuple)):
        data = JSONRenderer().render(value)
    elif not value:
        data = '{}'
    else:
        msg = "Given value must be of type dict, OrderedDict, list or tuple but it is {}."
        raise ValueError(msg.format(value.__class__.__name__))
    return mark_safe(force_text(data))
Exemple #14
0
 def render(self, context):
     try:
         cart = CartModel.objects.get_from_request(context['request'])
         serializer = CartSerializer(instance=cart,
                                     context=context,
                                     label='dropdown',
                                     with_items=self.with_items)
         cart_data = JSONRenderer().render(serializer.data)
     except CartModel.DoesNotExist:
         cart_data = {'total_quantity': 0, 'num_items': 0}
     context.update({
         'cart_as_json': mark_safe(force_text(cart_data)),
         'has_dropdown': self.with_items != CartItems.without,
     })
     return self.get_template().render(context)
 def render(self, name, value, attrs=None):
     if value is None:
         value = ''
     input_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
     span_attrs = {}
     if value != '':
         # Only add the 'value' attribute if a value is non-empty.
         input_attrs['value'] = force_text(self._format_value(value))
     if 'spinner_bind' in self.attrs:
         input_attrs['data-bind'] = self.attrs['spinner_bind']
         del input_attrs['spinner_bind']
     if 'spinner_message' in self.attrs:
         span_attrs['data-bind'] = self.attrs['spinner_message']
     input_part = '<input{0} />'.format(flatatt(input_attrs))
     span_part = '<span class="spinner-message" {0}></span>'.format(flatatt(span_attrs))
     return mark_safe('<div>' + input_part + '<br/>' + span_part +'</div>')
Exemple #16
0
 def render(self, name, value, attrs=None):
     if value is None:
         value = ''
     final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
     if value != '':
         # Only add the 'value' attribute if a value is non-empty.
         final_attrs['value'] = force_text(self._format_value(value))
     output = """
         <div class="input-group date">
             <input{0} />
             <span class="input-group-addon">
                 <i class="fa fa-calendar"></i>
             </span>
         </div>
     """
     return format_html(output, flatatt(final_attrs))
Exemple #17
0
    def render(self, name, value, attrs=None):
        if value is None:
            value = ''
        final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
        if value != '':
            # Only add the 'value' attribute if a value is non-empty.
            final_attrs['value'] = force_text(self._format_value(value))

        t = "<input id='" + name + "-sp' style='position:relative;left: 5px;width: 80px;' maxlength='7' value='" + \
            value + "' />"
        js_script = "<script type='text/javascript'>"
        js_script = js_script + "document.getElementsByName('" + name + "')[0]" \
                                ".addEventListener('input', function(e){ " \
                                "document.getElementById('" + name + "-sp').value = this.value; });"
        js_script = js_script + "document.getElementById('" + name + "-sp')" \
                                ".addEventListener('input', function(e){ console.log(this.value); " \
                                "document.getElementsByName('" + name + "')[0].value = this.value; });</script>"
        html = format_html('<input{0} style="width:65px;"/>' + t, flatatt(final_attrs)) + SafeText(js_script)
        return html
Exemple #18
0
def link_to(title, url, attrs):
    final_attrs = {'href': mark_safe(smart_urlquote(url))}
    if attrs:
        final_attrs.update(attrs)
    return format_html('<a {1}>{0}</a>', force_text(title),
                       flatatt(final_attrs))
Exemple #19
0
def strip_entities(value):
    """Return the given HTML with all entities (&something;) stripped."""
    # Note: Originally in Django but removed in v1.10
    return re.sub(r'&(?:\w+|#\d+);', '', html.force_text(value))
Exemple #20
0
 def render_basic(self, value):
     return format_html_join(
         '\n', '<div class="{1}">{0}</div>',
         [(force_text(child), child.block_type != 'full_width_container'
           and 'block-%s block' % child.block_type or '')
          for child in value])
Exemple #21
0
    def render(self, name, value, attrs=None):

        if value is None:
            value = ''

        final_attrs = self.build_attrs(attrs, name=name)

        return format_html(
            '''
            <ul class="nav nav-tabs">
                <li class="active"><a data-toggle="tab" href="#rst_src"><span class="glyphicon glyphicon-edit"></span> Редактирование</a></li>
                <li><a data-toggle="tab" href="#rst_preview" id="preview_rst" class="xross" data-xevent="click" data-xmethod="POST" data-xtarget="rst_preview" data-xform="edit_form"><span class="glyphicon glyphicon-eye-open"></span> Предпросмотр</a></li>
                <li><a data-toggle="tab" href="#rst_help"><span class="glyphicon glyphicon-question-sign"></span> Справка</a></li>
            </ul>
            <div class="tab-content">
                <div id="rst_src" class="marg__t_min tab-pane fade in active">
                    <textarea{0}>\r\n{1}</textarea>
                </div>
                <div id="rst_preview" class="marg__t_min tab-pane fade"></div>
                <div id="rst_help" class="marg__t_min tab-pane fade">

                    <div class="marg__b_mid">
                        <strong>Строки</strong>
                        <div>
                            Перевод строки трактуется как начало нового параграфа.
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Ссылки</strong>
                        <div>
                            Ссылки на внешние ресурсы, начинающиеся с <i>http</i> форматируются автоматически.<br>
                            Можно скрыть ссылку под именем, используя следующий код:<br><br>
                            <pre><code class="nohighlight">Вставка ссылки `под именем&lt;http://pythonz.net/&gt;`_.</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Начертание</strong>
                        <div>
                            Для выделения слова или фразы <b>полужирным</b> используйте обрамление в двойные звёзды:<br><br>
                            <pre><code class="nohighlight">Выделение **полужирным**.</code></pre>

                            Для выделения слова или фразы <i>курсивом</i> используйте обрамление в звёзды:<br><br>
                            <pre><code class="nohighlight">Выделение *курсивом*.</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Акцентирование</strong>
                        <div>
                            Слово или фразу можно <code>акцентировать</code> путём обрамления в двойные апострофы:<br><br>
                            <pre><code class="nohighlight">Выделение ``акцентом``.</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Цитаты</strong>
                        <div>
                            Для оформления цитаты, обрамите её в тройные апострофы:<br><br>
<pre><code class="nohighlight">```
Это цитата.
```</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Исходный код</strong>
                        <div>
                            Подсветка синтаксиса реализуется путём выделения кода в отдельный параграф, начинающийся с инструкции <b>.. code:: имя_языка</b>,
                            где <i>имя_языка</i> &mdash; название языка программирования, например <i>python</i>:<br><br>

<pre><code class="nohighlight">Некий текст.

.. code:: python

    def my_function():
        "just a test"
        print 8/2


И снова текст.</code></pre>
                            * Обратите внимание на необходимость наличия двойного переноса строки после блока кода.
                        </div>
                    </div>


                    <div class="marg__b_mid">
                        <strong>Gist от GitHub</strong>
                        <div>
                            Гисты могут быть вставлены в текст при помощи директивы <b>.. gist:: гитхаб_логин/ид_гиста</b>,
                            где <i>гитхаб_логин</i> &mdash; логин на GitHub, а <i>ид_гиста</i> &mdash; идентификатор гиста.<br>
                            Например, добавим гист с адреса <a href="https://gist.github.com/idlesign/c1255817bb0234d9971a">https://gist.github.com/idlesign/c1255817bb0234d9971a</a>:<br><br>
                            <pre><code class="nohighlight">.. gist:: idlesign/c1255817bb0234d9971a</code></pre>
                            * Обратите внимание на необходимость наличия переноса строки после блока кода.<br>
                            ** Гисты можно создавать по адресу <a href="https://gist.github.com/" target="_blank">https://gist.github.com/</a>
                        </div>
                    </div>


                </div>
            </div>
            ''', flatatt(final_attrs), force_text(value))
Exemple #22
0
def strip_entities(value):
    """Return the given HTML with all entities (&something;) stripped."""
    # Note: Originally in Django but removed in v1.10
    return re.sub(r'&(?:\w+|#\d+);', '', html.force_text(value))
Exemple #23
0
    def render(self, name, value, attrs=None):

        if value is None:
            value = ''

        final_attrs = self.build_attrs(attrs, name=name)

        return format_html('''
            <ul class="nav nav-tabs">
                <li class="active"><a data-toggle="tab" href="#rst_src"><span class="glyphicon glyphicon-edit"></span> Редактирование</a></li>
                <li><a data-toggle="tab" href="#rst_preview" id="preview_rst" class="xross" data-xevent="click" data-xmethod="POST" data-xtarget="rst_preview" data-xform="edit_form"><span class="glyphicon glyphicon-eye-open"></span> Предпросмотр</a></li>
                <li><a data-toggle="tab" href="#rst_help"><span class="glyphicon glyphicon-question-sign"></span> Справка</a></li>
            </ul>
            <div class="tab-content">
                <div id="rst_src" class="marg__t_min tab-pane fade in active">
                    <textarea{0}>\r\n{1}</textarea>
                </div>
                <div id="rst_preview" class="marg__t_min tab-pane fade"></div>
                <div id="rst_help" class="marg__t_min tab-pane fade">

                    <div class="marg__b_mid">
                        <strong>Строки</strong>
                        <div>
                            Перевод строки трактуется как начало нового параграфа.
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Ссылки</strong>
                        <div>
                            Ссылки на внешние ресурсы, начинающиеся с <i>http</i> форматируются автоматически.<br>
                            Можно скрыть ссылку под именем, используя следующий код:<br><br>
                            <pre><code class="nohighlight">Вставка ссылки `под именем&lt;http://pythonz.net/&gt;`_.</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Начертание</strong>
                        <div>
                            Для выделения слова или фразы <b>полужирным</b> используйте обрамление в двойные звёзды:<br><br>
                            <pre><code class="nohighlight">Выделение **полужирным**.</code></pre>

                            Для выделения слова или фразы <i>курсивом</i> используйте обрамление в звёзды:<br><br>
                            <pre><code class="nohighlight">Выделение *курсивом*.</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Акцентирование</strong>
                        <div>
                            Слово или фразу можно <code>акцентировать</code> путём обрамления в двойные апострофы:<br><br>
                            <pre><code class="nohighlight">Выделение ``акцентом``.</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Цитаты</strong>
                        <div>
                            Для оформления цитаты, обрамите её в тройные апострофы:<br><br>
<pre><code class="nohighlight">```
Это цитата.
```</code></pre>
                        </div>
                    </div>

                    <div class="marg__b_mid">
                        <strong>Исходный код</strong>
                        <div>
                            Подсветка синтаксиса реализуется путём выделения кода в отдельный параграф, начинающийся с инструкции <b>.. code:: имя_языка</b>,
                            где <i>имя_языка</i> &mdash; название языка программирования, например <i>python</i>:<br><br>

<pre><code class="nohighlight">Некий текст.

.. code:: python

    def my_function():
        "just a test"
        print 8/2


И снова текст.</code></pre>
                            * Обратите внимание на необходимость наличия двойного переноса строки после блока кода.
                        </div>
                    </div>


                    <div class="marg__b_mid">
                        <strong>Gist от GitHub</strong>
                        <div>
                            Гисты могут быть вставлены в текст при помощи директивы <b>.. gist:: гитхаб_логин/ид_гиста</b>,
                            где <i>гитхаб_логин</i> &mdash; логин на GitHub, а <i>ид_гиста</i> &mdash; идентификатор гиста.<br>
                            Например, добавим гист с адреса <a href="https://gist.github.com/idlesign/c1255817bb0234d9971a">https://gist.github.com/idlesign/c1255817bb0234d9971a</a>:<br><br>
                            <pre><code class="nohighlight">.. gist:: idlesign/c1255817bb0234d9971a</code></pre>
                            * Обратите внимание на необходимость наличия переноса строки после блока кода.<br>
                            ** Гисты можно создавать по адресу <a href="https://gist.github.com/" target="_blank">https://gist.github.com/</a>
                        </div>
                    </div>


                </div>
            </div>
            ''', flatatt(final_attrs), force_text(value))