htdocs/inbox/index.bml
author mark
Wed Apr 15 04:44:57 2009 +0000
branchproduction
changeset 707 66c67e811173
parent 655 53dd152590d8
child 903 9744cbe5ad6a
permissions -rw-r--r--
http://bugs.dwscoalition.org/show_bug.cgi?id=295

Remove a heckuva lot of LJ blue still sitting around.

Patch by ursamajor.
mark@3
     1
<?page
mark@3
     2
body<=
mark@3
     3
<?_code
mark@3
     4
{
mark@3
     5
    use strict;
mark@3
     6
    use vars qw($title $body $head %GET %POST);
mark@3
     7
    use Class::Autouse qw (
mark@3
     8
                           LJ::NotificationInbox
mark@3
     9
                           LJ::Event
mark@3
    10
                           );
mark@3
    11
mark@84
    12
    $title = $ML{'.title'};
mark@3
    13
    $body = "";
mark@3
    14
mark@3
    15
    my $remote = LJ::get_remote()
mark@3
    16
        or return "<?needlogin?>";
mark@3
    17
mark@84
    18
    return $ML{'.error.not_ready'} unless $remote->can_use_esn;
mark@3
    19
mark@3
    20
    LJ::need_res(qw(
mark@3
    21
                  js/core.js
mark@3
    22
                  js/dom.js
mark@3
    23
                  js/view.js
mark@3
    24
                  js/controller.js
mark@3
    25
                  js/datasource.js
mark@3
    26
                  js/checkallbutton.js
mark@3
    27
                  js/selectable_table.js
mark@3
    28
                  js/httpreq.js
mark@3
    29
                  js/hourglass.js
mark@3
    30
                  js/esn_inbox.js
mark@3
    31
                  stc/esn.css
mark@3
    32
                  stc/lj_base.css
mark@3
    33
                  ));
mark@3
    34
mark@3
    35
    my $formauth = LJ::form_auth();
mark@3
    36
mark@3
    37
    # get the user's inbox
mark@3
    38
    my $inbox = $remote->notification_inbox
mark@84
    39
        or return LJ::error_list( BML::ml('.error.couldnt_retrieve_inbox', { 'user' => $remote->{user} }) );
mark@3
    40
mark@3
    41
    # 2 instances of action buttons
mark@3
    42
    # map each to one variable
mark@84
    43
    my @buttons = qw{markRead markUnread delete markAllRead deleteAll};
mark@3
    44
    foreach my $button (@buttons) {
mark@3
    45
        for (my $i=1; $i<=2; $i++) {
mark@3
    46
            my $sfx_button = $button . "_" . $i;
mark@3
    47
            $GET{$button} = $GET{$sfx_button} if($GET{$sfx_button} && !$GET{$button});
mark@3
    48
            $POST{$button} = $POST{$sfx_button} if($POST{$sfx_button} && !$POST{$button});
mark@3
    49
        }
mark@3
    50
    }
mark@3
    51
mark@3
    52
    # Take a supplied filter but default it to undef unless it is valid
mark@3
    53
    my $view = $POST{view} || $GET{view} || undef;
mark@3
    54
    $view = undef if ($view eq 'archive' && $LJ::DISABLED{esn_archive});
mark@3
    55
    $view = undef if ($view && !LJ::NotificationInbox->can("${view}_items"));
mark@3
    56
mark@3
    57
    # Bolds the selected View/Folder
mark@3
    58
    my $selected_folder = $view || 'all';
mark@3
    59
    $selected_folder = qq(
mark@3
    60
        <style>#esn_folder_$selected_folder {
mark@3
    61
        font-weight: bold;
mark@707
    62
        background-color: #ffd8d8;
mark@3
    63
        border: 1px solid #bbb;
mark@3
    64
        }</style>
mark@3
    65
        );
mark@3
    66
    $head = $selected_folder;
mark@3
    67
mark@3
    68
    # get events sitting in inbox
mark@3
    69
    my @notifications = $inbox->items;
mark@3
    70
mark@3
    71
    my @errors;
mark@3
    72
mark@3
    73
    if (LJ::did_post()) {
mark@3
    74
mark@3
    75
        # operate on notices by default but switch if view parameter specified
mark@3
    76
        my $nitems = \@notifications;
mark@3
    77
        my $name = "all";
mark@3
    78
        if ($view) {
mark@3
    79
            my @items = eval "\$inbox->${name}_items";
mark@84
    80
            push @items, $inbox->usermsg_sent_items;
mark@3
    81
            $nitems = \@items;
mark@3
    82
        }
mark@3
    83
mark@3
    84
        if ($POST{markAllRead}) {
mark@84
    85
            $inbox->mark_all_read( $view );
mark@84
    86
        } elsif ($POST{deleteAll}) {
mark@84
    87
            $inbox->delete_all( $view );
mark@3
    88
        } else {
mark@3
    89
            # go through each item and see if it's checked
mark@3
    90
            foreach my $item (@$nitems) {
mark@3
    91
                my $qid = eval { $item->qid } or next;
mark@3
    92
                my $checked = $POST{"${name}_Check-$qid"};
mark@3
    93
                next unless $checked;
mark@3
    94
mark@3
    95
                if ($POST{markRead}) {
mark@3
    96
                    $item->mark_read;
mark@3
    97
                } elsif ($POST{markUnread}) {
mark@3
    98
                    $item->mark_unread;
mark@3
    99
                } elsif ($POST{delete}) {
mark@3
   100
                    $item->delete;
mark@3
   101
                }
mark@3
   102
            }
mark@3
   103
mark@3
   104
            # reload inbox after making changes
mark@3
   105
            @$nitems = eval "\$inbox->${name}_items";
mark@3
   106
        }
mark@3
   107
    }
mark@3
   108
mark@3
   109
    # Allow bookmarking to work without Javascript
mark@3
   110
    # or before JS events are bound
mark@3
   111
    if ($GET{bookmark_off} && $GET{bookmark_off} =~ /^\d+$/) {
mark@84
   112
        push @errors, $ML{'.error.max_bookmarks'}
mark@3
   113
            unless $inbox->add_bookmark($GET{bookmark_off});
mark@3
   114
    }
mark@3
   115
    if ($GET{bookmark_on} && $GET{bookmark_on} =~ /^\d+$/) {
mark@3
   116
        $inbox->remove_bookmark($GET{bookmark_on});
mark@3
   117
    }
mark@3
   118
mark@3
   119
    # Pagination
mark@3
   120
    my $page = int($POST{page} || $GET{page});
mark@3
   121
mark@3
   122
    $body .= LJ::error_list(@errors) if (@errors);
mark@3
   123
mark@3
   124
    $body .= qq{
mark@84
   125
    <div class="inbox_newitems pkg">
mark@84
   126
        <span class="esnlinks"><a href="$LJ::SITEROOT/inbox/?page=$page" id="RefreshLink"><?_ml inbox.refresh _ml?></a> | <a href="$LJ::SITEROOT/manage/subscriptions/"><?_ml inbox.manage_settings _ml?></a></span>
mark@84
   127
    </div> };
mark@84
   128
mark@84
   129
    # Inbox Nav
mark@84
   130
    $body .= qq{
mark@84
   131
        <table style="width: 100%"><tr><td valign="top" style="padding-right: 12px">};
mark@84
   132
    $body .= LJ::Widget::InboxFolderNav->render( 'page' => 1 );
mark@3
   133
mark@3
   134
    $body .= qq{
mark@3
   135
        </td>
mark@3
   136
        <td width="1" height="100%" style="border-left: 1px solid #ccc"><img src="$LJ::IMGPREFIX/spacer.gif"></td>
mark@3
   137
        <td valign="top" style="padding-left: 10px; width: 100%;">
mark@3
   138
    };
mark@3
   139
mark@3
   140
    # Filter by view if specified
mark@3
   141
    my @all_items;
mark@3
   142
    if ($view) {
mark@3
   143
        @all_items = eval "\$inbox->${view}_items";
mark@3
   144
    } else {
mark@3
   145
        @all_items = $inbox->all_items;
mark@3
   146
    }
mark@3
   147
mark@84
   148
    # Pagination
mark@84
   149
    my $page = int($POST{page} || $GET{page});
mark@84
   150
    
mark@3
   151
    $body .= LJ::Widget::InboxFolder->render(
mark@3
   152
                     folder  => "all",
mark@3
   153
                     reply_btn => 1,
mark@3
   154
                     expand    => $GET{expand},
mark@3
   155
                     inbox     => $inbox,
mark@3
   156
                     page      => $page,
mark@3
   157
                     view      => $view,
mark@3
   158
                     mode      => $GET{mode},
mark@3
   159
                     items     => \@all_items);
mark@3
   160
mark@3
   161
    $body .= qq{
mark@3
   162
        </td></tr></table>
mark@3
   163
    };
mark@3
   164
mark@3
   165
    return $body;
mark@3
   166
}
mark@3
   167
 _code?>
mark@3
   168
<=body
mark@3
   169
title=><?_code return $title; _code?>
mark@3
   170
head<=
mark@3
   171
mark@3
   172
<?_code return $head; _code?>
mark@3
   173
mark@3
   174
<script>
mark@3
   175
LJ_cmtinfo = {};
mark@3
   176
LJ_cmtinfo['disableInlineDelete'] = 1;
mark@3
   177
var pageNum;
mark@84
   178
var cur_folder = '<?_code return $POST{view} || $GET{view} || undef; _code?>';
mark@3
   179
mark@84
   180
DOM.addEventListener(window, "load", setup, cur_folder);
mark@3
   181
mark@3
   182
var tableview;
mark@3
   183
var checkallButton;
mark@3
   184
/* Can have multiple tables or folders displayed on the same page */
mark@3
   185
var folders = ['all'];
mark@3
   186
mark@3
   187
function setup (e) {
mark@3
   188
    if (! Site.has_remote) return;
mark@3
   189
mark@3
   190
    for (var i=0; i<folders.length; i++) {
mark@3
   191
        var name = folders[i];
mark@3
   192
        tableview = new View();
mark@3
   193
mark@3
   194
        tableview.init({ "view": $(name + "_Table") });
mark@3
   195
mark@3
   196
        // 2 instances of action buttons
mark@3
   197
        for (var i=1; i<=2; i++) {
mark@3
   198
            checkallButton = new CheckallButton();
mark@3
   199
            checkallButton.init({
mark@3
   200
                  "class": "InboxItem_Check",
mark@3
   201
                  "button": $(name + "_CheckAll_" + i),
mark@3
   202
                  "parent": tableview.getView()
mark@3
   203
            });
mark@3
   204
        }
mark@3
   205
    }
mark@3
   206
mark@3
   207
// 2 instances of action buttons
mark@3
   208
for (var i=1; i<=2; i++) {
mark@3
   209
    DOM.addEventListener($("Page_Prev_"+i), "click", Page_Prev);
mark@3
   210
    DOM.addEventListener($("Page_Next_"+i), "click", Page_Next);
mark@3
   211
}
mark@3
   212
mark@3
   213
if ($("pageNum")) pageNum = parseInt($("pageNum").value);
mark@3
   214
}
mark@3
   215
mark@3
   216
function xtra_args () {
mark@3
   217
    var args = '';
mark@3
   218
    var view = $("inbox_view").value;
mark@3
   219
    if (view) args += "&view=" + view;
mark@3
   220
    return args;
mark@3
   221
}
mark@3
   222
mark@3
   223
function Page_Prev (e) {
mark@3
   224
    if (pageNum) {
mark@3
   225
        var args = xtra_args();
mark@3
   226
        window.location.href = "<?siteroot?>/inbox/?page=" + (pageNum - 1) + args;
mark@3
   227
    }
mark@3
   228
}
mark@3
   229
mark@3
   230
function Page_Next (e) {
mark@3
   231
    if (pageNum) {
mark@3
   232
        var args = xtra_args();
mark@3
   233
        window.location.href = "<?siteroot?>/inbox/?page=" + (pageNum + 1) + args;
mark@3
   234
    }
mark@3
   235
}
mark@3
   236
mark@3
   237
</script>
mark@3
   238
mark@3
   239
<=head
mark@3
   240
mark@3
   241
page?>