Committer: ailyin
LJSUP-10442 (create a widget for a part of editjournal.bml)A branches/commenting-form/cgi-bin/LJ/Widget/EntryChooser.pm U branches/commenting-form/htdocs/editjournal.bml A branches/commenting-form/templates/Widgets/entry_chooser.tmpl
Added: branches/commenting-form/cgi-bin/LJ/Widget/EntryChooser.pm =================================================================== --- branches/commenting-form/cgi-bin/LJ/Widget/EntryChooser.pm (rev 0) +++ branches/commenting-form/cgi-bin/LJ/Widget/EntryChooser.pm 2011-11-18 08:35:55 UTC (rev 20570) @@ -0,0 +1,106 @@ +package LJ::Widget::EntryChooser; +use strict; +use warnings; + +use base qw( LJ::Widget::Template ); + +sub template_filename { + return $ENV{'LJHOME'} . '/templates/Widgets/entry_chooser.tmpl'; +} + +sub prepare_template_params { + my ( $class, $template, $opts ) = @_; + + my $entries = $opts->{'entries'}; + my $remote = LJ::get_remote(); + + my @entries_display; + + foreach my $entry (@$entries) { + my $entry_can_edit = + $entry->poster->equals($remote) && + ! $entry->journal->is_readonly && + ! $entry->poster->is_readonly; + + my $poster_ljuser = $opts->{'show_posters'} + ? $entry->poster->ljuser_display + : ''; + + my $entry_is_delayed = $entry->is_delayed; + my $entry_is_sticky = $entry->is_sticky; + + ### security indicator + my $entry_security = 'public'; + if ( $entry->security eq 'private' ) { + $entry_security = 'private'; + } elsif ( $entry->security eq 'usemask' ) { + if ( $entry->allowmask == 0 ) { + $entry_security = 'private'; + } elsif ( $entry->allowmask > 1 ) { + $entry_security = 'groups'; + } else { + $entry_security = 'friends'; + } + } + + my $edit_link_base = "$LJ::SITEROOT/editjournal.bml?"; + + $edit_link_base .= 'usejournal=' . $entry->journal->username . '&'; + + if ( $entry->is_delayed ) { + $edit_link_base .= 'delayedid=' . $entry->delayedid . '&'; + } else { + $edit_link_base .= 'itemid=' . $entry->ditemid . '&'; + } + + my $edit_link = $edit_link_base . 'mode=edit'; + my $delete_link = $edit_link_base . 'mode=delete'; + + my $entry_url = $entry->url; + my $entry_subject = $entry->subject_text; + + my $alldateparts; + if ($entry->is_delayed) { + $alldateparts = $entry->alldatepart; + } else { + $alldateparts = LJ::TimeUtil->alldatepart_s2($entry->{'eventtime'}); + } + my ($year, $mon, $mday, $hour, $min) = split(/\D/, $alldateparts); + my $monthlong = BML::ml(LJ::Lang::month_long_langcode($mon)); + + my $date_display = "$monthlong $mday, $year, $hour:$min"; + + my $entry_text_display = + LJ::ehtml( LJ::durl( $entry->event_raw ) ); + $entry_text_display =~ s{\n}{<br />}g; + + my $entry_taglist = ''; + if ( my @taglist = $entry->tags ) { + $entry_taglist = join( ', ', @taglist ); + } + + push @entries_display, { + 'entry_can_edit' => $entry_can_edit, + 'poster_ljuser' => $poster_ljuser, + 'entry_is_delayed' => $entry_is_delayed, + 'entry_is_sticky' => $entry_is_sticky, + 'entry_security' => $entry_security, + 'edit_link' => $edit_link, + 'delete_link' => $delete_link, + 'entry_url' => $entry_url, + 'entry_subject' => $entry_subject, + 'date_display' => $date_display, + 'entry_text_display' => $entry_text_display, + 'entry_taglist' => $entry_taglist, + }; + } + + $template->param( + 'link_prev' => $opts->{'link_prev'}, + 'link_next' => $opts->{'link_next'}, + 'entries' => \@entries_display, + 'adhtml' => $opts->{'adhtml'}, + ); +} + +1; Modified: branches/commenting-form/htdocs/editjournal.bml =================================================================== --- branches/commenting-form/htdocs/editjournal.bml 2011-11-17 14:39:19 UTC (rev 20569) +++ branches/commenting-form/htdocs/editjournal.bml 2011-11-18 08:35:55 UTC (rev 20570) @@ -140,149 +140,54 @@ my $ref = shift; my %opts = @_; - my $ret; - my @res = @$ref; my $show_ad = $opts{show_ad} ? 1 : 0; my $delayed_prev = $opts{'delayed_prev'}; my $delayed_next = $opts{'delayed_next'}; - if ($opts{'prev'} || $opts{'next'} || !$opts{'first_page'}) { - $ret .= "<p class='i-qotd-nav'>"; - if ($opts{'prev'} || !$opts{'first_page'}) { - $ret .= "<a class='i-qotd-nav-prev' href='$LJ::SITEROOT/editjournal.bml$getextra" . - ($getextra ? "&" : "?") . - "skip=$opts{prev}'>prev</a>"; - } else { - $ret .= "<span class='i-qotd-nav-prev i-qotd-nav-prev-dis'>prev</span>"; - } - if ($opts{'next'}) { - $ret .= "<a class='i-qotd-nav-next' href='$LJ::SITEROOT/editjournal.bml$getextra" . - ($getextra ? "&" : "?") . - "skip=$opts{next}'>next</a>"; - } else { - $ret .= "<span class='i-qotd-nav-next i-qotd-nav-next-dis'>next</span>"; - } - $ret .= "</p>" - if @res; - } - unless (@res) { - $ret .= "<p class='i-bubble b-bubble-warning b-bubble-noarrow'>" . BML::ml('.no_entries_to_edit') . "</p>"; - } - $ret .= "</div>"; + my ( $link_prev, $link_next ); - $ret .= "<ul class='b-editentries'>" if @res; - foreach my $e_raw (@res) { - my $entry; - if ( $e_raw->{'itemid'} ) { - $entry = LJ::Entry->new_from_item_hash (LJ::load_user($usejournal) || $remote, $e_raw); - } elsif ($e_raw->{'delayedid'}) { - $entry = LJ::DelayedEntry->get_entry_by_id(LJ::load_user($usejournal,) || $remote, - $e_raw->{'delayedid'}, {'dateformat' => 'S2'}); - } else { - die "unknown entry type"; + if ($opts{'prev'} || $opts{'next'} || !$opts{'first_page'}) { + if ($opts{'prev'} || !$opts{'first_page'}) { + $link_prev = "$LJ::SITEROOT/editjournal.bml$getextra" . + ($getextra ? "&" : "?") . + "skip=$opts{prev}"; } - my $edit_disable = 0; - if ( - ($e_raw->{'posterid'} != $remote->userid) - || ($remote->is_readonly || ($usejournal_u && $usejournal_u->is_readonly)) - ) { - $edit_disable++; + if ($opts{'next'}) { + $link_next = "$LJ::SITEROOT/editjournal.bml$getextra" . + ($getextra ? "&" : "?") . + "skip=$opts{next}"; } + } - my $poster = $usejournal ? LJ::ljuser(LJ::load_userid($entry->posterid)) : ""; + my @entries; - $ret .= "<li class='b-editentry'>"; - - if ( $entry->is_delayed() ) { - $ret .= BML::fill_template("typedelayed"); + my $journal = LJ::load_user($usejournal) || $remote; + foreach my $e_raw (@res) { + if ( $e_raw->{'itemid'} ) { + push @entries, + LJ::Entry->new_from_item_hash( $journal, $e_raw ); + } elsif ( $e_raw->{'delayedid'} ) { + push @entries, + LJ::DelayedEntry->get_entry_by_id( $journal, + $e_raw->{'delayedid'}, { 'dateformat' => 'S2' } ); } - - if ( $entry->is_sticky()) { - $ret .= BML::fill_template("typesticky"); - } - - ### security indicator - my $sec = ' '; - if ($entry->security eq "private") { - $sec .= BML::fill_template("securityprivate"); - } elsif ($entry->security eq "usemask") { - if ($entry->allowmask == 0) { # custom security with no group -- essentially private - $sec .= BML::fill_template("securityprivate"); - } elsif ($entry->allowmask > 1) { # custom group - $sec .= BML::fill_template("securitygroups"); - } else { # friends only - $sec .= BML::fill_template("securityprotected"); - } - } - $ret .= $sec; - - $ret .= "<p class='b-editentry-ctrls'>"; - my $ditemid_get; - if ($entry->is_delayed) { - $ditemid_get = $getextra ? ("$getextra&delayedid=" . $entry->delayedid) : ("?delayedid=" . $entry->delayedid); - } else { - $ditemid_get = $getextra ? ("$getextra&itemid=" . $entry->ditemid) : ("?itemid=" . $entry->ditemid); - } - if (!$edit_disable) { - $ret .= "<a href='editjournal.bml" . $ditemid_get . "&mode=edit' class='b-editentry-edit-btn b-editentry-ctrl-btn'></a>"; - } else { - $ret .= "<a href='editjournal.bml" . $ditemid_get . "&mode=delete' class='b-editentry-del-btn b-editentry-ctrl-btn'></a>"; - } - $ret .= "</p>"; - - $ret .= "<h2><a href='".$entry->url."'>"; - if (my $subj = $entry->subject_text) { - $ret .= LJ::ehtml($subj); - } else { - $ret .= BML::ml('.event.no_subject.title'); - } - $ret .= "</a></h2>"; - my $alldateparts; - if ($entry->is_delayed) { - $alldateparts = $entry->alldatepart; - } else { - $alldateparts = LJ::TimeUtil->alldatepart_s2($entry->{'eventtime'}); - } - my ($year, $mon, $mday, $hour, $min) = split(/\D/, $alldateparts); - my $monthlong = BML::ml(LJ::Lang::month_long_langcode($mon)); - $ret .= "<p class='date'>" . $poster . " $monthlong $mday, $year, $hour:$min" . "</p>"; - - my $event = LJ::ehtml(LJ::durl($entry->event_raw)); - $event =~ s!\n!<br />!g; - $ret .= $event; - if (my @taglist = $entry->tags) { - $ret .= "<p><b>Tags:</b> " . LJ::ehtml(join ", ", @taglist) . "</p>"; - } - $ret .= "</li>"; } + + my $adhtml = ''; if ($show_ad) { - my $ad = LJ::get_ads({ location => 'bml.editjournal', ljadwrapper => 1 }); - $ret .= "<td valign='top'>$ad</td>" if $ad; + $adhtml = LJ::get_ads( + { 'location' => 'bml.editjournal', 'ljadwrapper' => 1 } ); } - $ret .= "</ul>" if @res; - if ($opts{'prev'} || $opts{'next'} || !$opts{'first_page'}) { - $ret .= "<p class='i-qotd-nav'>"; - if ($opts{'prev'} || !$opts{'first_page'}) { - $ret .= "<a class='i-qotd-nav-prev' href='$LJ::SITEROOT/editjournal.bml$getextra" . - ($getextra ? "&" : "?") . - "skip=$opts{prev}'>prev</a>"; - } else { - $ret .= "<span class='i-qotd-nav-prev i-qotd-nav-prev-dis'>prev</span>"; - } - if ($opts{'next'}) { - $ret .= "<a class='i-qotd-nav-next' href='$LJ::SITEROOT/editjournal.bml$getextra" . - ($getextra ? "&" : "?") . - "skip=$opts{next}'>next</a>"; - } else { - $ret .= "<span class='i-qotd-nav-next i-qotd-nav-next-dis'>next</span>"; - } - $ret .= "</p>"; - } - - return $ret; + return LJ::Widget::EntryChooser->render( + 'link_prev' => $link_prev, + 'link_next' => $link_next, + 'show_posters' => $usejournal ? 1 : 0, + 'entries' => \@entries, + 'adhtml' => $adhtml, + ); }; if ($mode eq "edit") { @@ -833,6 +738,8 @@ </script> JS_INIT + $ret .= '</div>'; # b-editentries-header + my $err = ''; my $usejournal_u = LJ::load_user ($usejournal || $remote->{'user'}); my @recent_entries = (); Added: branches/commenting-form/templates/Widgets/entry_chooser.tmpl =================================================================== --- branches/commenting-form/templates/Widgets/entry_chooser.tmpl (rev 0) +++ branches/commenting-form/templates/Widgets/entry_chooser.tmpl 2011-11-18 08:35:55 UTC (rev 20570) @@ -0,0 +1,98 @@ +<TMPL_IF expr="link_prev || link_next"> + <p class='i-qotd-nav'> + <TMPL_IF link_prev> + <a class='i-qotd-nav-prev' href='<TMPL_VAR link_prev>'>prev</a> + <TMPL_ELSE> + <span class='i-qotd-nav-prev i-qotd-nav-prev-dis'>prev</span> + </TMPL_IF> + + <TMPL_IF link_next> + <a class='i-qotd-nav-next' href='<TMPL_VAR link_next>'>next</a> + <TMPL_ELSE> + <span class='i-qotd-nav-next i-qotd-nav-next-dis'>next</span> + </TMPL_IF> + </p> +</TMPL_IF> + +<TMPL_UNLESS entries> + <p class='i-bubble b-bubble-warning b-bubble-noarrow'><TMPL_VAR expr="ml('/editjournal.bml.no_entries_to_edit')"></p> +</TMPL_UNLESS> + +<TMPL_IF entries> + <ul class='b-editentries'> + <TMPL_LOOP entries> + <li class='b-editentry'> + <TMPL_IF entry_is_delayed> + <img src="<TMPL_VAR lj_imgprefix>/icon_delayed.png" width=13 height=15 align=absmiddle class="i-posticon"> + </TMPL_IF> + + <TMPL_IF entry_is_sticky> + <img src="<TMPL_VAR lj_imgprefix>/icon_sticky.png" width=13 height=15 align=absmiddle class="i-posticon"> + </TMPL_IF> + + <TMPL_IF expr="entry_security eq 'private'"> + <img src="<?imgprefix?>/icon_private.gif" width=16 height=16 align=absmiddle class="i-posticon"> + <TMPL_ELSIF expr="entry_security eq 'groups'"> + <img src="<?imgprefix?>/icon_groups.gif" width=19 height=16 align=absmiddle class="i-posticon"> + <TMPL_ELSIF expr="entry_security eq 'friends'"> + <img src="<?imgprefix?>/icon_protected.gif" width=14 height=15 align=absmiddle class="i-posticon"> + </TMPL_IF> + + <p class='b-editentry-ctrls'> + <TMPL_IF entry_can_edit> + <a href='<TMPL_VAR edit_link ESCAPE=HTML>' class='b-editentry-edit-btn b-editentry-ctrl-btn'></a> + <TMPL_ELSE> + <a href='<TMPL_VAR delete_link ESCAPE=HTML>' class='b-editentry-del-btn b-editentry-ctrl-btn'></a> + </TMPL_IF> + </p> + + <h2><a href='<TMPL_VAR entry_url>'> + <TMPL_IF entry_subject> + <TMPL_VAR entry_subject ESCAPE=HTML> + <TMPL_ELSE> + <TMPL_VAR expr="ml('/editjournal.bml.event.no_subject.title')"> + </TMPL_IF> + </a></h2> + + <p class='date'> + <TMPL_VAR poster_ljuser> + <TMPL_VAR date_display> + </p> + + <TMPL_VAR entry_text_display> + + <TMPL_IF entry_taglist> + <p> + <b>Tags:</b> + <TMPL_VAR entry_taglist ESCAPE=HTML> + </p> + </TMPL_IF> + </li> + </TMPL_LOOP> + </ul> + + <TMPL_IF adhtml> + <td valign='top'><TMPL_VAR adhtml></td> + </TMPL_IF> +</TMPL_IF> + +<TMPL_UNLESS entries> + <td valign='top'><TMPL_VAR adhtml></td> +</TMPL_UNLESS> + +<TMPL_IF expr="link_prev || link_next"> + <p class='i-qotd-nav'> + <TMPL_IF link_prev> + <a class='i-qotd-nav-prev' href='<TMPL_VAR link_prev>'>prev</a> + <TMPL_ELSE> + <span class='i-qotd-nav-prev i-qotd-nav-prev-dis'>prev</span> + </TMPL_IF> + + <TMPL_IF link_next> + <a class='i-qotd-nav-next' href='<TMPL_VAR link_next>'>next</a> + <TMPL_ELSE> + <span class='i-qotd-nav-next i-qotd-nav-next-dis'>next</span> + </TMPL_IF> + </p> +</TMPL_IF> +