Net-ng/kansha

View on GitHub
kansha/card_addons/comment/view.py

Summary

Maintainability
C
1 day
Test Coverage
# -*- coding:utf-8 -*-
#--
# Copyright (c) 2012-2014 Net-ng.
# All rights reserved.
#
# This software is licensed under the BSD License, as described in
# the file LICENSE.txt, which you should have received as part of
# this distribution.
#--
from nagare.i18n import _, _N, format_datetime
from nagare import ajax, presentation, security, var

from .comp import Comments, Comment, Commentlabel


@presentation.render_for(Comment)
@presentation.render_for(Comment, model='flow')
def render_comment(self, h, comp, model, *args):
    with h.div(class_='comment'):
        with h.div(class_='left'):
            h << self.author.render(h, model='avatar')
        with h.div(class_='right'):
            h << self.author.render(h, model='fullname')
            h << ' ' << _('wrote') << ' '
            h << h.span(
                _(u'on'), ' ',
                format_datetime(self.creation_date),
                class_="date")
            if security.has_permissions('delete_comment', self):
                onclick = (
                    u"if (confirm(%(message)s)){%(action)s;}return false" %
                    {
                        'action': h.a.action(
                            comp.answer, comp
                        ).get('onclick'),
                        'message': ajax.py2js(
                            _(u'Your comment will be deleted. Are you sure?')
                        ).decode('UTF-8')
                    }
                )
                h << h.a(h.i(class_='icon-cross'), title=_('Delete'),
                         class_="comment-delete", onclick=onclick, href='')
            h << self.comment_label.render(h.AsyncRenderer())
    return h.root


@presentation.render_for(Commentlabel)
def render_for_comment_label(self, h, comp, *args):
    """Render the text  of the associated comment

    """
    id_ = h.generate_id()
    with h.div(id=id_, class_='text'):
        a = h.div([h.p(part) if part else h.br for part in self.text.split('\n')])
        if security.has_permissions('edit_comment', self):
            with a:
                h << {'onclick': h.a.action(comp.answer).get('onclick')}
        h << a
    h << h.script("YAHOO.kansha.app.urlify($('#' + %s))" % ajax.py2js(id_))
    return h.root


@presentation.render_for(Commentlabel, model='edit')
def render_comment_label_form(self, h, comp, *args):
    """edit a comment """
    text = var.Var(self.text)
    with h.form:
        txt_id, buttons_id = h.generate_id(), h.generate_id()
        sub_id = h.generate_id()
        h << h.textarea(text(), class_='expanded', id_=txt_id).action(text)
        with h.div(class_='buttons', id=buttons_id):
            h << h.input(value=_("Save"), id=sub_id, type='submit',
                         class_="btn btn-primary").action(lambda: comp.answer(self.change_text(text())))
            h << ' '
            h << h.input(value=_("Cancel"), type='submit',
                         class_="btn").action(lambda: comp.answer(''))

    return h.root


@presentation.render_for(Comments, model='form')
def render_comments_form(self, h, comp, *args):
    """Add a comment to the current card"""
    if security.has_permissions('comment', self):
        text = var.Var()
        with h.form:
            txt_id, buttons_id = h.generate_id(), h.generate_id()
            sub_id = h.generate_id()
            kw = {
                "id": txt_id,
                "placeholder": _("Add comment."),
                "onfocus": "YAHOO.kansha.app.show('%s', true);YAHOO.util.Dom.addClass(this, 'expanded'); " % buttons_id,
            }
            h << h.textarea(**kw).action(text)
            h.head.javascript(
                h.generate_id(),
                'YAHOO.kansha.app.addCtrlEnterHandler(%s, %s)' % (
                    ajax.py2js(txt_id), ajax.py2js(sub_id)
                )
            )
            with h.div(id=buttons_id, class_="buttons hidden"):
                h << h.input(value=_("Save"), id=sub_id, type='submit',
                             class_="btn btn-primary").action(lambda: comp.answer(text()))
                h << ' '
                h << h.input(value=_("Cancel"), type='submit',
                             class_="btn").action(lambda: comp.answer(''))

    return h.root


@presentation.render_for(Comments, model='badge')
def render_comments_badge(self, h, *args):
    """Comment badge for the card"""
    num_comments = self.num_comments
    if num_comments:
        with h.span(class_='badge'):
            h << h.span(h.i(class_='icon-bubble2'), ' ', num_comments, class_='label')
    return h.root


@presentation.render_for(Comments)
def render(self, h, comp, *args):
    """Render card comments"""
    self.load_children()
    with h.div(class_='card-extension-comments'):
        h << h.div(comp.render(h, "badge"), class_='nbItems')
        h << comp.on_answer(self.add).render(h, 'form') << h.hr
        h << self.comments

    return h.root