mourningdove/cgi-bin/LJ/Widget/CurrentTheme.pm

86 lines
3 KiB
Perl
Raw Permalink Normal View History

2026-05-24 01:03:05 +00:00
# This code was forked from the LiveJournal project owned and operated
# by Live Journal, Inc. The code has been modified and expanded by
# Dreamwidth Studios, LLC. These files were originally licensed under
# the terms of the license supplied by Live Journal, Inc, which can
# currently be found at:
#
# http://code.livejournal.org/trac/livejournal/browser/trunk/LICENSE-LiveJournal.txt
#
# In accordance with the original license, this code and all its
# modifications are provided under the GNU General Public License.
# A copy of that license can be found in the LICENSE file included as
# part of this distribution.
package LJ::Widget::CurrentTheme;
use strict;
use base qw(LJ::Widget);
use Carp qw(croak);
use LJ::Customize;
use DW::Template;
sub ajax { 1 }
sub authas { 1 }
sub need_res { qw( stc/widgets/currenttheme.css ) }
sub render_body {
my $class = shift;
my %opts = @_;
$opts{show} ||= 0;
my $u = $class->get_effective_remote();
die "Invalid user." unless LJ::isu($u);
my $remote = LJ::get_remote();
my $getextra = $u->user ne $remote->user ? "?authas=" . $u->user : "";
my $getsep = $getextra ? "&" : "?";
my $showarg = $opts{show} != 12 ? "&show=$opts{show}" : "";
my $no_theme_chooser = defined $opts{no_theme_chooser} ? $opts{no_theme_chooser} : 0;
my $no_layer_edit = LJ::Hooks::run_hook( "no_theme_or_layer_edit", $u );
my $theme = LJ::Customize->get_current_theme($u);
my $vars = {
theme => $theme,
layout_name => $theme->layout_name,
designer => $theme->designer,
getextra => $getextra,
no_theme_chooser => $no_theme_chooser,
no_layer_edit => $no_layer_edit,
getsep => $getsep,
showarg => $showarg,
u => $u
};
return DW::Template->template_string( 'widget/currenttheme.tt', $vars );
}
sub js {
q [
initWidget: function () {
var self = this;
var filter_links = DOM.getElementsByClassName(document, "theme-current-cat");
filter_links = filter_links.concat(DOM.getElementsByClassName(document, "theme-current-layout"));
filter_links = filter_links.concat(DOM.getElementsByClassName(document, "theme-current-designer"));
// add event listeners to all of the category, layout, and designer links
filter_links.forEach(function (filter_link) {
var getArgs = LiveJournal.parseGetArgs(filter_link.href);
for (var arg in getArgs) {
if (!getArgs.hasOwnProperty(arg)) continue;
if (arg == "authas" || arg == "show") continue;
DOM.addEventListener(filter_link, "click", function (evt) { Customize.ThemeNav.filterThemes(evt, arg, getArgs[arg]) });
break;
}
});
},
onRefresh: function (data) {
this.initWidget();
}
];
}
1;