Enable AJAX on text based links in S2.
Patch by wyntarvox.
diffs (313 lines):
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 );
+ }
+
};
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog