[dw-free] Make AJAX work on text links in S2
[commit: http://hg.dwscoalition.org/dw-free/rev/490a701da881]
http://bugs.dwscoalition.org/show_bug.cgi?id=1953
Enable AJAX on text based links in S2.
Patch by
wyntarvox.
Files modified:
http://bugs.dwscoalition.org/show_bug.cgi?id=1953
Enable AJAX on text based links in S2.
Patch by
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Files modified:
- bin/upgrading/s2layers/core2.s2
- cgi-bin/LJ/S2.pm
- htdocs/js/commentmanage.js
- htdocs/js/esn.js
-------------------------------------------------------------------------------- diff -r c1ab80df65e0 -r 490a701da881 bin/upgrading/s2layers/core2.s2 --- a/bin/upgrading/s2layers/core2.s2 Mon Oct 26 02:07:27 2009 +0000 +++ b/bin/upgrading/s2layers/core2.s2 Mon Oct 26 02:28:07 2009 +0000 @@ -207,6 +207,7 @@ class Link var Image icon "A suggestion from the server as to which icon to use. layouts/users can override this of course. alt text works similarly to [member[Link.caption]]."; + var readonly string{} extra "Extra attributes passed to the link"; function print_button "Output this Link as a clickable button using [member[Link.icon]]"; @@ -4191,13 +4192,18 @@ function Comment::print_management_links """<ul class="comment-management-links">"""; var Link link; var int count; + var string extras; $count = 0; foreach var string k ($.link_keyseq) { $link = $this->get_link($k); if ($link.url) { $count ++; if ($*comment_management_links == "text") { - """<li class="link $k""" + ( ($count == 1) ? " first-item" : "" ) + """"><a href="$link.url">$link.caption</a></li>\n"""; + foreach var string extra ( $link.extra ) { + var string value = $link.extra{$extra}; + $extras = $extras + "$extra='$value' "; + } + """<li class="link $k""" + ( ($count == 1) ? " first-item" : "" ) + """"><a href="$link.url" $extras>$link.caption</a></li>\n"""; } else { ## if ($*comment_management_links == "icon") """<li class="link $k""" + ( ($count == 1) ? " first-item" : "" ) + """">$link</li>\n"""; @@ -4259,6 +4265,7 @@ function Entry::print_management_links() var Page p = get_page(); var int count; + var string extras; $count = 0; """<ul class="entry-management-links">"""; var bool show_interentry = ($p.view == "entry" or $p.view == "reply"); @@ -4274,7 +4281,11 @@ function Entry::print_management_links() if ($link.url) { $count ++; if ($*entry_management_links == "text") { - """<li class="link $k""" + ( $count == 1 ? " first-item" : "" ) + """"><a href="$link.url">$link.caption</a></li>\n"""; + foreach var string extra ( $link.extra ) { + var string value = $link.extra{$extra}; + $extras = $extras + "$extra='$value' "; + } + """<li class="link $k""" + ( $count == 1 ? " first-item" : "" ) + """"><a href="$link.url" $extras>$link.caption</a></li>\n"""; } else { ## if ($*entry_management_links == "icon") """<li class="link $k""" + ( $count == 1 ? " first-item" : "" ) + """">$link</li>\n"""; @@ -4850,14 +4861,20 @@ function Link::as_string() [fixed] : str function Link::as_string() [fixed] : string { if ($.url == "") { return ""; } var string ealt = ehtml($.caption); - var string{} extra = $.icon.extra; - var string extraParams = ""; - - foreach var string extraKey ($extra) { - $extraParams = $extraParams + """$extraKey="$extra{$extraKey}" """; - } - - return """<a href="$.url"><img border='0' width="$.icon.width" height="$.icon.height" alt="$ealt" title="$ealt" src="$.icon.url" $extraParams /></a>"""; + var string{} extraLink = $.extra; + var string{} extraImg = $.icon.extra; + var string extraParamsLink = ""; + var string extraParamsImg = ""; + + foreach var string extraKeyLink ($extraLink) { + $extraParamsLink = $extraParamsLink + """$extraKeyLink="$extraLink{$extraKeyLink}" """; + } + + foreach var string extraKeyImg ($extraImg) { + $extraParamsImg = $extraParamsImg + """$extraKeyImg="$extraImg{$extraKeyImg}" """; + } + + return """<a href="$.url" $extraParamsLink><img border='0' width="$.icon.width" height="$.icon.height" alt="$ealt" title="$ealt" src="$.icon.url" $extraParamsImg /></a>"""; } # Redirector diff -r c1ab80df65e0 -r 490a701da881 cgi-bin/LJ/S2.pm --- a/cgi-bin/LJ/S2.pm Mon Oct 26 02:07:27 2009 +0000 +++ b/cgi-bin/LJ/S2.pm Mon Oct 26 02:28:07 2009 +0000 @@ -2105,13 +2105,14 @@ sub Page } sub Link { - my ($url, $caption, $icon) = @_; + my ($url, $caption, $icon, %extra) = @_; my $lnk = { '_type' => 'Link', 'caption' => $caption, 'url' => $url, 'icon' => $icon, + 'extra' => {%extra}, }; return $lnk; @@ -2995,17 +2996,18 @@ sub _Comment__get_link my $etypeid = 'LJ::Event::JournalNewComment'->etypeid; - return LJ::S2::Link("$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&talkid=" . $comment->dtalkid, + return LJ::S2::Link( "$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&talkid=" . $comment->dtalkid, $ctx->[S2::PROPS]->{"text_multiform_opt_untrack"}, - LJ::S2::Image("$LJ::IMGPREFIX/silk/entry/untrack.png", 16, 16, 'Untrack this', - 'lj_etypeid' => $etypeid, - 'lj_journalid' => $u->id, - 'lj_subid' => $subscr->id, - 'class' => 'TrackButton', - 'id' => 'lj_track_btn_' . $dtalkid, - 'lj_dtalkid' => $dtalkid, - 'lj_arg2' => $comment->jtalkid, - 'lj_auth_token' => $auth_token)); + LJ::S2::Image( "$LJ::IMGPREFIX/silk/entry/untrack.png", 16, 16, 'Untrack this' ), + 'lj_etypeid' => $etypeid, + 'lj_journalid' => $u->id, + 'lj_subid' => $subscr->id, + 'class' => 'TrackButton', + 'id' => 'lj_track_btn_' . $dtalkid, + 'lj_dtalkid' => $dtalkid, + 'lj_arg2' => $comment->jtalkid, + 'lj_auth_token' => $auth_token, + 'js_swapname' => $ctx->[S2::PROPS]->{text_multiform_opt_track} ); } return $null_link if $remote->has_subscription(journal => $u, event => "JournalNewComment", arg2 => $comment->jtalkid); @@ -3048,16 +3050,17 @@ sub _Comment__get_link $btn_params{'lj_subid'} = 0; $btn_params{'lj_dtalkid'} = $dtalkid; $btn_params{'id'} = "lj_track_btn_" . $dtalkid; + $btn_params{'js_swapname'} = $ctx->[S2::PROPS]->{text_multiform_opt_untrack}; if ($key eq "watch_thread" && !$watching_parent) { - return LJ::S2::Link("$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&talkid=$dtalkid", + return LJ::S2::Link( "$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&talkid=$dtalkid&doodah", $ctx->[S2::PROPS]->{"text_multiform_opt_track"}, - LJ::S2::Image("$LJ::IMGPREFIX/silk/entry/track.png", 16, 16, 'Track This', %btn_params)); + LJ::S2::Image( "$LJ::IMGPREFIX/silk/entry/track.png", 16, 16, 'Track This' ), %btn_params ); } if ($key eq "watching_parent" && $watching_parent) { - return LJ::S2::Link("$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&talkid=$dtalkid", + return LJ::S2::Link( "$LJ::SITEROOT/manage/subscriptions/comments?journal=$u->{'user'}&talkid=$dtalkid", $ctx->[S2::PROPS]->{"text_multiform_opt_track"}, - LJ::S2::Image("$LJ::IMGPREFIX/silk/entry/untrack.png", 16, 16, 'Untrack This', %btn_params)); + LJ::S2::Image( "$LJ::IMGPREFIX/silk/entry/untrack.png", 16, 16, 'Untrack This' ), %btn_params ); } return $null_link; } @@ -3618,18 +3621,19 @@ sub _Entry__get_link arg1 => $this->{itemid}, ); - return LJ::S2::Link("$LJ::SITEROOT/manage/subscriptions/entry?journal=$journal&itemid=$this->{'itemid'}", + return LJ::S2::Link( "$LJ::SITEROOT/manage/subscriptions/entry?journal=$journal&itemid=$this->{'itemid'}", $ctx->[S2::PROPS]->{"text_watch_comments"}, - LJ::S2::Image("$LJ::IMGPREFIX/silk/entry/track.png", 16, 16, 'Track This', - 'lj_journalid' => $journalu->id, - 'lj_etypeid' => $etypeid, - 'lj_subid' => 0, - 'lj_arg1' => $this->{itemid}, - 'lj_auth_token' => $auth_token, - 'lj_newentry_etypeid' => $newentry_etypeid, - 'lj_newentry_token' => $newentry_auth_token, - 'lj_newentry_subid' => $newentry_sub ? $newentry_sub->id : 0, - 'class' => 'TrackButton')); + LJ::S2::Image( "$LJ::IMGPREFIX/silk/entry/track.png", 16, 16, 'Track This' ), + 'lj_journalid' => $journalu->id, + 'lj_etypeid' => $etypeid, + 'lj_subid' => 0, + 'lj_arg1' => $this->{itemid}, + 'lj_auth_token' => $auth_token, + 'lj_newentry_etypeid' => $newentry_etypeid, + 'lj_newentry_token' => $newentry_auth_token, + 'lj_newentry_subid' => $newentry_sub ? $newentry_sub->id : 0, + 'class' => 'TrackButton', + 'js_swapname' => $ctx->[S2::PROPS]->{text_unwatch_comments} ); } if ($key eq "unwatch_comments") { return $null_link unless LJ::is_enabled('esn'); @@ -3648,18 +3652,19 @@ sub _Entry__get_link subid => $subscr->id, action => 'delsub' ); - return LJ::S2::Link("$LJ::SITEROOT/manage/subscriptions/entry?journal=$journal&itemid=$this->{'itemid'}", + return LJ::S2::Link( "$LJ::SITEROOT/manage/subscriptions/entry?journal=$journal&itemid=$this->{'itemid'}", $ctx->[S2::PROPS]->{"text_unwatch_comments"}, - LJ::S2::Image("$LJ::IMGPREFIX/silk/entry/untrack.png", 16, 16, 'Untrack this', - 'lj_journalid' => $journalu->id, - 'lj_subid' => $subscr->id, - 'lj_etypeid' => $etypeid, - 'lj_arg1' => $this->{itemid}, - 'lj_auth_token' => $auth_token, - 'lj_newentry_etypeid' => $newentry_etypeid, - 'lj_newentry_token' => $newentry_auth_token, - 'lj_newentry_subid' => $newentry_sub ? $newentry_sub->id : 0, - 'class' => 'TrackButton')); + LJ::S2::Image( "$LJ::IMGPREFIX/silk/entry/untrack.png", 16, 16, 'Untrack this' ), + 'lj_journalid' => $journalu->id, + 'lj_subid' => $subscr->id, + 'lj_etypeid' => $etypeid, + 'lj_arg1' => $this->{itemid}, + 'lj_auth_token' => $auth_token, + 'lj_newentry_etypeid' => $newentry_etypeid, + 'lj_newentry_token' => $newentry_auth_token, + 'lj_newentry_subid' => $newentry_sub ? $newentry_sub->id : 0, + 'class' => 'TrackButton', + 'js_swapname' => $ctx->[S2::PROPS]->{text_watch_comments} ); } } diff -r c1ab80df65e0 -r 490a701da881 htdocs/js/commentmanage.js --- a/htdocs/js/commentmanage.js Mon Oct 26 02:07:27 2009 +0000 +++ b/htdocs/js/commentmanage.js Mon Oct 26 02:28:07 2009 +0000 @@ -514,6 +514,11 @@ function updateLink (ae, resObj, clickTa clickTarget.setAttribute( 'title', resObj.newalt ); clickTarget.src = resObj.newimage; did_something = 1; + }; + + if ( ae && typeof clickTarget == "undefined" ) { + ae.innerHTML = resObj.newalt; + did_something = 1; } if (userhook) { diff -r c1ab80df65e0 -r 490a701da881 htdocs/js/esn.js --- a/htdocs/js/esn.js Mon Oct 26 02:07:27 2009 +0000 +++ b/htdocs/js/esn.js Mon Oct 26 02:28:07 2009 +0000 @@ -68,7 +68,7 @@ ESN.initTrackBtns = function () { if (!Site || !Site.has_remote) return; // attach to all ljuser head icons - var trackBtns = DOM.getElementsByTagAndClassName(document, "img", "TrackButton"); + var trackBtns = DOM.getElementsByTagAndClassName( document, "a", "TrackButton" ); Array.prototype.forEach.call(trackBtns, function (trackBtn) { if (!trackBtn || !trackBtn.getAttribute) return; @@ -82,7 +82,14 @@ ESN.initTrackBtns = function () { ESN.trackBtnClickHandler = function (evt) { var trackBtn = evt.target; - if (! trackBtn || trackBtn.tagName.toLowerCase() != "img") return true; + if ( ! trackBtn ) return true; + + trackBtn.isIcon = false; + + if ( trackBtn.tagName.toLowerCase() == "img" ) { + trackBtn = trackBtn.parentNode; + trackBtn.isIcon = true; + } Event.stop(evt); @@ -261,10 +268,17 @@ ESN.toggleSubscription = function (subIn // update subthread tracking icons var dtalkid = btn.getAttribute("lj_dtalkid"); - if (dtalkid) + if ( dtalkid ) { ESN.updateThreadIcons(dtalkid, "on"); - else // not thread tracking button - btn.src = Site.imgprefix + "/silk/entry/untrack.png"; + } else { // not thread tracking button + if ( ! btn.isIcon ) { + var swapName = btn.innerHTML; + btn.innerHTML = btn.getAttribute( "js_swapname" ); + DOM.setElementAttribute( btn, "js_swapname", swapName ); + } else { + btn.firstChild.src = Site.imgprefix + "/silk/entry/untrack.png"; + } + } } else { if (info["event_class"] == "LJ::Event::JournalNewComment") DOM.setElementAttribute(btn, "lj_subid", 0); @@ -295,12 +309,18 @@ ESN.toggleSubscription = function (subIn } ESN.updateThreadIcons(dtalkid, state); + } else { // not thread tracking button - btn.src = Site.imgprefix + "/silk/entry/track.png"; + if ( ! btn.isIcon ) { + var swapName = btn.innerHTML; + btn.innerHTML = btn.getAttribute( "js_swapname" ); + DOM.setElementAttribute( btn, "js_swapname", swapName ); + } else { + btn.firstChild.src = Site.imgprefix + "/silk/entry/track.png"; + } } } - if (info.auth_token) DOM.setElementAttribute(btn, "lj_auth_token", info.auth_token); if (info.newentry_token) @@ -388,6 +408,12 @@ ESN.updateThreadIcons = function (dtalki alert("Unknown tracking state " + tracking); break; } - - btn.src = Site.imgprefix + uri; + if ( typeof btn.firstChild.tagName != "undefined" && btn.firstChild.tagName.toLowerCase() == "img" ) { + btn.firstChild.src = Site.imgprefix + uri; + } else { + var swapName = btn.innerHTML; + btn.innerHTML = btn.getAttribute( "js_swapname" ); + DOM.setElementAttribute( btn, "js_swapname", swapName ); + } + }; --------------------------------------------------------------------------------