Changeset 514

Show
Ignore:
Timestamp:
08/07/07 00:34:46 (1 year ago)
Author:
brian
Message:

sweet accounts selection working - now for functionality

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pagoda/trunk/Pagoda/pagoda/controllers/admin.py

    r509 r514  
    128128            expiring_revisions.append((schedule_time, 1, content)) 
    129129         
     130        scheduled_revisions = releasing_revisions + expiring_revisions 
     131        scheduled_revisions.sort() 
     132         
     133        pending_count = len(pending_revisions) 
     134        releasing_count = len(releasing_revisions) 
     135        expiring_count = len(expiring_revisions) 
     136        scheduled_count = len(scheduled_revisions) 
     137         
    130138        return dict( 
    131139            pending_revisions=pending_revisions, 
    132140            releasing_revisions=releasing_revisions, 
    133             expiring_revisions=expiring_revisions 
     141            expiring_revisions=expiring_revisions, 
     142            scheduled_revisions=scheduled_revisions, 
     143            pending_count=pending_count, releasing_count=releasing_count, 
     144            expiring_count=expiring_count, scheduled_count=scheduled_count 
    134145        ) 
    135146     
     
    222233     
    223234    @expose(template="genshi:pagoda.templates.admin.accounts", format="html") 
    224     @include_widgets('pagoda.widgets.admin.admin_base') 
    225     def index(self, *args, **kwargs): 
    226         return dict() 
     235    @include_widgets('pagoda.widgets.admin.accounts_base') 
     236    def index(self, *args, **kwargs): 
     237        users = models.User.query().order_by('user_name') 
     238        groups = models.Group.query().order_by('group_name') 
     239        permissions = models.Permission.query().order_by('permission_name') 
     240        return dict(users=users, groups=groups, permissions=permissions) 
    227241 
    228242class PlaceholdersController(Controller): 
  • pagoda/trunk/Pagoda/pagoda/models/revision_mapper.py

    r506 r514  
    253253    else: 
    254254        extension = RevisionableMapperExtension() 
    255         extensions.append(extension) 
     255        extensions.append(extension) # XXX: Testing! 
    256256    kwargs['extension'] = extensions 
    257257     
  • pagoda/trunk/Pagoda/pagoda/templates/admin/accounts.html

    r417 r514  
    1919 
    2020<div id="body"> 
     21    <div id="columns"> 
     22        <form id="users" name="users" class="column"> 
     23            <h2>Users</h2> 
     24            <p class="actions-all"></p> 
     25            <ul> 
     26                <li py:for="i, user in enumerate(users)" class="${pagoda.util.even_odd(i)}"> 
     27                    <h3 class="title"><a href="#" title="${user.display_name}">${user.user_name}</a></h3> 
     28                    <button type="button" class="expand">Details</button> 
     29                    <input type="hidden" name="user_id" value="${user.user_id}"/> 
     30                    <input type="hidden" name="group_ids" value="${pagoda.util.id_list([group.group_id for group in user.groups])}"/> 
     31                    <input type="hidden" name="permission_ids" value="${pagoda.util.id_list([permission.permission_id for permission in user.permissions])}"/> 
     32                </li> 
     33            </ul> 
     34        </form> 
     35     
     36        <form id="permissions" name="permissions" class="column"> 
     37            <h2>Permissions</h2> 
     38            <p class="actions-all"></p> 
     39            <ul> 
     40                <li py:for="i, permission in enumerate(permissions)" class="${pagoda.util.even_odd(i)}"> 
     41                    <h3 class="title"><a href="#" title="${permission.description}">${permission.permission_name}</a></h3> 
     42                    <button type="button" class="expand">Details</button> 
     43                    <input type="hidden" name="permission_id" value="${permission.permission_id}"/> 
     44                    <input type="hidden" name="user_ids" value="${pagoda.util.id_list([user.user_id for group in permission.groups for user in group.users])}"/> 
     45                    <input type="hidden" name="group_ids" value="${pagoda.util.id_list([group.group_id for group in permission.groups])}"/> 
     46                </li> 
     47            </ul> 
     48        </form> 
     49 
     50        <form id="groups" name="groups" class="column"> 
     51            <h2>Groups</h2> 
     52            <p class="actions-all"></p> 
     53            <ul> 
     54                <li py:for="i, group in enumerate(groups)" class="${pagoda.util.even_odd(i)}"> 
     55                    <h3 class="title"><a href="#" title="${group.display_name}">${group.group_name}</a></h3> 
     56                    <button type="button" class="expand">Details</button> 
     57                    <input type="hidden" name="group_id" value="${group.group_id}"/> 
     58                    <input type="hidden" name="user_ids" value="${pagoda.util.id_list([user.user_id for user in group.users])}"/> 
     59                    <input type="hidden" name="permission_ids" value="${pagoda.util.id_list([permission.permission_id for permission in group.permissions])}"/> 
     60                </li> 
     61            </ul> 
     62        </form> 
     63        <br clear="all"/> 
     64    </div> 
    2165</div> 
    2266 
  • pagoda/trunk/Pagoda/pagoda/templates/admin/schedule.html

    r490 r514  
    1616 
    1717<div id="body"> 
    18     <form id="pending" name="pending" action="pending" method="POST" class="schedule" 
    19           py:with="pending_count = len(pending_revisions)"> 
     18    <form id="pending" name="pending" action="pending" method="POST" class="schedule"> 
    2019        <h2>Pending Changes</h2> 
    2120        <p class="help"> 
     
    3837            <py:for each="date, revisions in pagoda.util.groupby(enumerate(pending_revisions), lambda t: t[1].revision_time.date())"> 
    3938                <div class="date-group">${pagoda.dates.short_date(date)}</div> 
    40                 <li py:for="i, revision in revisions" class="${i % 2 and 'odd' or 'even'}" 
     39                <li py:for="i, revision in revisions" class="${pagoda.util.even_odd(i)}" 
    4140                    py:with="schedule = bool(revision.revision_release_time and revision.revision_release_time >= pagoda.now)"> 
    42                     <a class="title" title="Click to preview &bull; ${revision.title}" href="${tg.url('/content/live/%s/%s/' % (revision.content_type, revision.revision_id))}"> 
     41                    <h3 class="title"><a title="Click to preview &bull; ${revision.title}" href="${tg.url('/content/live/%s/%s/' % (revision.content_type, revision.revision_id))}"> 
    4342                        ${revision.title or "%s %d, revision %d" % (revision.content_type.title(), revision.content_id, revision.revision_id)} 
    44                     </a> 
     43                    </a></h3> 
    4544                    <p class="status"> 
    4645                        awaiting approval for 
     
    7473        </ul> 
    7574    </form> 
    76     <form id="scheduled" name="scheduled" action="scheduled" method="POST" class="schedule" 
    77           py:with="scheduled_revisions = pagoda.util.sorted(releasing_revisions + expiring_revisions); 
    78                    releasing_count = len(releasing_revisions); 
    79                    expiring_count = len(expiring_revisions); 
    80                    scheduled_count = len(scheduled_revisions)"> 
     75    <form id="scheduled" name="scheduled" action="scheduled" method="POST" class="schedule"> 
    8176        <h2>Scheduled Content</h2> 
    8277        <p class="help"> 
     
    10196                <div class="date-group">${pagoda.dates.short_date(date)}</div> 
    10297                <li py:for="i, (schedule_time, is_expiration, revision) in revisions" 
    103                     class="${i % 2 and 'odd' or 'even'} ${is_expiration and 'expire' or 'release'}"> 
    104                     <a class="title" href="${tg.url('/content/live/%s/%s/' % (revision.content_type, revision.revision_id))}"> 
     98                    class="${pagoda.util.even_odd(i)} ${is_expiration and 'expire' or 'release'}"> 
     99                    <h3 class="title"><a href="${tg.url('/content/live/%s/%s/' % (revision.content_type, revision.revision_id))}"> 
    105100                        ${revision.title} 
    106                     </a> 
     101                    </a></h3> 
    107102                    <p class="status" py:choose="is_expiration"> 
    108103                        <span py:when="0" py:strip=""> 
  • pagoda/trunk/Pagoda/pagoda/view/util.py

    r475 r514  
    2121            seq.reverse() 
    2222        return seq 
     23 
     24def even_odd(i, even='even', odd='odd'): 
     25    return i % 2 and odd or even 
     26 
     27def id_list(seq): 
     28    return " ".join(map(str, seq)) 
  • pagoda/trunk/Pagoda/pagoda/widgets/admin/static/css/accounts.css

    r417 r514  
     1#body { 
     2    border-bottom: 5px solid #3465a4; 
     3    padding: 2em; 
     4} 
     5 
     6#columns { 
     7    width: 50em; 
     8    margin: 0 auto; 
     9    padding: 2em; 
     10    background: #fff; 
     11    border: 1px solid #bbb; 
     12} 
     13 
     14.column { 
     15 
     16} 
     17 
     18.column ul { 
     19    margin-top: 0.25em; 
     20    border-top: 1px dotted #999; 
     21    border-bottom: 1px dotted #999; 
     22} 
     23 
     24.column li { 
     25    text-align: left; 
     26    background-color: #ecf9fe; 
     27    padding-bottom: 0.25em; 
     28} 
     29 
     30.column li.odd { 
     31    background: #dcf2fa; 
     32} 
     33 
     34.column li .title a { 
     35    display: block; 
     36    padding: 0 0.5em; 
     37} 
     38 
     39.column li .title a:hover { 
     40    font-weight: bold; 
     41} 
     42 
     43.column li.selected { 
     44    background: #3465a4 url('../images/tab-active.png') repeat-x left top; 
     45} 
     46 
     47.column li.selected .title a { 
     48    color: #fff; 
     49    text-decoration: none; 
     50} 
     51 
     52.column li.selected button.expand { 
     53    color: #def; 
     54} 
     55 
     56.column li h3 { 
     57    font-size: 108%; 
     58} 
     59 
     60.column li .title { 
     61    font-weight: normal; 
     62    color: #345; 
     63    text-align: left; 
     64} 
     65 
     66.column li.active .title, 
     67.column li.selected .title { 
     68    font-weight: bold; 
     69} 
     70 
     71.column li .details { 
     72    color: #6c8186; 
     73    text-align: right; 
     74    line-height: 160%; 
     75} 
     76 
     77.column li button.expand { 
     78    margin: 1px 0.75em 0 0.75em; 
     79    font-size: 85%; 
     80    color: #6c8186; 
     81    display: block; 
     82    background: transparent url('../images/arrow-list-small-right.png') no-repeat left 54%; 
     83    padding-left: 0.75em; 
     84    cursor: pointer; 
     85} 
     86 
     87#users { 
     88    float: left; 
     89    width: 31%; 
     90} 
     91 
     92#groups { 
     93    width: 32%; 
     94    margin: 0 auto; 
     95} 
     96 
     97#permissions { 
     98    float: right; 
     99    width: 31%; 
     100} 
  • pagoda/trunk/Pagoda/pagoda/widgets/admin/static/css/schedule.css

    r492 r514  
    5959} 
    6060 
    61 .schedule ul li { 
     61.schedule li { 
    6262    text-align: right; 
    6363    padding: 0.5em; 
     
    6565} 
    6666 
    67 .schedule ul li.odd { 
     67.schedule li.odd { 
    6868    background: #dcf2fa; 
    6969} 
    7070 
    71 .schedule ul li.empty { 
     71.schedule li.empty { 
    7272    text-align: center; 
    7373} 
    7474 
    75 .schedule ul li.approved, 
    76 .schedule ul li.dismissed { 
     75.schedule li h3 { 
     76    margin: 0; 
     77    padding: 0; 
     78    line-height: 100%; 
    7779} 
    7880 
    79 .schedule ul li.approved .status, 
    80 .schedule ul li.dismissed .status { 
     81.schedule li.approved, 
     82.schedule li.dismissed { 
     83
     84 
     85.schedule li.approved .status, 
     86.schedule li.dismissed .status { 
    8187    margin-bottom: 0; 
    8288    font-weight: bold; 
    8389} 
    8490 
    85 .schedule ul li.approved .title, 
    86 .schedule ul li.dismissed .title { 
     91.schedule li.approved .title, 
     92.schedule li.dismissed .title { 
    8793    font-size: 100%; 
    8894} 
    8995 
    90 .schedule ul li.approved .details, 
    91 .schedule ul li.dismissed .details { 
     96.schedule li.approved .details, 
     97.schedule li.dismissed .details { 
    9298    display: none; 
    9399} 
    94100 
    95 .schedule ul li.approved .actions, 
    96 .schedule ul li.dismissed .actions { 
     101.schedule li.approved .actions, 
     102.schedule li.dismissed .actions { 
    97103    display: none; 
    98104} 
    99105 
    100 .schedule ul li .title { 
     106.schedule li .title { 
    101107    float: left; 
    102108    font-size: 114%; 
     
    104110} 
    105111 
    106 .schedule ul li .status { 
     112.schedule li .status { 
    107113    color: #6c8186; 
    108114    margin-bottom: 0.5em; 
    109115} 
    110116 
    111 .schedule ul li .details { 
     117.schedule li .details { 
    112118    float: left; 
    113119    clear: left; 
     
    117123} 
    118124 
    119 .schedule ul li .comment { 
     125.schedule li .comment { 
    120126    float: left; 
    121127    color: #999; 
  • pagoda/trunk/Pagoda/pagoda/widgets/admin/static/javascript/schedule.js

    r492 r514  
    5050} 
    5151 
    52 var setupListSubmit = function(info) { 
    53     info.form.on('actioncomplete', info.success, info.form); 
    54     info.form.on('actionfailed', info.failure, info.form); 
     52var setupListSubmit = function(setup) { 
     53    setup.form.on('actioncomplete', setup.success, setup.form); 
     54    setup.form.on('actionfailed', setup.failure, setup.form); 
    5555     
    56     for (var name in info.one) { 
    57         clickSubmits(info.form, info.one[name], info.selector); 
     56    for (var name in setup.one) { 
     57        clickSubmits(setup.form, setup.one[name], setup.selector); 
    5858    } 
    59     for (var name in info.all) { 
    60         clickSubmitsAll(info.form, info.all[name], info.one[name], info.selector, info.filters); 
     59    for (var name in setup.all) { 
     60        clickSubmitsAll(setup.form, setup.all[name], setup.one[name], setup.selector, setup.filters); 
    6161    } 
    6262} 
  • pagoda/trunk/Pagoda/pagoda/widgets/admin/widgets.py

    r511 r514  
    6262) 
    6363 
    64 accounts_base = CSSLink( 
     64accounts_css = CSSLink( 
    6565    modname=module_name, filename='static/css/accounts.css', 
    6666    css=[admin_css] 
     67) 
     68 
     69accounts_base = JSLink( 
     70    modname=module_name, filename='static/javascript/accounts.js', 
     71    css=[accounts_css], javascript=[admin_base, submit_params] 
    6772) 
    6873 

Log in as guest/pagoda to create tickets