afuna: Cat under a blanket. Text: "Cats are just little people with Fur and Fangs" (Default)
afuna ([personal profile] afuna) wrote in [site community profile] changelog2009-08-05 06:44 am

[dw-free] Add comment-count image to crossposted entries

[commit: http://hg.dwscoalition.org/dw-free/rev/b3557872aaba]

http://bugs.dwscoalition.org/show_bug.cgi?id=1035

Add comment-count image to crossposted entries, add preview for footer text.

Patch by [personal profile] allen.

Files modified:
  • bin/upgrading/en.dat
  • cgi-bin/DW/External/XPostProtocol.pm
  • cgi-bin/DW/External/XPostProtocol/LJXMLRPC.pm
  • cgi-bin/DW/Setting/XPostAccounts.pm
  • cgi-bin/LJ/Entry.pm
  • htdocs/stc/settings.css
--------------------------------------------------------------------------------
diff -r 47415b27b7d7 -r b3557872aaba bin/upgrading/en.dat
--- a/bin/upgrading/en.dat	Wed Aug 05 04:57:16 2009 +0000
+++ b/bin/upgrading/en.dat	Wed Aug 05 06:44:12 2009 +0000
@@ -2893,8 +2893,16 @@ setting.viewingadultcontent.option.selec
 
 setting.viewingadultcontent.reason=(To change this option, you must <a [[aopts]]>set your birthdate</a> first.)
 
+setting.xpost.accounts=Accounts
+
 setting.xpost.btn.add=Add New Account
 
+setting.xpost.comments=Comments
+
+setting.xpost.footer=Footer
+
+setting.xpost.footer.default.label=System default footer:
+
 setting.xpost.label=Crossposting
 
 setting.xpost.message.usage=Current accounts configured:  <b>[[current]] of [[max]]</b>
@@ -2911,7 +2919,14 @@ setting.xpost.option.delete=Delete
 
 setting.xpost.option.disablecomments=Disable comments on crossposts made to other sites
 
-setting.xpost.option.footer=Text of the footer to add on other sites. If you leave it blank, the default will display. To include a link to the post locally, use "%%url%%".
+setting.xpost.option.footer=Text of the footer to add on other sites. If you leave it blank, the system default footer will display.
+
+setting.xpost.option.footer.vars=The following variables may be used:
+setting.xpost.option.footer.vars.url=link to the original post
+setting.xpost.option.footer.vars.reply_url=link to the reply form on the original post
+setting.xpost.option.footer.vars.comment_url=link to view the comments on the original post
+setting.xpost.option.footer.vars.comment_image=image tag that dynamically displays the comment count on the original post
+setting.xpost.option.footer.vars.comment_image.alttext=comment count unavailable
 
 setting.xpost.option.footer.when=Add the footer to the post on the other site:
 
@@ -2930,6 +2945,10 @@ setting.xpost.option.xpostbydefault=Cros
 setting.xpost.option.xpostbydefault=Crosspost by Default
 
 setting.xpost.noaccounts=No accounts configured
+
+setting.xpost.preview=Preview
+
+setting.xpost.settings=Crosspost Settings
 
 setting.xpostcomments.about=When Crossposting to LJ-based accounts, disable comments on the other posts.
 
diff -r 47415b27b7d7 -r b3557872aaba cgi-bin/DW/External/XPostProtocol.pm
--- a/cgi-bin/DW/External/XPostProtocol.pm	Wed Aug 05 04:57:16 2009 +0000
+++ b/cgi-bin/DW/External/XPostProtocol.pm	Wed Aug 05 06:44:12 2009 +0000
@@ -85,6 +85,26 @@ sub scrub_polls {
     return $entry_text;
 }
 
+# creates the footer text
+sub create_footer_text {
+    my ($self, $entry, $footer_text) = @_;
+
+    my $url = $entry->url;
+    my $comment_url = $entry->url( anchor => "comments" );
+    my $reply_url = $entry->reply_url;
+    my $comment_image = $entry->comment_imgtag;
+
+    # note:  if you change any of these, be sure to change the preview
+    # javascript in DW/Setting/XPostAccounts.pm, too.
+    $footer_text =~ s/%%url%%/$url/gi;
+    $footer_text =~ s/%%reply_url%%/$reply_url/gi;
+    $footer_text =~ s/%%comment_url%%/$comment_url/gi;
+    $footer_text =~ s/%%comment_image%%/$comment_image/gi;
+    $footer_text = "\n\n" . $footer_text;
+    
+    return $footer_text;
+}
+
 # validates that the given server is running the appropriate protocol.
 # must be run in an eval block.  returns 1 on success, 0 on failure
 sub validate_server { 1 }
diff -r 47415b27b7d7 -r b3557872aaba cgi-bin/DW/External/XPostProtocol/LJXMLRPC.pm
--- a/cgi-bin/DW/External/XPostProtocol/LJXMLRPC.pm	Wed Aug 05 04:57:16 2009 +0000
+++ b/cgi-bin/DW/External/XPostProtocol/LJXMLRPC.pm	Wed Aug 05 06:44:12 2009 +0000
@@ -167,9 +167,7 @@ sub crosspost {
 
             $adding_footer = 1;
             if ( $footer_text ) {
-                my $url = $entry->url;
-                $footer_text =~ s/%%url%%/$url/gi;
-                $footer_text = "\n\n" . $footer_text;
+                $footer_text = $self->create_footer_text($entry, $footer_text);
             } else {
                 # FIXME: this should check if comments are disabled
                 # on the local site and do the right thing, but 
@@ -185,9 +183,7 @@ sub crosspost {
             # (and they are)
 
             if ( $footer_text ) {
-                my $url = $entry->url;
-                $footer_text =~ s/%%url%%/$url/gi;
-                $footer_text = "\n\n" . $footer_text;
+                $footer_text = $self->create_footer_text($entry, $footer_text);
             } else {
                 # FIXME: this should check if comments are disabled
                 # on the local site and do the right thing, but 
diff -r 47415b27b7d7 -r b3557872aaba cgi-bin/DW/Setting/XPostAccounts.pm
--- a/cgi-bin/DW/Setting/XPostAccounts.pm	Wed Aug 05 04:57:16 2009 +0000
+++ b/cgi-bin/DW/Setting/XPostAccounts.pm	Wed Aug 05 06:44:12 2009 +0000
@@ -57,6 +57,7 @@ sub option {
 
     # be sure to add your style info in htdocs/stc/settings.css or this won't
     # look very good.
+    $ret .= "<h2>" . $class->ml('setting.xpost.accounts') ."</h2><br/>"; 
     $ret .= "<table class='setting_table'>\n";
     if (scalar @accounts) {
         $ret .= "<tr>\n";
@@ -102,29 +103,20 @@ sub option {
         $ret .= "<div class='xpost_add'><a href='$LJ::SITEROOT/manage/externalaccount'>" . $class->ml('setting.xpost.btn.add') . "</a></div>\n";
     }
 
+    $ret .= "<h2>" . $class->ml('setting.xpost.settings') . "</h2>";
     # disable comments on crosspost
-    $ret .= "<br /><p><label for='${key}xpostdisablecomments'>" . $class->ml('setting.xpost.option.disablecomments') . "</label>";
+    $ret .= "<table><tr>";
+    $ret .= "<td><b>" . $class->ml('setting.xpost.comments') . "</b></td><td><label for='${key}xpostdisablecomments'>" . $class->ml('setting.xpost.option.disablecomments') . "</label></td><td>";
     $ret .= LJ::html_check({
         name     => "${key}xpostdisablecomments",
         value    => 1,
         id       => "${key}xpostdisablecomments",
         selected => $u->prop('opt_xpost_disable_comments')
         }) .  "</p>";
-
-    # define custom footer
-    $ret .= "<p><label for='${key}crosspost_footer_text'>" . $class->ml( 'setting.xpost.option.footer' ) . "</label>";
-    my $footer_text = $u->prop('crosspost_footer_text');
-
-    $ret .= LJ::html_text({
-        name      => "${key}crosspost_footer_text",
-        id        => "${key}crosspost_footer_text",
-        size      => "70",
-        maxlength => "255",
-        value     => $footer_text
-    }) . "</p>";
-
+    $ret .= "</td></tr>";
+    
     # When should the footer be displayed?
-    $ret .= "<p><label for='${key}crosspost_footer_append'>" . $class->ml( 'setting.xpost.option.footer.when' ) . "</label> ";
+    $ret .= "<tr><td><b>" . $class->ml('setting.xpost.footer') . "</b></td><td><label for='${key}crosspost_footer_append'>" . $class->ml( 'setting.xpost.option.footer.when' ) . "</label></td><td>";
     my $append_when = $u->prop('crosspost_footer_append');
 
     $ret .= LJ::html_select({
@@ -136,7 +128,52 @@ sub option {
         'D'       => $class->ml( 'setting.xpost.option.footer.when.disabled' ),
         'N'       => $class->ml( 'setting.xpost.option.footer.when.never' )
     );
+    $ret .= "</td></tr>";
 
+    # define custom footer
+    $ret .= "<tr><td>&nbsp</td><td colspan='2'><label for='${key}crosspost_footer_text'>" . $class->ml( 'setting.xpost.option.footer' ) . "</label><br/>";
+
+    my $footer_text = $u->prop('crosspost_footer_text');
+
+    $ret .= LJ::html_textarea({
+        name      => "${key}crosspost_footer_text",
+        id        => "${key}crosspost_footer_text",
+        rows      => 3,
+        cols      => 80,
+        maxlength => "512",
+        onkeyup   => "javascript:updatePreview()",
+        value     => $footer_text
+    }) . "<br/><br/>";
+
+    $ret .= "" . $class->ml('setting.xpost.preview') . "\n";
+
+    my $baseurl = $LJ::SITEROOT;
+    my $alttext = $class->ml('setting.xpost.option.footer.vars.comment_image.alttext');
+    my $default_comment = $class->ml('xpost.redirect.comment', { postlink => "%%url%%" });
+
+    $ret .= qq [
+      <div id='footer_preview' class='xpost_footer_preview'></div>
+      <script type="text/javascript">
+        function updatePreview() {
+          var previewString = \$('${key}crosspost_footer_text').value;
+          if (! previewString) {
+            previewString = '$default_comment';
+          }
+          previewString = previewString.replace(/%%url%%/, '$baseurl/12345.html');
+          previewString = previewString.replace(/%%reply_url%%/, '$baseurl/12345.html?mode=reply');
+          previewString = previewString.replace(/%%comment_url%%/, '$baseurl/12345.html#comments');
+          previewString = previewString.replace(/%%comment_image%%/, '<img src="$baseurl/tools/commentcount?samplecount=23" alt="$alttext" style="vertical-align: middle;"/>');
+          \$('footer_preview').innerHTML = previewString;
+        }
+        updatePreview();
+      </script>
+    ];
+    $ret .= "<p style='font-size: smaller;'>" . $class->ml('setting.xpost.option.footer.vars') . "<br/>";
+    foreach my $var qw (url reply_url comment_url comment_image) {
+        $ret .= "<b>%%$var%%</b>: " . $class->ml("setting.xpost.option.footer.vars.$var") . "<br/>\n";
+    }
+    $ret .= "<br/>" . $class->ml("setting.xpost.footer.default.label") .  "<br/>" . LJ::ehtml($default_comment) . "\n";
+    $ret .= "</td></tr></table>\n";
     return $ret;
 }
 
diff -r 47415b27b7d7 -r b3557872aaba cgi-bin/LJ/Entry.pm
--- a/cgi-bin/LJ/Entry.pm	Wed Aug 05 04:57:16 2009 +0000
+++ b/cgi-bin/LJ/Entry.pm	Wed Aug 05 06:44:12 2009 +0000
@@ -223,6 +223,24 @@ sub url {
     }
     $url .= "#$anchor" if $anchor;
     return $url;
+}
+
+# returns a url that will display the number of comments on the entry
+# as an image
+sub comment_image_url {
+    my $self = shift;
+    my $u = $self->{u};
+
+    return "$LJ::SITEROOT/tools/commentcount?uid=" . $self->journalid . "&ditemid=" .  $self->ditemid;
+}
+
+# returns a pre-generated comment img tag using the comment_image_url
+sub comment_imgtag {
+    my $self = shift;
+
+    my $alttext = LJ::Lang::ml('setting.xpost.option.footer.vars.comment_image.alttext');
+    
+    return '<img src="' . $self->comment_image_url . '" alt="' . $alttext . '" style="vertical-align: middle;"/>';
 }
 
 sub anum {
diff -r 47415b27b7d7 -r b3557872aaba htdocs/stc/settings.css
--- a/htdocs/stc/settings.css	Wed Aug 05 04:57:16 2009 +0000
+++ b/htdocs/stc/settings.css	Wed Aug 05 06:44:12 2009 +0000
@@ -169,3 +169,10 @@
 .xpost_add {
     text-align: center;
 }
+
+.xpost_footer_preview {
+    border: 1px solid #000000;
+    width: 100%;
+    background: #EEEEEE;
+    padding: 10px 5px 10px 5px;
+}
--------------------------------------------------------------------------------