This commit is contained in:
2019-02-06 00:49:12 +03:00
commit 8dbb1bb605
4796 changed files with 506072 additions and 0 deletions

1
ljcom/.forward Normal file
View File

@@ -0,0 +1 @@
/home/lj/mail/

22
ljcom/README-ljcom.txt Normal file
View File

@@ -0,0 +1,22 @@
========
NOTICE
========
The files in the "ljcom" CVS repository are not licensed under the GPL.
These are site-local modifications which differentiate LiveJournal.com
from other livejournal(the code)-based sites. Everything here should
be pretty trivial and/or non-essential, but critical in making
LiveJournal "feel" different.
We provide the source to these files so developers/integrators know
the proper ways to extend LiveJournal. (generally via hooks and extra
styles and *-local.* files)
While we encourage you to learn from these files, you do not have
permission to use them in production sites. You may use them on
development servers such as goathack.livejournal.org.
Any questions or comments may be sent to:
Brad Fitzpatrick <brad@danga.com>

View File

@@ -0,0 +1,64 @@
#!/usr/bin/perl
#
my @errors;
my $err = sub {
return unless @_;
print STDERR "Problem:\n" . join('', map { " * $_\n" } @_) . "\n";
exit 1;
};
############################################################################
print "[Checking site-local config....]\n";
############################################################################
my %modules = (
"Crypt::Cracklib" => { 'deb' => 'libcrypt-cracklib-perl',
'opt' => 'Provides checking of strong password.' },
"GnuPG::Interface" => { 'deb' => 'libgnupg-interface-perl',
'opt' => 'Crypto and signed message authentication.' },
"Inline" => { 'deb' => 'libinline-perl', },
"Crypt::SSLeay" => {'deb' => "libcrypt-ssleay-perl", },
"Geo::IP::PurePerl" => { 'opt' => "Provides IP to country mapping for stopping some CC fraud.", },
);
my @debs;
foreach my $mod (sort keys %modules) {
my $rv = eval "use $mod;";
if ($@) {
my $dt = $modules{$mod};
if ($dt->{'opt'}) {
print STDERR "Missing optional module $mod: $dt->{'opt'}\n";
} else {
push @errors, "Missing perl module: $mod";
}
push @debs, $dt->{'deb'} if $dt->{'deb'};
next;
}
my $ver_want = $modules{$mod}{ver};
my $ver_got = $mod->VERSION;
if ($ver_want && $ver_got && $ver_got < $ver_want) {
push @errors, "Out of date module: $mod (need $ver_want, $ver_got installed)";
}
}
unless (-e "/usr/share/doc/aspell-en" || -e "/usr/local/share/aspell") {
push @errors, "Spell check dictionary not installed?";
push @debs, "aspell-en";
}
unless (-d "$ENV{'LJHOME'}/temp") {
push @errors, "\$LJHOME/temp dir doesn't exist";
}
unless (-d "$ENV{'LJHOME'}/var") {
push @errors, "\$LJHOME/var dir doesn't exist";
}
if (@debs && -e '/etc/debian_version') {
print STDERR "\n# apt-get install ", join(' ', @debs), "\n\n";
}
$err->(@errors);
1;

8
ljcom/bin/db Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
#
# <LJDEP> No dependencies.
# </LJDEP>
mysql -A livejournal

10
ljcom/bin/fixtime Executable file
View File

@@ -0,0 +1,10 @@
#!/bin/sh
#
# <LJDEP>
# prog: ntpdate
# </LJDEP>
/usr/sbin/ntpdate -s tick.nyc.pnap.net tock.pnap.net

21
ljcom/bin/hkill Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/perl
#
# <LJDEP>
# prog: ps, grep
# </LJDEP>
use strict;
my $prog = shift @ARGV;
exit unless ($prog =~ /^[\w\.\/]+$/);
my @procs = `ps awx | grep $prog | grep -v grep | grep -v hkill`;
foreach (@procs)
{
next unless (/^\s*(\d+)\s/);
my $pid = $1;
print $pid, "\n";
kill 1, $pid;
}

BIN
ljcom/bin/jmk.jar Executable file

Binary file not shown.

114
ljcom/bin/ljcontrib.pl Executable file
View File

@@ -0,0 +1,114 @@
#!/usr/bin/perl
# -*-perl-*-
# vim:ts=4:sw=4:et
#
# Tool to add/ack contributions on a livejournal server
#
# Gavin Mogan <halkeye@halkeye.net>
#
use strict;
use LWP::UserAgent;
use Digest::MD5 qw(md5_hex);
use Getopt::Long;
use URI::Escape;
my $CONFFILE = "$ENV{'HOME'}/.ljcontrib.conf";
my ($opt_help, $opt_type, $opt_zilla, $opt_url, $opt_ack );
exit 1 unless GetOptions('help' => \$opt_help,
'zilla|z=s' => \$opt_zilla,
'url|u=s' => \$opt_url,
'type|t=s' => \$opt_type,
'ack|a' => \$opt_ack,
);
if ($opt_help || (@ARGV == 0)) {
print STDERR "Usage: ljcontrib.pl [opts] <user> <description>\n\n";
print STDERR "Options:\n";
print STDERR " --ack Ack a contribution\n";
print STDERR " --zilla=<bug#> [optional] What zilla bug is it for?\n";
print STDERR " --url=<url> [optional] Supply a url for contribution\n";
print STDERR " --type=<type> contrib type: code/doc/creative/biz/other\n";
exit 1;
}
unless (-s $CONFFILE) {
open (C, ">>$CONFFILE"); close C; chmod 0700, $CONFFILE;
print "\nNo ~/.ljcontrib.conf config file found.\nFormat:\n\n";
print "server: www.livejournal.com\n";
print "username: test\n";
print "password: test\n";
exit 1;
}
my %conf;
open (C, $CONFFILE);
while (<C>) {
next if /^\#/;
next unless /\S/;
chomp;
next unless /^(\w+)\s*:\s*(.+)/;
$conf{$1} = $2;
}
close C;
my $commands;
if ($opt_ack) {
die "No ack #\n" unless @ARGV;
my $ackno = $ARGV[0];
$commands = "command=" . uri_escape("contrib ack $ackno");
} else {
die "URL and Zilla are mutually exclusive\n" if ($opt_url && $opt_zilla);
if ($opt_type ne "code" && $opt_type ne "doc" && $opt_type ne "creative" &&
$opt_type ne "biz" && $opt_type ne "other")
{
$opt_type = "other"; # default to other
}
die "No user for ack\n" unless @ARGV;
my $user = $ARGV[0];
die "No description given\n" unless @ARGV == 2;
my $desc = $ARGV[1];
my $url = " ";
$url .= $opt_url if ($opt_url);
$url .= " http://zilla.livejournal.org/show_bug.cgi?id=$opt_zilla" if ($opt_zilla);
$commands = "command=" . uri_escape("contrib add $user $opt_type \"$desc\"$url");
}
# Create a request
my $ua = LWP::UserAgent->new;
$ua->agent("Gavin_Contrib/0.1");
my $req = HTTP::Request->new('POST',"http://$conf{'server'}/interface/flat");
$req->content_type('application/x-www-form-urlencoded');
my $user = "user=" . uri_escape($conf{'username'});
my $pass = "hpassword=" . uri_escape(md5_hex($conf{'password'}));
my $mode = "mode=consolecommand";
my $clientversion = "clientversion=moocow/0.1";
my $data = join('&', $user,$pass,$mode,$commands, $clientversion);
$req->content($data);
my $res = $ua->request($req);
if ($res->is_error) {
die "Error posting to LJ server: " . $res->message . "\n";
}
my %ljres = split(/\n/, $res->content);
if ($ljres{'success'} ne "OK") {
die "Error: " . $ljres{'errmsg'} . "\n";
}
if ($ljres{'cmd_line_1_type'} eq "error") {
die "Error: " . $ljres{'cmd_line_1'} . "\n";
}
print "SUCCESS: contribution added.\n" unless ($opt_ack);
print "SUCCESS: contribution acked.\n" if ($opt_ack);

164
ljcom/bin/ljrpc Executable file
View File

@@ -0,0 +1,164 @@
#!/usr/bin/perl -w
#
# LiveJournal Remote Procedure Call Client (ljrpc)
# Copyright 2001 Dormando (dormando@rydia.net)
# Going to add a license (GPL?) later.
#
#
# This client runs commands you give it at the prompt through the RPC
# system. By default, first it sends out a 'ping', then sends the
# command to any machine that replies to it. Prints out replies it
# gets, too. It can also be invoked with --now, in which case it
# broadcasts the command and exits immediately.
#
# <LJDEP>
# lib: IO::Socket, Getopt::Long
# </LJDEP>
use strict;
use IO::Socket;
use Getopt::Long;
use constant SEC_SLAVE_WAIT => 4;
use lib "$ENV{'LJHOME'}/cgi-bin";
require "ljconfig.pl";
$SIG{CHLD} = 'IGNORE';
my $MAXLEN = 512;
my $PORTNO = 6100;
if ($LJ::BCAST_ADDR) { } # shutup warning
my $bcastaddr = $LJ::BCAST_ADDR || '10.0.0.255';
my ($cmdmsg, $remhost, @hosts);
### option processing
my $timeout = 0;
my $quick = 0;
my $server = "web";
my $ping = 0;
my $delay = 0;
my $serialized = 0;
exit 1 unless
GetOptions('timeout=i' => \$timeout,
'now' => \$quick,
'server=s' => \$server,
'ping' => \$ping,
'serialized|s' => \$serialized,
'dest=s' => \$bcastaddr,
'delay|d=i' => \$delay,
);
my $msg = "@ARGV";
$msg = "cmd: " . $msg;
# Creat socket. Shoot the broadcast off.
my $sock = IO::Socket::INET->new(Proto => 'udp') or die "Creating socket: $!\n";
$sock->sockopt(SO_BROADCAST, 1);
my $ipaddr = inet_aton($bcastaddr);
my $portaddr = sockaddr_in($PORTNO, $ipaddr);
print STDERR "Broadcasting.\n";
if ($quick) {
$sock->send($msg, 0, $portaddr) or die "send: $!\n";
exit 0;
} else {
$sock->send("marco $server", 0, $portaddr) or die "send: $!\n";
}
my $count = 0;
$| = 1;
# First loop, grabs machines that are up.
my %mark;
if ($server eq "web") {
open (O, "$ENV{LJHOME}/cgi-bin/pool_int_web.txt");
while (<O>) {
chomp;
$mark{$_} = 1;
}
close O;
}
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm(SEC_SLAVE_WAIT);
while ($sock->recv($cmdmsg, $MAXLEN)) {
my ($port, $ipaddr) = sockaddr_in($sock->peername);
$remhost = gethostbyaddr($ipaddr, AF_INET) || "";
my $remip = inet_ntoa($ipaddr);
if ($cmdmsg eq "pollo") {
alarm(SEC_SLAVE_WAIT);
$count++;
print "$count: $remhost [$remip]\n";
delete $mark{$remip};
push(@hosts, $remhost);
}
}
alarm(0);
};
print "\n";
if ($ping) {
print "Unreported int_web nodes:\n" if %mark;
foreach (keys %mark) {
print " $_\n";
}
exit;
}
if ($serialized) {
foreach my $host (@hosts) {
printf "Sending: %-30s", "$host ...";
my $ipaddr = inet_aton($host);
my $portaddr = sockaddr_in($PORTNO, $ipaddr);
if ($sock->send($msg, 0, $portaddr)) {
print "sent.\n";
} else {
print "failed.\n";
}
if ($delay) {
sleep $delay;
} else {
$sock->recv($cmdmsg, $MAXLEN);
my ($port, $remipaddr) = sockaddr_in($sock->peername);
$remhost = gethostbyaddr($remipaddr, AF_INET);
print "Server $remhost:\n===============================\n";
print $cmdmsg;
print "\n\n";
}
}
exit;
}
foreach my $host (@hosts) {
printf "Sending: %-30s", "$host ...";
my $ipaddr = inet_aton($host);
my $portaddr = sockaddr_in($PORTNO, $ipaddr);
if ($sock->send($msg, 0, $portaddr)) {
print "sent.\n";
} else {
print "failed.\n";
}
sleep $timeout;
}
print "\n\n";
# Loop receiving command stuffs.
for (my $i = 0; $i < @hosts; $i++) {
$sock->recv($cmdmsg, $MAXLEN);
my ($port, $ipaddr) = sockaddr_in($sock->peername);
$remhost = gethostbyaddr($ipaddr, AF_INET);
# Parse thing.
print "Server $remhost:\n===============================\n";
print $cmdmsg;
print "\n\n";
}

149
ljcom/bin/ljrpcd Executable file
View File

@@ -0,0 +1,149 @@
#!/usr/bin/perl -w
# LiveJournal Remote Procedure Call Daemon (ljrpcd)
# Copyright 2001 Dormando (dormando@rydia.net)
# Going add a license (GPL?) later.
# This daemon forks off into the background, logs if told to
# waits for UDP messages on the given port, and executes
# commands sent to it.
#
# <LJDEP>
# lib: IO::Socket
# prog: bin/ljmaint.pl
# </LJDEP>
use strict;
use IO::Socket;
# Max message length and port to bind.
my $MAXLEN = 512;
my $PORTNO = 6100;
my $PIDFILE = '/var/run/ljrpcd.pid';
my $LOGFILE = '/var/log/ljrpcd.log';
my $TYPE = shift @ARGV;
unless ($TYPE eq "web" || $TYPE eq "db") {
print "Unknown/unspecified machine type, quitting.\n";
exit 1;
}
# Pid and pidfile.
my $pid;
my $is_parent = 1;
# Socket. Needs to be here for the HUP stuff.
my $sock;
# In case we're shot, unlink the pidfile.
$SIG{TERM} = sub {
unlink($PIDFILE);
exit 1;
};
if (-e $PIDFILE) {
open (PID, $PIDFILE);
my $tpid;
chomp ($tpid = <PID>);
close PID;
if ($tpid) {
# so Linux-specific, but Proc::ProcessTable
#iterates over /dev forever, which sucks on a NetApp
if (open (CMD, "/proc/$tpid/cmdline")) {
my $cmdline = <CMD>;
close CMD;
if ($cmdline =~ /ljrpcd/) {
print "Process exists already, quitting.\n";
exit 1;
}
}
}
}
# Print a banner.
print "LiveJournal RPC Daemon starting up into the background...\n";
# Perhaps I should give it a command to not do this in the future.
if ($pid = fork) {
# Parent, log pid and exit.
open(PID, ">$PIDFILE") or die "Couldn't open $PIDFILE for writing: $!\n";
print PID $pid;
close(PID);
print "Closing ($pid) wrote to $PIDFILE\n";
$is_parent = 1;
exit;
} else {
# This is the child, main loop-de-doo.
my($cmdmsg, $remaddr, $remhost);
# HUP signal handler.
$SIG{HUP} = \&restart_request;
open(LOG, ">>$LOGFILE") or die "Couldn't open log file for appending: $!\n";
flock(LOG, 2) or die "Couldn't flock log file for writing: $!\n";
select(LOG); # Why the hell not, eh?
$| = 1;
$sock = IO::Socket::INET->new(LocalPort => "$PORTNO", Proto => 'udp') or die "socket: $@";
$sock->sockopt(SO_BROADCAST, 1);
print "Bound, awaiting UDP commands on port $PORTNO\n";
# Main loop, simple parser.
while ($sock->recv($cmdmsg, $MAXLEN)) {
my ($port, $ipaddr) = sockaddr_in($sock->peername);
my $ip_addy = inet_ntoa($ipaddr);
$remhost = gethostbyaddr($ipaddr, AF_INET);
print "Client $remhost sent command: $cmdmsg\n";
# If the command is 'marco' return 'pollo'
if ($cmdmsg =~ /^marco(\s+($TYPE|all))?$/) {
print "Returning 'pollo' to client $remhost\n";
$sock->send("pollo") or print "Couldn't scream pollo at $remhost\n";
next;
} elsif ($cmdmsg =~ s/^cmd:\s//) {
# Handle the command.
if ($cmdmsg eq "restart") {
print "Restarting ljrpcd\n";
$sock->send("Restarting ljrpcd...\n");
restart_request();
}
my $return = handle_request($cmdmsg);
print "Returning $return to client $remhost\n";
$sock->send($return) or print "Couldn't return $return to $remhost\n";
next;
}
}
die "recv: $!\n";
} #if
# Sub to restart the daemon.
sub restart_request {
$sock->close;
unlink($PIDFILE);
exec($0, $TYPE);
}
# Handle a request... Do further parsing, pass it appropriately.
# Should return a discernable ok. Usually 'done' 'ok' or an
# informative reply no longer than 500 characters.
sub handle_request {
my $cmd = shift;
my $su = "";
if ($cmd =~ s/^(\w+?)://) {
my $user = $1;
my ($login,$pass,$uid,$gid) = getpwnam($user)
or return "$user not in passwd file.";
$su = "su $user -c";
}
unless ($cmd =~ /[\|\>\<]/) {
my $home = $ENV{'LJHOME'} || "/home/lj";
$cmd =~ s/[;]/\\$&/;
if ($su) {
return `$su \'$home/bin/ljmaint.pl $cmd\'`;
} else {
return `$home/bin/ljmaint.pl $cmd`;
}
}
return 'bad command';
}

167
ljcom/bin/ljstatscasterd Executable file
View File

@@ -0,0 +1,167 @@
#!/usr/bin/perl
use strict;
use Getopt::Long;
use IO::Socket::INET;
use IO::Select;
use Time::HiRes qw(time ualarm);
use POSIX ();
my $opt_pidfile;
my $opt_stop;
my $opt_foreground;
exit 1 unless GetOptions('pidfile=s' => \$opt_pidfile,
'stop' => \$opt_stop,
'foreground' => \$opt_foreground,
);
$opt_pidfile ||= "/var/run/ljstatscasterd.pid";
$SIG{TERM} = sub {
unlink($opt_pidfile);
exit 1;
};
my $pid;
if (-e $opt_pidfile) {
open (PID, $opt_pidfile);
chomp ($pid = <PID>);
close PID;
if ($pid) {
if ($opt_stop) {
kill 15, $pid;
print "Stopped.\n";
exit;
}
if (kill(0,$pid)) {
die "Already running as pid: $pid\n";
}
}
}
if ($opt_stop) {
print "already stopped.\n";
exit;
}
require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl";
my ($host, $port, $ipaddr, $portaddr, $sock);
my $TIMEOUT = 1.0; # transmit at least every 1 sec.
if ($LJ::FREECHILDREN_BCAST &&
$LJ::FREECHILDREN_BCAST =~ /^(\S+):(\d+)$/) {
($host, $port) = ($1, $2);
} else {
die "\$LJ::FREECHILDREN_BCAST not defined, nowhere to send";
}
die "Can't write to $opt_pidfile" unless open(PID, ">>$opt_pidfile");
close PID;
unless ($opt_foreground) {
fork && exit 0;
POSIX::setsid() or die "Couldn't become session leader: $!";
fork && exit 0;
}
# Parent, log pid and exit.
unless (open(PID, ">$opt_pidfile")) {
die "Couldn't open $opt_pidfile for writing: $!\n";
}
print PID $$;
close(PID);
print "Started with pid $$\n";
unless ($opt_foreground) {
# Change working dir to the filesystem root, clear the umask
chdir "/";
umask 0;
# Close standard file descriptors and reopen them to /dev/null
close STDIN && open STDIN, "</dev/null";
close STDOUT && open STDOUT, "+>&STDIN";
close STDERR && open STDERR, "+>&STDIN";
}
$sock = IO::Socket::INET->new(Proto => 'udp');
$sock->sockopt(SO_BROADCAST, 1);
$ipaddr = inet_aton($host);
$portaddr = sockaddr_in($port, $ipaddr);
my $insock = IO::Socket::INET->new(Proto=>'udp',
LocalAddr=>"127.0.0.1:$port");
or die "couldn't create socket\n";
$insock->blocking(0);
my $sel = IO::Select->new();
$sel->add($insock);
my ($buf, $last_message);
my $no_servers = 1; # true if there are no servers available
my $last_send;
my $last_free;
my ($type, $message);
sub transmit {
#print "transmitting...\n";
$sock->send($last_message, 0, $portaddr)
if $last_message;
}
my $MAXLEN = 512;
SEL:
while(1) {
my @ready = $sel->can_read($TIMEOUT);
unless (@ready) {
# we got here via a timeout. check to make sure apache-perl
# is still running before actually deciding to transmit more
open (PID, "/var/run/apache-perl.pid") or next; # debian-specific
my $pid = <PID>;
chomp $pid;
close PID;
if (readlink("/proc/$pid/exe") =~ /apache/) {
transmit();
}
next SEL;
}
# assume we shouldn't transmit, until we've decided we should
my $transmit = 0;
# only one handle selected, so we know it's the incoming UDP
my $message;
while ($sock->recv($message, $MAXLEN)) {
$last_message = $message if $message;
}
$message = $last_message;
$message =~ m!free=(\d+)\n!;
my $free = $1;
next SEL if $free == $last_free;
$now = time();
if (defined $free && $now > $last_send + 0.2) {
$transmit = 1;
} elsif (defined $free) {
my $new_no_servers = ($free == 0);
if ($no_servers != $new_no_servers) {
$transmit = 1;
$no_servers = $new_no_servers;
}
} elsif ($message =~ m!shutdown=1!) {
$transmit = 1;
}
if ($transmit) {
$last_send = $now;
$last_free = $free;
transmit();
}
}

662
ljcom/bin/machine_config.pl Executable file
View File

@@ -0,0 +1,662 @@
#!/usr/bin/perl
#
# <LJDEP>
# lib: Sys::Hostname, Getopt::Long, Fcntl::, POSIX::
# </LJDEP>
use strict;
use Sys::Hostname;
use Getopt::Long;
use Fcntl;
use POSIX qw(tmpnam);
my %DEFAULT = (
'search' => 'lj',
'ns1' => '10.2.0.1',
);
my %MACHINE = (
"stan" => {
'ipco' => '10.0.0.3',
'do_web' => 1,
'web_slave' => 1,
'paid_web_slave' => 1,
},
"kyle" => {
'ipco' => '10.0.0.4',
'do_web' => 1,
'web_slave' => 1,
'web_master' => 1,
},
"wendy" => {
'ipco' => '10.0.0.5',
'do_web' => 1,
'web_slave' => 1,
},
"bebe" => {
'ipco' => '10.0.0.6',
'do_web' => 1,
'web_slave' => 1,
},
"terrance" => {
'ipco' => '10.0.0.7',
'do_web' => 1,
'web_slave' => 1,
},
"phillip" => {
'ipco' => '10.0.0.8',
'do_web' => 1,
'web_slave' => 1,
'paid_web_slave' => 1,
},
"ike" => {
'ipco' => '10.0.0.11',
'do_web' => 1,
'web_slave' => 1,
},
"pip" => {
'ipco' => '10.0.0.12',
'do_web' => 1,
'web_slave' => 1,
},
"kenny" => {
'ipco' => '10.0.0.1',
'db_slave' => 1,
},
"cartman" => {
'ipco' => '10.0.0.2',
'db_master' => 1,
},
"mackey" => {
'ipco' => '10.0.0.9',
'db_slave' => 1,
},
"hat" => {
'ipco' => '10.0.0.10',
'db_slave' => 1,
},
"marklar" => {
'ip' => '216.231.32.128',
'ipco' => '10.0.0.15',
'db_slave' => 1,
},
);
my $machine = hostname();
unless ($machine =~ /^lj-(\w+)(\.livejournal\.com)?$/) {
die "Weird hostname.\n";
}
$machine = $1;
my $DRY = 0;
my $HELP = 0;
exit 1 unless GetOptions(
'dryrun|n' => \$DRY,
'help' => \$HELP,
);
if ($HELP || ! defined $MACHINE{$machine}) {
die("Usage: machine_config.pl [opts]\n\nWhere opts can be:\n".
"--dryrun -n Don't change any config files; just show changes.\n".
"--help -h This message.\n");
}
my $host = { %DEFAULT };
$host->{'name'} = $machine;
foreach (keys %{$MACHINE{$machine}}) {
$host->{$_} = $MACHINE{$machine}->{$_};
}
print "Host information: ($host->{'name'})\n";
foreach (sort keys %{$host}) {
printf " %10s : %s\n", $_, $host->{$_};
}
setup_resolve_conf($host);
setup_hosts($host);
setup_httpd($host) if ($host->{'do_web'});
#####################
sub write_file
{
my $file = shift;
my $new = shift;
my $old;
open (IN, $file);
while (<IN>) {
$old .= $_;
}
close IN;
if ($new ne $old) {
if ($DRY) {
my $tmp = tmpnam();
die "temp file exists!\n" if (-e $tmp);
print "$file needs updating!\n";
open (OUT, ">$tmp");
print OUT $new;
close OUT;
print `diff -u $file $tmp`;
unlink $tmp;
} else {
print "Updating: $file\n";
open (OUT, ">$file");
print OUT $new;
close OUT;
}
}
}
sub setup_resolve_conf
{
my $host = shift;
my $file = "/etc/resolv.conf";
my $new;
if (exists($host->{'search'})) {
$new .= "search\t$host->{'search'}\n";
}
foreach my $ns (qw(ns1)) {
next unless ($host->{$ns});
$new .= "nameserver\t$host->{$ns}\n";
}
write_file($file, $new);
}
# NOTE: this used to do a lot more, before we had DNS running
# internally.
sub setup_hosts
{
my $host = shift;
my $file = "/etc/hosts";
my $new;
$new .= "127.0.0.1\tlocalhost\n";
write_file($file, $new);
}
sub setup_httpd
{
my $host = shift;
my $file = "/usr/local/apache/conf/httpd.conf";
my $new;
$new .= <<"END_CONF";
ServerType standalone
ServerRoot "/usr/local/apache"
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
Timeout 30
## keep-alive
KeepAlive Off
MaxKeepAliveRequests 200
KeepAliveTimeout 50
MinSpareServers 15
MaxSpareServers 40
StartServers 170
MaxClients 255
MaxRequestsPerChild 0
# Dynamic Shared Object (DSO) Support
# Note: The order is which modules are loaded is important. Don't change
# the order below without expert advice.
LoadModule vhost_alias_module libexec/mod_vhost_alias.so
LoadModule env_module libexec/mod_env.so
LoadModule config_log_module libexec/mod_log_config.so
#LoadModule mime_magic_module libexec/mod_mime_magic.so
LoadModule mime_module libexec/mod_mime.so
#LoadModule negotiation_module libexec/mod_negotiation.so
LoadModule status_module libexec/mod_status.so
LoadModule info_module libexec/mod_info.so
LoadModule includes_module libexec/mod_include.so
LoadModule autoindex_module libexec/mod_autoindex.so
LoadModule dir_module libexec/mod_dir.so
LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
LoadModule action_module libexec/mod_actions.so
#LoadModule speling_module libexec/mod_speling.so
#LoadModule userdir_module libexec/mod_userdir.so
LoadModule alias_module libexec/mod_alias.so
LoadModule rewrite_module libexec/mod_rewrite.so
LoadModule access_module libexec/mod_access.so
LoadModule auth_module libexec/mod_auth.so
#LoadModule anon_auth_module libexec/mod_auth_anon.so
#LoadModule dbm_auth_module libexec/mod_auth_dbm.so
#LoadModule digest_module libexec/mod_digest.so
#LoadModule proxy_module libexec/libproxy.so
#LoadModule cern_meta_module libexec/mod_cern_meta.so
LoadModule expires_module libexec/mod_expires.so
#LoadModule headers_module libexec/mod_headers.so
LoadModule usertrack_module libexec/mod_usertrack.so
LoadModule unique_id_module libexec/mod_unique_id.so
LoadModule setenvif_module libexec/mod_setenvif.so
LoadModule fastcgi_module libexec/mod_fastcgi.so
#LoadModule php4_module libexec/libphp4.so
# Reconstruction of the complete module list from all available modules
# (static and shared ones) to achieve correct module execution order.
# [WHENEVER YOU CHANGE THE LOADMODULE SECTION ABOVE UPDATE THIS, TOO]
ClearModuleList
AddModule mod_vhost_alias.c
AddModule mod_env.c
AddModule mod_log_config.c
#AddModule mod_mime_magic.c
AddModule mod_mime.c
#AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
#AddModule mod_asis.c
#AddModule mod_imap.c
AddModule mod_actions.c
#AddModule mod_speling.c
#AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
#AddModule mod_auth_anon.c
#AddModule mod_auth_dbm.c
#AddModule mod_digest.c
#AddModule mod_proxy.c
#AddModule mod_cern_meta.c
AddModule mod_expires.c
#AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c
AddModule mod_fastcgi.c
#AddModule mod_php4.c
ExtendedStatus On
Port 80
END_CONF
if ($host->{'ip'} && ! $host->{'web_slave'}) {
$new .= "Listen $host->{'ip'}:80\n";
}
$new .= <<"END_CONF";
Listen $host->{'ipco'}:80
User lj
Group lj
ServerAdmin webmaster\@livejournal.com
ServerName lj-$host->{'name'}.livejournal.com
DocumentRoot "/usr/local/apache/htdocs"
<Location /status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 10.0 66.31.142.7
</Location>
<IfModule mod_dir.c>
DirectoryIndex index.html index.bml
</IfModule>
<Directory "/home/lj">
Options Indexes FollowSymLinks ExecCGI
#for speed, instead of "All"
AllowOverride None
Order allow,deny
Allow from all
</Directory>
SendBufferSize 131072
#######################################
END_CONF
if ($host->{'ip'} && ! $host->{'web_slave'}) {
$new .= "NameVirtualHost $host->{'ip'}:80\n";
}
$new .= <<"END_CONF";
NameVirtualHost $host->{'ipco'}:80
FastCgiSuexec Off
FastCgiConfig -maxClassProcesses 10 -startDelay 1 -idle-timeout 20
END_CONF
if ($host->{'web_master'}) {
$new .= <<"END_CONF";
# site's down message.
Listen 10.0.0.4:81
NameVirtualHost 10.0.0.4:81
<VirtualHost 10.0.0.4:81>
SetEnv LJHOME /home/lj
FastCgiServer /home/lj/sites/sitedown/index.cgi -processes 1
ServerName livejournal.com
ServerAlias *.livejournal.com
DocumentRoot /home/lj/sites/sitedown/
DirectoryIndex index.cgi
ErrorDocument 404 /index.cgi
<Location /index.cgi>
SetHandler fastcgi-script
</Location>
</VirtualHost>
### mrtg.livejournal.com
Listen 10.0.0.4:88
NameVirtualHost 10.0.0.4:88
<VirtualHost 10.0.0.4:88>
SetEnv LJHOME /home/lj
ServerName mrtg.livejournal.com
ServerAlias mrtg.livejournal.com
ServerAdmin webmaster\@livejournal.com
DocumentRoot /home/lj/sites/mrtg/
DirectoryIndex index.cgi
AddHandler cgi-script .cgi
Options -Indexes +ExecCGI
# Putting netsaint's aliases here for now.
Alias /netsaint/ /usr/local/netsaint/share/
ScriptAlias /cgi-bin/netsaint/ /usr/local/netsaint/sbin/
ErrorLog /dev/null
TransferLog /dev/null
</VirtualHost>
END_CONF
}
$new .= " <VirtualHost";
if ($host->{'ip'} && $host->{'web_master'}) {
$new .= " $host->{'ip'}:80";
}
$new .= " $host->{'ipco'}:80>\n";
$new .=" SetEnv LJHOME /home/lj\n";
{
my %fcgi = ('/home/lj/htdocs/users' => 10,
'/home/lj/cgi-bin/log.cgi' => 4,
'/home/lj/cgi-bin/404notfound.cgi' => 1,
'/home/lj/htdocs/customview.cgi' => 4,
'/home/lj/cgi-bin/bmlp.pl' => 7,
'/home/lj/cgi-bin/sbmlp.pl' => 3,
'/home/lj/htdocs/userpic' => 1);
if ($host->{'name'} eq "kenny") {
$fcgi{'/home/lj/htdocs/users'} = 5;
$fcgi{'/home/lj/htdocs/customview.cgi'} = 2;
$fcgi{'/home/lj/cgi-bin/bmlp.pl'} = 4;
$fcgi{'/home/lj/cgi-bin/sbmlp.pl'} = 2;
$fcgi{'/home/lj/cgi-bin/log.cgi'} = 2;
}
foreach my $app (sort keys %fcgi)
{
$new .= " FastCgiServer $app -processes $fcgi{$app} -initial-env LJHOME=/home/lj\n";
}
}
########## rewrite stuff. no interpolation.
$new .= <<'END_CONF';
RewriteEngine on
RewriteLog /home/lj/logs/rewrite.log
RewriteLogLevel 0
RewriteCond %{HTTP_HOST} ^(www\.)?livejournal\.com$ [NC]
RewriteRule ^/~([a-z0-9_]+)(/?.*)$ /users/$1$2 [L,PT,NS]
RewriteCond %{REQUEST_URI} !\.bml
RewriteRule ^/community/([a-z0-9_]+)(/?.*)$ /users/$1$2 [L,PT,NS]
RewriteCond %{HTTP_HOST} ^([a-z0-9_\-]+)\.livejournal\.com$ [NC]
RewriteCond %1 !^www$ [NC]
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([a-z0-9_\-]+)\.livejournal\.com(.+) /users/$1$2 [L,PT,NS]
RewriteCond %{HTTP_HOST} ^(www\.)?livejournal\.com$ [NC]
RewriteRule ^/confirm/([a-z0-9]+\.[a-z0-9]+) http://www.livejournal.com/register.bml?$1 [L,R]
# if they send any Host header with letters (an IP address or blank
# is okay) then it has to be www.livejournal.com or livejournal.com
# (optional port, too)
RewriteCond %{HTTP_HOST} [a-z] [NC]
RewriteCond %{HTTP_HOST} !^(www\.)?livejournal\.com(:[0-9]+)?$ [NC]
RewriteRule . . [F]
END_CONF
$new .= <<"END_CONF";
AddType text/rdf rdf
AddType text/plain TCL
AddType application/x-httpd-cgi CGI
Options +ExecCGI
ServerName lj-$host->{'name'}.livejournal.com
ServerAlias livejournal.com *.livejournal.com
ServerAdmin webmaster\@livejournal.com
DocumentRoot /home/lj/htdocs/
ScriptAlias /cgi-bin/ /home/lj/cgi-bin/
ErrorDocument 403 /403.html
END_CONF
if ($host->{'paid_web_slave'}) {
$new .= " ErrorDocument 500 /500-paid.html\n";
} else {
$new .= " ErrorDocument 500 /500.html\n";
}
$new .= <<"END_CONF";
ErrorDocument 404 /cgi-bin/404notfound.cgi
# RedirectMatch 301 ^/users/?\$ http://www.livejournal.com/directory.bml
AddType text/bml BML
Action text/bml /cgi-bin/bmlp.pl
AddType text/sbml SBML
Action text/sbml /cgi-bin/sbmlp.pl
DirectoryIndex index.html index.bml
SetEnvIf Request_URI "^/img/" no-log
SetEnvIf Request_URI "^/userpic/" no-log
SetEnvIf Request_URI "^/status" no-log
LogFormat "%h %l %u %t \\"%r\\" %s %b \\"%{Referer}i\\" \\"%{User-Agent}i\\" \\"%{Host}i\\"" ljlog
ErrorLog "|/usr/local/apache/bin/rotatelogs /home/lj/logs/error-$host->{'name'} 3600"
CustomLog "|/usr/local/apache/bin/rotatelogs /home/lj/logs/access-$host->{'name'} 3600" ljlog env=!no-log
<Location /cgi-bin/404notfound.cgi>
SetHandler fastcgi-script
</Location>
<Location /userpic>
SetHandler fastcgi-script
</Location>
<Location /users>
SetHandler fastcgi-script
</Location>
<Location /cgi-bin/log.cgi>
ErrorDocument 500 /500-log.html
SetHandler fastcgi-script
</Location>
<Location /cgi-bin/bmlp.pl>
SetHandler fastcgi-script
</Location>
<Location /cgi-bin/sbmlp.pl>
SetHandler fastcgi-script
</Location>
<Location /customview.cgi>
SetHandler fastcgi-script
</Location>
<Directory /home/lj/htdocs/img>
AllowOverride None
Options None
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
</Directory>
<FilesMatch "~\$">
Deny from all
</FilesMatch>
<Directory /home/lj/htdocs/inc/>
Deny from all
</Directory>
<Directory /home/lj/htdocs/admin/brad/>
AuthUserFile /home/lj/pass-gen.txt
AuthName "Brad only area"
AuthType Basic
require user bradfitz
Options +Indexes
</Directory>
<Directory /home/lj/htdocs/files/>
Options -ExecCGI
</Directory>
</VirtualHost>
# backup image server (load balancer will prefer thttpd/tux/etc first)
Listen $host->{'ipco'}:8081
NameVirtualHost $host->{'ipco'}:8081
<VirtualHost $host->{'ipco'}:8081>
ServerName img.livejournal.com
DocumentRoot /home/lj/htdocs/img
DirectoryIndex index.html
Options -ExecCGI
</VirtualHost>
# AccessFileName: The name of the file to look for in each directory
# for access control information.
#
AccessFileName .htaccess
<Files ~ "^\\.ht">
Order allow,deny
Deny from all
</Files>
<Files ~ "~\$">
Order allow,deny
Deny from all
</Files>
<Files ~ "\\.core\$">
Order allow,deny
Deny from all
</Files>
UseCanonicalName Off
<IfModule mod_mime.c>
TypesConfig /usr/local/apache/conf/mime.types
</IfModule>
## MIME
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/local/apache/conf/magic
</IfModule>
HostnameLookups Off
ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/error_log 86400"
LogLevel error
CustomLog /dev/null common
ServerSignature On
<IfModule mod_alias.c>
Alias /icons/ "/usr/local/apache/icons/"
<Directory "/usr/local/apache/icons">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</IfModule>
<IfModule mod_autoindex.c>
#
# FancyIndexing is whether you want fancy directory indexing or standard
#
IndexOptions FancyIndexing SuppressDescription SuppressColumnSorting FoldersFirst NameWidth=*
#
# AddIcon* directives tell the server which icon to show for different
# files or filename extensions. These are only displayed for
# FancyIndexed directories.
#
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/rpm.gif .rpm
AddIcon /icons/debian.gif .deb
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
#
# DefaultIcon is which icon to show for files which do not have an icon
# explicitly set.
#
DefaultIcon /icons/unknown.gif
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* RCS CVS *,v *,t
</IfModule>
<IfModule mod_mime.c>
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddType application/x-tar .tgz
</IfModule>
<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
</IfModule>
END_CONF
write_file($file, $new);
}

View File

@@ -0,0 +1,13 @@
#!/usr/bin/perl
#
$maint{'makealiases'} = sub
{
my $dbh = LJ::get_dbh("master");
foreach (keys %LJ::FIXED_ALIAS) {
$dbh->do("REPLACE INTO email_aliases (alias, rcpt) VALUES (?,?)",
undef, "$_\@$LJ::USER_DOMAIN", $LJ::FIXED_ALIAS{$_});
}
};
1;

View File

@@ -0,0 +1,14 @@
#!/usr/bin/perl
#
$maint{'clean_caches_local'} = sub
{
my $dbh = LJ::get_db_writer();
my $verbose = $LJ::LJMAINT_VERBOSE;
print "-I- Cleaning authactions.\n";
$dbh->do("DELETE FROM authactions WHERE datecreate < DATE_SUB(NOW(), INTERVAL 30 DAY)");
};
1;

View File

@@ -0,0 +1,80 @@
#!/usr/bin/perl
#
$maint{'dirsync'} = sub
{
use File::Copy;
my $FROMBASE = "/home/devftp";
my $TOBASE = "/home/lj/htdocs";
my $REWRITE_PERIOD = 3600*2; # for 2 hours, ftp area files can overwrite masters
my $VERBOSE = 0;
print "-I- Connecting to db.\n" if ($VERBOSE);
my $dbr = LJ::get_db_reader();
print "-I- Fetching users with devftp privs.\n" if ($VERBOSE);
my $sth = $dbr->prepare("SELECT u.user, u.userid, pm.arg FROM priv_map pm, priv_list pl, user u WHERE pl.prlid=pm.prlid AND pl.privcode='dirsync' AND pm.userid=u.userid ORDER BY u.user");
$sth->execute;
while (my ($user, $userid, $arg) = $sth->fetchrow_array)
{
print "-I- $user: $arg\n" if ($VERBOSE);
if ($arg =~ /\.\./) { print "-E- ($user) arg contains '..', skipping!\n"; next; }
if ($arg =~ /~/) { print "-E- ($user) arg contains '~', skipping!\n"; next; }
my $opts;
if ($arg =~ s/\s*\[(.+)?\]\s*$//) {
$opts = $1;
}
unless ($arg =~ /^(\S+)=(\S+)$/) { print "-E- arg doesn't match \S+=\S+, skipping!\n"; next; }
my ($from, $to) = ($1, $2);
$to =~ s/\0//; # fuck perl, seriously. why's a NULL in this string?
if ($from =~ /\0/) { die "from has null (0)!\n"; }
if ($to =~ /\0/) { die "to has null (0)!\n"; }
$from = "$FROMBASE/$user/$from";
$to = "$TOBASE/$to";
unless (-d $from) { print "-E- ($user) From directory doesn't exist: $from, skipping!\n"; next; }
unless (-d $to) { print "-E- ($user) To directory doesn't exist: $to, skipping!\n"; next; }
opendir (DIR, $from);
while (my $file = readdir DIR)
{
if ($file eq "." || $file eq ".." || $file =~ /~/ || length($file) > 40) { next; }
my $tofile = "$to/$file";
if ($tofile =~ /\0/) { die "tofile has null (1)!\n"; }
my $fromfile = "$from/$file";
if (-d $fromfile) { next; }
unless (-f $fromfile) { next; }
my $fromtime = (stat($fromfile))[9];
my $totime = (-e $tofile) ? (stat($tofile))[9] : 0;
my $existtime = $totime - $fromtime;
my $allow = 0;
if ($totime == 0) { $allow = 1; }
elsif ($fromtime > $totime) {
if ($existtime < $REWRITE_PERIOD) { $allow = 1; }
elsif ($file =~ /^changelog(\.txt)?$/i ||
$file =~ /^readme(\.txt)?$/i) { $allow = 1; }
elsif ($opts =~ /u/) { $allow = 1; }
}
if ($allow) {
if ($fromfile =~ /\0/) { die "from has null!\n"; }
if ($tofile =~ /\0/) { die "to has null!\n"; }
print "-I- ($user) Copying $file ($fromfile to $tofile)\n";
unless (copy($fromfile, $tofile)) {
print "-E- ($user) Didn't copy! error: $!\n";
}
}
}
}
};
1;

259
ljcom/bin/maint/expiring.pl Normal file
View File

@@ -0,0 +1,259 @@
#!/usr/bin/perl
#
use strict;
use vars qw(%maint);
$maint{'expiring'} = sub
{
require "$ENV{'LJHOME'}/cgi-bin/paylib.pl";
my $dbh = LJ::get_db_writer();
my $sth;
# NOTES:
# We mail people about 10 days before, 3 days before,
# and when their account expires. But because we have
# to plan for this script not running all the time, here
# are the rules/ranges we play by:
#
#
# 10 8 3 2 0
# ------------------------+-----------+.....
# ^-----------^ ^------^ ^>>>>
# "Expiring..." "Soon!" "Expired"
#
# First, expire all accounts t>=0, and email them.
#
# Second, mail all accounts expiring in 2-3 days,
# provided they haven't been mailed in the past 5 days.
# (less than 2 days would be considered too rude,
# considering we'll be mailing them again in a day
# or so to say it expired.)
#
# Third, mail all accounts expiring 8-10 days, again
# if they haven't been mailed in past 5 days.
# what time is it on the database?
my $nowu = $dbh->selectrow_array("SELECT UNIX_TIMESTAMP()");
if (abs($nowu - time()) > 30*60) {
die "Database and host clock differ too much. Something might be wrong.\n";
}
# do expirations
print "-I- Doing expirations.\n";
# paid accounts
$sth = $dbh->prepare("SELECT userid FROM paiduser ".
"WHERE paiduntil < NOW() AND paiduntil > '0000-00-00'");
$sth->execute;
die $dbh->errstr if $dbh->err;
while (my ($userid) = $sth->fetchrow_array)
{
# about to modify account, get a lock on the user,
# try again later if we fail to get a lock
next unless LJ::Pay::get_lock($userid);
# re-verify $u object and skip if the expiration data no longer matches
my $u = $dbh->selectrow_hashref("SELECT u.* FROM user u, paiduser pu ".
"WHERE pu.userid=? AND u.userid=pu.userid AND u.caps&16=0 AND ".
" pu.paiduntil < NOW() AND pu.paiduntil > '0000-00-00'",
undef, $userid);
unless ($u) {
LJ::Pay::release_lock($userid);
next;
}
# expire the account
print "Expiring $u->{'user'}...\n";
# remove paid time, this %res is coming from LJ::Pay::freeze_bonus
my $bonus_ref = [];
my $res = LJ::Pay::remove_paid_account($u, $bonus_ref);
# release lock on this account
LJ::Pay::release_lock($userid);
# did an error occur above?
unless ($res) {
LJ::statushistory_add($userid, undef, "pay_modify",
"error trying to expire paid account");
next;
}
# and send them an email, if they're not self-deleted/suspended
if ($u->{'statusvis'} eq "V") {
my $bonus_msg;
if (@$bonus_ref) {
$bonus_msg = "Additionally, the following bonus features have been deactivated " .
"from your account. Any remaining time has been saved and will " .
"be reapplied if you later decide to renew your paid account.\n\n" .
join("\n", map { " - " . LJ::Pay::product_name($_->{'item'}, $_->{'size'}, undef, "short") .
": $_->{'daysleft'} days saved" }
sort { $a->{'item'} cmp $b->{'item'} } @$bonus_ref) . "\n\n";
}
# email the user
LJ::send_mail({ 'to' => $u->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => 'Paid Account Expired',
'body' => ("Your $LJ::SITENAMESHORT paid account for user \"$u->{'user'}\" has expired.\n\n".
$bonus_msg .
"You can continue to use the site, but without all the paid features. If ".
"you'd like to renew your subscription, visit:\n\n".
" $LJ::SITEROOT/pay/\n\n".
"And if you have any questions or requests, feel free to ask. We want ".
"to keep you happy. :)\n\n".
"Thanks,\n".
"$LJ::SITENAMESHORT Team\n"),
});
}
}
# bonus features
$sth = $dbh->prepare("SELECT userid, item, size FROM paidexp " .
"WHERE (daysleft=0 OR daysleft IS NULL) AND ".
" expdate < NOW() AND expdate > '0000-00-00'");
$sth->execute;
die $dbh->errstr if $dbh->err;
while (my ($userid, $item, $size) = $sth->fetchrow_array)
{
# get a u object
my $u = LJ::load_userid($userid, "force");
# going to modify this account, get a lock.
# but try again later if we can't get one
next unless LJ::Pay::get_lock($userid);
# expire the feature
print "Expiring $u->{'user'} bonus feature: $item..\n";
# expire this bonus feature
my $res = LJ::Pay::expire_bonus($userid, $item);
# finished doing account modifications
LJ::Pay::release_lock($userid);
# an error occurred above, log to statushistory
unless ($res) {
LJ::statushistory_add($userid, undef, "pay_modify",
"error trying to expire bonus feature: $item");
next;
}
# and send them an email, if they're not self-deleted/suspended
if ($u->{'statusvis'} eq "V") {
my $name = LJ::Pay::product_name($item, $size, undef, "short");
LJ::send_mail({ 'to' => $u->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => 'Bonus Feature Expired',
'body' => ("$u->{'name'},\n\n".
"The following bonus feature of your $LJ::SITENAMESHORT paid " .
"account for user \"$u->{'user'}\" has expired.\n\n" .
" - $name\n\n" .
"If you'd like this feature reactivated, you can " .
"renew your subscription. To do so, visit:\n\n" .
" $LJ::SITEROOT/pay/\n\n".
"Thanks,\n".
"$LJ::SITENAMESHORT Team\n"),
});
}
}
# do reminders
foreach my $range ([2,3,"warn"], [8,10,"soon"]) {
my $rlo = $range->[0];
my $rhi = $range->[1];
my $level = $range->[2];
# expiring paid accounts
my $subject = $level eq "soon" ? "Account Expiring Soon" : "Account Expiration Warning";
print "-I- Do $rlo-$rhi day reminders...\n";
$sth = $dbh->prepare("SELECT u.*, pu.paiduntil, pu.paidreminder ".
"FROM user u, paiduser pu ".
"WHERE u.userid=pu.userid AND u.caps&16=0 AND u.caps&8 ".
"AND u.statusvis='V' ".
"AND pu.paiduntil BETWEEN DATE_ADD(NOW(), INTERVAL $rlo DAY) ".
"AND DATE_ADD(NOW(), INTERVAL $rhi DAY) ".
"AND (pu.paidreminder IS NULL ".
"OR pu.paidreminder < DATE_SUB(NOW(), INTERVAL 5 DAY))");
$sth->execute;
die $dbh->errstr if $dbh->err;
while (my $u = $sth->fetchrow_hashref)
{
my $uexp = LJ::mysqldate_to_time($u->{'paiduntil'});
my $days = int(($uexp - $nowu) / 86400 + 0.5);
print "Mailing user $u->{'user'} about $days days...\n";
$dbh->do("UPDATE paiduser SET paidreminder=NOW() WHERE userid=?", undef, $u->{'userid'});
LJ::send_mail({ 'to' => $u->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => $subject,
'body' => ("$u->{'name'},\n\n".
"Your $LJ::SITENAMESHORT paid account for user \"$u->{'user'}\" is expiring ".
"in $days days, at which time it'll revert to free account status.\n\n".
"If you're still using and enjoying the site, please renew your ".
"subscription before it runs out and help support the project. ".
"(Servers and bandwidth don't come free, unfortunately...)\n\n".
" $LJ::SITEROOT/pay/\n\n".
"And if you have any questions or requests, feel free to ask. We want ".
"to keep you happy. :)\n\n".
"Thanks,\n".
"$LJ::SITENAMESHORT Team\n"),
});
}
# expiring bonus feature reminders
my $subject = $level eq "soon" ? "Subscription Expiring Soon" : "Subscription Expiration Warning";
$sth = $dbh->prepare("SELECT u.*, px.item, px.size, px.expdate FROM user u, paidexp px ".
"WHERE u.userid=px.userid AND u.statusvis='V' AND ".
" px.expdate BETWEEN DATE_ADD(NOW(), INTERVAL $rlo DAY) AND ".
" DATE_ADD(NOW(), INTERVAL $rhi DAY)".
" AND (px.lastmailed IS NULL ".
" OR px.lastmailed < DATE_SUB(NOW(), INTERVAL 5 DAY))");
$sth->execute;
die $dbh->errstr if $dbh->err;
while (my $u = $sth->fetchrow_hashref)
{
my $expdate = LJ::mysqldate_to_time($u->{'expdate'});
my $days = int(($expdate - $nowu) / 86400 + 0.5);
print "Mailing user $u->{'user'} about $days days...\n";
$dbh->do("UPDATE paidexp SET lastmailed=NOW() WHERE userid=? AND item=?",
undef, $u->{'userid'}, $u->{'item'});
my $bonus_name = LJ::Pay::product_name($u->{'item'}, $u->{'size'}, undef, "short");
LJ::send_mail({ 'to' => $u->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => $subject,
'body' => ("$u->{'name'},\n\n".
"Your $LJ::SITENAMESHORT paid account for user \"$u->{'user'}\" has ".
"bonus features expiring soon. In $days days, your ".
"$bonus_name will expire and you will be reverted to the standard ".
"set of features included with your paid account.\n\n".
"If you're still using and enjoying your $bonus_name, please ".
"renew your subscription at the $LJ::SITENAMESHORT store:\n\n".
" $LJ::SITEROOT/pay/\n\n".
"If you have any further questions, feel free to ask. We'll do our ".
"best to help.\n\n".
"Thanks,\n".
"$LJ::SITENAMESHORT Team\n"),
});
}
}
print "-I- Done.\n";
};
1;

View File

@@ -0,0 +1,84 @@
#!/usr/bin/perl
#
$maint{'clean_intdups'} = sub
{
my $dbh = LJ::get_dbh("master");
my ($sth);
my @dups;
print "-I- Cleaning duplicates.\n";
foreach my $let ('a'..'z', '0'..'9')
{
print "-I- Letter $let\n";
$sth = $dbh->prepare("SELECT interest, COUNT(*) AS 'count' FROM interests WHERE interest LIKE '$let%' GROUP BY 1 HAVING count > 1");
$sth->execute;
while (($interest, $count) = $sth->fetchrow_array)
{
print " $interest has $count\n";
push @dups, $interest;
}
}
foreach my $dup (@dups) {
print "Fixing: $dup\n";
my $min = 0;
my @fix = ();
my $qdup = $dbh->quote($dup);
$sth = $dbh->prepare("SELECT intid FROM interests WHERE interest=$qdup ORDER BY intid");
$sth->execute;
while (my ($id) = $sth->fetchrow_array) {
if ($min) { push @fix, $id; }
else { $min = $id; }
}
if (@fix) {
my $in = join(",", @fix);
# change duplicate interests to the minimum, ignoring duplicates.
$sth = $dbh->prepare("UPDATE IGNORE userinterest SET intid=$min WHERE intid IN ($in)");
$sth->execute;
# delete ones that had duplicate key conflicts and didn't change
$sth = $dbh->prepare("DELETE FROM userinterest WHERE intid IN ($in)");
$sth->execute;
# update the intcount column
$sth = $dbh->prepare("REPLACE INTO interests (intid, interest, intcount) SELECT intid, $qdup, COUNT(*) FROM userinterests WHERE intid=$min GROUP BY 1, 2");
$sth->execute;
# delete from interests table
$sth = $dbh->prepare("DELETE FROM interests WHERE intid IN ($in)");
$sth->execute;
}
print " @fix --> $min\n";
}
};
$maint{'clean_intcounts'} = sub
{
my $dbh = LJ::get_dbh("master");
my ($sth);
$sth = $dbh->prepare("SELECT MAX(intid) FROM userinterests");
$sth->execute;
my ($max) = $sth->fetchrow_array;
print "Fixing intcounts, up to intid=$max\n";
for (my $i=1; $i < $max; $i += 5000)
{
my $low = $i;
my $high = $i+4999;
print "$low..$high:\n";
$sth = $dbh->prepare("SELECT ui.intid, i.intcount, COUNT(*) AS 'count' FROM userinterests ui, interests i WHERE i.intid=ui.intid AND ui.intid BETWEEN $low AND $high GROUP BY 1, 2 HAVING i.intcount<>COUNT(*)");
$sth->execute;
while (my ($intid, $wrong, $count) = $sth->fetchrow_array) {
print " $intid: $count, not $wrong\n";
$dbh->do("UPDATE interests SET intcount=$count WHERE intid=$intid");
}
}
};
1;

215
ljcom/bin/maint/ljadmin.pl Normal file
View File

@@ -0,0 +1,215 @@
#!/usr/bin/perl
#
use SOAP::Lite;
sub SOAP::Transport::HTTP::Client::get_basic_credentials
{
return $LJ::BIGIP_USER => $LJ::BIGIP_PASS;
}
$maint{'echo'} = sub
{
my (@args) = @_;
print "echo: @args\n";
};
$maint{'echosleep'} = sub
{
my ($sleep, @args) = @_;
print "echosleep: @args\n";
sleep $sleep;
};
$maint{'debug'} = sub
{
my (@args) = @_;
print "debug: @args\n";
print "\$LJ::HOME = $LJ::HOME\n";
print "whoami? ", `whoami`;
print "\$< = $<, \$> = $>\n";
print "ENV:\n";
foreach (keys %ENV) {
print " $_ = $ENV{$_}\n";
}
};
$maint{'apgrace'} = sub
{
unless ($> == 0) {
print "Only root can restart apache\n";
return 0;
}
print "Gracefully restarting apache...\n";
system("/usr/sbin/apachectl", "graceful");
print "Done.\n";
};
$maint{'appgrace'} = sub
{
unless ($> == 0) {
print "Only root can restart apache-perl\n";
return 0;
}
print "Gracefully restarting apache-perl...\n";
system("/usr/sbin/apache-perl-ctl", "graceful");
print "Done.\n";
};
$maint{'appss'} = sub
{
unless ($> == 0) {
print "Only root can stop/start apache-perl\n";
return 0;
}
open (BC, "$ENV{'LJHOME'}/.bigip_soap.conf");
my $line = <BC>;
chomp $line;
($LJ::BIGIP_HOST, $LJ::BIGIP_PORT, $LJ::BIGIP_USER, $LJ::BIGIP_PASS)
= split(/\s+/, $line);
close BC;
my $soap;
if ($LJ::BIGIP_HOST) {
$soap = SOAP::Lite
-> uri('urn:iControl:ITCMLocalLB/Node')
-> readable(1)
-> proxy("https://${LJ::BIGIP_HOST}:${LJ::BIGIP_PORT}/iControl/iControlPortal.cgi");
}
my $ifconfig = `/sbin/ifconfig -a`;
my $ip;
if ($ifconfig =~ /addr:(10\.0\.\S+)/) {
$ip = $1;
}
my $node_config = sub {
return 0 unless $soap && $ip;
my $state = shift;
$state = $state ? 1 : 0;
my $node_definition = { address => $ip, port => 80 };
my $soap_response = $soap->set_state(SOAP::Data->name(node_defs => ( [$node_definition] )),
SOAP::Data->name(state => $state));
if ($soap_response->fault) {
print $soap_response->faultcode, " ", $soap_response->faultstring, "\n";
return 0;
}
return 1;
};
print "Stopping & starting apache-perl...\n";
if ($node_config->(0)) {
print "Node disabled on BIG-IP.\n";
}
system("/usr/sbin/apache-perl-ctl", "stop");
while (-e "/var/run/apache-perl.pid") {
sleep 1;
}
system("/usr/sbin/apache-perl-ctl", "start");
if ($node_config->(1)) {
print "Node enabled on BIG-IP.\n";
}
print "Done.\n";
};
$maint{'sshkick'} = sub
{
unless ($> == 0) {
print "Only root can stop/start ssh\n";
return 0;
}
print "Stopping & starting ssh...\n";
system("/etc/init.d/ssh", "restart");
print "Done.\n";
};
$maint{'statscaster_restart'} = sub
{
unless ($> == 0) {
print "Only root can stop/start statscaster\n";
return 0;
}
print "Stopping & starting statscaster...\n";
system("cp", "$ENV{LJHOME}/bin/lj-init.d/ljstatscasterd", "/etc/init.d/ljstatscasterd");
system("chmod", "+x", "/etc/init.d/ljstatscasterd");
system("/etc/init.d/ljstatscasterd", "restart");
print "Done.\n";
};
$maint{'aprestart'} = sub
{
unless ($> == 0) {
print "Only root can restart apache\n";
return 0;
}
print "Restarting apache...\n";
system("/usr/sbin/apachectl", "restart");
print "Done.\n";
};
$maint{'hupcaches'} = sub
{
if ($> == 0) {
print "Don't run this as root.\n";
return 0;
}
foreach my $proc (qw(404notfound.cgi users customview.cgi bmlp.pl interface))
{
print "$proc...";
print `$LJ::BIN/hkill $proc | wc -l`;
}
};
$maint{'restartapps'} = sub
{
if ($> == 0) {
print "Don't run this as root.\n";
return 0;
}
my $pid;
if ($pid = fork)
{
print "Started.\n";
return 1;
}
foreach my $proc (qw(404notfound.cgi users customview.cgi interface)) {
system("$LJ::BIN/pkill", $proc);
}
};
$maint{'load'} = sub
{
print ((`w`)[0]);
};
$maint{'date'} = sub
{
print ((`date`)[0]);
};
$maint{'exposeconf'} = sub
{
print "-I- Copying configuration files to /misc/conf\n";
my @files = qw(
/usr/src/sys/i386/conf/KENNYSMP kernel-config.txt
/etc/postfix/main.cf postfix-main.cf.txt
/etc/postfix/master.cf postfix-master.cf.txt
);
while (@files) {
my $src = shift @files;
my $dest = shift @files;
print "$src -> $dest\n";
system("cp", $src, "$LJ::HTDOCS/misc/conf/$dest");
}
print "done.\n";
};

10
ljcom/bin/maint/moods.pl Normal file
View File

@@ -0,0 +1,10 @@
#!/usr/bin/perl
#
$maint{'makemoodindexes'} = sub
{
print "-I- Making mood index files.\n" if $VERBOSE;
system("find $LJ::HTDOCS/img/mood/ -type d -exec makemoodindex.pl {} \\;");
};
1;

713
ljcom/bin/maint/pay.pl Normal file
View File

@@ -0,0 +1,713 @@
#!/usr/bin/perl
#
use strict;
use vars qw(%maint);
$maint{'pay_mail'} = sub
{
require "$ENV{'LJHOME'}/cgi-bin/paylib.pl";
my $dbh = LJ::get_db_writer();
my $sth;
my $now = time();
# we don't mail receipts (yet?) to non-users paying, or carts w/ no price (eg coppa verifications)
$dbh->do("UPDATE payments SET mailed='X' WHERE mailed='N' AND forwhat='cart' AND (userid=0 OR amount=0)");
$sth = $dbh->prepare("SELECT u.user, u.email, u.name, p.* FROM payments p, user u ".
"WHERE p.userid=u.userid AND p.mailed='N' ".
"AND (IFNULL(p.giveafter,0) = 0 OR $now >= p.giveafter)");
$sth->execute;
die $dbh->errstr if $dbh->err;
while (my $p = $sth->fetchrow_hashref)
{
my $note_msg = sub {
return "" unless $p->{'notes'};
# this will get run through Text::Wrap when it's emailed
my $notes = $p->{'notes'};
$notes =~ s/\n/\n /g;
return "Here are some notes associated with this payment:\n\n" .
" $notes\n\n";
};
if ($p->{'forwhat'} eq "cart") {
my $cart = "$p->{'payid'}-$p->{'anum'}";
LJ::send_mail({
'to' => $p->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "Payment received (Order $cart)",
'body' => ("Your payment of \$$p->{'amount'} for order $cart was received and the order is now being processed.\n\n".
"For your reference, you can view the order here:\n\n".
" $LJ::SITEROOT/pay/?c=$cart\n\n".
$note_msg->() .
"We thank you for supporting the site,\n\n".
"$LJ::SITENAMESHORT Team"
)});
$dbh->do("UPDATE payments SET mailed='Y' WHERE payid=$p->{'payid'}");
next;
}
if ($p->{'forwhat'} eq "rename") {
my $token = LJ::Pay::new_rename_token($dbh, $p->{'payid'})
or next;
LJ::send_mail({
'to' => $p->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "Rename Token",
'body' => ("Here is the username rename token you purchased:\n\n".
" $token\n\n".
"You can use it here:\n\n".
" $LJ::SITEROOT/rename/use.bml?token=$token\n\n".
"For more information regarding account renames, read:\n\n".
" $LJ::SITEROOT/rename/\n\n".
$note_msg->() .
"$LJ::SITENAMESHORT Team"
),
});
$dbh->do("UPDATE payments SET mailed='Y', used='Y' WHERE payid=$p->{'payid'}");
next;
}
my $howmany = $p->{'months'} == 99 ? "UNLIMITED" : $p->{'months'};
print "$p->{'payid'}: Mailing $p->{'email'} ($howmany) ...\n";
$p->{'notes'} =~ s/\r//g;
my $msg;
$msg .= "$p->{'name'} ...\n\n";
$msg .= "Your $LJ::SITENAMESHORT payment of \$$p->{'amount'} was received $p->{'daterecv'}";
if ($p->{'forwhat'} eq "account") {
$msg .= " and your account has been credited with $howmany more months";
}
$msg .= ".\n\n";
$msg .= $note_msg->();
$msg .= "We thank you for supporting the site,\n\n$LJ::SITENAMESHORT Team";
LJ::send_mail({
'to' => $p->{'email'},
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "$LJ::SITENAMESHORT Payment Received -- \#$p->{'payid'}",
'body' => $msg,
});
$dbh->do("UPDATE payments SET mailed='Y' WHERE payid=$p->{'payid'}");
}
};
$maint{'pay_updateaccounts'} = sub
{
require "$ENV{'LJHOME'}/cgi-bin/paylib.pl";
my $dbh = LJ::get_db_writer()
or die "Could not contact global database master";
# for some reason, use of purchased codes doesn't always apply payment
# to account when it's created. some code path involved when paypal
# servers are being lame isn't as robust, or something. in any case,
# this query fixes it:
my $sth = $dbh->prepare
("SELECT ac.rcptid, p.payid ".
"FROM acctcode ac, acctpay ap, payments p ".
"WHERE p.userid=0 AND p.used='N' AND p.payid=ap.payid AND ".
" ap.acid=ac.acid AND ac.rcptid <> 0");
$sth->execute;
while (my ($userid, $payid) = $sth->fetchrow_array) {
$dbh->do("UPDATE payments SET userid=$userid WHERE payid=$payid AND userid=0");
print "Fix payid=$payid to userid=$userid.\n";
}
# and now, back to what this maint task is supposed to do:
my $now = time();
$sth = $dbh->prepare("SELECT payid, userid, months, forwhat, amount, method, datesent ".
"FROM payments WHERE used='N' ".
"AND (IFNULL(giveafter,0) = 0 OR $now >= giveafter)");
$sth->execute;
die $dbh->errstr if $dbh->err;
my @used = ();
while (my $p = $sth->fetchrow_hashref)
{
my $userid = $p->{'userid'};
# check userids of all the affected clusterids before deciding whether to process this payment
my %userids = $userid ? ($userid => 1) : ();
if ($p->{'forwhat'} eq 'cart') {
my $s = $dbh->prepare("SELECT rcptid FROM payitems WHERE payid=? AND rcptid>0");
$s->execute($p->{'payid'});
die $dbh->errstr if $dbh->err;
while (my $uid = $s->fetchrow_array) {
$userids{$uid} = 1;
}
}
if (%userids) {
# call into LJ::load_userids_multi() to get clusterids for these users
# -- cheap because we load all payment userids later during processing
my $users = LJ::load_userids(keys %userids);
# verify we can get all of the handles necessary to complete this request
my $dirty = 0;
foreach (values %$users) {
$dirty = $_->{clusterid}, last unless $_->writer;
}
if ($dirty) {
print "Cluster $dirty unreachable, skipping payment: $p->{payid}\n";
next;
}
}
print "Payment: $p->{'payid'} ($p->{'forwhat'})\n";
# mail notification of large orders... but only if it was automatically processed
if ($LJ::ACCOUNTS_EMAIL && $LJ::LARGE_ORDER_NOTIFY &&
($p->{'method'} eq "cc" || $p->{'method'} eq "paypal") &&
$p->{'amount'} > $LJ::LARGE_ORDER_NOTIFY) {
my $dollars = sub { sprintf("\$%.02f", shift()) };
print "Sending large order notification: " . $dollars->($p->{'amount'}) . "\n";
LJ::send_mail({
'to' => $LJ::ACCOUNTS_EMAIL,
'from' => $LJ::ACCOUNTS_EMAIL,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "Large order processed: " . $dollars->($p->{'amount'}) .
" [payid: $p->{'payid'}]",
'body' => "This warning has been sent because the following order of over " .
$dollars->($LJ::LARGE_ORDER_NOTIFY) .
" has been processed on $LJ::SITENAMESHORT.\n\n" .
" Amount: " . $dollars->($p->{'amount'}) . "\n" .
" Payid: $p->{'payid'}\n" .
" Method: $p->{'method'}\n" .
" Date Sent: $p->{'datesent'}\n\n"
});
}
# park this payment as used
push @used, $p->{'payid'};
# if a cart, mark each item in the cart as ready to be processed,
# then we'll do that below.
if ($p->{'forwhat'} eq "cart") {
$dbh->do("UPDATE payitems SET status='pend' WHERE ".
"payid=? AND status='cart'", undef, $p->{'payid'});
next;
}
### legacy support from here on.
# needs to be for a user
next unless $userid;
# if permanent account, ignore this legacy (non-cart) payment
my $u = LJ::load_userid($userid);
next if $u->{'caps'} & (1 << $LJ::Pay::capinf{'perm'}->{'bit'});
# if there is an error adding paid months, remove from used list
# so we'll try again later
unless (LJ::Pay::add_paid_months($userid, $p->{'months'})) {
pop @used;
}
}
# @used is only populated in legacy (non-cart) case
if (@used) {
my $usedin = join(", ", @used);
$dbh->do("UPDATE payments SET used='Y' WHERE payid IN ($usedin)");
}
my %pay;
my $get_payment = sub {
my $id = shift;
return $pay{$id} if $pay{$id};
return $pay{$id} =
$dbh->selectrow_hashref("SELECT * FROM payments WHERE payid=?",
undef, $id);
};
# get pending cart items
my %payitems = ( 'paidacct' => [], 'other' => [] );
$sth = $dbh->prepare("SELECT * FROM payitems WHERE status='pend'");
$sth->execute;
while (my $pi = $sth->fetchrow_hashref) {
my $key = $pi->{'item'} eq 'perm' ? 'perm' :
$pi->{'item'} eq 'paidacct' ? 'paidacct' : 'other';
push @{$payitems{$key}}, $pi;
}
my %bonus_failure = ();
# paid accounts are special because they have to apply before bonus features
foreach my $pi (@{$payitems{'perm'}}, @{$payitems{'paidacct'}}, @{$payitems{'other'}}) {
next if $pi->{'giveafter'} > $now; # delayed payment
my $pp = $get_payment->($pi->{'payid'});
my $bu = LJ::load_userid($pp->{'userid'}); # buying user, no force needed
my $email = $pi->{'rcptemail'};
my $ru; # rcpt user
if ($pi->{'rcptid'}) {
$ru = LJ::load_userid($pi->{'rcptid'}, "force");
$email = $ru->{'email'};
}
# optional gift header
my $msg;
if ($bu && $bu->{'userid'} != $pi->{'rcptid'}) {
if ($pi->{'anon'}) {
$msg .= "(the following is an anonymous gift)\n\n"
} else {
$msg .= "(the following is a gift from $LJ::SITENAMESHORT user \"$bu->{'user'}\")\n\n";
}
}
my ($token, $tokenid);
my $close = sub {
$dbh->do("UPDATE payitems SET status='done', token=?, tokenid=? ".
"WHERE piid=? AND status='pend'", undef, $token,
$tokenid, $pi->{'piid'});
};
# paid/perm accounts
if ($pi->{'item'} eq "paidacct" || $pi->{'item'} eq "perm") {
my $isacct = $pi->{'item'} eq "paidacct";
my $has_perm = $ru && $ru->{'caps'} & (1 << $LJ::Pay::capinf{'perm'}->{'bit'});
# send 'em a token
if ($pi->{'rcptid'} == 0 || $has_perm) { # rcpt is an email address, or perm acct
$token = LJ::acct_code_generate($bu ? $bu->{userid} : 0);
my ($acid, $auth) = LJ::acct_code_decode($token);
$dbh->do("INSERT INTO acctpayitem (piid, acid) VALUES (?,?)",
undef, $pi->{'piid'}, $acid);
$tokenid = $acid;
my $what;
if ($isacct) {
$what = "$pi->{'qty'} month(s) of paid account time";
} else {
$what = "a permanent account";
}
$msg .= "The following code will give $what to any $LJ::SITENAMESHORT account:\n\n";
$msg .= " $token\n\n";
$msg .= "To apply it to an existing account, visit:\n\n";
$msg .= " $LJ::SITEROOT/paidaccounts/apply.bml?code=$token\n\n";
$msg .= "To create a new account using it, visit:\n\n";
$msg .= " $LJ::SITEROOT/create.bml?code=$token\n\n";
LJ::send_mail({
'to' => $email,
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => $isacct ? "Paid account" : "Permanent account",
'body' => $msg,
});
$close->();
# don't need to release lock, no rcptid
next;
}
# just set it up now, and tell them it's done.
# no need to release lock since no $ru anyway
next unless $ru;
my $mo;
$mo = $pi->{'qty'} if $isacct;
$mo = 99 if $pi->{'item'} eq "perm";
my $bonus_ref = [];
# modifying paid account status, need to get a lock on the account,
# try again later if we fail to get a lock
next unless LJ::Pay::get_lock($ru);
my $res = LJ::Pay::add_paid_months($ru->{'userid'}, $mo, $bonus_ref);
# finished modifying account, can unconditionally release lock and finish payitem now
LJ::Pay::release_lock($ru);
# some sort of error occurred, log to payvars and try again later
unless ($res) {
LJ::Pay::payvar_append($pi->{'payid'}, "error",
"[" . LJ::mysql_time() . "] unable to apply: item=$pi->{'item'}, qty=$pi->{'qty'}.");
next;
}
# account changes were successful: close transaction, only need to send email now
$close->();
# finish composing email to send to user
my $bonus_added;
if (@$bonus_ref) {
$bonus_added = "Additionally, the following previously deactivated bonus features\n" .
"have been reactivated so you can use the time remaining on them:\n\n" .
join("\n", map { " - " . LJ::Pay::product_name($_->{'item'}, $_->{'size'}, undef, "short") .
": $_->{'daysleft'} days applied" }
sort { $a->{'item'} cmp $b->{'item'} } @$bonus_ref) .
"\n\n";
}
if ($isacct) {
$msg .= "$mo months of paid account time have been added to your $LJ::SITENAMESHORT account for user \"$ru->{'user'}\".\n\n$bonus_added$LJ::SITENAMESHORT Team";
} else {
$msg .= "Your $LJ::SITENAMESHORT account \"$ru->{'user'}\" has been upgraded to a permanent account.\n\n$bonus_added$LJ::SITENAMESHORT Team";
}
# send notification email
LJ::send_mail({
'to' => $email,
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => $isacct ? "Paid Account" : "Permanent Account",
'body' => $msg,
});
next;
}
# rename tokens
elsif ($pi->{'item'} eq "rename") {
next unless ($token, $tokenid) = LJ::Pay::new_rename_token($dbh, $pp->{'payid'});
# send email notification
LJ::send_mail({
'to' => $email,
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "Rename Token",
'body' => "${msg}$LJ::SITENAMESHORT username rename token:\n\n".
" $token\n\n".
"You can use it here:\n\n".
" $LJ::SITEROOT/rename/use.bml?token=$token\n\n".
"For more information regarding account renames, read:\n\n".
" $LJ::SITEROOT/rename/\n\n".
"$LJ::SITENAMESHORT Team",
});
$close->();
next;
}
# clothing items
elsif ($pi->{'item'} eq "clothes") {
$dbh->do("INSERT IGNORE INTO shipping (payid, status, dateready) VALUES (?, 'needs', NOW())",
undef, $pp->{'payid'}) and $close->();
next;
}
# coupons
elsif ($pi->{'item'} eq "coupon") {
# subitem used to be type-dollaramount, but that was redundant
my ($type) = split('-', $pi->{'subitem'});
# If amt < 0, this item is a previously purchased coupon being applied
# to this cart. So we shouldn't generate a new tokenid for it, especially
# since it will have rcptid=0, so we wouldn't know where to mail it anyway.
if ($type eq 'dollaroff' && $pi->{'amt'} > 0) {
($tokenid, $token) =
LJ::Pay::new_coupon("dollaroff", $pi->{'amt'}, $pi->{'rcptid'}, $pp->{'payid'});
# if there was an error, try again later
next unless $tokenid;
LJ::send_mail({
'to' => $email,
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "Coupon Purchase",
'body' => "${msg}$LJ::SITENAMESHORT coupon code:\n\n".
" $token\n\n".
"You can redeem it for \$$pi->{amt} USD in $LJ::SITENAMESHORT merchandise and/or services:\n\n".
"$LJ::SITENAMESHORT store:\n" .
" - $LJ::SITEROOT/store/\n\n" .
"$LJ::SITENAMESHORT services:\n" .
" - $LJ::SITEROOT/pay/\n\n" .
"NOTE: Your coupon is only valid for one use, so be sure that your order's " .
"value is greater than or equal to \$$pi->{amt} USD.\n\n" .
"$LJ::SITENAMESHORT Team",
});
# close, but preserve token info
} else {
($token, $tokenid) = ($pi->{'token'}, $pi->{'tokenid'});
}
$close->();
next;
}
# bonus features
elsif (LJ::Pay::is_bonus($pi)) {
# if a bonus item of this type failed to apply, don't try to apply any more
next if exists $bonus_failure{"$pi->{'payid'}-$pi->{'item'}-$pi->{'subitem'}"};
# get a lock since we're about to modify their account,
# try again later if we can't get a lock
next unless LJ::Pay::get_lock($ru);
# apply the bonus item to the recipient user's account
my $res = LJ::Pay::apply_bonus_item($ru, $pi);
# release lock and close regardless of results of operation
LJ::Pay::release_lock($ru);
# if an error, log to payvars (call above also logged to statushistory) and skip the email
unless ($res) {
LJ::Pay::payvar_append($pi->{'payid'}, "error",
"[" . LJ::mysql_time() . "] unable to apply: item=$pi->{'item'}, size=" .
(split("-", $pi->{'subitem'}))[0] . ", qty=$pi->{'qty'}. invalid cart?");
# if there was a failure, all bonus items of this type were marked
# as failed, so we shouldn't try to process any more of them
$bonus_failure{"$pi->{'payid'}-$pi->{'item'}-$pi->{'subitem'}"}++;
next;
}
# at this point time is applied, just need to send mail. so close.
$close->();
# send notification email to user
my $name = LJ::Pay::product_name($pi);
LJ::send_mail({
'to' => $email,
'from' => $LJ::ACCOUNTS_EMAIL,
'fromname' => $LJ::SITENAMESHORT,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => $name,
'body' => "${msg}Your $LJ::SITENAMESHORT account for user \"$ru->{'user'}\" has been " .
"credited with the following bonus feature:\n\n" .
" - $name\n\n" .
"Your account has been updated so you can use your new feature immediately.\n\n" .
"$LJ::SITENAMESHORT Team"
});
next;
# just close -- shipping, coppa, etc
} else {
$close->();
next;
}
}
};
$maint{'pay_lookupstates'} = sub
{
require "$ENV{'LJHOME'}/cgi-bin/paylib.pl";
require "$ENV{'LJHOME'}/cgi-bin/statslib.pl";
my $get_dbr = sub {
my @roles = ('slow');
push @roles, ('slave', 'master') unless $LJ::STATS_FORCE_SLOW;
return LJ::get_dbh({raw=>1}, @roles)
or die "couldn't connect to database";
};
my $dbr = $get_dbr->();
# see where we got to on our last run
my $min_payid = $dbr->selectrow_array("SELECT value FROM blobcache WHERE bckey='pay_lookupstates_pos'")+0;
my $max_payid = $dbr->selectrow_array("SELECT MAX(payid) FROM payments")+0;
my $to_do = $max_payid - $min_payid;
print " -I- $to_do rows to process... ";
unless ($to_do) {
print "done\n\n";
return;
}
print "\n";
# we'll call into LJ::Stats since it has handy functions
my $blocks = LJ::Stats::num_blocks($to_do);
# get some userprop ids
my $propid = LJ::get_prop("user", "sidx_loc")->{id};
foreach my $block (1..$blocks) {
my ($low, $high) = LJ::Stats::get_block_bounds($block, $min_payid);
print LJ::Stats::block_status_line($block, $blocks);
# make sure our database handles aren't stale
$LJ::DBIRole->clear_req_cache();
$dbr = $get_dbr->()
or die "Couldn't connect to global db reader";
# find all payids that don't have a corresponding paystate row
my $rows = $dbr->selectall_arrayref
("SELECT p.payid, p.userid FROM payments p " .
"LEFT JOIN paystates s ON s.payid=p.payid " .
"WHERE s.payid IS NULL AND p.userid > 0 " .
"AND p.payid BETWEEN $low AND $high");
next unless @$rows; # probably won't happen
my %payids_of_userid = (); # userid => [ payids ]
foreach (@$rows) {
my ($payid, $userid) = @$_;
push @{$payids_of_userid{$userid}}, $payid;
}
my @userids = keys %payids_of_userid;
my $userid_bind = join(",", map { "?" } @userids);
my $st_data = $dbr->selectall_arrayref
("SELECT userid, value FROM userprop " .
"WHERE upropid=? AND userid IN ($userid_bind)",
undef, $propid, @userids);
# save userprop data for setting later
my %state_of_userid = map { $_ => "??" } @userids;
foreach (@$st_data) {
my ($userid, $value) = @$_;
my ($ctry, $st) = LJ::Pay::check_country_state((split("-", $value))[0,1]);
# only care about states of 'US'
$state_of_userid{$userid} = $ctry || '??';
$state_of_userid{$userid} .= "-" . ($st || '??') if $ctry eq 'US';
}
# save results in DB
my @vals = ();
my $bind = "";
while (my ($userid, $state) = each %state_of_userid) {
foreach (@{$payids_of_userid{$userid}}) {
push @vals, $_ => $state;
$bind .= "(?,?),";
}
}
chop $bind;
my $dbh = LJ::get_db_writer();
$dbh->do("REPLACE INTO paystates VALUES $bind", undef, @vals);
die "ERROR: " . $dbh->errstr if $dbh->err;
# now save where we got to for subsequent runs
$dbh->do("REPLACE INTO blobcache (bckey, dateupdate, value) " .
"VALUES ('pay_lookupstates_pos', NOW(), ?)",
undef, $max_payid);
die "ERROR: " . $dbh->errstr if $dbh->err;
}
# we're all done
print " -I- Processed $to_do rows... done\n\n";
};
$maint{'pay_unreserve'} = sub
{
use strict;
require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl";
print "Unreserving inventory...\n";
my $dbh = LJ::get_db_writer()
or die "couldn't get master db handle";
my $sth = $dbh->prepare(qq{
SELECT pi.* FROM payitems pi, payments p
WHERE pi.payid=p.payid
AND pi.qty_res > 0 AND pi.status='cart' AND p.mailed='C'
AND (
(p.method='cc' and p.datesent < DATE_SUB(NOW(), INTERVAL 3 DAY))
OR
(p.datesent < DATE_SUB(NOW(), INTERVAL 12 DAY))
)
});
die $dbh->errstr if $dbh->err;
$sth->execute;
while (my $it = $sth->fetchrow_hashref) {
print "$it->{'piid'}: $it->{'item'} $it->{'subitem'} $it->{'qty_res'}\n";
$dbh->do("UPDATE inventory SET avail=avail+? WHERE item=? AND subitem=?",
undef, $it->{'qty_res'}, $it->{'item'}, $it->{'subitem'});
die $dbh->errstr if $dbh->err;
$dbh->do("UPDATE payitems SET qty_res=0 WHERE piid=?", undef, $it->{'piid'});
die $dbh->errstr if $dbh->err;
}
};
$maint{'pay_shipping_notify'} = sub
{
use strict;
require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl";
die "no shipping email"
unless $LJ::SHIPPING_EMAIL;
die "no shipping contact email"
unless $LJ::SHIPPING_CONTACT_EMAIL;
my $dbh = LJ::get_db_writer()
or die "couldn't get master db handle";
my ($ct, $min_date) =
$dbh->selectrow_array("SELECT COUNT(*), MIN(dateready) " .
"FROM shipping WHERE status='needs'");
LJ::send_mail({
'to' => $LJ::SHIPPING_EMAIL,
'from' => $LJ::ADMIN_EMAIL,
'fromname' => $LJ::SITENAME,
'wrap' => 1,
'charset' => 'utf-8',
'subject' => "$ct Outstanding $LJ::SITENAME Merchandise Orders",
'body' =>
"There are currently $ct outstanding $LJ::SITENAME merchandise orders in need of shipping. " .
"The oldest of which became ready at $min_date.\n\n" .
"Visit the following URL for details about currently outstanding orders. Please print all " .
"invoices and include a copy of each order's invoice with its shipment, which should be " .
"the cheaper of UPS Ground or FedEx Ground.\n\n" .
" $LJ::SITEROOT/admin/accounts/shipping_labels.bml\n\n" .
"As orders are shipped, please enter their order numbers at the following URL so that " .
"$LJ::SITENAME\'s cart system will be able to stop selling merchandise as supplies run out.\n\n" .
" $LJ::SITEROOT/admin/accounts/shipping_finish.bml\n\n" .
"Please contact $LJ::SHIPPING_CONTACT_EMAIL directly with any questions or problems.\n\n" .
"Regards,\n" .
"$LJ::SITENAME Team\n",
});
print " -I- Emailed $LJ::SHIPPING_EMAIL\n\n";
};
1;

View File

@@ -0,0 +1,45 @@
#!/usr/bin/perl
#
use strict;
use vars qw(%maint);
$maint{'genstatslocal'} = sub
{
my @which = @_;
unless (@which) { @which = qw(singles); }
my %do = map { $_, 1, } @which;
my %to_pop;
LJ::load_props("user");
if ($do{'singles'}) {
my $dbr = LJ::get_db_reader();
my $propid = $dbr->selectrow_array("SELECT upropid FROM userproplist WHERE name='single_status'");
my $ct = $dbr->selectrow_array("SELECT COUNT(*) FROM userprop WHERE upropid=$propid");
$to_pop{'singles'}->{'total'} = $ct;
}
# copied from stats.pl:
my $dbh = LJ::get_db_writer();
foreach my $cat (keys %to_pop)
{
print " dumping $cat stats\n";
my $qcat = $dbh->quote($cat);
$dbh->do("DELETE FROM stats WHERE statcat=$qcat");
if ($dbh->err) { die $dbh->errstr; }
foreach (sort keys %{$to_pop{$cat}}) {
my $qkey = $dbh->quote($_);
my $qval = $to_pop{$cat}->{$_}+0;
$dbh->do("REPLACE INTO stats (statcat, statkey, statval) VALUES ($qcat, $qkey, $qval)");
if ($dbh->err) { die $dbh->errstr; }
}
}
print "-I- Done.\n";
};
1;

247
ljcom/bin/maint/syncweb.pl Normal file
View File

@@ -0,0 +1,247 @@
#!/usr/bin/perl
#
use Sys::Hostname;
use Digest::MD5;
use File::Copy;
$maint{'syncsoon'} = sub
{
if ($> == 0) {
print "Don't run this as root.\n";
return 0;
}
open (F, ">/home/lj/var/do-syncweb");
print F "this file flags to syncweb to sync later.\n";
close F;
print "Flag set.\n";
return 1;
};
$maint{'syncweb'} = sub
{
my $arg = shift;
# update inc files on disk if necessary
if ($LJ::FILEEDIT_VIA_DB) {
my $syncfile = "$LJ::HOME/temp/last-fileedit-sync";
open (F, $syncfile);
my $lasttime = <F>;
close F;
$lasttime += 0;
my $dbh = LJ::get_dbh("master");
my $sth = $dbh->prepare("SELECT incname, inctext, updatetime FROM includetext ".
"WHERE updatetime > $lasttime");
$sth->execute;
my $newmax = 0;
while (my ($name, $text, $time) = $sth->fetchrow_array) {
if (open (F, ">$LJ::HOME/htdocs/inc/$name")) {
print F $text;
close F;
$newmax = $time if ($time > $newmax);
}
}
if ($newmax) {
open (F, ">$syncfile");
print F $newmax;
close F;
}
}
return 1 if ($arg eq "norsync");
unless ($arg eq "now" || -e "/home/lj/var/do-syncweb") {
return 1;
}
my $host = hostname();
if ($> == 0) {
print "Don't run this as root.\n";
return 0;
}
if (`grep '/home nfs' /proc/mounts`) {
print "Don't run this on an NFS client.\n";
return 0;
}
unless (chdir("/home/lj"))
{
print "Could not chdir to /home/lj\n";
return 0;
}
my @exclude = qw(/logs/
/mail/
/var/
/backup/
/cvs/
/temp/
/.ssh/
/.ssh2/
/.procmailrc
/htdocs/userpics
);
my $excludes = join(" ", map { "--exclude='$_'"} @exclude);
print "Syncing...\n";
print `/usr/bin/rsync -avz --delete $excludes masterweb::ljhome/ .`;
unlink "/home/lj/var/do-syncweb";
print "Done.\n";
return 1;
};
$maint{'syncmodules'} = sub
{
my $host = hostname();
unless ($> == 0 || $< == 0) {
print "Must run this as root.\n";
return 0;
}
my %state;
my $STATE_FILE = "/home/lj/var/modstate.dat";
my $LINK_DIR = "/home/lj/modules";
my $BUILD_DIR = "/usr/build";
my $changed = 0; # did state change?
unless (-d $BUILD_DIR) {
print "Build directory ($BUILD_DIR) doesn't exist!\n";
return 0;
}
###
## load everything about what we did last
#
open (ST, $STATE_FILE);
while (<ST>) {
chomp;
my ($file, $target, $status, $digest) = split(/\t/, $_);
$state{$file} = {'target' => $target,
'status' => $status,
'digest' => $digest, };
}
close ST;
## look for all symlinks in the link dir. for each
## try to install it if, 1) it points to someplace
## that it didn't before, or 2) it failed before and
## the md5 sum changed from last time.
unless (chdir ($LINK_DIR)) {
print "Can't chdir to link directory: $LINK_DIR\n";
return 0;
}
unless (opendir (DIR, $LINK_DIR)) {
print "Can't open link directory: $LINK_DIR\n";
return 0;
}
LINKWHILE:
while (my $file = readdir(DIR))
{
chdir $LINK_DIR;
next if (-d $file);
next unless (-l $file);
my $target = readlink($file);
# FIXME: and check for weird characters?
# could be a problem if user lj is hacked, could be used to get
# root, if symlink goes somewhere odd.
next unless (-f $file);
my $install = 0;
my $digest = "";
if ($target ne $state{$file}->{'target'}) {
$install = 1;
} elsif ($state{$file}->{'status'} eq "FAIL") {
$digest = Digest::MD5::md5_hex($target);
if ($digest ne $state{$file}->{'digest'}) {
$install = 1;
}
}
next unless ($install);
#
# install it!
#
print "Installing $file ($target)...\n";
$digest ||= Digest::MD5::md5_hex($target);
$state{$file}->{'digest'} = $digest;
$state{$file}->{'target'} = $target;
$changed = 1;
my $subdir;
open (CON, "tar ztf $target |");
while (<CON>) {
chomp;
unless (/^(\S+?)\//) {
warn "Target has no subdirectories it extracts from?\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
my $dir = $1;
$subdir ||= $dir;
if ($subdir ne $dir) {
warn "Target has multiple sub-directories.\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
}
close CON;
print "Sub-directory = $subdir\n";
if (system("tar zxvf $target -C $BUILD_DIR")) {
warn "Extraction failed.\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
chdir "$BUILD_DIR/$subdir";
if (system("perl Makefile.PL")) {
warn "makefile creation failed.\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
if (system("make")) {
warn "make failed.\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
if (system("make test")) {
warn "make test failed.\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
if (system("make install")) {
warn "make install failed.\n";
$state{$file}->{'status'} = "FAIL";
next LINKWHILE;
}
$state{$file}->{'status'} = "OK";
}
closedir (DIR);
if ($changed) {
print "Writing state.\n";
open (ST, ">$STATE_FILE");
foreach (sort keys %state) {
print ST join("\t",
$_,
$state{$_}->{'target'},
$state{$_}->{'status'},
$state{$_}->{'digest'}), "\n";
}
close ST;
}
};

View File

@@ -0,0 +1,56 @@
ljadmin.pl:
apgrace - gracefully restart apache
appss - stops apache-perl, waits, and starts again
sshkick - restarts ssh
appgrace - gracefully restart apache-perl
aprestart - restart apache
exposeconf - OLD: shows server's configuration to public
hupcaches - sends HUP signals to fastcgi processes so they clear their caches
load - prints load (the output of 'w')
date - prints date/time (the output of 'date')
restartapps - slowly restarts fastcgi processes
echo - echo arguments back
echosleep - sleeps for first arg seconds after echoing rest arguments back
debug - prints debug info
statscaster_restart - restart the ljstatscasterd
expiring.pl:
expiring - Expire un-renewed paid accounts, and remind users with accounts soon to expire.
interests.pl:
clean_intcounts - OLD: Migration tool. Used to define intcount when it was null.
clean_intdups - OLD: Remove duplicate interests (fixed. shouldn't happen anymore)
dirsync.pl:
dirsync - Copies files from FTP area to web root
aliases.pl:
makealiases - Adds the fixed aliases to the email_aliases table
moods.pl:
makemoodindexes - Generate the index.html files in all the mood directories.
pay.pl:
pay_mail - Sends out the email thanking people for their payment
pay_updateaccounts - Sets people's accounts to 'paid' if it's not already.
pay_lookupstates - Looks up and sets country/state info based on userprops
pay_unreserve - Unreserve inventory items that are over 3 days old and unclaimed
pay_shipping_notify - Notify third party shipping agent of new orders
xplanet.pl:
stats_makemarkers - Make the markers.txt file to feed to xplanet
syncweb.pl:
syncmodules - Install new local perl modules if needed, on master or slaves
syncweb - rsync files from master server (if given arg of "now", does it immediately)
syncsoon - set a flag so that the next syncweb actually syncs
xfers.pl:
xfers_do - FTPs/SCPs people's journals to their webservers.
stats-local.pl:
genstatslocal - Daily stats for ljcom code
clean_caches-local.pl:
clean_caches_local - cleans old caches

54
ljcom/bin/maint/xfers.pl Normal file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/perl
#
use Net::FTP;
# FIXME: low priority. bitrot. never made public.
$maint{'xfers_do'} = sub
{
my $dbh = LJ::get_db_writer();
print "-I- Loading users that need transfers...\n";
$sth = $dbh->prepare("SELECT t.*, u.user, u.lastn_style FROM transferinfo t, user u WHERE t.userid=u.userid AND t.lastxfer < u.timeupdate AND t.state='on'");
$sth->execute;
if ($dbh->err) { die $dbh->errstr; }
while ($ti = $sth->fetchrow_hashref)
{
print " ==> $ti->{'user'} ($ti->{'userid'})\n";
my $styleid = $ti->{'styleid'} || $ti->{'lastn_style'};
my $localfile = "$LJ::TEMP/$ti->{'userid'}.xfer";
open (TEMP, ">$localfile") or die ($!);
my $data = &make_journal_by_style($ti->{'user'}, $styleid, "", "");
$data ||= "<B>[LiveJournal: Bad username, styleid, or style definition]</B>";
print TEMP $data;
close TEMP;
if ($ti->{'method'} eq "ftp") {
my $ftp = Net::FTP->new($ti->{'host'});
$ftp->login($username, $ti->{'password'});
$ftp->cwd($ti->{'directory'});
$ftp->put($localfile, ($ti->{'filename'} || "livejournal.html"));
$ftp->quit;
}
elsif ($ti->{'method'} eq "scp")
{
my $username = $ti->{'username'};
$username =~ s/[^a-zA-Z0-9\-\_]//g;
my $host = $ti->{'host'};
$host =~ s/[^a-zA-Z0-9\-\.]//g;
my $directory = $ti->{'directory'};
$directory =~ s/[^a-zA-Z0-9\_\-\. \/]//g;
my $filename = $ti->{'filename'};
$filename =~ s/[^a-zA-Z0-9\_\-\. ]//g;
my $rc = system("scp $localfile \"$username\@$host:$directory/$filename\"");
print "Return: $rc\n";
}
}
};
1;

View File

@@ -0,0 +1,24 @@
#!/usr/bin/perl
#
$maint{'stats_makemarkers'} = sub
{
my $dbr = LJ::get_db_reader();
my ($sth);
open (MARK, ">${STATSDIR}/markers.txt");
# FIXME: this is broken. zip is a userprop now.
$sth = $dbr->prepare("CREATE TEMPORARY TABLE tmpmarkzip SELECT DISTINCT zip FROM user WHERE country='US' and zip<>''");
$sth->execute;
$sth = $dbr->prepare("SELECT z.lon, z.lat FROM zips z, tmpmarkzip t WHERE t.zip=z.zip");
$sth->execute;
while (my ($lon, $lat) = $sth->fetchrow_array) {
print MARK "$lat -$lon \"\" color=white # \n";
}
$sth->finish;
close (MARK);
};
1;

64
ljcom/bin/makemoodindex.pl Executable file
View File

@@ -0,0 +1,64 @@
#!/usr/bin/perl
#
my $dir = shift @ARGV;
unless ($dir || -d $dir) {
die "Usage:\n makemoodindex.pl <dir>\n";
}
print "Making mood index for $dir\n";
@colors = qw(ffffff 333333 663300 ff9900 ffff33 00ff00 006600 009999 0066cc 9900cc ff3399 ff0000
cccccc 000000 cccc99 ffcc99 ffffcc ccffcc 339933 99ffff 99ccff cc99ff ff99cc ffcccc);
opendir (DIR, $dir);
@files = readdir DIR;
closedir DIR;
if (-e "$dir/index.html") {
open (HTML, "$dir/index.html");
my $line = <HTML>;
chomp $line;
unless ($line eq "<!--MOODINDEX-->") { die "Won't overwrite index.html in this directory!\n"; }
}
open (HTML, ">$dir/index.html");
print HTML "<!--MOODINDEX-->\n";
print HTML "<HTML><BODY BGCOLOR=#ffffff>\n";
print HTML <<"CHOOSER_HEADER";
<CENTER>
<FONT FACE="verdana,arial,helvetica" SIZE=1 color=#999999>
&#149;&#149; click for background color &#149;&#149;
</FONT>
<TABLE border=1 bordercolor=#999999 cellpadding=0 cellspacing=0><tr><td valign=center align=center bgcolor=#eaeaea>
<FORM>
<TABLE border=0 bordercolor=#999999 cellpadding=0 cellspacing=0>
<TR valign=middle align=center bgcolor=#eaeaea>
CHOOSER_HEADER
my $count = 0;
foreach my $col (@colors) {
if (++$count == 13) { print HTML "\n</tr><tr>\n"; }
print HTML "<td><input type=button value=\" \" onclick=\"document.bgColor='$col'\" style=\"background-color: #$col\"></td>\n";
}
print HTML "</tr></table></td></tr></table></font></center>\n\n";
foreach my $file (sort @files)
{
next unless (-d "$dir/$file" && $file ne ".");
print HTML "<B><A HREF=\"$file/\">$file/</A></B><BR>\n";
}
print HTML "<TABLE CELLPADDING=2>\n";
foreach my $file (sort @files)
{
next unless ($file =~ /\.gif$/);
print HTML "<TR VALIGN=MIDDLE><TD>$file</TD>";
print HTML "<TD><IMG SRC=\"$file\"></TD>";
print HTML "</TR>\n";
}
print HTML "</TABLE></BODY></HTML>\n";

803
ljcom/bin/mcvsui.pl Executable file
View File

@@ -0,0 +1,803 @@
#!/usr/bin/perl -w
# * Diff selected files.
#
# * Push selected files live.
#
# * Invoke $EDITOR and parse the resulting output, selecting all files which
# match.
#
# * Deselect all files.
#
#
package MultiCvsUI;
use strict;
BEGIN {
# Versioning stuff and custom includes
use vars qw{$VERSION $RCSID};
$VERSION = do { my @r = (q$Revision: 1.3 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
$RCSID = q$Id: mcvsui.pl,v 1.3 2004/04/21 00:19:14 deveiant Exp $;
if ( ! $ENV{HOME} || ! -d $ENV{HOME} ) {
die "LJHOME not set or invalid";
}
use lib ("$ENV{LJHOME}/cgi-bin", "$ENV{LJHOME}/cvs/wcmtools/lib");
use Carp qw{confess croak};
use Curses::UI qw{};
use Cwd qw{getcwd};
use Data::Dumper qw{};
use IO::File qw{};
use IO::Handle qw{};
use List::Util qw{max min};
use File::Temp qw{tempfile tempdir};
use File::Spec qw{};
use Fcntl qw{SEEK_SET};
use MultiCVS qw{};
$Data::Dumper::Indent = 1;
$Data::Dumper::Terse = 1;
}
our ( $MultiCvsConf, $GoLive, %Keynames, %WindowOptions, %KeyBindings );
# The path to the multicvs config
$MultiCvsConf = $ENV{LJHOME} . "/cvs/multicvs.conf";
# The path to the golive program
$GoLive = $ENV{LJHOME} . "/bin/golive";
# Map of keys to human-readable names for onscreen keybinding documentation
%Keynames = (
"\t" => "<tab>",
"\n" => "<ret>",
"\e" => "<esc>",
);
%WindowOptions = (
mainWindow => [
mainWindow => 'Window',
-title => "MultiCVS UI $VERSION",
-titlereverse => 0,
-border => 1,
#-padbottom => 5,
],
selectionList => [
selList => 'Listbox',
-multi => 1,
-values => [],
-labels => {},
-border => 1,
-vscrollbar => 1,
-htmltext => 1,
-ipadleft => 2,
-ipadright => 2,
-ipadtop => 1,
-ipadbottom => 1,
-padbottom => 5,
],
helpPane => [
'' => 'Label',
-border => 0,
-width => -1,
#-height => -1,
-y => -1,
-ipad => 1,
-paddingspaces => 1,
],
logWindow => [
logWindow => 'Window',
-title => 'Log',
-border => 1,
-titlereverse => 0,
-padtop => 2,
-padleft => 1,
-padright => 1,
-padbottom => 6,
-ipad => 1,
],
logViewer => [
logViewer => 'TextViewer',
title => "Log",
-text => "",
-wrapping => 1,
],
pagerWindow => [
pagerWindow => 'Window',
-title => "Pager",
-border => 1,
-titlereverse => 0,
-padtop => 2,
-padleft => 1,
-padright => 1,
-padbottom => 6,
-ipad => 1,
],
pager => [
pager => 'TextViewer',
-text => "",
-wrapping => 0,
-showoverflow => 1,
],
applyDialog => [
applyDialog => "Dialog::Basic",
-title => "Apply",
-message => "Command? (d)iff, (g)olive, (u)nmark",
-buttons => ['cancel'],
],
);
# App keybindings
%KeyBindings = (
# 'l': Switch focus to the log viewer
"l" => {
desc => "Show/hide the log",
handler => "showLog",
applyable => 0,
},
# 'a': Apply (aggregate) next command
a => {
desc => "Apply",
handler => "applyCommand",
applyable => 0,
},
# 'd': Show diffs for current selection
d => {
desc => "Diff",
handler => "showDiff",
applyable => 1,
},
# 'g': Push files up to the live site
g => {
desc => "Golive",
handler => "pushFilesLive",
applyable => 1,
},
# 'e': Edit the list of selected files
e => {
desc => "Edit Selection",
handler => "editSelection",
applyable => 0,
},
# 'u': Unmark all selected files
u => {
desc => "Unmark All",
handler => "unmarkAll",
applyable => 1,
},
);
#####################################################################
### M A I N B O D Y
#####################################################################
### (CLASS) METHOD: new( undef )
### Instantiate and return a new CvsReportShell.
sub new {
my $proto = shift;
my $class = ref $proto || $proto;
my $self = bless {
mainWindow => undef, # Main enclosing window
selList => undef, # Selection list (holds files)
logWindow => undef, # Logging window
logViewer => undef, # Log viewer window
pagerWindow => undef, # Pager top-level window
pager => undef, # Pager scrolling container
display => 'cvs', # Display 'cvs', 'live', or 'both' updates?
_log => undef,
}, $class;
# Open the logfile and append to it.
open $self->{_log}, ">>mcvsui.log" or die "Failed to open log: $!";
$self->logmsg( "\n\n>>> Starting shell at %s\n\n", scalar localtime );
# Get the interface object to the multicvs layout
die "Cannot find multicvs.conf: Is your \$LJHOME set correctly?\n"
unless -e $MultiCvsConf;
$self->{multicvs} = new MultiCVS ($MultiCvsConf)
or die "Failed to create multicvs interface";
# Create the UI object
$self->{ui} = new Curses::UI( -color_support => 0 );
$self->setupWindows;
# Circular reference: Be sure to break this association if the object needs
# to be destroyed.
$self->{ui}->userdata( $self );
return $self;
}
### METHOD: run( undef )
### Run the shell.
sub run {
my $self = shift or confess "Cannot be used as a function";
my (
%bindings,
@keydocs,
);
$self->logmsg( "Running the shell." );
# Global keybindings
$self->{ui}->set_binding( sub {$self->exitDialog}, "\cq" );
$self->{ui}->set_binding( sub {$self->exitDialog}, "\cc" );
# Log viewer keybindings
$self->{logViewer}->set_binding( sub {$self->{selList}->focus}, "\t" );
# Add a binding and documentation for each key
foreach my $key ( keys %KeyBindings ) {
my $code;
# Either build a callback to invoke the handler by name or use an
# explicit CODE ref if present
if ( ! exists $KeyBindings{$key}{code} ) {
my $method = $KeyBindings{$key}{handler};
$code = sub { $self->$method() };
} else {
$code = $KeyBindings{$key}{code};
}
$self->{selList}->set_binding( $code, $key );
}
# List the keybindings in the help window
$self->makeHelpPane( \%KeyBindings );
# Read cvsreport's output and put it in the selectlist
$self->populateSelectionList;
# Start the main event loop
$self->{selList}->focus;
$self->{ui}->mainloop;
}
### METHOD: showLog( undef )
### Show the log viewer window.
sub showLog {
my $self = shift or confess "Cannot be used as a function";
$self->{logViewer}->focus;
}
### METHOD: applyCommand( undef )
### Apply a command to all selected files.
sub applyCommand {
my $self = shift or confess "Cannot be used as a function";
my $list = $self->{selList};
my @selections = $list->get;
my $dialog = $self->{ui}->add( @{$WindowOptions{applyDialog}} );
# Add a binding and documentation for each key
foreach my $key ( keys %KeyBindings ) {
next unless $KeyBindings{$key}{applyable};
my $code;
# Either build a callback to invoke the handler by name or use an
# explicit CODE ref if present
if ( ! exists $KeyBindings{$key}{code} ) {
# Call the handler with a true value to set 'apply mode'
my $method = $KeyBindings{$key}{handler};
$code = sub {
$dialog->lose_focus;
$self->$method(1);
};
} else {
$code = sub {
$dialog->lose_focus;
$KeyBindings{$key}{code}->(1);
};
}
$dialog->set_binding( $code, $key );
}
$dialog->set_binding( sub {}, "\e" );
$dialog->modalfocus;
$dialog->lose_focus;
$self->{ui}->delete( $WindowOptions{applyDialog}[0] );
}
### METHOD: makeHelpPane( \%KeyBindings )
### Given a hashref of keybindings, write the list of documentation for them to
### the help window.
sub makeHelpPane {
my $self = shift or throw Exception::MethodError;
my $bindings = shift or return ();
my (
@keydocs,
$keyhelp,
$cols,
$colwidth,
$colpat,
$rows,
$helptext,
$curcol,
);
$self->logmsg( "Building keyhelp" );
$colwidth = 0;
foreach my $key ( keys %$bindings ) {
#$self->logmsg( "Generating key help for %s: %s", $key, $bindings->{$key} );
if ( exists $Keynames{$key} ) {
$keyhelp = sprintf( '%5s %s', $Keynames{$key}, $bindings->{$key}{desc} );
} else {
$keyhelp = sprintf( ' <%s> %s', $key, $bindings->{$key}{desc} );
}
push @keydocs, $keyhelp;
$colwidth = length $keyhelp if length $keyhelp > $colwidth;
}
# Make all the column widths the same by padding with spaces.
$colpat = "\%${colwidth}s";
@keydocs = map { sprintf $colpat, $_ } @keydocs;
# Calculate columns and rows
$cols = int( $self->{helpPane}->canvaswidth / $colwidth + 2 );
$rows = min( (int(scalar @keydocs / $cols) || 1), $self->{helpPane}->canvasheight );
return () if $cols < 1 || $rows < 1;
# Build the actual text rows
$helptext = '';
foreach my $row ( 0 .. ($rows - 1) ) {
$curcol = $cols * $row;
$helptext .= " " . join(' ', @keydocs[$curcol .. $curcol + $cols]) . " \n";
}
$self->{helpPane}->text( $helptext );
}
### METHOD: editSelection( @items )
### Edit the list of the selected items as text, making any changes necessary to
### reflect the changes made in the file.
sub editSelection {
my $self = shift or confess "Cannot be used as a function";
my $list = $self->{selList};
my @items = $list->get;
my @newItems = $self->forkEditor( join("\n", @items) . "\n" );
# Explode space-separated lines into multiple entries, discarding null
# entries.
@newItems = grep { defined } map { split /(?!<\\)\s+/, $_ } @newItems;
#$self->logmsg( "Got modified selection list: %s", \@newItems );
$self->populateSelectionList( @newItems );
}
### METHOD: pushFilesLive( @files )
### Ask the golive script to publish the specified I<files>.
sub pushFilesLive {
my $self = shift or confess "Cannot be used as a function";
my $applyMode = shift || 0;
my $list = $self->{selList};
my @files = ();
if ( $applyMode ) {
@files = $list->get;
} else {
@files = ( $list->get_active_value );
}
$self->{ui}->status( sprintf("Pushing %d files live.", scalar @files) );
my @output = $self->forkRead( $GoLive, @files );
$self->logmsg( "Output from golive:\n%s", join('', @output) );
$self->{ui}->nostatus;
$self->populateSelectionList;
}
### METHOD: unmarkAll( undef )
### Unmark all marked files.
sub unmarkAll {
my $self = shift or confess "Cannot be used as a function";
$self->{selList}->clear_selection;
$self->populateSelectionList;
}
### METHOD: showDiff( @files )
### Ask cvsreport for a diff and display it in the pager window.
sub showDiff {
my $self = shift or confess "Cannot be used as a function";
my $applyMode = shift || 0;
my $list = $self->{selList};
my @files = ();
if ( $applyMode ) {
@files = $list->get;
} else {
@files = ( $list->get_active_value );
}
$self->logmsg( "Got list of files to diff: %s", \@files );
# Slice out just the tuples that are needed for the diff
my @tuples = @{$self->{changes}}{ @files };
$self->logmsg( "Got list of tuples for files to diff: %s", \@tuples );
# Get unified diffs
#$self->{multicvs}{_debug} = 1;
my @diffs = $self->{multicvs}->get_diffs( ['-u'], @tuples );
#$self->{multicvs}{_debug} = 0;
$self->logmsg( "Got diffs: %s", \@diffs );
my $title = sprintf( "Differences (%d files)", scalar @files );
$self->showPager( $title, @diffs );
}
### METHOD: showPager( $text )
### Fork an instance of the user's pager as defined by C<$PAGER> and pipe the
### given I<text> to it after temporarily leaving curses mode.
sub showPager {
my $self = shift or confess "Cannot be used as a function";
my $title = shift;
my $text = join '', @_;
# If they have a pager configured, use that to display the output
if ( ($ENV{PAGER} || $ENV{MCVSUI_PAGER}) && $ENV{MCVSUI_PAGER} ne 'builtin' ) {
$self->forkWrite( $text, $ENV{MCVSUI_PAGER}||$ENV{PAGER} );
}
# Otherwise use the built-in page
else {
$self->{pagerWindow}->title( $title || 'Pager' );
$self->{pager}->text( $text );
$self->{pager}->focus;
}
}
# 'htdocs/site/free.bml' => {
# 'cvs_time' => 1075506514,
# 'to' => '/Library/LiveJournal/cvs/local/htdocs/site/free.bml',
# 'type' => 'l',
# 'from' => '/Library/LiveJournal/htdocs/site/free.bml',
# 'module' => 'local',
# 'live_time' => 1075935006
# },
### METHOD: populateSelectionList( @selected )
### Run cvsreport and populate the selectlist with the files which are reported
### as actionable. Files in I<selected> will be pre-selected.
sub populateSelectionList {
my $self = shift or confess "Cannot be used as a function";
my @selected = @_;
my (
$maxlength,
$changes,
@displayKeys,
@values,
%labels,
%selectPositions,
$count,
);
$changes = $self->{multicvs}->find_changed_files;
# Get the list of relpaths to display based on the current view mask
@displayKeys = grep {
$self->{display} eq 'both'
or
( $self->{display} eq 'cvs' && $changes->{$_}{type} eq 'c' )
or
$self->{display} eq 'live'
} sort keys %$changes;
$self->logmsg( "Selected %d '%s' changes of %d total",
scalar @displayKeys,
$self->{display},
scalar keys %$changes );
# If there were changes to list, list 'em
if ( @displayKeys ) {
$maxlength = max map { length $_ } @displayKeys;
$self->logmsg( "Got %d items to set in the select list.", scalar @displayKeys );
$count = 0;
# For each file cvsreport says needs moving, add the filename to the
# list of raw items, make a label for display purposes, and note the
# item's position so it can be highlighted later.
foreach my $relpath ( @displayKeys ) {
$labels{ $relpath } =
sprintf( "%-*s [%s]", $maxlength, $relpath,
$changes->{$relpath}{module} );
$selectPositions{ $relpath } = $count;
$count++;
}
# Stuff the items into the select list. Merge the selected item
# filenames with the map of their indexes.
$self->logmsg( "Setting the select list to: %s", \@displayKeys );
$self->{changes} = $changes;
$self->{selList}->values( \@displayKeys );
$self->{selList}->labels( \%labels );
$self->{selList}->set_selection( @selectPositions{@selected} );
$self->{selList}->title( scalar @displayKeys . " Pending Files" );
} else {
$self->{changes} = undef;
$self->{selList}->values();
$self->{selList}->labels( {} );
$self->{selList}->set_selection();
$self->{selList}->title( "No Pending Files" );
}
}
### METHOD: logmsg( $fmt, @args )
### Write a message to a logfile and to the log window if it's been created
### already. The I<fmt> is a C<printf>-style output format, and I<args> is a
### list of arguments to the C<sprintf> call, with the additional functionality
### of dumping references instead of just stringifying them as-is for C<%s>.
sub logmsg {
my $self = shift or confess "Can't be used as a function";
my ( $format, @args ) = @_;
chomp( $format );
$format .= "\n";
for ( my $i = 0; $i <= $#args; $i++ ) {
next unless ref $args[$i];
$args[$i] = Data::Dumper->Dumpxs( [$args[$i]], [qw{$i}] );
}
$self->{_log}->printf( $format, @args ) if $self->{_log};
$self->appendToLogWindow( sprintf($format, @args) );
}
### METHOD: appendToLogWindow( $text )
### Append the specified I<text> to the log window if it's been created already.
sub appendToLogWindow {
my $self = shift or confess "Cannot be used as a function";
my $text = shift;
my $lv = $self->{logViewer} or return ();
$lv->text( $lv->get . $text );
$lv->cursor_to_end;
}
### METHOD: forkRead( $cmd, @args )
### Fork and exec the specified I<cmd>, giving it the specified I<args>, and
### return the output of the command as a list of lines.
sub forkRead {
my $self = shift or confess "Cannot be used as a function";
my ( $cmd, @args ) = @_;
my (
$fh,
@lines,
$pid,
);
#$self->logmsg( "Reading from a forked child." );
# Fork-open and read the child's output as the parent
if (( $pid = open($fh, "-|") )) {
@lines = <$fh>;
$fh->close;
}
# Child - capture output for diagnostics and progress display stuff.
else {
die "Couldn't fork: $!" unless defined $pid;
$self->{ui}->clear_on_exit( 0 );
open STDERR, ">&STDOUT" or die "Can't dup stdout: $!";
{ exec $cmd, @args };
# Only reached if the exec() fails.
close STDERR;
close STDOUT;
exit 1;
}
#$self->logmsg( "Read %d lines from '%s'", scalar @lines, $cmd );
return @lines;
}
### METHOD: forkWrite( $output, $cmd, @args )
### Fork and exec the specified I<cmd> with the specified I<args> and
### print the given I<output> to it.
sub forkWrite {
my $self = shift or confess "Cannot be used as a function";
my ( $output, $cmd, @args ) = @_;
my (
$fh,
$pid,
);
$self->logmsg( "Leaving curses..." );
$self->{ui}->leave_curses;
# Fork-open and read the child's output as the parent
if (( $pid = open($fh, "|-") )) {
print $fh $output;
$fh->close;
}
# Child - capture output for diagnostics and progress display stuff.
else {
die "Couldn't fork: $!" unless defined $pid;
{ exec $cmd, @args };
# Only reached if the exec() fails.
exit 1;
}
$self->{ui}->reset_curses;
$self->logmsg( "Curses restored." );
}
### METHOD: forkEditor( $content )
### Write the given I<content> to a tempfile and invoke $ENV{EDITOR} on it,
### returning whatever was left in it after the editor returns.
sub forkEditor {
my $self = shift or confess "Cannot be used as a function";
my $content = shift || '';
my (
$editor,
$tempdir,
$tempfile,
$fname,
$fh,
$pid,
@rlines,
);
# Pick the editor based on the environment or a sensible default
$editor = $ENV{EDITOR} || $ENV{VISUAL} || 'vi';
# Pick a temporary directory on this platform
$tempdir = File::Spec->tmpdir;
# Open a tempfile and write the conte to it
( $tempfile, $fname ) = tempfile( "mcvsui.XXXXX", DIR => $tempdir );
$self->logmsg( "Writing %d bytes to '%s'", length $content, $fname );
$tempfile->print( $content );
$tempfile->close;
# Switch off curses
$self->logmsg( "Leaving curses..." );
$self->{ui}->leave_curses;
# Invoke the editor on the tempfile
unless ( system($editor, $fname) == 0 ) {
die "Could not invoke '$editor': Error $?\n\n";
}
# Restore the curses ui
$self->{ui}->reset_curses;
$self->logmsg( "Curses restored." );
# Rewind and re-read the tempfile back in
$tempfile = new IO::File( $fname, "r" )
or die "open: $fname: $!";
@rlines = <$tempfile>;
$tempfile->close;
unlink $fname if -e $fname;
chomp( @rlines );
$self->logmsg( "Read in:\n%s", \@rlines );
return @rlines;
}
### METHOD: setupWindows( undef )
### Set up all the initial windows.
sub setupWindows {
my $self = shift or confess "Cannot be used as a function";
# Create the main window
$self->{mainWindow} = $self->{ui}->add( @{$WindowOptions{mainWindow}} );
$self->{selList} = $self->{mainWindow}->add( @{$WindowOptions{selectionList}} );
$self->{helpPane} = $self->{mainWindow}->add( @{$WindowOptions{helpPane}} );
$self->logmsg( "Created main window." );
# Create the log window at the bottom of the screen and put a text viewer in
# it.
$self->{logWindow} = $self->{ui}->add( @{$WindowOptions{logWindow}} );
$self->{logViewer} = $self->{logWindow}->add( @{$WindowOptions{logViewer}} );
$self->{logViewer}->set_binding( sub {$self->{mainWindow}->focus} => 'q' );
$self->logmsg( "Created log window." );
# Create the pager window and widget
$self->{pagerWindow} = $self->{ui}->add( @{$WindowOptions{pagerWindow}} );
$self->{pager} = $self->{pagerWindow}->add( @{$WindowOptions{pager}} );
$self->{pager}->set_binding( sub {$self->{mainWindow}->focus} => "q" );
$self->logmsg( "Create the pager window." );
}
### METHOD: exitDialog( undef )
### Display an confirmation dialog and quit if the user confirms.
sub exitDialog {
my $self = shift or confess "Cannot be used as a function";
exit( 0 );
#my $return = $self->{ui}->dialog(
# -message => "Really quit?",
# -title => "Confirm",
# -buttons => ['yes', 'no'],
# );
#
#exit(0) if $return;
}
#####################################################################
### C L E A N U P
#####################################################################
END {
#Cdk::end();
}
package mcvsui;
use strict;
open STDERR, ">err.out" or die "open: STDERR: $!";
my $sh = new MultiCvsUI;
$sh->run;

38
ljcom/bin/misc/fixuu.pl Executable file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/perl
#
require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl";
my $dbh = LJ::get_db_writer();
my $dbslo = LJ::get_dbh("slow");
die "no slow" unless $dbslo;
my $sth = $dbslo->prepare("select u.userid from user u left join userusage uu on u.userid=uu.userid where uu.userid is null");
$sth->execute;
while (my $userid = $sth->fetchrow_array)
{
print "$userid...\n";
my $u = LJ::load_userid($userid);
die unless $u;
print "Find timeupdate...\n";
my $timeupdate;
my $dbcr = LJ::get_cluster_reader($u);
$timeupdate = $dbcr->selectrow_array("SELECT logtime FROM log2 WHERE journalid=$u->{'userid'} AND rlogtime>0 ORDER BY journalid, rlogtime");
die $dbcr->errstr if $dbcr->err;
$timeupdate = $dbh->quote($timeupdate);
print "BS a time create...\n";
my $timecreate;
my $puserid = $u->{'userid'};
while (not defined $timecreate) {
$puserid--;
print " trying $puserid\n";
$timecreate = $dbslo->selectrow_array("SELECT DATE_ADD(timecreate, INTERVAL 10 MINUTE) FROM userusage WHERE userid=$puserid");
}
$timecreate = $dbh->quote($timecreate);
my $sql = "INSERT INTO userusage VALUES ($u->{'userid'}, $timecreate, $timeupdate, NULL, 0)";
print "$sql\n";
$dbh->do($sql);
}

250
ljcom/bin/multideb Executable file
View File

@@ -0,0 +1,250 @@
#!/usr/bin/perl
#
# multideb - compare package installation differences over
# many machines remotely.
#
# example ~/.multideb.conf file:
#
# servera port=2210 user=bob classes=web,db
# serverb user=root classes=web
# serverc user=root classes=web
# serverd user=mysql classes=db
# localhost classes=web
#
# Port 22 is the default. User required unless servername is localhost.
#
use strict;
use Getopt::Long;
use Data::Dumper;
my $MD_DIR = ensure_dir("$ENV{'HOME'}/.multideb");
my %host; # hostname -> {..., classes => { classname => 1 } }
my %classes; # classname -> { hostname => 1 }
my %core; # classname -> [ packagename, ... ]
my $opt_full = 0;
my $opt_core = 0;
help() unless GetOptions(
"full" => \$opt_full,
"core" => \$opt_core,
);
my $mode = shift @ARGV;
if ($mode eq "check")
{
load_conf();
my @pkgs = @ARGV;
my @hosts = sort keys %host;
foreach my $host (@hosts) {
my $h = $host{$host};
parse_status($h);
}
foreach my $pkg (@pkgs)
{
my %whowhat;
foreach my $host (@hosts) {
my $h = $host{$host};
my $p = $h->{'pkg'}->{$pkg};
my $status = status_of_package($p);
push @{$whowhat{$status}}, $host;
}
print "$pkg\n";
foreach my $stat (sort keys %whowhat) {
print " $stat: @{$whowhat{$stat}}\n";
}
}
exit 0;
}
if ($mode eq "compare")
{
load_conf();
my $class = shift @ARGV;
my @hosts = sort keys %{$classes{$class}};
unless (@hosts) {
die "No matching '$class' hosts.\n";
}
my @comp_list;
my %epkg; # existing packages: { name => 1 }
foreach my $host (@hosts)
{
my $h = $host{$host};
parse_status($h);
foreach (keys %{$h->{'pkg'}}) {
$epkg{$_} = 1;
}
}
if ($opt_core) {
unless (defined $core{$class}) {
die "No core packages defined for class '$class'\n";
}
@comp_list = @{$core{$class}};
} else {
@comp_list = sort keys %epkg;
}
# iterate through all packages, showing differences:
foreach my $pkg (@comp_list)
{
my %whowhat;
my $installed = 0;
foreach my $host (@hosts) {
my $h = $host{$host};
my $p = $h->{'pkg'}->{$pkg};
my $status = status_of_package($p);
push @{$whowhat{$status}}, $host;
my ($sa, $sb, $sc) = split(/ /, $p->{'Status'});
if ($sc eq "installed") { $installed = 1; }
}
if ($installed &&
($opt_full || scalar(keys %whowhat) > 1))
{
print "$pkg\n";
foreach my $stat (sort keys %whowhat) {
print " $stat: @{$whowhat{$stat}}\n";
}
}
}
exit 0;
}
if ($mode eq "update")
{
load_conf();
foreach my $host (sort keys %host)
{
my $h = $host{$host};
my $user = $h->{'user'};
my $port = $h->{'port'};
print "$host...\n";
if ($host eq "localhost") {
system("rsync", "/var/lib/dpkg/status",
"$MD_DIR/$host.status");
} else {
system("rsync", "-e", "ssh -p $port", "-az",
"$user\@$host:/var/lib/dpkg/status",
"$MD_DIR/$host.status");
}
}
print "Done.\n";
exit 0;
}
help();
sub status_of_package
{
my $p = shift;
my $status = $p->{'Version'};
if ($p->{'Status'} ne "install ok installed") {
$status .= "/" if $status;
$status .= "$p->{'Status'}";
}
$status ||= "(unknown)";
return $status;
}
sub parse_status
{
my $h = shift;
my $fname = "$MD_DIR/$h->{'host'}.status";
unless (-e $fname) {
die "$fname doesn't exist. Run update.\n";
}
open (F, $fname);
while (<F>) {
unless (/^Package: (.+)/) {
die "Corrupt $h->{'host'} status file?\n";
}
my $pkg = $1;
my $p = $h->{'pkg'}->{$pkg} = {
'Package' => $pkg,
};
my $lastkey = 'Package';
while (<F>) {
chomp;
unless ($_) { last; }
if (/^(\w+):\s*(.+)/i) {
$p->{$1} = $2;
}
}
}
close F;
}
sub help
{
die("Usage:\n".
" multideb update\n".
" multideb compare <classname>\n".
" multideb check <packagename> ...\n");
}
sub load_conf {
open (C, "$ENV{'HOME'}/.multideb.conf");
while (<C>)
{
s/^\s+//; s/\s+$//;
next if (/^\#/);
next unless $_;
chomp;
my ($p1, @opts) = split(/\s+/, $_);
if ($p1 =~ /^core:(\w+)/) {
$core{$1} = [ @opts ];
next;
}
my $host = $p1;
my $h = $host{$host} = {
'host' => $host,
'port' => 22,
};
foreach (@opts) {
my ($k, $v) = split(/=/, $_);
if ($k eq "classes") {
foreach (split(/,/, $v)) {
$h->{'classes'}->{$_} = 1;
$classes{$_}->{$host} = 1;
}
} else {
$h->{$k} = $v;
}
}
}
close C;
}
sub ensure_dir {
my $dir = shift;
unless (-e $dir) {
if (mkdir $dir) {
return $dir;
} else {
die "Can't create $dir directory\n";
}
}
unless (-w $dir) {
die "Can't write to $dir directory\n";
}
return $dir;
}

1019
ljcom/bin/mytop.pl Executable file

File diff suppressed because it is too large Load Diff

7
ljcom/bin/no-emacs.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
#
# <LJDEP>
# prog: find, rm
# </LJDEP>
find . \( -name '.*~' -or -name '*~' -or -name '#*#' -or -name '.#*' \) -print -exec rm -f {} \;

9
ljcom/bin/pay-batch Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/sh
#
# <LJDEP>
# prog: bin/ljmaint.pl
# </LJDEP>
~lj/bin/ljmaint.pl pay_mail pay_updateaccounts

20
ljcom/bin/pkill Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/perl
#
# <LJDEP>
# prog: ps, grep
# </LJDEP>
use strict;
my $prog = shift @ARGV;
exit unless ($prog =~ /^[\w\.\/]+$/);
my @procs = `ps awx | grep $prog | grep -v grep | grep -v pkill`;
foreach (@procs)
{
next unless (/^\s*(\d+)\s/);
my $pid = $1;
print $pid, "\n";
kill 15, $pid;
}

18
ljcom/bin/qkill Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/perl
#
use strict;
my $prog = shift @ARGV;
exit unless ($prog =~ /^[\w\.\/]+$/);
my @procs = `ps awx | grep $prog | grep -v grep | grep -v hkill`;
foreach (@procs)
{
next unless (/^\s*(\d+)\s/);
my $pid = $1;
print $pid, "\n";
kill 15, $pid;
}

76
ljcom/bin/release.pl Executable file
View File

@@ -0,0 +1,76 @@
#!/usr/bin/perl
#
my $mode = shift @ARGV;
if ($< == 0 || $> ==0) { die "Don't run as root.\n"; }
chdir("/home/lj") || die "Can't cd to /home/lj";
chdir("/home/ljcode") || die "Can't cd to /home/ljcode";
unless (-d "LiveJournal") {
die "directory 'LiveJournal' doesn't exist.\n";
}
print "Dumping SQL...\n";
system("dumpsql.pl init > LiveJournal/livejournal.sql");
system("dumpsql.pl data > LiveJournal/livejournal-data.sql");
system("dumpsql.pl datareplace > LiveJournal/livejournal-datareplace.sql");
mkdir "LiveJournal/bin/", 0755;
mkdir "LiveJournal/cgi-bin/", 0755;
mkdir "LiveJournal/htdocs/", 0755;
foreach my $dir (qw(htdocs/files htdocs/temp htdocs/misc htdocs/img
htdocs/stats htdocs/download htdocs/clients
logs var))
{
mkdir "LiveJournal/htdocs/$dir", 0755;
open (T, ">LiveJournal/htdocs/$dir/.touch");
print T "placeholder\n";
close T;
}
print "Syncing cgi-bin...\n";
system("rsync -rl --delete --exclude='archive' --exclude='clients' --exclude='ljconfig.pl' /home/lj/cgi-bin/ LiveJournal/cgi-bin/");
print "Syncing htdocs...\n";
system("rsync -rl --delete --exclude='htdocs/dev/' --exclude='img' --exclude='files' --exclude='download' --exclude='temp' --exclude='misc' --exclude='stats' /home/lj/htdocs/ LiveJournal/htdocs/");
print "Syncing bin...\n";
system("rsync -rl --delete --exclude='old' /home/lj/bin/ LiveJournal/bin/");
my @now = localtime();
my $date = sprintf("%04d%02d%02d", $now[5]+1900, $now[4]+1, $now[3]);
my $append = $date;
print "Date is: $date\n";
my $count = 1;
while (-e "LiveJournal-$append" || -e "LiveJournal-$append.tar.gz") {
$count++;
$append = "$date-$count";
}
chdir("LiveJournal");
print "Cleaning emacs files.\n";
system("no-emacs.sh");
print "Cleaning other files.\n";
system("rm cgi-bin/pod2html-* cgi-bin/perl.core");
chdir("..");
unless ($mode eq "lite")
{
print "Renaming to LiveJournal-$append...\n";
rename "LiveJournal", "LiveJournal-$append";
print "Tarring...\n";
system("tar -zcvf LiveJournal-$append.tar.gz LiveJournal-$append");
print "Renaming back...\n";
rename "LiveJournal-$append", "LiveJournal";
}
else
{
print "Skipping tarball.\n";
}
print "Done\n";

159
ljcom/bin/renameuser.pl Executable file
View File

@@ -0,0 +1,159 @@
#!/usr/bin/perl
#
# <LJDEP>
# lib: cgi-bin/ljlib.pl
# </LJDEP>
use strict;
use Getopt::Long;
require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl";
sub usage {
die "Usage: [--swap --force] <from_user> <to_user>\n";
}
my %args = ( swap => 0, force => 0 );
usage() unless
GetOptions('swap' => \$args{swap},
'force' => \$args{force},
);
my $error;
my $from = shift @ARGV;
my $to = shift @ARGV;
usage() unless $from =~ /^\w{1,15}$/ && $to =~ /^\w{1,15}$/;
my $dbh = LJ::get_db_writer();
unless ($args{swap}) {
if (rename_user($from, $to)) {
print "Success. Renamed $from -> $to.\n";
} else {
print "Failed: $error\n";
}
exit;
}
### check that emails/passwords match, and that at least one is verified
my $qfrom = $dbh->quote(lc($from));
my $qto = $dbh->quote(lc($to));
unless ($args{force}) {
my $sth = $dbh->prepare("SELECT user, email, password, status FROM user WHERE user IN ($qfrom, $qto)");
$sth->execute;
{
my @acct;
while (my $l = $sth->fetchrow_hashref) {
push @acct, $l;
}
unless (@acct == 2) {
print "Both accounts aren't valid.\n";
exit 1;
}
unless (lc($acct[0]->{'email'}) eq lc($acct[1]->{'email'})) {
print "Email addresses don't match.\n";
print " $acct[0]->{'email'}\n";
print " $acct[1]->{'email'}\n";
exit 1;
}
unless ($acct[0]->{'password'} eq $acct[1]->{'password'}) {
print "Passwords don't match.\n";
exit 1;
}
unless ($acct[0]->{'status'} eq "A" || $acct[1]->{'status'} eq "A") {
print "At least one account isn't verified.\n";
exit 1;
}
}
}
my $swapnum = 0;
print "Swapping 1/3...\n";
until ($swapnum == 10 || rename_user($from, "lj_swap_$swapnum")) {
$swapnum++;
}
if ($swapnum == 10) {
print "Couldn't find a swap position?\n";
exit 1;
}
print "Swapping 2/3...\n";
unless (rename_user($to, $from)) {
print "Swap failed in the middle, from $to -> $from failed.\n";
exit 1;
}
print "Swapping 3/3...\n";
unless (rename_user("lj_swap_$swapnum", $to)) {
print "Swap failed in the middle, from lj_swap_$swapnum -> $to failed.\n";
exit 1;
}
# check for circular 'renamedto' references
{
# if the fromuser had redirection on, make sure it points to the new $to user
my $fromu = LJ::load_user($from, 'force');
LJ::load_user_props($fromu, 'renamedto');
if ($fromu->{renamedto} && $fromu->{renamedto} ne $to) {
print "Setting redirection: $from => $to\n";
unless (LJ::set_userprop($fromu, 'renamedto' => $to)) {
print "Error setting 'renamedto' userprop for $from\n";
exit 1;
}
}
# if the $to user had redirection, they shouldn't anymore
my $tou = LJ::load_user($to, 'force');
LJ::load_user_props($tou, 'renamedto');
if ($tou->{renamedto}) {
print "Removing redirection for user: $to\n";
unless (LJ::set_userprop($tou, 'renamedto' => undef)) {
print "Error setting 'renamedto' userprop for $to\n";
exit 1;
}
}
}
print "Swapped.\n";
exit 0;
sub rename_user
{
my $from = shift;
my $to = shift;
my $qfrom = $dbh->quote(LJ::canonical_username($from));
my $qto = $dbh->quote(LJ::canonical_username($to));
print "Renaming $from -> $to\n";
my $u = LJ::load_user($from, 'force');
unless ($u) {
$error = "Invalid source user: $from";
return 0;
}
foreach my $table (qw(user useridmap overrides style))
{
$dbh->do("UPDATE $table SET user=$qto WHERE user=$qfrom");
if ($dbh->err) {
$error = $dbh->errstr;
return 0;
}
}
# from user is now invalidated
LJ::memcache_kill($u->{userid}, "userid");
LJ::MemCache::delete("uidof:$from");
LJ::MemCache::delete("uidof:$to");
LJ::procnotify_add("rename_user", { 'user' => $u->{'user'},
'userid' => $u->{'userid'} });
$dbh->do("INSERT INTO renames (renid, token, payid, userid, fromuser, touser, rendate) ".
"VALUES (NULL,'[manual]',0,$u->{userid},$qfrom,$qto,NOW())");
return 1;
}

131
ljcom/bin/rewrite-balancer.pl Executable file
View File

@@ -0,0 +1,131 @@
#!/usr/bin/perl
# This tool is to be run from apache's mod_rewrite,
# not from command line.
# If there's an argument, it's taken to be a key
# in the $LJ::WEB_POOLS hash specifying the hosts which
# this balancer is to work with.
use strict;
use IO::Socket::INET;
use IO::Select;
my $port = 4446;
my $MAXLEN = 512;
my $BCAST_VER = 1;
my %allowed; # ip_text -> 1 (if broadcasting server is in our watched pool)
eval { require "$ENV{'LJHOME'}/cgi-bin/ljlib.pl"; };
if ($LJ::FREECHILDREN_BCAST &&
$LJ::FREECHILDREN_BCAST =~ /^(\S+):(\d+)$/) {
$port = $2;
}
if ($ARGV[0] && $LJ::WEB_POOLS{$ARGV[0]}) {
foreach (@{$LJ::WEB_POOLS{$ARGV[0]}}) {
$allowed{$_} = 1;
}
}
my $sock = IO::Socket::INET->new(Proto=>'udp',
LocalPort=>$port)
or die "couldn't create socket\n";
$sock->sockopt(SO_BROADCAST, 1);
$sock->blocking(0);
$|=1;
my $sel = IO::Select->new();
$sel->add(\*STDIN);
$sel->add($sock);
my %servers; # ip_text -> { bcast_ver => 1 , free => \d+, active => \d+, _time => unix }
my %free; # ip_text -> num_free
my $total_free = 0;
sub get_server {
return "" unless $total_free;
# delete servers that haven't reported back in a while
my $now = time();
my @del;
while (my ($k, $v) = each %servers) {
push @del, $k if $v->{_time} < $now - 20;
}
foreach (@del) { delete_server($_); }
return "" unless $total_free;
my $choice = rand($total_free);
my $count = 0;
while ($_ = each %free) {
$count += $free{$_};
if ($count >= $choice) { # can only happen if $free{$_}>0
$total_free--;
$free{$_}--;
return $_;
}
}
return "";
}
sub delete_server {
my $key = shift; # key = ip_text
$total_free -= $free{$key} if $free{$key};
delete $servers{$key};
delete $free{$key};
}
sub parse_message {
my ($sock, $message) = @_;
my ($port, $ipaddr) = sockaddr_in($sock->peername);
my $ip_text = inet_ntoa($ipaddr);
return if %allowed and not $allowed{$ip_text};
delete_server($ip_text);
my $host;
foreach my $pair (split /\n/, $message) {
$host->{$1} = $2 if $pair =~ /^(\S+)=(\S*)$/;
}
$host->{_time} = time();
return unless $host->{bcast_ver} eq $BCAST_VER;
if ($host->{free}) {
$servers{$ip_text} = $host;
$free{$ip_text} = $host->{free};
$total_free += $host->{free};
}
return;
}
my @backlog; # unserviced uris, with trailing newlines
sub process_requests
{
my $server;
while (@backlog && ($server = get_server())) {
my $uri = shift @backlog;
print "http://$server/$uri";
}
}
while(1) {
my @ready = $sel->can_read();
foreach my $fh (@ready) {
if ($fh == $sock) {
my $message;
while($sock->recv($message, $MAXLEN)) {
parse_message($sock, $message);
}
process_requests();
}
if ($fh == \*STDIN) {
$_ = <STDIN>;
push @backlog, $_;
exit 1 if @backlog > 2000; # something's horribly wrong
process_requests();
}
}
}

38
ljcom/bin/rotate Executable file
View File

@@ -0,0 +1,38 @@
#!/usr/bin/perl
#
@files = @ARGV;
$base = $0;
$base =~ s/^.+\///;
if (@files==0 || $files[0] =~ /^-/)
{
die "Usage: $base logfiles\n";
}
@files = grep { -e } @files;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$mon++; $year+=1900;
$num = 0;
$ext = sprintf("%04d.%02d.%02d.%02d.rotlog", $year, $mon, $mday, $num);
$dirty=1;
while ($dirty)
{
$dirty=0;
foreach $file (@files)
{
$dirty =1 if (-e "$file.$ext.gz" || -e "$file.$ext");
}
if ($dirty)
{
$num++;
$ext = sprintf("%04d.%02d.%02d.%02d.rotlog", $year, $mon, $mday, $num);
}
}
foreach $file (@files)
{
rename $file, "$file.$ext";
}

34
ljcom/bin/screenshots.pl Executable file
View File

@@ -0,0 +1,34 @@
#!/usr/bin/perl
#
use Image::Size;
my $dir = shift @ARGV;
unless ($dir) {
die "Usage:\n $0 <directory>\n";
}
unless (-d $dir) {
die "$dir isn't a directory!\n";
}
unless (open (PICS, "pics.dat")) {
die "No pics.dat found in that directory, or unreadable.\n";
}
print "<?page\ntitle=>Screenshots\nbody<=\n";
while ($line = <PICS>) {
chomp $line;
my ($file, $des) = split(/\t/, $line);
if (-e $file) {
my ($w, $h) = imgsize($file);
print "<p>$des<p><CENTER><IMG SRC=\"$file\" WIDTH=$w HEIGHT=$h></CENTER>\n";
} else {
print STDERR "$file not found!\n";
}
}
print "<=body\npage?>\n";

37
ljcom/bin/sourceclean.pl Executable file
View File

@@ -0,0 +1,37 @@
#!/usr/bin/perl
#
use strict;
use File::Find ();
use Getopt::Long;
die "\$LJHOME not set or invalid\n" unless -d $ENV{'LJHOME'};
my $opt_check = 0;
exit 1 unless GetOptions('check' => \$opt_check);
File::Find::find({
wanted => \&wanted,
no_chdir => 1,
}, map { "$ENV{'LJHOME'}/$_"} qw(bin cgi-bin htdocs));
sub wanted {
return 0 unless m/\.(pl|bml|html)$/;
open (F, $_);
my $lnum = 0;
my $contents;
my $dirty = 0;
while (my $line = <F>) {
$lnum++;
if ($line =~ s/\t/ /g) {
print "$_:$lnum: tab\n";
$dirty = 1;
}
if ($line =~ s/\s+\n$/\n/) {
print "$_:$lnum: trailing space\n";
$dirty = 1;
}
$contents .= $line;
}
close F;
}

88
ljcom/bin/splitlog.pl Executable file
View File

@@ -0,0 +1,88 @@
#!/usr/bin/perl
#
my $file = shift @ARGV;
my $newfile = shift @ARGV;
my $locfile = "$file.loc";
my $loc = 0;
my $lines = 0;
my %monthtonum = qw(Jan 01 Feb 02 Mar 03 Apr 04 May 05 Jun 06
Jul 07 Aug 08 Sep 09 Oct 10 Nov 10 Dec 12);
$SIG{'INT'} = \&write_loc;
sub write_loc {
close OUT;
print "Writing location $loc\n";
open (LOC, ">$locfile") || die "Can't write location file!\n";
print LOC "$loc\n$lines\n";
close LOC;
print "Ending.";
exit;
};
unless ($file && $newfile) {
die "Usage:\n $0 <logfile> <basename>\n";
}
unless (-r $file) {
die "File \"$file\" does not exist.\n";
}
unless (-d "split") {
die "No split directory underneith the current directory.\n";
}
if (-e $locfile) {
open (LOC, $locfile) || die "Can't read location file!\n";;
chomp ($loc = <LOC>);
$loc += 0;
chomp ($lines = <LOC>);
$lines += 0;
close LOC;
print "Location: $loc (did $lines lines)\n";
}
open (LOG, $file) || die "Can't read log file\n";;
seek(LOG, $loc, 0);
#my $line = <LOG>;
#$line = <LOG>;
#print $line;
#exit;
my $count = 0;
my $lastdate = "";
while (my $line = <LOG>) {
$loc += length($line);
$lines++;
if ($line =~ /\[(\d\d)\/(...)\/(\d\d\d\d)/) {
my ($year, $month, $day) = ($3, $monthtonum{$2}, $1);
my $date = "$year-$month-$day";
if ($date ne $lastdate) {
# if ($year==2001 && $month==3 && $day > 2) {
close OUT;
open (OUT, ">>split/$date-$newfile.log") || die "Can't open file we're supposed to append to.\n";
# }
$lastdate = $date;
}
# if ($year==2001 && $month==3 && $day > 2) {
print OUT $line;
# }
}
if ($lines % 10000 == 0) { print "line: $lines ($lastdate).\n"; }
}
close LOG;
close OUT;
print "End of file!\n";
unlink $locfile, $file;

View File

@@ -0,0 +1,31 @@
# This file is automatically generated from MySQL by $LJHOME/bin/dumpsql.pl
# Don't submit a diff against a hand-modified file - dump and diff instead.
INSERT IGNORE INTO priv_list (des, is_public, privcode, privname, scope) VALUES ('Allows a user to delete contributions from idiots.', '1', 'contrib_delete', 'Delete Contributions', 'local');
UPDATE priv_list SET des='Allows a user to delete contributions from idiots.',is_public='1',privname='Delete Contributions',scope='local' WHERE privcode='contrib_delete';
INSERT IGNORE INTO priv_list (des, is_public, privcode, privname, scope) VALUES ('Allows a user to edit contributions.', '1', 'contrib_edit', 'Edit Contributions', 'local');
UPDATE priv_list SET des='Allows a user to edit contributions.',is_public='1',privname='Edit Contributions',scope='local' WHERE privcode='contrib_edit';
INSERT IGNORE INTO priv_list (des, is_public, privcode, privname, scope) VALUES ('Allows a user to access shipping tools.', '1', 'shipping', 'Shipping Access', 'local');
UPDATE priv_list SET des='Allows a user to access shipping tools.',is_public='1',privname='Shipping Access',scope='local' WHERE privcode='shipping';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('0', 'char', 'Override some payment checks to allow a user to pay. Values are Y to allow payment, N to deny payment.', '0', '0', 'allow_pay', 'Allow/deny a user to pay', 'local');
UPDATE userproplist SET cldversion='0',datatype='char',des='Override some payment checks to allow a user to pay. Values are Y to allow payment, N to deny payment.',indexed='0',multihomed='0',prettyname='Allow/deny a user to pay',scope='local' WHERE name='allow_pay';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'char', 'Initial create.bml account type selection', '', '0', 'create_accttype', 'Created account type', 'local');
UPDATE userproplist SET cldversion='4',datatype='char',des='Initial create.bml account type selection',indexed='',multihomed='0',prettyname='Created account type',scope='local' WHERE name='create_accttype';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'bool', 'Boolean: 1 means mail Accounts about any payment activity for monitoring', '', '', 'fraud_watch', 'Fraud Watch', 'local');
UPDATE userproplist SET cldversion='4',datatype='bool',des='Boolean: 1 means mail Accounts about any payment activity for monitoring',indexed='',multihomed='',prettyname='Fraud Watch',scope='local' WHERE name='fraud_watch';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'bool', 'Opt out of latest.bml, latest-rss.bml, and latest-img.bml if on.', '0', '0', 'latest_optout', 'Latest Updates Opt Out', 'local');
UPDATE userproplist SET cldversion='4',datatype='bool',des='Opt out of latest.bml, latest-rss.bml, and latest-img.bml if on.',indexed='0',multihomed='0',prettyname='Latest Updates Opt Out',scope='local' WHERE name='latest_optout';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'bool', 'Assignment agreement necessary for bazaar payouts', '0', '0', 'legal_assignagree', 'Assignment Agreement Received', 'local');
UPDATE userproplist SET cldversion='4',datatype='bool',des='Assignment agreement necessary for bazaar payouts',indexed='0',multihomed='0',prettyname='Assignment Agreement Received',scope='local' WHERE name='legal_assignagree';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'char', 'Email address of parent provided during age verification.', '0', '0', 'parent_email', 'Parent\'s Email Address', 'local');
UPDATE userproplist SET cldversion='4',datatype='char',des='Email address of parent provided during age verification.',indexed='0',multihomed='0',prettyname='Parent\'s Email Address',scope='local' WHERE name='parent_email';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'blobchar', 'Packed POP3 deleted message id list', '0', '0', 'pop3_deletelist', 'POP3 Deletion List', 'local');
UPDATE userproplist SET cldversion='4',datatype='blobchar',des='Packed POP3 deleted message id list',indexed='0',multihomed='0',prettyname='POP3 Deletion List',scope='local' WHERE name='pop3_deletelist';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'char', 'Post by phone stored blob format', '0', '0', 'pp_format', 'PhonePost File Format', 'local');
UPDATE userproplist SET cldversion='4',datatype='char',des='Post by phone stored blob format',indexed='0',multihomed='0',prettyname='PhonePost File Format',scope='local' WHERE name='pp_format';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('4', 'num', 'The friendgroup id for friends that may transcribe audio postings.', '0', '0', 'pp_transallow', 'Allowed phonepost transcribers', 'local');
UPDATE userproplist SET cldversion='4',datatype='num',des='The friendgroup id for friends that may transcribe audio postings.',indexed='0',multihomed='0',prettyname='Allowed phonepost transcribers',scope='local' WHERE name='pp_transallow';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('0', 'char', 'Keyword to show in singles search', '0', '0', 'single_pickw', 'Single Picture Keyword', 'local');
UPDATE userproplist SET cldversion='0',datatype='char',des='Keyword to show in singles search',indexed='0',multihomed='0',prettyname='Single Picture Keyword',scope='local' WHERE name='single_pickw';
INSERT IGNORE INTO userproplist (cldversion, datatype, des, indexed, multihomed, name, prettyname, scope) VALUES ('0', 'char', 'Delimited by pipes: MF/MM/FF/FM, country, state, city, age', '1', '0', 'single_status', 'Single Status', 'local');
UPDATE userproplist SET cldversion='0',datatype='char',des='Delimited by pipes: MF/MM/FF/FM, country, state, city, age',indexed='1',multihomed='0',prettyname='Single Status',scope='local' WHERE name='single_status';

5132
ljcom/bin/upgrading/be.dat Normal file

File diff suppressed because it is too large Load Diff

2906
ljcom/bin/upgrading/da.dat Normal file

File diff suppressed because it is too large Load Diff

5145
ljcom/bin/upgrading/de.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,137 @@
# ljcom version of deadphrases.dat
#
general dystopia.nav.setscheme
general /index.bml.getstarted.create.caption
general /index.bml.getstarted.create.title
general /index.bml.getstarted.download.caption
general /index.bml.getstarted.download.title
general /index.bml.getstarted.header
general /index.bml.getstarted.modify.caption
general /index.bml.getstarted.modify.title
general /index.bml.getstarted.update.caption
general /index.bml.getstarted.update.title
general /index.bml.howuse.create
general /index.bml.howuse.exp
general /index.bml.howuse.header
general /index.bml.otheropts.editfriends.caption
general /index.bml.otheropts.editfriends.title
general /index.bml.otheropts.editinfo.caption
general /index.bml.otheropts.editinfo.title
general /index.bml.otheropts.editjournal.caption
general /index.bml.otheropts.editjournal.title
general /index.bml.otheropts.header
general /index.bml.support.contrib.caption
general /index.bml.support.contrib.title
general /index.bml.support.dev.caption
general /index.bml.support.dev.title
general /index.bml.support.faq.caption
general /index.bml.support.faq.title
general /index.bml.support.header
general /index.bml.support.web.caption
general /index.bml.support.web.title
general /index.bml.text.1
general /index.bml.text.2
general /index.bml.text.3
general /index.bml.text.4
general /index.bml.text.5
general /index.bml.whatis.def
general /index.bml.whatis.dev
general /index.bml.whatis.header
general /index.bml.whatis.uses
general ljcom.login.fastservers
general /code/index.bml.title
general /code/index.bml.opensource.header
general /code/index.bml.opensource
general /code/index.bml.servercode.header
general /code/index.bml.servercode
general /code/index.bml.libraries.header
general /code/index.bml.libraries
general /code/index.bml.name
general /code/index.bml.description
general /code/index.bml.LJCache.name
general /code/index.bml.LJCache.description
general /code/index.bml.LJTextMessage.name
general /code/index.bml.LJTextMessage.description
general /code/index.bml.LJSpellCheck.name
general /code/index.bml.LJSpellCheck.description
general /code/index.bml.HTMLCleaner.name
general /code/index.bml.HTMLCleaner.description
general /code/index.bml.BML.name
general /code/index.bml.BML.description
general /manage/phonepost.bml.introduction
general /manage/phonepost.bml.phone.explanation
general /paidaccounts/index.bml.deliverydate.details
general /paidaccounts/index.bml.deliverydate.label
general /paidaccounts/index.bml.existingpaidaccount.choose_one
general /paidaccounts/index.bml.existingpaidaccount.header
general /paidaccounts/index.bml.existingpaidaccount.months
general /paidaccounts/index.bml.existingpaidaccount.use_this_form
general /paidaccounts/index.bml.existingpaidaccount.your_password
general /paidaccounts/index.bml.existingpaidaccount.your_username
general /paidaccounts/index.bml.features.available
general /paidaccounts/index.bml.features.available.domain_email.about
general /paidaccounts/index.bml.features.available.domain_email.header
general /paidaccounts/index.bml.features.available.domain_name.about
general /paidaccounts/index.bml.features.available.domain_name.header
general /paidaccounts/index.bml.features.available.fast_servers.about
general /paidaccounts/index.bml.features.available.fast_servers.header
general /paidaccounts/index.bml.features.available.polls.about
general /paidaccounts/index.bml.features.available.polls.header
general /paidaccounts/index.bml.features.available.styles.about
general /paidaccounts/index.bml.features.available.styles.header
general /paidaccounts/index.bml.features.available.text_messaging.about
general /paidaccounts/index.bml.features.available.text_messaging.header
general /paidaccounts/index.bml.features.available.userpics.about
general /paidaccounts/index.bml.features.available.userpics.header
general /paidaccounts/index.bml.features.planned.about
general /paidaccounts/index.bml.features.planned.counters.about
general /paidaccounts/index.bml.features.planned.counters.header
general /paidaccounts/index.bml.features.planned.custom_comment_style.about
general /paidaccounts/index.bml.features.planned.custom_comment_style.header
general /paidaccounts/index.bml.gift.anonymous
general /paidaccounts/index.bml.gift.proceed
general /paidaccounts/index.bml.gift.question
general /paidaccounts/index.bml.gift.recipient
general /paidaccounts/index.bml.newpaidaccount.about
general /paidaccounts/index.bml.newpaidaccount.header
general /paidaccounts/index.bml.otherpay.alsopayby
general /paidaccounts/index.bml.otherpay.check_or_mo
general /paidaccounts/index.bml.otherpay.header
general /paidaccounts/index.bml.otherpay.phone_num
general /paidaccounts/index.bml.otherthings.header
general /paidaccounts/index.bml.otherthings.howtogive
general /paidaccounts/index.bml.paypal.about
general /paidaccounts/index.bml.paypal.header
general /press/staff.bml.back
general /press/staff.bml.deviant
general /press/staff.bml.evan.title
general /press/staff.bml.evan.quip
general /press/staff.bml.kevin.title
general /press/staff.bml.nick.title
general /press/staff.bml.brett.title
general /rename/index.bml.cost
general /rename/use.bml.confirm
general /rename/use.bml.error.usedtoke
general /rename/use.bml.error.color
general xcolibur.nav.setscheme
general ljcom.account.feature.full
general xcolibur.nav.about.invite
general dystopia.nav.invite
general /legal/coppa.bml.title
general /legal/index.bml.docs.coppa.about
general /legal/index.bml.docs.privacy.about
general dystopia.nav.legalcoppa

View File

@@ -0,0 +1,691 @@
;; -*- coding: utf-8 -*-
/changepassword.bml.changepassword.instructions=Fill out the form below to change your password. For help with choosing a good password and keeping your account secure, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=71">this FAQ</a>.
/changepassword.bml.error.badnewpassword=Your new password confirmation does not match your new password. You may have made a mistake in typing. Please type and confirm your new password again.
/changepassword.bml.error.notvalidated=You cannot change your password if your current email address has not been validated. Please see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=11">the FAQ</a> for instructions on doing this.
/community/index.bml.main<<
<?h1 Welcome! h1?>
<?p
Welcome to the LiveJournal Community Centre. This is the place to find out how and where to interact with your fellow LiveJournal addicts! LiveJournal isn't only a a great place for keeping a journal, it's a place where people meet, interact, share common interests, and have a good time. Here are some of our community features to keep you informed and in touch.
p?>
<?h1 New? h1?>
<?p
Are you new to LiveJournal and don't know quite what to do yet? Then you'll want to head over to <a href="/community/newbies"><strong>The 'Newbies' Lounge</strong></a>, where you'll find answers to many of the questions you may have. Visit <?ljcomm newbies ljcomm?>, explore a bit, and you'll be a pro in no time at all!
p?>
<?h1 Stay informed! h1?>
<?p
Stay informed of what's going on in LiveJournal. There are a number of official LiveJournal communities you may wish to browse. The following two are particularly useful.
<br /><br />
Add <?ljuser news ljuser?> to your friends page to keep up with events and issues that are relevant to the entire LiveJournal community.<br />
Add <?ljcomm lj_maintenance ljcomm?> to your friends page to be informed when downtime is planned, and reports on unplanned interruptions of service.
p?>
<?h1 Chat! h1?>
<?p
LiveJournal users chat up a storm. Many of them use popular instant messengers, including <a href="http://www.aim.com/index.adp"><strong>AIM</strong></a>, <a href="http://web.icq.com/"><strong>ICQ</strong></a>, <a href="http://messenger.yahoo.com/"><strong>Yahoo!</strong></a>, <a href="http://messenger.msn.com/"><strong>MSN</strong></a>, or <a href="http://www.jabber.org/"><strong>Jabber</strong></a> instant messengers. If you do, be sure to list it in your <a href="/editinfo.bml"><strong>personal info settings</strong></a>. If you have a <a href="/paidaccounts/"><strong>Paid Account</strong></a>, you can also enable your mobile phone or pager to <a href="/support/faqbrowse.bml?faqid=30"><strong>receive text messages</strong></a>.
p?>
<?h1 Volunteer! h1?>
<?p
Don't be shy! Help out! The best way to help out is by purchasing a <a href="/paidaccounts/"><strong>Paid Account</strong></a>. There are, of course, loads of other ways you help out.
<br /><br />
LiveJournal is an Open Source project; if you have experience with programming languages or server side applications you can check out the <strong>LiveJournal Development Community</strong>, <?ljcomm lj_dev ljcomm?>. If you have ideas about how LiveJournal could be better, check out the <strong>LiveJournal Suggestions Area</strong>, <?ljcomm suggestions ljcomm?>. If you would like to help with just about anything, visit the <strong>LiveJournal Business Community</strong>, <?ljcomm lj_biz ljcomm?>. If you like helping people, visit our technical support centre and help someone out. If you are savy with graphic design, check out the <strong>LiveJournal Art Community</strong>, <?ljcomm lj_art ljcomm?>.
p?>
<?h1 What is a Community? h1?>
<?p
A community is basically a journal run by a member of LiveJournal for people with common interests. Communities are free to use and create... anyone can have them, and they're easy to set up, too! LiveJournal Communities cover topics from <a href="/community/anime/"><strong>Anime</strong></a> to <a href="/community/zen_within/"><strong>Zen Buddhism</strong></a>, from <a href="/community/astronomy/"><strong>Astronomy</strong></a> to <a href="/community/invader_zim/"><strong>Zim</strong></a>. You'll also find regional communities for places all around the world. There's probably a LiveJournal community for where you live too!
p?>
<?h1 How do I create my own Community? h1?>
<?p
There is a <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=78"><strong>FAQ</strong></a> that will explain how to create your very own community. There are also two FAQ Categories (<a href="http://www.livejournal.com/support/faqbrowse.bml?faqcat=community"><strong>General Community FAQs</strong></a> and <a href="http://www.livejournal.com/support/faqbrowse.bml?faqcat=comm-manage"><strong>Community Management FAQs</strong></a>) covering just about everything you'll ever need to know about communities. If you still need more information, feel free to <a href="http://www.livejournal.com/support/submit.bml"><strong>submit a support request</strong></a>.
p?>
<?h1 How do I find other Communities? h1?>
<?p
At this time there are two official LiveJournal Communities specifically created to help you find the community you're looking for.
p?>
<ul>
<li><strong><a href="./search.bml">Community Search</a></strong></li>
<li><strong>Check out the Promotions Community (<?ljcomm community_promo ljcomm?>)</strong></li>
<li><strong>Check out the Search Community (<?ljcomm community_quest ljcomm?>)</strong></li>
</ul>
<?p
Notice something you think is missing?<br />
Email <a href="mailto:jproulx-(a)-livejournal-dot-com">Jesse Proulx</a>, (<?ljuser jproulx ljuser?>) the Community Director.
p?>
.
/community/index.bml.title=Community Centre
/community/join.bml.label.banned=The maintainer(s) of this community has/have banned you from joining.
/community/join.bml.label.sure=Are you sure?
/community/leave.bml.sure=Are you sure?
/community/members.bml.key.admin=<b>Maintainer</b>
/community/members.bml.key.moderate=<b>Moderator</b>
/community/members.bml.key.post=<b>Posting Access</b>
/community/moderate.bml.reject.reason=You can also explain to the poster your reasons for rejecting their entry. The reasons will be sent to the poster by email.
/community/settings.bml.label.maintainer.login=If this is not the maintainer account, <a href='/login.bml?ret=1'>log in</a> as somebody else.
/community/settings.bml.label.nmheader=Non-Member Posting
/create.bml.create.text=Creating a new LiveJournal is easy — just follow the instructions below!
/create.bml.error.coppa.under13=Sorry, but due to COPPA restrictions, you cannot use the LiveJournal service until you
/create.bml.error.email.nospaces=No spaces are allowed in an email address. If you're on AOL, remember that your Internet Email address is your screen name with all spaces removed, followed by <b>@aol.com</b>
/create.bml.password.input.head2=Confirm password:
/create.bml.success.text1=Your journal has been created. Important registration information has been emailed to <font size="+1"><b>[[email]]</b></font> containing further instructions. Be sure to confirm your journal creation by clicking on the link sent to you in email.
/create.bml.useacctcodes.entercode=To create a new account, enter an account creation code. For more information, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=104">How do I create an account?</a>
/create.bml.username.charsallowed=Your username may contain only lower-case letters (a-z), digits (0-9) and the underscore character (_). Additionally, it must not be longer than 15 characters.
/customize/index.bml.s2.advanced.denied=Only paid, permanent, and early adopter account holders may use the advanced customisation area. <a href="/paidaccounts/">Find out the benefits of getting a paid account</a>.
/customize/index.bml.s2.advanced.header=Advanced Customisations
/customize/index.bml.s2.advanced.permitted=To create new layers and styles from scratch, visit <a href='./advanced/'>the advanced customisation area</a>.
/customize/index.bml.s2.customize.header=Step 2: Customise Layout
/customize/index.bml.s2.customize.settings=If you want to customise your journal further, here you can tweak individual settings to get it looking exactly how you want.
/customize/index.bml.s2.customize.settings.delete=Remove Customisations
/customize/index.bml.s2.customize.settings.edit=Edit Customisations
/customize/index.bml.s2.customize.settings.new=Customise
/customize/index.bml.title=Customise Journal
/doc/tour/index.bml.modify.caption<<
It is also possible to format your journal in a number of different ways, by making use
of predefined styles and colour schemes. Make your journal as unique as you want!
.
/editinfo.bml.allowshowcontact.about=You should keep this option enabled. This allows people to contact you by showing your email address, ICQ number, and AOL Instant Messenger screenname on your profile page.
/editinfo.bml.autotranslate.header=Auto-convert older entries from:
/editinfo.bml.bdayreminders.header=Send me birthday reminders (currently disabled)
/editinfo.bml.bio.about=Here you can enter a little mini-biography about yourself. This will show up on your User Info page.
/editinfo.bml.blockrobots.about<<
If you check this option, robots will be told to go away.
Not all robots respect the rules.
.
/editinfo.bml.enableboards.about=Check this if you want people to be able to reply to journal entries you post.
/editinfo.bml.error.email.lj_domain<<
You cannot enter an @[[domain]] email address.
Enter your real address in that field.
If you're a paid user, your [[user]]@[[domain]] address will forward to your real address.
To choose which email address(es) are displayed publicly, see the option below the "Show your contact information" option.
.
/editinfo.bml.error.excessive_int<<
Sorry, you've listed too many interests. The limit is 150, but you've listed [[intcount]].
Any changes you made to your interests were not saved. Go back and cut down your list, then save again.
.
/editinfo.bml.error.locale.zip_requires_us<<
You entered a zip code but you did not select United States as your country.
We only collect zip code information about people in the US.
Please go back and remove the zip code or select United States as your country.
.
/editinfo.bml.error.tm.require_provider<<
If you're going to use text messaging, you must select your service provider.
If yours is not listed, please contact us with information about how your service's text messaging feature so we can add support for it.
.
/editinfo.bml.getreplies.about=Check this if you want to get email updates when people reply to your journal entries using the message boards (comments).
/editinfo.bml.howhear.about<<
Just for curiosity's sake, where did you hear about [[sitename]] from?
If it was a specific person, enter their username; if it
was from another source/article/link/website, enter the appropriate information.
.
/editinfo.bml.htmlemail.about<<
Check this if your email program fully supports HTML in your email. Some clients try to support it, but fail to display it properly. If you uncheck it, LiveJournal will only send text emails.
.
/editinfo.bml.mangleaddress.about<<
If you are afraid spam-robots will find your email
address on LiveJournal, select this option. Your email address will be modified so it won't be found by address-collecting robots.
.
/editinfo.bml.numcomments.about=Check this if you want to append the comment count to URLs, which may make your browser display the visited links in a different colour.
/editinfo.bml.security.header=Who can view your contact info?
/editinfo.bml.userpic.about=Below is the miniature picture you have uploaded to represent you throughout the LiveJournal site, in your journal, and in your friends' journals:
/editinfo.bml.userpic.edit=To delete this picture, or upload a new one, <a href="/editpics.bml#upload" target="_blank">go here</a>.
/editjournal.bml.btn.proceed=Proceed
/editjournal.bml.viewwhat=View Which Entries?:
/editjournal_do.bml.btn.delete=Delete Journal Entry
/editjournal_do.bml.continue.head=Press to continue…
/editjournal_do.bml.edit.text<<
This is the journal entry you selected to be edited. Change all the information you would like to modify, then click the "Save Journal Entry" button at the bottom.<br /><br />To delete the entry, delete all the text in the text box and click the "Save Journal Entry" button at the bottom.
.
/editjournal_do.bml.subject=<b>Subject:</b> <i>(optional)</i>
/editjournal_do.bml.success.edit=Journal entry was modified. You can view it <a href="[[url]]">here</a>.
/export.bml.description=This feature lets you download your entire journal to a custom format for backup purposes. For more information about backing up your journal, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=8">this FAQ</a>.
/friends/add.bml.add.text=User [[ljuser]] was added to your friend list. <a href="[[url]]">View your friends page</a>.
/friends/add.bml.colors.header=Colours
/friends/add.bml.colors.hover=(Hover your mouse over a colour to see its name)
/friends/add.bml.colors.text=You may also optionally select the colours that will represent [[user]] in your friends list.
/friends/add.bml.error1.header=Log In First
/friends/add.bml.error1.text<<
To add a user to your friends list you must first go and <A HREF=\"/login.bml?ret=1\">log in</A>. If you don't
already have an account you can <a href=\"/create.bml\">create one</a> to track your friends' journals.
.
/friends/add.bml.error2.text=Invalid or missing username given. To add a friend, go to the <A HREF="/friends/edit.bml">edit friends</A> page.
/friends/add.bml.error3.text=You already have <b>[[user]]</b> listed as a friend. However, you can modify the colours you've chosen to represent him/her.
/friends/add.bml.groups.nogroup=No friend groups set up.
/friends/add.bml.remove.text=User <?ljuser [[user]] ljuser?> was removed from your friend list. You can view your friends page <a href="[[url]]">here</a>.
/friends/editgroups.bml.text=This page allows you to edit your custom friends groups. Custom friends groups are used for setting security on items and for filtering your friends page. For help, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=102">What are custom friends groups? How do I use them?</a>
/friends/edit_do.bml.addfriends.text=Enter your friends' LiveJournal user names in the boxes below, and pick what background and foreground colours you want to associate with them....
/friends/edit_do.bml.bgcolor=Background Colour:
/friends/edit_do.bml.hover=Hover your mouse over a colour to see its name
/friends/edit_do.bml.mrcolor=Mr. Colour Viewer
/friends/edit_do.bml.success.text=Your friends have been updated. You can view your newly updated friends page <a href="[[url]]">here</a>.
/friends/edit_do.bml.textcolor=Text Colour:
/friends/edit_do.bml.viewer=Colour Viewer
/friends/filter.bml.error.nogroups=You cannot filter your friends list because you must first <a href="/friends/editgroups.bml">set up your friend groups</a>.
/friends/index.bml.about<<
This page allows you to manage your friends list.
By adding other users to your friends list, you can easily see their entries from your friends page. You can also add communities and syndicated feeds to your friends list so that you see their entries on your friends page.
.
/friends/index.bml.edit.about=Add or remove users from your friends list, or edit the colours used to represent them.
/friends/index.bml.filter=These friend groups can be used to filter your friends view: you can view only the entries of a certain group. They can also be used for group-based security (see below).
/friends/index.bml.filter.about=Filter your friends list according to specific subgroups.
/friends/index.bml.security.only=With "Friends-Only" posts, any user on your friends list can view your post.
/index.bml.frank.logo=<b><i>"Baaaaa",</i> says <a href="/site/goat.bml">Frank</a>.</b>
/interests.bml.add.btn.text=Add [[interest]]
/interests.bml.add.toomany.head=Sorry…
/interests.bml.interested.in=Find people and communities interested in:
/interests.bml.interests.text=Here are some fun things you can do with interests.
/interests.bml.users.text=The following users are interested in <b>[[interest]]</b>.
/legal/index.bml.about<<
LiveJournal is dedicated to offering a stable and meaningful experience for members from all
backgrounds and nations, so we have a few rules we've laid out to provide this.
Our documents here contain reasonable terms and information regarding how we will do our best to serve you,
and how we expect members to behave to us and others. LiveJournal works best when people
follow these rules. Here are some important ones to remember:
<ul>
<li>Do not harass, abuse, or threaten others.</li>
<li>Do not harm minors in any way.</li>
<li>Do not spam the site or any account on the site.</li>
<li>Do not post copyrighted content without permission.</li>
<li>Do not invade the privacy of others.</li>
<li>Do not violate U.S. law or your local laws in any way.</li>
</ul>
The complete list of rules and policies can be found below:
.
/login.bml.expire.sessiononly.text=Your login will expire after you close your browser. If this is your own computer and you're the only user, you may want to set your login expiration such that it never expires:
/login.bml.login.btn.login=Log in...
/login.bml.login.head=Log in
/login.bml.login.text1=To log in to [[sitename]], enter your username and password below. <b>New Users:</b> To create an account, <a href='/create.bml'>go here</a>.
/login.bml.login.text2=You may also specify when your login expires. By default your login will expire when you close your browser, which is best on public computers. However, if you're the only user of your computer and nobody else has access to it, you may choose to remain logged in forever. For more information on this and other options, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=135">What are the options when I log in?</a>
/login.bml.title=Log in
/login.bml.whylogin.head=Why Log in?
/logout.bml.killall.text=You have other active sessions. Do you want to expire all your sessions, and not just this one? (See <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=159">this FAQ</a> for more information.)
/logout.bml.logout.btn=Log out
/lostinfo.bml.lostpassword.text=If you've lost your password, enter your username and optionally, the email address you'd like the password sent to. In order to have your password sent to a previously listed email address, that address must have been validated. If you leave the email field blank, it will be mailed to your current address.
/lostinfo.bml.lostpassword.title=Lost your password?
/lostinfo.bml.lostusername.title=Lost your username?
/lostinfo_do.bml.lostpasswordmail.part1<<
*** This is an automated email. You do not need to respond to it. ***
This is your requested password reminder from [[sitename]].
Below are the username, password, and email address your journal is registered under.
Username: [[username]]
Password: [[password]]
Email Address: [[emailadr]]
.
/manage/index.bml.customization.customize.about=Change the appearance of your journal
/manage/index.bml.friends.edit.about=Add or remove users from your friends list, or change the colours used to represent them.
/manage/index.bml.information.status.about=Set your account's activation status (delete or undelete your account)
/manage/phonepost.bml.phone=Authorised Phone Number:
/manage/phonepost.bml.pin=Personal Identification Number:
/manage/phonepost.bml.save=Save Settings
/manage/phonepost.bml.title=Post by Phone Settings
/modify_do.bml.colortheme.about=Here you can select what colour theme will be applied to the layout options you pick above. Or, if you don't like the provided colours, specify your own!
/modify_do.bml.colortheme.color.head1=Colour
/modify_do.bml.colortheme.customcolors=Custom Colours
/modify_do.bml.colortheme.head=Colour Theme
/modify_do.bml.domainalias.helptext=For this to work, you'll need to arrange to have your domain name's DNS point to the same IP address as [[sitename]]. For more information, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=129">this FAQ</a>.
/modify_do.bml.journaloptions.about<<
From here you can customise the look of your LiveJournal pages. If you're really curious how everything works, read the <a href="/developer/" target="_blank">developer information</a>. Otherwise, we'll assume you're satisifed with the basic options below:
.
/modify_do.bml.moodicons.about=When posting journal entries you can also specify your current mood. Users have submitted different sets of mood icons that you can use, or you can select "None" if you don't want any pictures beside your moods. (of course, you don't even have to use the Current Mood feature at all.)
/modify_do.bml.overrides.about=If you are happy with the journal layout options above, you can ignore this section. This is for tweaking very specific things about your page layout. See <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=124">What are overrides? How do they work?</a> for an overview, and visit the <A HREF="/developer/" TARGET=_blank>developer section</A> for details. Also note that overrides are for overriding only one or two things about a style. If you'd like to override everything, you need to <A HREF="/styles/create.bml" TARGET=_blank>create your own style</A>. For an overview of how to create a style, see <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=128">How do I make a custom style?</a>
/modify_do.bml.overrides.note=Please note that not all style variables can be overridden. See the <a href="/developer/varlist.bml">documentation</a> for more details.<br />Also, be aware that if you attempt to edit your overrides and you have used a tag that is not allowed in the head of the document -- such as &lt;DIV&gt;, &lt;SPAN&gt;, &lt;IMG&gt;, and many other tags -- that tag will be stripped. The only HTML elements that can be used in the *_HEAD overrides are those elements that are valid in the head of a HTML document. This is limited to &lt;title&gt;, &lt;base&gt;, &lt;style&gt;, &lt;link&gt;, and &lt;meta&gt;.
/modify_do.bml.overrides.warning=THIS IS <U>NOT</U> WHERE YOU TYPE YOUR JOURNAL‼
/paidaccounts/index.bml.costs.rates.inexpensive<<
That works out to a little over <b>$2/month</b> (roughly £1.30) for the year plan.
That'll hardly break the bank.
The most annoying part will likely be pulling out your wallet, finding your credit card, and typing in your information.
.
/paidaccounts/index.bml.features<<
<dd>To show appreciation for users who have made contributions, there are a number of features that are only available to paid accounts. These features include, but aren't limited to:</dd>
<dt>New! Post by Email</dt>
<dd>Paid accounts can post to their journals and communities quickly and securely through our email gateway.</dd>
<dt>Customising your Journal</dt>
<dd>In addition to just being able to pick the style of your journal and the colours, you'll also be able to create your own style using whatever HTML you like. This will also let you be able to make new styles that match your website that you can then easily embed, never revealing that you're using LiveJournal.com as your journal mechanism.</dd>
<dt>Polls</dt>
<dd>Paid accounts have the ability to create polls in their own journals and in any communities they are a part of and can post to.</dd>
<dt>More User Picture Icons</dt>
<dd>Paid accounts are allowed 15 user picture icons, rather than the 3 allotted to free users.</dd>
<dt>LiveJournal.com Email Alias</dt>
<dd>Paid accounts are given a LiveJournal.com email address ([[username]]@livejournal.com) that can be turned on or off.</dd>
<dt>Directory Searches</dt>
<dd>Paid accounts are given access to use the directory to search for other users.</dd>
<dt>LiveJournal.com Subdomain</dt>
<dd>Instead of having your journal at
http://www.livejournal.com/users/[[username]]/, it'll also be available at http://[[username]].livejournal.com/, much shorter and more personal.</dd>
<dt>Syndication</dt>
<dd>Paid accounts have the ability to create new syndicated accounts, which are RSS feeds that are incarnated on LiveJournal.</dd>
<dt>Text Messaging Interface</dt>
<dd>Paid accounts are given access to the text messaging feature, which will allow them to receive text messages on their mobile phone or pager through LiveJournal's custom interface.</dd>
<dt>More To-Do Items</dt>
<dd>Paid accounts can set up to 150 to-do list items in their to-do lists, and can set differing security levels on each item.</dd>
<dt>Embedding</dt>
<dd>Paid accounts have access to the complete range of options for embedding your journal into your home page, as explained on the "Embedding" page.</dd>
<dt>Domain Forwarding</dt>
<dd>Paid users can set up domain forwarding, so that their internet domain points to their LiveJournal.</dd>
<dt>More...</dt>
<dd>For a complete list of Paid Account benefits, please read <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=131">What are the Paid Account benefits</a>?</dd>
.
/paidaccounts/index.bml.whypay.header=I have to pay to use LiveJournal?
/press/staff.bml.jproulx.quip=Geek to User Liaison
/press/staff.bml.whitaker.title=Remote Developer
/register.bml.email.body<<
This is the validation email you have requested.
To complete validation of your account, please visit this URL:
[[conflink]]
You may have to copy and paste this link into your browser's window.
Regards,
[[sitename]]
[[sitelink]]
.
/site/contract.bml.promise.account.about<<
Permanent accounts will be honored for the life of the site. Paid accounts will remain as
such until they expire or are renewed. Early adopters will be granted access to the paid
features that were freely available in the early history of the site. (This is with the exception of account termination due to <a href="/legal/tos.bml">Terms of Service</a>
violation)
.
/site/contract.bml.promise.spam.about<<
We strongly believe that spam has no place on the internet, and we promise to never send you any email without implied or implicit consent. We promise to never sell lists of users' email addresses or personal information, and we promise to never spam on the behalf of an interested
third party.
.
/suggestions/index.bml.howto.text<<
<dl>
<dt><span style='font-size: 1.2em'><strong><a href="/tools/memories.bml?user=suggestions">Check prior suggestions</a></strong></span></dt><dd>
First, read over past suggestions to make sure that something similar hasn't already been brought up. If it has, you can read the comments on the entry. Sometimes, things might look as though they've been ignored, but they might be in development. Sometimes, ideas are rejected or delayed due to other concerns.
</dd>
<dt><span style='font-size: 1.2em'><strong>Couldn't find your idea? <a href="/suggestions/generator.bml">Share it with us!</a></strong></span></dt><dd>
The template must be used for all suggestions. Be sure to fill out all areas of the template, and make sure your suggestion is correct and complete before you post it. Also, the suggestion generator does not add in line breaks, so you can use the &lt;br&gt; tag to produce whitespace. This makes your suggestion easier to read.
</dd>
<dt><span style='font-size: 1.2em'><strong>Submit It!</strong></span></dt><dd>
You can add the <lj comm=suggestions> community to your Friends list <a href="http://www.livejournal.com/friends/add.bml?user=suggestions">here</a>. Once a suggestion is posted, people will discuss it. If we think it's a good idea, it will be added to the list of developer projects, and will be worked on as time permits. Not all suggestions can be implemented immediately, so please be patient with the process.
</dd></dl>
.
/suggestions/index.bml.info.text<<
Feel that you can contribute to the implementation of your suggestions? Feel free to 'watch' or join the communities below:
<dl>
<dt><strong><a href="/community/lj_dev/">LiveJournal Developer's Forum</a></strong> -- talking about technical things.</dt>
<dd><ul>
<li><a href="/community/lj_dev/info">Community Info</a></li>
<li><a href="/todo/?user=lj_dev">To-Do List</a></li>
</ul></dd>
<dt><strong><a href="/community/lj_biz/">LiveJournal Business Forum</a></strong> -- talking about general LiveJournal business opportunities and related areas.</dt>
<dd><ul>
<li><a href="/community/lj_biz/info">Community Info</a></li>
<li><a href="/todo/?user=lj_biz">To-Do List</a></li>
</ul></dd>
<dt><strong><a href="/community/lj_userdoc/">LiveJournal User Documentation Forum</a></strong> -- discussing and editing most forms of end user documentation.</dt>
<dd><ul>
<li><a href="/community/lj_userdoc/info">Community Info</a></li>
<li><a href="/todo/?user=lj_userdoc">To-Do List</a></li>
</ul></dd>
<dt><strong><a href="/community/lj_art/">LiveJournal Art Forum</a></strong> -- discussing and sharing icons, mood themes, colour themes and userpics.</dt>
<dd><ul>
<li><a href="/community/lj_art/info">Community Info</a></li>
<li><a href="/todo/?user=lj_art">To-Do List</a></li>
</ul></dd>
</dl>
<i>Please remember that the people who implement LiveJournal changes and additions are fellow users like yourself. These things can take time and the more you can help with implementing, the more that can be achieved.</i>
.
/suggestions/index.bml.rules<<
There are a few things to keep in mind:
<ul>
<li>Many suggestions have already been proposed and discussed, but simply not implemented yet. Be sure that you're not submitting a duplicate.</li>
<li>Flaming will not be tolerated. Everyone has different ideas about how LiveJournal should work; remember that promoting your opinion is all right, but flaming someone else's opinion is not.</li>
<li>Be as thorough as possible with your suggestion. A suggestion that contains detailed implementation notes is more likely to be accepted than one that doesn't. You don't need to know how to program; just try to think about what else your idea would affect, and bring up any problems you can see with it.</li>
<li>Be sure to read the <a href="/support/faq.bml">FAQs</a> first, to see if your idea already exists, or if an existing aspect of the site can be used to do what you want.</li>
<li>If you want to ask a question about how LiveJournal works, aren't certain if something exists or not, or are having a problem, don't submit a suggestion. Ask <a href="/support/">Support</a> instead.</li>
</ul>
.
/support/append_request.bml.bounce.toomany=You can only send to up to five email addresses. You have specified more than five.
/support/append_request.bml.internal.touch=To change a request's status, you must select "Internal Comment / Action" and explain why you're changing it.
/support/append_request.bml.successlinks<<
<ul>
<li>Go back to <a href='[[back]]'>Request #[[number]]</a></li>
<li>Go back to the <a href='[[open]]'>open support requests</a></li>
<li>Go back to the <a href='[[opencat]]'>open support requests in the same category</a></li>
<li>Go to <a href='[[prevopen]]'>previous</a> /
<a href='[[nextopen]]'>next</a> open request</li>
<li>Go to <a href='[[cprevopen]]'>previous</a> /
<a href='[[cnextopen]]'>next</a> open request in the same category</li>
</ul>
.
/support/help.bml.interim<<
<?p Every LiveJournal user is welcome to volunteer in
Support. There are many resources that you may find helpful.
The most important for new volunteers are listed here. p?>
<ul><li><a href="/doc/guide/support.bml">The Support Guide</a></li>
<li><?ljcomm lj_support ljcomm?></li>
<li><?ljcomm helpscreening ljcomm?></li></ul>
<?p Both of the above communities have particularly helpful posts
listed as memories. The <cite><a href="/tools/memories.bml?user=helpscreening&keyword=Getting+Started&filter=all">Getting
Started</a></cite> category in <a href="/tools/memories.bml?user=helpscreening">HelpScreening's memories</a>
is an especially good place for new
volunteers to get information. p?>
<?p New volunteers should keep the following basic rules of
Support in mind: p?>
<ul><li>Be professional and courteous.</li>
<li>Don't contact people submitting requests outside the Support
board to discuss their request or give them information.</li>
<li>Keep information in Support requests private.</li>
<li>Don't copy other people's answers.</li></ul>
<?hr?>
<?p When you first start answering requests in Support, your
answers will be screened. You won't be able to see other
screened answers. Experienced Support volunteers will approve
the first answer that fully answers the request and follows
Support's guidelines. If your answer isn't approved, it either
wasn't first or had some problem with it. You can learn why
answers are or aren't approved by asking in <?ljcomm helpscreening ljcomm?>, but
please wait until there is an approved answer in the request. p?>
<?p Points are awarded when a request is closed. They are given
only to an approved answer. People who submit requests also
have the option of closing without credit. Because of this,
many requests will close with no points awarded. It generally
takes about a week for a request to close, but this time can vary
based on the type of request. p?>
<?p Support points can be difficult to earn, but if you have patience
and persistence, you can learn how to write approvable answers
and both earn Support points and help people. p?>
<?p Support requests can be found on the <a
href="/support/help.bml">Support
board</a>. p?>
.
/support/see_overrides.bml.error.noprivs=Only users with the supportviewscreened or supporthelp privilege can view another user's overrides.
/syn/index.bml.loginrequired.text=To manage your syndicated accounts, first <a href="/login.bml?ret=1/">log in</a>.
/talkmulti.bml.error.comms_deleted=One of the comments has been deleted since you selected it. For security reasons, please go back and try again.
/talkpost.bml.loginq=Log in?
/talkpost.bml.opt.friendsonly=- this user has disabled anonymous and non-friend posting. You may post here if [[username]] lists you as a friend.
/talkpost.bml.title=Post a Comment
/talkpost_do.bml.error.badpassword=Incorrect password given for the username specified. If you've forgotten your password, you can <a href='/lostinfo.bml'>recover it</a>.
/talkpost_do.bml.error.badusername=The LiveJournal username you specified does not exist. If you've forgotten your username, you can <a href='/lostinfo.bml'>recover it</a>, or you may post as "Anonymous" instead.
/talkpost_do.bml.error.blankmessage=Your message was blank. Please type something in the message field.
/talkpost_do.bml.error.noauth=You are not allowed to reply to this protected entry.
/talkpost_do.bml.error.noverify=Sorry, you aren't allowed to post comments in other people's journals until your email address has been verified. If you've lost the confirmation email to do this, you can <a href='/register.bml'>have it re-sent</a>.
/talkpost_do.bml.preview=This is how your comment will look when posted. Using the form below, you can edit your comment further, or you can submit it as-is.
/talkpost_do.bml.success.message=Your comment has been added. You can view it <a href="[[link]]">here</a>.
/talkpost_do.bml.title=Comment Posted
/talkscreen.bml.screened.body=The comment has been screened. You can view it <a href="[[link]]">here</a>.
/talkscreen.bml.unscreened.body=The comment has been unscreened. You can view it <a href="[[link]]">here</a>.
/tools/emailmanage.bml.desc.text=This page lets you remove past email addresses that were used with your account. If you remove an address, it will no longer be possible to have your password mailed to that address. This is useful if somebody discovered your password and hijacked your journal. Simply have the new password mailed to your old address, change the password, and remove the attacker's email address.
/tools/emailmanage.bml.notvalidated.text=To use this tool, your current email address, [[email]] , must be validated. If you've lost the confirmation email to do this, you can <a href='/register.bml'>have it re-sent</a>. After you validate your email, come back here.
/tools/memadd.bml.add_previous<<
<?h1 Add to memories... h1?>
<?p To add the journal entry you were just viewing to your "memories", fill out the form below. p?>
.
/tools/memadd.bml.error.login=You must be <a href="/login.bml?ret=1">logged in</a> to use this feature. Go and log in and you'll be brought back here.
/tools/memadd.bml.error.maxsize=The keyword "[[keyword]]" exceeds the maximum allowed size.
/tools/memadd.bml.keywords.text=Why is this post memorable? Enter up to five comma separated keywords or categories so you can find it later.
/tools/memories.bml.body.keyword<<
<?h1 [[keyword]] h1?>
<?p The following is a list of "[[keyword]]" journal entries that user <B>[[user]]</B> found memorable. p?>
.
/tools/memories.bml.body.list_categories<<
<?h1 Memorable Posts h1?>
<?p The following is a list of categories that user <b>[[user]]</b> has placed memorable journal entries in. p?>
.
/tools/memories.bml.body.memorable=The following is a list of uncategorised journal entries that user <b>[[user]]</b> found memorable.
/tools/memories.bml.error.noentries.body<<
This could be because: <ol>
<li>the user hasn't defined any memorable events,</li>
<li>the user's memorable events are protected and you don't have access to view them, or</li>
<li>the user doesn't have any memories that match your filter criteria.</li></ol>
.
/tools/memories.bml.uncategorized=Uncategorised
/update.bml.note=<b>Note:</b> The time and date above are from our server. Correct them for your timezone before posting.
/update.bml.opt.spellcheck=Spell-check entry before posting (checker only supports US English)
/update.bml.subject=<b>Subject:</b> <i>(optional)</i>
/update.bml.update.success=Update successful. You can view your updated journal <a href="[[uri]]">here</a>.
/userinfo.bml.about.comm=About:
/userinfo.bml.about.user=Bio:
/userinfo.bml.error.malfname=Malformed username: too long, or contains invalid characters.
/userinfo.bml.error.notloggedin=If you wish to view your own user profile, you need to <a href='/login.bml?ret=1'>log in</a>.
/userinfo.bml.friendof.comm=Watched by:
/userinfo.bml.friendof.user=Friend of:
/userinfo.bml.friends.user=Friends
/userinfo.bml.label.interests.modifyyours=Modify&nbsp;yours
/userinfo.bml.label.interests.removesome=Remove&nbsp;some
/userinfo.bml.label.shared=Posting Access:
/userinfo.bml.nonexist.body=The username <b>[[user]]</b> is not currently registered.
/userinfo.bml.syn.parseerror=Error Message:
error.noremote=You have to <a href="/login.bml?ret=1">log in</a> in order to use this page.
error.purged.text=This journal has been deleted and purged.
error.suspended.text=This account has been either temporarily or permanently suspended. If you are [[user]], please refer to the FAQ entitled <cite><a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=106">My account has been suspended! How can I get it back?</a></cite> for more information. Please note that in order to maintain our users' privacy, [[sitename]] cannot discuss the reasons for any suspension with anyone except the account's owner.
error.usernamelong=Username is too long — usernames may not be longer than 15 characters.
portal.recent.items.description=By default, only the most recent entry is shown.
talk.error.bogusargs=Invalid parameters
talk.error.notauthorised=You are not allowed to view this protected entry.
talk.spellcheck=Check spelling during preview
thislang.community|notes=Name of community you use to discuss the translation for this language.
thislang.community=lj_english
xcolibur.nav.manage=Manage
xcolibur.nav.manage.customize=Customise

File diff suppressed because it is too large Load Diff

3580
ljcom/bin/upgrading/eo.dat Normal file

File diff suppressed because it is too large Load Diff

3313
ljcom/bin/upgrading/es.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
;; -*- coding: utf-8 -*-
/allpics.bml.current=Käesolevad Pildid
/allpics.bml.keywords=Võtmesõnad:
/allpics.bml.nopics.text.other=See kasitaja ei ole üles laadinud ühtegi kasutaja pilti.
/allpics.bml.nopics.title=Pildid Puuduvad
/allpics.bml.pics=Siin on kasutaja pildid [[user]]le.
/allpics.bml.title=Kasutaja Pildid

5137
ljcom/bin/upgrading/fi.dat Normal file

File diff suppressed because it is too large Load Diff

3983
ljcom/bin/upgrading/fr.dat Normal file

File diff suppressed because it is too large Load Diff

2170
ljcom/bin/upgrading/ga.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
;; -*- coding: utf-8 -*-

2850
ljcom/bin/upgrading/gr.dat Normal file

File diff suppressed because it is too large Load Diff

1853
ljcom/bin/upgrading/he.dat Normal file

File diff suppressed because it is too large Load Diff

1107
ljcom/bin/upgrading/hi.dat Normal file

File diff suppressed because it is too large Load Diff

3473
ljcom/bin/upgrading/hu.dat Normal file

File diff suppressed because it is too large Load Diff

2382
ljcom/bin/upgrading/is.dat Normal file

File diff suppressed because it is too large Load Diff

1047
ljcom/bin/upgrading/it.dat Normal file

File diff suppressed because it is too large Load Diff

1181
ljcom/bin/upgrading/ja.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,31 @@
;; -*- coding: utf-8 -*-
/allpics.bml.current=Imagines Recentes
/allpics.bml.default=<u>Normalis<u>
/allpics.bml.error.noparam=Necesse est usuarii parametrum indicare.
/allpics.bml.keywords=Verba Clavis
/allpics.bml.nopics.title=Nullae Imagines
/allpics.bml.pics=Hic sunt usuarii imagines usuario [[user]]
/allpics.bml.title=Usuarii Imagines
/community/index.bml.title=Caput Communitatis
/community/join.bml.button.join=Adiungere ad Communitatem
/community/join.bml.label.addtofriends=Adde "[[maintainer]]" ad elenchum amicorum. <br>
/community/join.bml.label.allowposting=Haec communitas permittet mittendum omnibus sodalibus; licet igitur illic scribere. Si iam cliens adest LiveJournal apertus in computrato, exire et iterum inire necesse est, ut haec ephemris appareat in elencho ephemeridum in quibus potes scriber.
/community/join.bml.label.banned=Executor(es) huius communitatis interdixit tibi adiungendum.
/community/join.bml.label.commlogged=Initus est quam computus communis, non quam computus proprius.
/community/join.bml.label.errorcomminfo=Indicium indicatae communitatis inritum est.
/community/join.bml.label.expls=Opprime butonem subtus ad adiungendum ad communitatem "[[maintainer]]". Decarpe botonem subtus si vis adiungere ad communitatem, sed non vis scripta comuntatis videre in pagina amicorum.

1564
ljcom/bin/upgrading/lt.dat Normal file

File diff suppressed because it is too large Load Diff

865
ljcom/bin/upgrading/lv.dat Normal file
View File

@@ -0,0 +1,865 @@
;; -*- coding: utf-8 -*-
/allpics.bml.current=Esošās bildes
/allpics.bml.default=<u>Pamatbilde</u>
/allpics.bml.error.noparam=Lūdzu precizē lietotāja parametru.
/allpics.bml.keywords=Atslēgas vārdi:
/allpics.bml.nopics.title=Nav bilžu
/allpics.bml.pics=Šīs ir [[user]] bildes.
/allpics.bml.title=Lietotājbildes
/community/index.bml.title=Kopienas centrs
/community/join.bml.button.join=Pievienoties kopienai
/community/join.bml.label.addtofriends=Pievieno "[[maintainer]]" draugu sarakstam.<br>
/community/join.bml.label.allowposting=Šī kopiena atļauj rakstīt visiem tās biedriem, tātad tagad arī tev ir dota atļauja. Ja uz tava datora jau ir atvērta LJ programma, tev vajadzēs no tās iziet un vēlreiz iereģistrēties, lai šis žurnāls parādītos to žurnālu sarakstā, kuros tu vari rakstīt.
/community/join.bml.label.banned=Šīs kopienas uzturētājs nav atļāvis tev pievienoties kopienai.
/community/join.bml.label.commlogged=Tu esi piereģistrējies ar kopienas kontu, nevis ar savu personīgo kontu.
/community/join.bml.label.errorcomminfo=Dotā kopienas informācija nav derīga.
/community/join.bml.label.expls=Spied sekojošo pogu, lai pievienotos "[[maintainer]]" kopienai. Neatzīmē lodziņu, ja gribi pievienoties kopienai bet neredzēt kopienas žurnāla ierakstus savā draugu lapā.
/community/join.bml.label.loginfirst=Lai pievienotos kopienai, tev vispirms ir <a href="/login.bml?ret=1">jāreģistrējas</a>.
/community/join.bml.label.membernow=Tu tagad esi <a href="/userinfo.bml?user=[[username]]">[[commname]] kopienas</a> biedrs
/community/join.bml.label.sure=Vai esi pārliecināts?
/community/join.bml.success=Izdošanās
/community/join.bml.title=Pievienojies kopienai
/community/leave.bml.button.leave=Izstājies no kopienas
/community/leave.bml.label.buttontoleave=Spied sekojošo pogu, lai izstātos no "[[commname]]" kopienas.
/community/leave.bml.label.infoerror=Dotā kopienas informācija nav derīga.
/community/leave.bml.label.logoutfirst=Lai izstātos no kopienas, tev vispirms ir <a href="/login.bml?ret=1">jāpiereģistrējas</a>.
/community/leave.bml.label.removed=Tu tagad esi izstājies no <a href="/userinfo.bml?user=[[commuser]]">[[commname]] kopienas</a>
/community/leave.bml.success=Izdošanās
/community/leave.bml.sure=Vai esi pārliecināts?
/community/leave.bml.title=Izstājies no kopienas
/community/search.bml.button.clear=Nodzēst
/community/search.bml.button.search=Meklē!
/community/search.bml.checkbox.onlywithpics=Tikai kopienas ar bildēm
/community/search.bml.label.byinterest=Pēc interesēm
/community/search.bml.label.bylocation=Pēc atrašanās vietas
/community/search.bml.label.bytime=Pēc žurnāla pēdējā ieraksta izdarīšanas laika
/community/search.bml.label.city=Pilsēta:
/community/search.bml.label.country=Valsts:
/community/search.bml.label.displayoptions= Tavas iespējas
/community/search.bml.label.hasmember=Ir biedrs
/community/search.bml.label.othercriteria=Citi kritēriji
/community/search.bml.label.outputformat=Izvades formāts:
/community/search.bml.label.records=Ieraksti uz vienas lapas:
/community/search.bml.label.searchcomm=Meklēt kopienas
/community/search.bml.label.selecriteria=Izvēlies sekojošos kritērijus, pēc kuriem tu vēlies atrast kopienas. Rezultāti būs visu meklēšanas kritēriju kopsumma. Citiem vārdiem sakot, katrs iezīmētais lodziņš nozīmē "AND" vai "OR".
/community/search.bml.label.sortmethod=Kārtošanas metode:
/community/search.bml.label.stateprovince=Pavalsts/province:
/community/search.bml.label.updated=Izdarīts ieraksts pēdējās
/community/search.bml.sel.bypicture=Pēc bildes
/community/search.bml.sel.communityname=Kopienas nosaukums
/community/search.bml.sel.commview=Kopienas skats
/community/search.bml.sel.day=diena
/community/search.bml.sel.month=mēnesis
/community/search.bml.sel.simple=Vienkārši
/community/search.bml.sel.updatetime=Pēdējā ieraksta laiks
/community/search.bml.sel.username=Lietotāja vārds
/community/search.bml.sel.week=nedēļa
/community/search.bml.title=Kopienas meklēšana
/create.bml.age.check.question=Vai tev ir mazāk nekā 13 gadi?
/create.bml.age.check.yes=Jā, man vēl nav 13 gadu.
/create.bml.age.head=Vecums
/create.bml.btn.proceed=Turpināt...
/create.bml.clusterselect.cluster=Klasteris:
/create.bml.clusterselect.clusternum=Klasteris [[number]]
/create.bml.clusterselect.head=Klastera izvēle
/create.bml.clusterselect.nocluster=Nav klastera
/create.bml.clusterselect.text=Lūdzu izvēlies to klasteri, uz kura tu vēlies izveidot šo kontu. <b>Piezīme:</b> Šī ir tikai testa opcija. Lietotāji to neredzēs un neko par to nezinās.
/create.bml.create.head=Jauna žurnāla izveidošana
/create.bml.create.text=Izveidot jaunu LiveJournal ir viegli, tikai seko instrukcijām!
/create.bml.email.head=Tava e-pasta adrese
/create.bml.email.input.head=E-pasta adrese:
/create.bml.error.coppa.under13=Atvaino, sakarā ar COPPA ierobežojumiem, tu nevari lietot LiveJournal pirms tev paliek 13 gadi. Lūdzu atgriezies savā 13. dzimšanas dienā.
/create.bml.error.email.blank=Tev jānorāda sava e-pasta adrese.
/create.bml.error.email.nospaces=E-pasta adresē nav atļautas atstarpes. Ja tu esi AOL biedrs, atceries, ka tava interneta e-pasta adrese ir tavs screen name bez atstarpēm, kam seko <b>@aol.com</b>
/create.bml.error.password.asciionly=Parolē tu vari lietot tikai ASCII simbolus.
/create.bml.error.password.blank=Tev jāievada parole.
/create.bml.error.password.nomatch=Paroles nesakrīt.
/create.bml.error.postrequired=Nepieciešams POST.
/create.bml.error.username.blank=Lūdzu norādi vārdu vai pieņemtu vārdu.
/create.bml.error.username.inuse=Lietotāja vārds jau ir aizņemts; lūdzu izvēlies citu.
/create.bml.error.username.iscode=Lietotāja vārds izskatās pēc ielūguma koda, nevis lietotāja vārda.
/create.bml.error.username.mustenter=Tev jāievada lietotāja vārds.
/create.bml.error.username.reserved=Atvaino, šis lietotāja vārds ir rezervēts.
/create.bml.name.head=Tavs vārds
/create.bml.name.input.head=Vārds:
/create.bml.name.text=Kāds ir tavs vārds vai pieņemtais vārds? Tas parādīsies tava žurnāla augšdaļā un lietotāju reģistrā, ja tu izvēlēsies būt tajā ierakstīts. Tev nav jādod savs pilns vārds vai īstais vārds.
/create.bml.password.head=Parole
/create.bml.password.input.head1=Parole:
/create.bml.password.input.head2|staleness=1
/create.bml.password.input.head2=Atkārto paroli:
/create.bml.password.text=Izvēlies paroli.
/create.bml.proceed.btn.proceed=Turpināt...
/create.bml.proceed.warning=Spied <b>Turpināt</b> <i>tikai vienu reizi</i>!!
/create.bml.success.btn.enterinfo=Ievadi informāciju par sevi
/create.bml.success.head=Izdošanās!
/create.bml.success.text1|staleness=1
/create.bml.success.text1=Tavs žurnāls ir izveidots. Svarīga reģistrācijas informācija ir aizsūtīta uz <FONT FACE=Arial SIZE=+1><B>[[email]]</B></FONT> ar turpmākām instrukcijām. <B>Piezīme: </B> Tev ir tieši <I>septiņas dienas</I> laika, lai apstiprinātu tava žurnāla izveidošanu. Ja pēc septiņām dienām tu vēl neesi to apstiprinājis, lietotāja vārds <B>[[username]]</B> tiks izdzēsts un to varēs lietot kāds cits.
/create.bml.success.text2=Tavs LiveJournal būs atrodams:
/create.bml.success.text3=Tagad, lūdzu, ievadi informāciju par sevi. Tā lielākoties nav obligāta, bet dod mums ieskatu par to, kas ir LiveJournal lietotāji.
/create.bml.title=Izveido jaunu žurnālu
/create.bml.useacctcodes.entercode|staleness=1
/create.bml.useacctcodes.entercode=Lai izveidotu jaunu kontu, ievadi konta izveidošanas kodu:
/create.bml.useacctcodes.welcome=Laipni lūdzam
/create.bml.username.box.head=Lietotāja vārds:
/create.bml.username.forpaidaccts=Vai, apmaksātiem kontiem:
/create.bml.username.head=Lietotāja vārds
/create.bml.username.ljaddress=Tavam žurnālam būs šādas adreses:
/create.bml.username.text=Katram [[sitename]] lietotājam jābūt savam unikālam lietotāja vārdam. Tavs lietotāja vārds ir redzams tava žurnāla adresē un ar to tu piereģistrējies [[sitename]] serverī. Tas arī parādās, kad tu raksti komentārus citu cilvēku žurnālos.
/create.bml.username.username=lietotāja vārds
/editinfo.bml.allowshowcontact.about=Šo opciju vēlams iezīmēt. Tā ļauj citiem cilvēkiem kontaktēties ar tevi, parādot tavu e-pasta adresi, ICQ numuru un AOL lietotājvārdu tavā LiveJournal.
/editinfo.bml.allowshowcontact.email=Publicējamā e-pasta adrese:
/editinfo.bml.allowshowcontact.email.actual_only=Tikai īstā adrese
/editinfo.bml.allowshowcontact.email.both=Abas (īstā + [[domain]])
/editinfo.bml.allowshowcontact.email.lj_only=Tikai LiveJournal adrese
/editinfo.bml.allowshowcontact.email.neither=Neviena. Nerādīt nevienu e-pasta adresi.
/editinfo.bml.allowshowcontact.email.no_show=Nerādīt e-pasta adresi
/editinfo.bml.allowshowcontact.email.show=Rādīt e-pasta adresi
/editinfo.bml.allowshowcontact.email.withdomainaddr=Ar augšminēto opciju tu vari arī izvēlēties slēpt savu e-pasta adresi (tomēr parādot citu kontaktinformāciju), tikai rādīt savu LiveJournal e-pasta adresi (tikai <a href="/paidaccounts/">apmaksātiem kontiem</a>), tikai rādīt savu īsto e-pasta adresi, vai rādīt abas.
/editinfo.bml.allowshowcontact.email.withoutdomainaddr=Ar augšminēto opciju tu vari arī izvēlēties slēpt savu e-pasta adresi (tomēr parādot citu kontaktinformāciju)
/editinfo.bml.allowshowcontact.title=Parādīt tavu kontaktinformāciju LiveJournal?
/editinfo.bml.allowshowinfo.about=Izvēlies šo, ja gribi lai tava pilsēta/pavalsts/valsts un dzimšanas diena būtu redzama citiem lietotājiem.
/editinfo.bml.allowshowinfo.title=Parādīt vietu &amp; dzimšanas dienu?
/editinfo.bml.autotranslate.about<<
Lieto šo opciju, lai norādītu LiveJournal, kuru kodēšanas sistēmu (encoding) lietot taviem ierakstiem un komentāriem, kas izdarīti pirms šī tīkla lapa tika pārlikta uz Unicode.
Ja tu raksti angliski, izvēlies "Western European".
.
/editinfo.bml.autotranslate.header|staleness=1
/editinfo.bml.autotranslate.header=Automātiski tulkot vecākus ierakstus no:
/editinfo.bml.bday.title=Dzimšanas diena
/editinfo.bml.bday.year.opt=gadu var nenorādīt
/editinfo.bml.bdayreminders.about=Ja tu vēlies saņemt e-pasta atgādinājumus par tavu LiveJournal draugu dzimšanas dienām, iezīmē šo lodziņu.
/editinfo.bml.bdayreminders.header|staleness=1
/editinfo.bml.bdayreminders.header=Sūtiet man dzimšanas dienu atgādinājumus
/editinfo.bml.bio.about|staleness=1
/editinfo.bml.bio.about=Šeit tu vari ierakstīt mini biogrāfiju par sevi, kas parādīsies tavā info lapā.
/editinfo.bml.bio.header=Par tevi
/editinfo.bml.blockrobots.about|staleness=1
/editinfo.bml.blockrobots.about<<
Ja tu atzīmē šo opciju, roboti tiks sūtīti prom.
Ne visi roboti respektē noteikumus, bet populāro meklēšanas portālu roboti to dara.
.
/editinfo.bml.blockrobots.header=Neatļauj robotiem skatīt tavu žurnālu
/editinfo.bml.city.title=Pilsēta
/editinfo.bml.country.choose=Izvēlies valsti
/editinfo.bml.country.title=Valsts
/editinfo.bml.donotlog=Nē
/editinfo.bml.email.title=E-pasts
/editinfo.bml.enableboards.about|staleness=1
/editinfo.bml.enableboards.about=Iezīmē šo, ja gribi lai citi var atbildēt uz taviem žurnāla ierakstiem. (nepieciešams atbilstošs žurnāla stils)
/editinfo.bml.enableboards.header=Atļaut komentārus
/editinfo.bml.encoding.about=Pamatā tikai lietotājiem, kas raksta vairākās valodās, vajadzēs izdarīt šeit izmaiņas.
/editinfo.bml.encoding.header=Kodēšanas izvēlne
/editinfo.bml.error.email.lj_domain|staleness=1
/editinfo.bml.error.email.lj_domain<<
Tu nevari norādīt @[[domain]] e-pasta adresi.
Šajā lauciņā ieraksti savu īsto adresi.
Ja tu esi maksājošs lietotājs, tava [[user]]@[[domain]] adrese pārsūtīs pastu uz tavu īsto adresi.
Lai izvēlētos, kura e-pasta adrese (vai abas) tiks parādīta publiski, skaties opciju zem "Parādīt kontaktinformāciju".
.
/editinfo.bml.error.email.no_space<<
E-pasta adresē nav atļautas atstarpes.
Ja tu lieto AOL, atceries, ka tava interneta e-pasta adrese ir tavs lietotājvārds bez atstarpēm, kam seko <b>@aol.com</b>
.
/editinfo.bml.error.excessive_int=Atvaino, tu esi minējis pārāk daudz intereses. Limits ir 150, bet tu esi minējis [[intcount]]. Izmaiņas interešu sarakstā netika izdarītas. Ej atpakaļ un saīsini savu sarakstu, tad vēlreiz saglabā to.
/editinfo.bml.error.invalidbio=Tava ierakstītā biogrāfija satur nederīgus simbolus. Tev jāiet uz <a href='/utf8convert.bml'><b>konvertēšanas lapu</b></a>, lai pārliktu to uz Unicode.
/editinfo.bml.error.invalidints=Tavs pašreizējais interešu saraksts satur nederīgus simbolus. Tev jāiet uz <a href='/utf8convert.bml'><b>konvertēšanas lapu</b></a>, lai pārliktu to uz Unicode.
/editinfo.bml.error.invalidname=Tavs vārds satur nederīgus simbolus. Tev jāiet uz <a href='/utf8convert.bml'><b>konvertēšanas lapu</b></a>, lai pārliktu to uz Unicode.
/editinfo.bml.error.locale.country_ne_state=Tu esi izvēlējies Amerikas Savienotās Valstis kā savu valsti, bet esi ierakstījis neesošu ASV pavalsti "cita pavalsts" ailē.
/editinfo.bml.error.locale.invalid_country=Kaut kā ir gadījies, ka tu esi izvēlējies nederīgu valsti.
/editinfo.bml.error.locale.state_ne_country=Tu esi norādījis valsti kas nav ASV, bet izvēlējies ASV pavalsti.
/editinfo.bml.error.locale.zip_ne_state<<
Tavs pasta indekss neatbilst izvēlētajai pavalstij.
Vai nu izlabo informāciju, vai arī izdzēs vienu vai abas ailes.
.
/editinfo.bml.error.locale.zip_requires_us|staleness=1
/editinfo.bml.error.locale.zip_requires_us<<
Tu esi norādījis pasta indeksu bet neesi izvēlējies ASV kā savu valsti.
Mēs prasām pasta indeksu tikai no ASV iedzīvotājiem.
Lūdzu ej atpakaļ un izdzēs pasta indeksu, vai arī izvēlies ASV kā savu valsti.
.
/editinfo.bml.error.tm.require.number=Ja tu vēlies lietot īsziņu sūtīšanu, tev jānorāda savs tālruņa numurs.
/editinfo.bml.error.tm.require_provider<<
Ja tu vēlies izmantot SMS sūtīšanu, tev jāizvēlas savs mobilo sakaru tīkls.
Ja tas nav minēts, lūdzu atraksti mums informāciju par sava tīkla SMS iespējām, lai mēs to varam pievienot sarakstam.
.
/editinfo.bml.finished.about=Kad esi pabeidzis, spied "Saglabāt izmaiņas" pogu:
/editinfo.bml.finished.header=Pabeigts?
/editinfo.bml.finished.save_button=Saglabāt izmaiņas
/editinfo.bml.gender.title=Dzimums
/editinfo.bml.getreplies.about|staleness=1
/editinfo.bml.getreplies.about=Iezīmē šo, ja gribi saņemt e-pastus, kad kāds atbild uz taviem žurnāla ierakstiem ziņu dēlī.
/editinfo.bml.getreplies.header=Saņem ziņu dēļa atbildes
/editinfo.bml.hidefriendof.about=Ja atzīmēsi šo, to cilvēku saraksts, kas ir pievienojuši tevi kā draugu, netiks parādīts tavā profila lapā.
/editinfo.bml.howhear.about|staleness=1
/editinfo.bml.howhear.about<<
Tīri aiz ziņkārības, kur tu uzzināji par [[sitename]?
Ja no kāda cilvēka, norādi viņa lietotājvārdu, bet ja
no cita avota/raksta/saites/tīkla lapas, sniedz attiecīgo informāciju.
.
/editinfo.bml.htmlemail.about|staleness=1
/editinfo.bml.htmlemail.about<<
Iezīmē šo, ja tava e-pasta programma pilnībā atbalsta HTML.
Daudzas programmas cenšas to atbalstīt, bet smagi izgāžas.
Ja neiezīmēsi, LiveJournal sūtīs tev tikai teksta e-pastus.
.
/editinfo.bml.htmlemail.header=Sūtīt HTML e-pastus
/editinfo.bml.int.about<<
Ja vēlies lai citi var meklēt reģistrā un atrast tevi pēc tavām interesēm, norādi visu, par ko tu interesējies, atdalot ar komatiem.
Vislabākās ir īsas viena vārda frāzes. Kā likums, tavām interesēm būtu jāiekļaujas teikumā "Man patīk ________". Minot lietvārdus, lieto daudzskaitli.
.
/editinfo.bml.int.ex.bad=<FONT COLOR=#FF0000><B>SLIKTS</B></FONT> piemērs: <B>Man patīk visādas grupas un skatīties filmas un pļāpāt ar draugiem un iet uz klubiņiem.</B> Tādā stilā tu vari rakstīt savā biogrāfijā, bet ne šeit.
/editinfo.bml.int.ex.good=<FONT COLOR=#009000><B>LABS</B></FONT> piemērs: <B>slēpošana, datori, mp3s, siers, sievietes</B>
/editinfo.bml.int.header=Intereses
/editinfo.bml.login.enterinfo=Ievadi savu lietotājvārdu un paroli, lai izmainītu personīgo informāciju.
/editinfo.bml.login.forgot.header=Vai esi ko aizmirsis?
/editinfo.bml.login.forgot.recover=Ja esi aizmirsis savu lietotāja vārdu vai paroli, <a href='lostinfo.bml'>meklē to šeit!</a>.
/editinfo.bml.logip.always=Vienmēr
/editinfo.bml.logip.anon_only=Tikai anonīmus rakstītājus
/editinfo.bml.logip.header=Reģistrēt atbilžu rakstītāju IP adreses?
/editinfo.bml.mangleaddress.about|staleness=1
/editinfo.bml.mangleaddress.about=Ja tu baidies, ka spam-roboti atradīs tavu e-pasta adresi LiveJournal, izvēlies šo opciju, un tava e-pasta adrese tiks izmainīta tā, ka to nevarēs atrast e-pasta meklētāji roboti.
/editinfo.bml.mangleaddress.header=Izmainīt parādīto e-pasta adresi
/editinfo.bml.name.title=Vārds
/editinfo.bml.numcomments.about=Iezīmē šo, ja vēlies pielīdzināt komentāru skaitu URL, lai liktu tavai pārlūkprogrammai rādīt saites citā krāsā.
/editinfo.bml.numcomments.header=Pievienot &amp;nc=xx komentāru URL
/editinfo.bml.optional=Neobligāti
/editinfo.bml.opt_in.header=Sūtiet man LiveJournal jaunumus.
/editinfo.bml.persinfo.disclaimer=Ieraksti kādu informāciju par sevi, mūsu ziņkārības apmierināšanai un statistikai. Mēs ar šo informāciju nedarīsim neko ļaunu, mēs tikai vēlētos redzēt, kas un kur ir mūsu lietotāji. Lūdzu aizpildi to precīzi. Ja tevi māc raizes, izlasi mūsu <a href="/legal/privacy.bml">slepenības politiku</a>.
/editinfo.bml.persinfo.header=Personīgā informācija
/editinfo.bml.screen.all=Visi
/editinfo.bml.screen.anon=Anonīmi
/editinfo.bml.screen.none=Neviens
/editinfo.bml.security.header|staleness=1
/editinfo.bml.security.header=Drošība
/editinfo.bml.security.visibility.anybody=Jebkurš
/editinfo.bml.security.visibility.everybody=Visi
/editinfo.bml.security.visibility.friends=Tikai draugi
/editinfo.bml.security.visibility.regusers=Reģistrēti lietotāji
/editinfo.bml.settings.header=LiveJournal izvēlne
/editinfo.bml.state.other=Vai ieraksti citu pavalsti/provinci/teritoriju
/editinfo.bml.state.title=Pavalsts
/editinfo.bml.state.us=ASV pavalstis
/editinfo.bml.success.header=Izdošanās!
/editinfo.bml.success.message=Tava informācija un <a href="/users/[[user]]/">žurnāls</a> un <a href="/userinfo.bml?user=[[user]]">profils</a> ir izmainīti.
/editinfo.bml.switch.button=Pārslēgt
/editinfo.bml.switch.header=Pārslēgt žurnālu
/editinfo.bml.switch.workwith=Strādāt ar žurnālu:
/editinfo.bml.title=Izmainīt personīgo informāciju
/editinfo.bml.tm.details=<a href="/tools/textmessage.bml?mode=details">detaļas</a>
/editinfo.bml.tm.phonenum=Pilns tālruņa numurs:
/editinfo.bml.tm.sec.about=Atļaut īsziņas no citiem lietotājiem.
/editinfo.bml.tm.sec.title=Drošības līmenis:
/editinfo.bml.tm.servprov=Mobīlo sakaru tīkls
/editinfo.bml.tm.title=Īsziņas
/editinfo.bml.whoreply.header=Kas var atbildēt uz taviem ierakstiem?
/editinfo.bml.zip.title=Pasta indekss
/editinfo.bml.zip.usonly=5 ciparu pasta indekss; tikai ASV iedzīvotājiem
/editjournal.bml.btn.proceed=Turpināt...
/editjournal.bml.certainday=Noteikta diena:
/editjournal.bml.recententries=paši pēdējie ieraksti
/editjournal.bml.recententry=Pēdējais ieraksts
/editjournal.bml.title=Rediģēt žurnāla ierakstus
/editjournal.bml.viewwhat=Kurus ierakstus skatīt:
/editjournal_do.bml.btn.edit=Rediģēt izvēlēto ierakstu
/editjournal_do.bml.btn.save=Saglabāt žurnāla ierakstu
/editjournal_do.bml.continue.head=Spied, lai turpinātu...
/editjournal_do.bml.continue.text=Pēc tam kad esi izvēlējies ierakstu, ko rediģēt vai izdzēst, spied Rediģēt pogu.
/editjournal_do.bml.currmood|staleness=1
/editjournal_do.bml.currmood=<A HREF="/moodlist.bml">Garastāvoklis</A>:
/editjournal_do.bml.currmusic=Mūzika:
/editjournal_do.bml.date=Datums:
/editjournal_do.bml.default=pamata
/editjournal_do.bml.edit.text|staleness=2
/editjournal_do.bml.edit.text=Rediģē tās žurnāla ieraksta ailes, kuras tu vēlies izmainīt, un nospied Saglabāt pogu lapas apakšā. Lai izdzēstu ierakstu, vienkārši izdzēs visu tekstu un spied Saglabāt... viss ieraksts tiks izdzēsts.
/editjournal_do.bml.error.getting=Žurnāla ieraksta izvēlē radusies kļūda:
/editjournal_do.bml.error.modify=Izdarot izmaiņas žurnālā, radusies kļūda:
/editjournal_do.bml.error.nofind=Izvēlētais žurnāla ieraksts nav atrodams.
/editjournal_do.bml.event=Notikums:
/editjournal_do.bml.localtime=Vietējais laiks:
/editjournal_do.bml.noneother=Neviens, vai cits:
/editjournal_do.bml.opt.backdate=Atpakaļejošs datums/laiks:
/editjournal_do.bml.opt.backdate.about=neparādīsies draugu lapā
/editjournal_do.bml.opt.nocomments=Neatļaut komentārus:
/editjournal_do.bml.opt.noemail=Nesūtīt komentārus pa e-pastu:
/editjournal_do.bml.opt.noformat=Automātiski neformatēt:
/editjournal_do.bml.other=Cits:
/editjournal_do.bml.pickentry.head=Izvēlies ierakstu rediģēšanai
/editjournal_do.bml.pickentry.text=Izvēlies, ko tu gribi rediģēt, un nospied Rediģēt pogu lapas apakšā.
/editjournal_do.bml.picture=Lietojamā <a href="[[url]]">bilde</a>:
/editjournal_do.bml.save.head=Nospied, lai saglabātu...
/editjournal_do.bml.save.text=Pēc tam, kad esi pabeidzis izdarīt izmaiņas savā žurnāla ierakstā, nospied Saglabāt.
/editjournal_do.bml.subject|staleness=1
/editjournal_do.bml.subject=<B>Temats:</B> <I>(nav obligāts, var lietot garākiem ierakstiem)</I>
/editjournal_do.bml.success.delete=Žurnāla ieraksts ir izdzēsts.
/editjournal_do.bml.success.edit|staleness=1
/editjournal_do.bml.success.edit=Žurnāla ieraksts ir mainīts. Tu vari to skatīt <a href="[[url]]">šeit</a>.
/editjournal_do.bml.success.head=Izdošanās
/editjournal_do.bml.timeformat=24 stundu laiks
/editjournal_do.bml.title=Rediģēt žurnāla ierakstus
/friends/add.bml.add.header=Izdošanās
/friends/add.bml.add.text|staleness=2
/friends/add.bml.add.text=Lietotājs <?ljuser [[user]] ljuser?> ir pievienots tavam draugu sarakstam. Tu vari skatīt savu draugu lapu <a href="[[url]]">šeit</a>.
/friends/add.bml.add.title=Draugs pievienots!
/friends/add.bml.btn.add=Pievieno [[user]]
/friends/add.bml.btn.modify=Izmainīt
/friends/add.bml.btn.remove=Nodzēst
/friends/add.bml.colors.bg=Pamatkrāsa
/friends/add.bml.colors.fg=Teksta krāsa
/friends/add.bml.colors.header=Krāsas
/friends/add.bml.colors.hover=(Paturi peles kursoru virs krāsas, lai redzētu tās nosaukumu)
/friends/add.bml.colors.text=Tu vari arī izvēlēties krāsas, kas apzīmēs [[user]] tavā draugu sarakstā.
/friends/add.bml.confirm.header=Pievienot <b>[[user]]</b> kā draugu?
/friends/add.bml.confirm.text=Lai pievienotu <b>[[user]]</b> savam draugu sarakstam, nospied pogu.
/friends/add.bml.confirm.title=Pievieno draugu
/friends/add.bml.error1.header|staleness=1
/friends/add.bml.error1.header=Vispirms piereģistrējies
/friends/add.bml.error1.text=Lai pievienotu lietotāju savam draugu sarakstam, tev vispirms <A HREF="/login.bml?ret=1">jāreģistrējas</A>. Ja tev vēl nav sava konta, tu vari to <a href="/create.bml">izveidot</a>, lai sekotu līdzi savu draugu žurnāliem.
/friends/add.bml.error1.title=Pievieno draugu
/friends/add.bml.error2.text|staleness=1
/friends/add.bml.error2.text=Nepareizs vai neesošs lietotājvārds. :ai pievienotu draugu, ej uz <A HREF="/friends/edit.bml">rediģēt draugus</A> lapu.
/friends/add.bml.error3.text=<b>[[user]]</b> jau ir tavā draugu sarakstā. Papildus tu vari mainīt viņam piešķirtās krāsas.
/friends/add.bml.error3.title=Rediģēt draugus
/friends/add.bml.groups.header=Draugu grupas
/friends/add.bml.groups.nogroup|staleness=1
/friends/add.bml.groups.nogroup=Draugu grupas nav uzstādītas.
/friends/add.bml.groups.text=Kurās draugu grupās tu vēlies šo lietotāju iekļaut? Draugu grupas tiek lietotas tavas draugu lapas filtrēšanai un ierakstu drošībai.
/friends/add.bml.remove.header=Izdošanās
/friends/add.bml.remove.text=Lietotājs <?ljuser [[user]] ljuser?> ir izņemts no tava draugu saraksta. Tu vari skatīt savu draugu lapu <a href="[[url]]">šeit</a>.
/friends/add.bml.remove.title=Draugs nodzēsts!
/friends/edit.bml.title=Rediģēt draugus
/friends/edit_do.bml.addfriends.head=Pievienot draugus
/friends/edit_do.bml.addfriends.text=Ievadi savu draugu LiveJournal lietotājvārdus sekojošajās ailēs un izvēlies pamata un teksta krāsas, kuras ar viņiem asociēt....
/friends/edit_do.bml.background=Pamatkrāsa
/friends/edit_do.bml.bgcolor=Pamatkrāsa:
/friends/edit_do.bml.btn.close=Aizvērt
/friends/edit_do.bml.btn.save=Saglabāt izmaiņas
/friends/edit_do.bml.done.head=Darīts?
/friends/edit_do.bml.done.text=Kad esi pabeidzis, spied sekojošo "Saglabāt izmaiņas" pogu...
/friends/edit_do.bml.error.updating=Tava draugu saraksta papildināšanā atgadījusies kļūda:
/friends/edit_do.bml.foreground=Teksta krāsa
/friends/edit_do.bml.friend=Draugs
/friends/edit_do.bml.hover=Paturi peles kursoru virs krāsas, lai redzētu tās nosaukumu
/friends/edit_do.bml.name=Vārds
/friends/edit_do.bml.nofriends.head=Nav draugu?
/friends/edit_do.bml.opt.delete=Izdzēst?
/friends/edit_do.bml.success.head=Izdošanās
/friends/edit_do.bml.textcolor=Teksta krāsa:
/friends/edit_do.bml.title=Rediģēt draugus
/friends/edit_do.bml.user=Lietotājs
/friends/edit_do.bml.yourfriends.head=Tavi draugi
/friends/edit_do.bml.yourfriends.text=Tu esi minējis sekojošos draugus:
/index.bml.boldcreate=Izveido pats savu LiveJournal!
/index.bml.frank.image.alt=Āzis Franks, LiveJournal talismans.
/index.bml.frank.logo=<b><i>"Bēēēēē",</i> saka <a href="/site/goat.bml">Franks</a>.</b>
/index.bml.meta.desc=LiveJournal.com ir vieta, kur tu vari dalīties savās domās ar visu pasauli.
/index.bml.meta.keywords=dienasgrāmata, žurnāls, online žurnāls, dienasgrāmatas, rakstīšana, online dienasgrāmata, web dienasgrāmata
/interests.bml.add.added.head=Pievienots!
/interests.bml.add.added.text=Interese pievienota tavam sarakstam.
/interests.bml.add.btn.text=Pievienot [[interest]]
/interests.bml.add.confirm.head=Apstiprināt
/interests.bml.add.confirm.text=Lai pievienotu <b>[[interest]]</b> interesēm, spied sekojošo pogu.
/interests.bml.add.toomany.head=Atvaino...
/interests.bml.add.toomany.text=Tu jau esi norādījis [[maxinterests]] intereses.
/interests.bml.addint=Ja tu arī par šo interesējies un vēlētos pievienoties šim sarakstam, <a href="/interests.bml?mode=add&amp;intid=[[qintid]]">ej šeit</A>.
/interests.bml.communities.head=Saistītas kopienas
/interests.bml.communities.text=Sekojošās kopienas arī interesējas par <b>"[[interest]]"</b>.
/interests.bml.count=Skaits
/interests.bml.error.add.mustlogin=Lai pievienotu interesi, tev ir jāiereģistrējas.
/interests.bml.error.findsim_do.intnotfound=Interese nav atrasta.
/interests.bml.findsim.searchwait=<b>Lūdzu ievēro:</b> Meklējot paies vairākas sekundes. Esi pacietīgs.
/interests.bml.findsim_do.account.notallowed=Atvaino, tava konta veids neatļauj tev izmantot šo iespēju.
/interests.bml.findsim_do.magic=Maģiskais<br />indekss
/interests.bml.findsim_do.magic.head=Maģiskais indekss?
/interests.bml.findsim_do.magic.text=Katrs līdzīgais lietotājs saņem maģisko indeksu, kas tiek aprēķināts no diviem faktoriem: sakrītošo interešu skaita un dažiem papildus punktiem par netipisku interešu sakritību.
/interests.bml.findsim_do.nomatch.head=Nav rezultātu
/interests.bml.findsim_do.nomatch.text=Neviens lietotājs nav līdzīgs [[user]].
/interests.bml.findsim_do.notdefined=Lietotājs [[user]] nav minējis savas intereses.
/interests.bml.findsim_do.similar.head=Līdzīgi lietotāji
/interests.bml.findsim_do.similar.text=Sekojošie lietotāji ir vislīdzīgākie [[user]]
/interests.bml.interest=Interese
/interests.bml.interested.btn.find=Meklēt
/interests.bml.interested.in|staleness=1
/interests.bml.interested.in=Meklēt cilvēkus, kas interesējas par:
/interests.bml.interests.head=Intereses
/interests.bml.interests.text|staleness=1
/interests.bml.interests.text=Te ir dažas interesantas lietas, ko var darīt ar interesēm...
/interests.bml.interests.viewpop=Skatīt populāras intereses
/interests.bml.match=[[skaits]] atbilst:
/interests.bml.matches=[[skaits]] atbilst:
/interests.bml.morestuff|staleness=1
/interests.bml.morestuff=Vairākas interesantas lietas atrodamas <A HREF="/interests.bml">interešu lapā</A>.
/interests.bml.nointerests.text=Vēl neesi norādījis savas intereses? Lai pievienotu tās, ej <A HREF="/editinfo.bml">Rediģēt personīgo informāciju un uzstādījumus</A>.
/interests.bml.popular.head=Populāras intereses
/interests.bml.popular.text=Sekojošās intereses ir vispopulārākās.
/interests.bml.title=Intereses
/interests.bml.toomany.body=[[intcount]] cilvēki un/vai kopienas ir minējuši šo interesi. Saraksts netiks parādīts.
/interests.bml.toomany.head=Daudz rezultātu
/interests.bml.users.text|staleness=1
/interests.bml.users.text=Sekojošie lietotāji arī interesējas par <b>[[interest]]</b>.
/login.bml.bindip.label=Piesaistīt IP adresei:
/login.bml.bindip.no=Nē (strādā ar visiem ISP)
/login.bml.login.forget=Aizmirsi?
/login.bml.login.head=Reģistrēties
/login.bml.login.never=Nekad
/login.bml.login.otheropts=Citas iespējas
/login.bml.login.password=Parole:
/login.bml.login.text1=Lai iereģistrētos [[sitename]], ievadi savu lietotājvārdu un paroli. <b>Jauniem lietotājiem:</b> Lai izveidotu kontu, <a href='/create.bml'>ej šeit</a>.
/login.bml.login.username=Lietotājvārds:
/login.bml.login.whenbrowsercloses=Kad pārlūkprogramma aizveras
/login.bml.title=Reģistrēties
/login.bml.whylogin.benefit1=Tev nevajadzēs vēlreiz ievadīt savu lietotājvārdu/paroli.
/login.bml.whylogin.head=Kāpēc jāreģistrējas?
/login.bml.whylogin.text=Dažas reģistrēšanās priekšrocības:
/lostinfo.bml.btn.proceed=Turpināt
/lostinfo.bml.enter_email=Ievadi savu e-pasta adresi:
/lostinfo.bml.enter_email_optional=E-pasta adrese: (neobligāti)
/lostinfo.bml.enter_username=Ievadi savu lietotājvārdu:
/lostinfo.bml.lostpassword.text|staleness=1
/lostinfo.bml.lostpassword.text=Ja esi pazaudējis savu paroli, ievadi savu lietotājvārdu un, vēlams, e-pasta adresi, uz kuru tu vēlētos nosūtīt paroli. Ievēro, ka e-pasta adresei jāsakrīt ar to, ko tu esi lietojis iepriekš un apstiprinājis lietošanai LiveJournal. Ja atstāsi e-pasta aili tukšu, tā tiks aizsūtīta uz tavu esošo adresi.
/lostinfo.bml.lostpassword.title|staleness=1
/lostinfo.bml.lostpassword.title=Pazaudēji savu paroli?
/lostinfo.bml.lostusername.text=Ja esi pazaudējis savu lietotājvārdu, ievadi savu e-pasta adresi, un mēs aizsūtīsim tev tavu lietotājvārdu.
/lostinfo.bml.lostusername.title|staleness=1
/lostinfo.bml.lostusername.title=Pazaudēji savu lietotājvārdu?
/lostinfo.bml.title=Pazaudēta informācija
/lostinfo_do.bml.error.no_usernames_for_email=Neviens lietotājvārds nav reģistrēts ar adresi: [[address]].
/lostinfo_do.bml.error1.text=Tu neesi lietojis šo e-pasta adresi ar šo kontu, vai tā nav bijusi apstiprināta.
/lostinfo_do.bml.password_mailed.text=Tava parole ir nosūtīta.
/lostinfo_do.bml.password_mailed.title=Parole nosūtīta!
/lostinfo_do.bml.title=Pazaudēta informācija
/lostinfo_do.bml.username_mailed.text=Tavs lietotājvārds ir nosūtīts.
/lostinfo_do.bml.username_mailed.title=Lietotājvārds nosūtīts!
/modify.bml.title=Izmainīt žurnālu
/modify_do.bml.availablestyles.head=Pieejamie stili
/modify_do.bml.availablestyles.userstyles=Lietotāju stili:
/modify_do.bml.colortheme.about|staleness=2
/modify_do.bml.colortheme.about=Šeit tu vari izvēlēties krāsu motīvu tavam iepriekš izvēlētajam lapas izkārtojumam. Vai arī, ja tevi neapmierina dotās krāsas, norādi pats savas! Ja tu atrodi kādu īpaši seksīgu salikumu, paziņo mums, un mēs nosauksim motīvu tavā vārdā.
/modify_do.bml.colortheme.color.head1=Krāsa
/modify_do.bml.colortheme.color.head2=(#rrggbb vai vārds)
/modify_do.bml.colortheme.customcolors=Citas krāsas
/modify_do.bml.colortheme.defaulttheme=Pamatmotīvs
/modify_do.bml.colortheme.head=Krāsu motīvs
/modify_do.bml.domainalias.about=Ja tev ir savs domēna vārds (domain name), vai tu plāno to reģistrēt un vēlētos, lai tas automātiski norāda uz tavu žurnālu, ievadi to šeit:
/modify_do.bml.domainalias.domainname=Domēna vārds:
/modify_do.bml.domainalias.example=Piemērs: <i>my-journal.com</i>
/modify_do.bml.done.btn.savechanges=Saglabāt izmaiņas
/modify_do.bml.done.text=Kad esi pabeidzis, spied "Saglabāt izmaiņas" pogu...
/modify_do.bml.error.dupdomainalias=Cits lietotājs jau reģistrējis sev tavu izvēlēto domēna vārdu.
/modify_do.bml.error.stylenotavailable=Viens no izvēlētajiem stiliem nav pieejams. Tas noticis vai nu tādēļ, ka kāds šo stilu ir izdzēsis, vai arī tev nav dota atļauja izvēlēties šo stilu.
/modify_do.bml.friends.about=Šeit tu vari izvēlēties savas draugu lapas izskatu.
/modify_do.bml.friends.head=Draugu skats
/modify_do.bml.friends.opt.usesharedpic.about=Šī opcija nosaka, kuru bildi tu redzēsi savā draugu lapā, kad lietotājs rakstījis kopīgā vai kopienas žurnālā. Ja tu to iezīmē, tad tu redzēsi kopienas bildi. Ja atstāsi to neiezīmētu, tad tu redzēsi rakstītāja personīgo bildi.
/modify_do.bml.friends.opt.usesharedpic.head=Lietot kopīgās žurnāla bildes, personīgo vietā
/modify_do.bml.journaloptions.about|staleness=2
/modify_do.bml.journaloptions.about=Šeit tu vari pieskaņot savu LiveJournal lapu izskatu. Ja tev ļoti interesē, kā viss darbojas, izlasi <A HREF="/developer/" TARGET=_blank>programmētāju informāciju</A>. Pretējā gadījumā, mēs pieņemsim, ka tu esi apmierināts ar dotajām pamata izvēles iespējām.
/modify_do.bml.journaloptions.head=Žurnāla izvēlne
/modify_do.bml.journalstatus.about=Ja tu vēlies aizvērt vai atkal atvērt savu žurnālu, šī ir tā vieta, kur to izdarīt. Kad tu aizver savu žurnālu, tev tiek dotas 30 dienas laika to atvērt, gadījumā ja tu pārdomā. Pēc 30 dienām žurnāls tiks neatgriezeniski izdzēsts un nebūs atjaunojams.
/modify_do.bml.journalstatus.head=Žurnāla aktivizācijas statuss
/modify_do.bml.journalstatus.select.activated=Aktīvs
/userinfo.bml.label.memories=Atmiņas
/userinfo.bml.label.moredetails=(papildus info...)
/userinfo.bml.label.name=Vārds:
/userinfo.bml.label.nofriends=<i>Neviens nav minēts.</i>
/userinfo.bml.label.sendmessage=Sūtīt ziņu
talk.commentpermlink=saite
talk.commentpost=Pievienot jaunu komentāru
talk.commentsread=Lasīt komentārus

1114
ljcom/bin/upgrading/ms.dat Normal file

File diff suppressed because it is too large Load Diff

889
ljcom/bin/upgrading/nb.dat Normal file
View File

@@ -0,0 +1,889 @@
;; -*- coding: utf-8 -*-
/accountstatus.bml.journalstatus.about=Om du vil slette eller angre sletting av din dagbok, så gjøres det her. Om du sletter dagboken har du 30 dager på deg å angre slettingen. Etter 30 dager vil dagboken forsvinne for godt og det vil ikke være mulig å få den tilbake.
/accountstatus.bml.journalstatus.head=Status for dagbokaktivering
/accountstatus.bml.journalstatus.select.activated=Aktivert
/accountstatus.bml.journalstatus.select.deleted=Slettet
/accountstatus.bml.journalstatus.select.suspended=Fryst
/accountstatus.bml.title=Kontostatus
/allpics.bml.current=Gjeldende ikoner
/allpics.bml.default=<u>Standard</u>
/allpics.bml.edit2=Du er kanskje interessert i å <a href='[[editlink]]'>redigere dine nøkkelord</a> eller <a href='[[uploadlink]]'>laste opp et nytt bilde</a>.
/allpics.bml.error.noparam=Du må skrive et brukernavn.
/allpics.bml.keywords=Nøkkelord:
/allpics.bml.nopics.text.other=Denne brukeren har ikke lastet opp noen ikoner.
/allpics.bml.nopics.text2=Du har ikke lastet opp noen ikoner. For å laste opp et, <a href='[[link]]'>gå hit</a>.
/allpics.bml.nopics.title=Ingen ikoner
/allpics.bml.pics=Her er ikonene til [[bruker]].
/allpics.bml.title=Ikoner
/changepassword.bml.btn.proceed=Fortsett
/changepassword.bml.changepassword.header=Bytt passord
/changepassword.bml.changepassword.instructions=Fyll ut skjemaet nedenfor for å bytte passord. Om du ønsker hjelp til å velge et godt passord og holde kontoen din trygg, les <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=71">denne OBS-artikkelen</a>.
/changepassword.bml.email.body<<
Ditt passord har blitt byttet for [[sitename]].
Om du skulle miste det, gå til:
  [[siteroot]]/lostinfo.bml
Vennlig hilsen,
[[sitename]] sine utviklere
[[siteroot]]
.
/changepassword.bml.email.subject=Byttet passord
/changepassword.bml.error.badcheck=Passordbytte feilet: [[error]]
/changepassword.bml.error.badnewpassword=De to passordene du skrev for å bekrefte byttet stemmer ikke overens. Du kan ha skrevet feil bekreftelsesfeltet. Prøv å skrive passordet og bekreftelsen inn på ny.
/changepassword.bml.error.badoldpassword=Ditt nåværende passord er ikke riktig.
/changepassword.bml.error.blankpassword=Ditt nye passord kan ikke være tomt.
/changepassword.bml.error.changetestaccount=Kan ikke endre testkontoets passord.
/changepassword.bml.error.characterlimit=Passord kan ikke ha flere enn 30 tegn.
/changepassword.bml.error.invaliduser=Brukeren <B>[[user]]</B> eksisterer ikke. Er du sikker på at du skrev brukernavnet rett?
/changepassword.bml.error.mustenterusername=Du må skrive inn ditt brukernavn.
/changepassword.bml.error.nonascii=Passord kan kun inneholde ASCII-tegn (latinsk alfabet). Vennligst bruk kun ASCII-godkjente tegn.
/changepassword.bml.error.notvalidated|staleness=1
/changepassword.bml.error.notvalidated=Du kan ikke bytte passord før din e-postadresse er bekreftet.
/changepassword.bml.newpassword=Nytt passord:
/changepassword.bml.newpasswordagain=Nytt passord (bekreftelse):
/changepassword.bml.oldpassword=Nåværende passord:
/changepassword.bml.proceed.instructions=Trykk knappen nedenfor og passordet blir endret til det nye passordet. Du vil motta en bekreftelse per e-post.
/changepassword.bml.success.text=Ditt passord er endret til ditt nye passord, og en e-post er sendt med bekreftelse.
/changepassword.bml.title=Endre passord
/community/index.bml.title=Samfunnsenter
/community/join.bml.button.join=Melde inn i samfunn
/community/join.bml.label.addtofriends=Legg "[[maintainer]]" til din venneliste.<br>
/community/join.bml.label.allowposting=Dette samfunnet tillater posting fra alle dets medlemmer, så du har nå lov å poste i det. Hvis du allerede har en LiveJournal-klient åpen må du logge ut og inn igjen for at listen over dagbøker og samfunn du kan poste i, skal oppdateres.
/community/join.bml.label.auth=Selv om du nå er listet som et medlem, tillater dette samfunnet kun posting av tillatte brukere. Kontakt en av bestyrerene dersom du ønsker å skrive egne oppføringer. Nedenfor er en liste over bestyrere for dette samfunnet: [[admins]]
/community/join.bml.label.banned=Dette samfunnets bestyrer(e) har nektet deg fra å delta.
/community/join.bml.label.closed=Dette samfunnet er lukket. Om du ønsker å melde deg inn må du kontakte en bestyrer. Neden er en liste over bestyrere for dette samfunnet: [[admins]]
/community/join.bml.label.commlogged=Du er pålogget som en delt konto/samfunn, og ikke din personlige konto.
/community/join.bml.label.errorcomminfo=Angitt informasjon for samfunnet ditt er ugyldig.
/community/join.bml.label.expls=Trykk på knappen nedenfor for å melde deg inn i "[[maintainer]]"-samfunnet. Fjern haken fra boksen nedenfor dersom du ønsker å delta i samfunnet uten å legge det til din venneliste.
/community/join.bml.label.loginfirst=For å melde deg inn i et samfunn må du først <a href="/login.bml?ret=1">logge på</a>.
/community/join.bml.label.membernow=Du er nå et medlem i <a href="/userinfo.bml?user=[[username]]">[[commname]]</a>
/community/join.bml.label.sure=Er du sikker?
/community/join.bml.success=Vellykket
/community/join.bml.title=Melde inn i samfunn
/community/leave.bml.button.leave=Melde ut av samfunn
/community/leave.bml.label.buttontoleave=Trykk knappen nedenfor for å forlate "[[commname]]".
/community/leave.bml.label.infoerror=Angitt informasjon for samfunnet er ugyldig.
/community/leave.bml.label.logoutfirst=For å melde deg ut av et samfunn må du først <a href="/login.bml?ret=1">logge på</a>.
/community/leave.bml.label.removed=Du har nå forlatt <a href="/userinfo.bml?user=[[commuser]]">[[commname]]</a>
/community/leave.bml.label.removefromfriends=Også fjerne "[[user]]" fra din venneliste.
/community/leave.bml.success=Vellykket
/community/leave.bml.sure=Er du sikker?
/community/leave.bml.title=Forlat samfunn
/community/manage.bml.commlist.actions=<b>Handlinger</b>
/community/manage.bml.commlist.actmembers=<b>[<a href='[[link]]'>Medlemmer</a>]</b>
/community/manage.bml.commlist.actmembers2=Medlemmer
/community/manage.bml.commlist.actsettings=<b>[<a href='[[link]]'>Valg</a>]</b>
/community/manage.bml.commlist.actsettings2=Valg
/community/manage.bml.commlist.header=Dine samfunn
/community/manage.bml.commlist.none=<i>Du er ikke bestyrer av noen samfunn.</i>
/community/manage.bml.commlist.text=Her er samfunnene du bestyrer eller assisterer i:
/community/manage.bml.commlist.title=<b>Navn:</b>
/community/manage.bml.commlist.username=<b>Brukernavn</b>
/community/manage.bml.create.header=Opprett et samfunn
/community/manage.bml.create.text=Du kan også <a href='[[link]]'><b>opprette et nytt samfunn</b></a>.
/community/manage.bml.title=Samfunnstyring
/community/members.bml.error.alreadyadded=[[user]] ble ikke lagt til fordi de allerede hadde tilgang til dette samfunnet.
/community/members.bml.error.alreadysent=[[user]] kunne ikke legges til fordi de ikke har svart på bekreftelsen som ble sendt som e-post den <i>[[datetime]]</i>. Vennligst vent til de har svart.
/community/members.bml.error.invaliduser=Kan ikke legge til samfunn eller syndicated konto: [[user]]
/community/members.bml.error.noaccess=Kun samfunnsbestyrere kan tilpasse medlemskapslister. Du er ikke en bestyrer i samfunn [[comm]].
/community/members.bml.error.noattr=Ingen atributter valgt for bruker: [[user]]
/community/members.bml.error.nocomm=Samfunnet finnes ikke.
/community/members.bml.error.nouser=Brukeren eksisterer ikke: <b>[[user]]</b>
/community/members.bml.key.admin=<b>Bestyrer</b>
/community/members.bml.key.member=<b>Medlem</b>
/community/members.bml.key.moderate=<b>Moderatør</b>
/community/members.bml.key.post=<b>Tilgang til å oppdatere</b>
/community/members.bml.key.preapprove=Ikke moderert
/community/members.bml.manage2=Tilpass samfunn
/community/members.bml.name=<b>Samfunnets navn:</b> [[name]]
/community/members.bml.nextlink=<i>(Neste side...)</i>
/community/members.bml.prevlink=<i>(Forrige side...)</i>
/community/members.bml.settings=[<a href='[[link]]'>Valg</a>]
/community/members.bml.success.header=Vellykket
/community/members.bml.success.message=Dine tilpasninger ble vellykket lagret.
/community/members.bml.success.return=<a href='[[link]]'>Gå tilbake til listen</a>
/community/members.bml.title=Samfunnsmedlemmer
/community/members.bml.update=Oppdater valg
/community/moderate.bml.approve.button=Ja, godta
/community/moderate.bml.approve.header=Godta denne oppføringen?
/community/moderate.bml.approve.preapprove=Legg også [[user]] til listen av forhåndsgodkjente brukere for dette samfunnet.
/community/moderate.bml.approve.text=Er du sikker på at du vil godkjenne denne oppføringen?
/community/moderate.bml.brlist.actions=Handlinger
/community/moderate.bml.brlist.subject=Emnet begynner
/community/moderate.bml.brlist.time=Tid
/community/moderate.bml.brlist.view=Vis
/community/moderate.bml.browse.empty=Moderasjonskøen er tom.
/community/moderate.bml.browse.header=Moderer samfunn
/community/moderate.bml.browse.text=Her er moderasjonskøen for samfunnet [[link]]
/community/moderate.bml.choice.approve=Godkjenn
/community/moderate.bml.choice.reject=Avvis
/community/moderate.bml.error.noaccess=Du modererer ikke samfunn [[comm]].
/community/moderate.bml.error.noentry=Oppføringen finnes ikke (den er kanskje allerede håndtert av en annen moderatør).
/community/moderate.bml.error.nolist=Du modererer ingen samfunn.
/community/moderate.bml.error.notfound=Samfunnskontoen finnes ikke.
/community/moderate.bml.manage=Tilpass samfunn
/community/moderate.bml.moderate=Moderer dette samfunnet
/community/moderate.bml.modlist.actions=Handlinger
/community/moderate.bml.modlist.actmodempty=[Moderer]
/community/moderate.bml.modlist.actmoderate=Moderer
/community/moderate.bml.modlist.count=Kølengde
/community/moderate.bml.modlist.header=Moderer samfunn
/community/moderate.bml.modlist.title=Tittel
/community/moderate.bml.modlist.username=Brukernavn
/community/moderate.bml.posted.appheader=Forhåndsgodjent
/community/moderate.bml.posted.apptext=Brukeren [[user]] ble også lagt til listen over forhåndsgodkjente brukere av dette samfunnet.
/community/moderate.bml.posted.header=Vellykket
/community/moderate.bml.posted.proterror=Denne oppføringen ble ikke postet grunnet protokoll-feil: [[err]]
/community/moderate.bml.posted.text=Oppdateringen var vellykket.
/community/moderate.bml.reject.button=Ja, avvis
/community/moderate.bml.reject.header=Avvis denne oppføringen?
/community/moderate.bml.reject.reason|staleness=1
/community/moderate.bml.reject.reason=Du kan også beskrive til innsenderen hvorfor du avviste oppføringen. Forklaringen vil bli sendt per e-post.
/community/moderate.bml.reject.text=Er du sikker på at du vil avvise denne oppføringen?
/community/moderate.bml.rejected.header=Avvist
/community/moderate.bml.rejected.text=Oppføringen er avvist.
/community/moderate.bml.title=Moderer samfunn
/community/search.bml.button.clear=Tilbakestill
/community/search.bml.button.search=Søk!
/community/search.bml.checkbox.onlywithpics=Kun samfunn med bilder
/community/search.bml.label.byinterest=Etter interesse
/community/search.bml.label.bylocation=Etter område
/community/search.bml.label.bytime=Etter sist oppdatert i dagbok
/community/search.bml.label.city=By:
/community/search.bml.label.country=Land:
/community/search.bml.label.displayoptions=Visningsalternativer
/community/search.bml.label.hasmember=Har medlem
/community/search.bml.label.othercriteria=Andre kriterier
/community/search.bml.label.outputformat=Visningsformat
/community/search.bml.label.records=Oppføringer per side:
/community/search.bml.label.searchcomm=Søk gjennom samfunn
/community/search.bml.label.selecriteria=Fyll ut kriterier nedenfor som du ønsker å bruke for å søke etter samfunn. Resultatene du får er krysningspunktet mellom alle søkekriterier. Med andre ord så betyr hvert avkrysningsfelt "AND", ikke "OR".
/community/search.bml.label.sortmethod=Sorteringsmetode:
/community/search.bml.label.stateprovince=Stat/fylke:
/community/search.bml.label.updated=Sist oppdatert i
/community/search.bml.sel.bypicture=Etter bilde
/community/search.bml.sel.communityname=Samfunnsnavn
/community/search.bml.sel.commview=Samfunnsvisning
/community/search.bml.sel.day=dag
/community/search.bml.sel.month=måned
/community/search.bml.sel.simple=Enkel
/community/search.bml.sel.updatetime=Oppdater tiden
/community/search.bml.sel.username=Brukernavn
/community/search.bml.sel.week=uke
/community/search.bml.title=Samfunnsøk
/community/settings.bml.button.changecommunity=Oppdater valg
/community/settings.bml.button.createcommunity=Opprett samfunn
/community/settings.bml.error.badpassword=Ugyldig passord for samfunnet
/community/settings.bml.error.hasentries=Denne kontoen har allerede oppføringer og kan ikke gjøres om.
/community/settings.bml.error.maintainertype=Bestyrerkonto må være en person, ikke en annen delt konto.
/community/settings.bml.error.noaccess=Kun samfunnsbestyrere kan tilpasse samfunnet. Du er ikke en bestyrer av samfunn [[comm]].
/community/settings.bml.error.notcomm=Ikke en samfunnskonto.
/community/settings.bml.error.notfound=Samfunnskontoen finnes ikke.
/community/settings.bml.error.samenames=Bestyrerkonto og samfunnskonto kan ikke være den samme.
/community/settings.bml.label.anybodycan=<b>Alle medlemmer</b><br />Alle kan poste øyeblikkelig når de har meldt seg inn.
/community/settings.bml.label.changeheader=Tilpass samfunnsvalg
/community/settings.bml.label.changetext=Her kan du tilpasse valgene for samfunn du bestyrer eller eier.
/community/settings.bml.label.commchanged=Dine samfunnsvalg er lagret.
/community/settings.bml.label.commcreate=Dette er kontoen du ønsker å gjøre om til et samfunn. Det må <a href="/create.bml">allerede være opprettet</a>, men bør ikke være i bruk av noen, siden mange forskjellige personer potensielt kan poste i den i fremtiden.
/community/settings.bml.label.commcreated=Ditt samfunn er nå opprettet.
/community/settings.bml.label.commheader=Samfunnskonto
/community/settings.bml.label.comminfo=Samfunnsinfo
/community/settings.bml.label.commopts=Samfunnsvalg
/community/settings.bml.label.commsite=Samfunnsvevsted
/community/settings.bml.label.community=Samfunn:
/community/settings.bml.label.createheader=Opprett samfunn
/create.bml.age.check.question=Er du under 13 år?
/create.bml.age.check.yes=Ja, jeg er under 13 år.
/create.bml.age.head=Alder
/create.bml.btn.create=Opprett dagbok
/create.bml.btn.proceed=Fortsett...
/create.bml.clusterselect.cluster=Cluster:
/create.bml.clusterselect.clusternum=Gruppe [[number]]
/create.bml.clusterselect.head=Gruppe Valg
/create.bml.clusterselect.nocluster=Ingen Gruppe
/create.bml.clusterselect.text=Vennligst velg den gruppen du ønsker å lage denne kontoen i. <b>Merk:</b> Dette er kun en debugging/test funksjon. I bruk, vil brukere ikke velge dette eller vite noe om det.
/create.bml.create.head=Opprett en Ny Dagbok
/create.bml.create.text=Å opprette en ny Livejournal-konto er enkelt, bare følg instruksjonene nedenfor!
/create.bml.email.head=Din epost adresse
/create.bml.email.input.head=Epost Adresse:
/create.bml.error.coppa.under13=Beklager, på grunn av COPPA restriksjoner, kan du ikke bruke Livejournal tjenester når du er under 13 år. Vennligst kom tilbake på din 13nde bursdag.
/create.bml.error.email.blank=Du må skrive inn din epost adresse.
/create.bml.error.email.lj_domain=Du kan ikke bruke et [[domain]] alias når du lager en konto. Vennligst bruk en annen epost addresse.
/create.bml.error.email.nospaces=Du kan ikke ha mellomrom i din epost adresse. Om du bruker AOL, husk på at din Internet Epost adresse er ditt skjermnavn med alle mellomrom tatt vekk, og at den ender med <b>@aol.com</b>
/create.bml.error.password.asciionly=Du kan kun bruke ASCII symboler i passord.
/create.bml.error.password.blank=Du må velge et passord.
/create.bml.error.password.nomatch=Passordene er ikke de samme.
/create.bml.error.postrequired=POST påkrevd
/create.bml.error.username.blank=Vennligst skriv inn et navn og kallenavn/alias.
/create.bml.error.username.inuse=Brukernavnet du valgte er allerede tatt, vennligst velg et annet.
/create.bml.error.username.iscode=Brukernavn ser ut til å være en invitasjons kode, ikke et brukernavn.
/create.bml.error.username.mustenter=Du må velge et brukernavn.
/create.bml.error.username.reserved=Beklager, dette brukernavnet er reservert.
/create.bml.initial.friend.news=LiveJournal nyheter og hendelser
/create.bml.initialfriends=Legg disse dagbøkene til din venneliste for å holde deg oppdatert rundt nyheter på nettstedet.
/create.bml.name.head=Ditt Navn
/create.bml.name.input.head=Navn:
/create.bml.name.text=Hva er navnet ditt eller et kallenavn? Dette vil komme opp på toppen av dagboken din, og i bruker katalogen om du skulle velge å være oppført i den. Du trenger ikke bruke fullt navn eller ditt ordentlige navn.
/create.bml.password.head=Passord
/create.bml.password.input.head1=Passord:
/create.bml.password.input.head2|staleness=1
/create.bml.password.input.head2=Passord igjen:
/create.bml.password.text=Velg et passord.
/create.bml.proceed.btn.proceed=Fortsett...
/create.bml.proceed.warning=Klikk <b>Fortsett</b> kun <i>en</i> gang!!
/create.bml.success.btn.enterinfo=Skriv inn personlig informasjon
/create.bml.success.head=Suksess!
/create.bml.success.text1|staleness=1
/create.bml.success.text1=Din dagbok har blitt lagd. Viktig registrasjons detaljer har blitt sent til <font face=Arial size=+1><b>[[email]]</b></font>, eposten inneholder instruksjoner. <b>Merk:</b>Du har <I>syv dager</i> til å bekrefte din dagbok konto. Om du ikke har satt den opp innen 7 dager vil brukernavnet <b>[[username]]</b> automatisk bli slettet og noen andre kan registrere det.
/create.bml.success.text2=Din Dagbok vil komme på:
/create.bml.success.text3=Vennligst ta deg tid til å fylle inn litt informasjon om deg selv. Mesteparten er valgfritt, men det gir oss en ide om hvem som bruker Livejournal.
/create.bml.title=Lag ny Dagbok
/create.bml.useacctcodes.entercode|staleness=1
/create.bml.useacctcodes.entercode=For å lage en ny konto, skriv inn konto aktivasjons kode:
/create.bml.useacctcodes.welcome=Velkommen
/create.bml.username.box.head=Brukernavn:
/create.bml.username.forpaidaccts=Eller, for betalte kontoer:
/create.bml.username.head=Brukernavn:
/create.bml.username.ljaddress=Din Dagbok vil komme på disse adressene:
/create.bml.username.text=Hver [[sitename]] bruker må ha sitt eget unike brukernavn. Ditt brukernavn er det som vises i adressen til din dagbok, og som du også bruker til å logge inn til [[sitename]] server. Det vises også når du skriver kommentarer i andre folks dagbok.
/create.bml.username.username=brukernavn
/customize/index.bml.s1=Det gamle stilsystemet tilpasses gjennom <a href="/modify.bml">Tilpass dagboken</a>-siden.
/customize/index.bml.title=Tilpass dagbok
/editinfo.bml.allowshowcontact.about=Du bør ha dette alternativet aktivert. Det lar andre mennesker kontakte deg ved å vise e-postadressen din, ICQ-nummeret ditt eller AOL Instant Messenger skjermnavnet ditt.
/editinfo.bml.allowshowcontact.email=Om synlig, e-postadresse du vil vise:
/editinfo.bml.allowshowcontact.email.actual_only=Kun egentlig adresse
/editinfo.bml.allowshowcontact.email.both=Begge (egentlig + [[domain]])
/editinfo.bml.allowshowcontact.email.lj_only=Kun LiveJournal-adressen
/editinfo.bml.allowshowcontact.email.neither=Ingen. Skjul min e-postadresse.
/editinfo.bml.allowshowcontact.email.no_show=Ikke vis e-postadresse
/editinfo.bml.allowshowcontact.email.show=Vis e-postadresse
/editinfo.bml.allowshowcontact.email.withdomainaddr=Med valget ovenfor, kan du også velge å skjule epost adressen din (men fremdeles vise annen kontakt informasjon), kun vise din Livejournal epost adresse (kun for <a href="/paidaccounts/">betalte kontoer</a>), kun vise din ordentelige adresse, eller vise begge.
/editinfo.bml.allowshowcontact.email.withoutdomainaddr=Med valget ovenfor, kan du også velge å skjule din epost adresse (men fremdeles vise annen kontakt informasjon).
/editinfo.bml.allowshowcontact.title=Vise din kontaktinformasjon på LiveJournal?
/editinfo.bml.allowshowinfo.about=Skru på denne om du vil vise by/fylke/land og fødselsdato til andre brukere.
/editinfo.bml.allowshowinfo.title=Vise område &amp; bursdag?
/editinfo.bml.autotranslate.about<<
Bruk dette alternativet for å fortelle LiveJournal hvilken koding vi skal anta tidligere poster er skrevet i, før vi byttet til Unicode.
Dersom du skriver på norsk eller engelsk, kan du godt velge "Western European" her.
.
/editinfo.bml.autotranslate.header|staleness=1
/editinfo.bml.autotranslate.header=Automatisk oversette eldre oppføringer fra:
/editinfo.bml.bday.title=Bursdag
/editinfo.bml.bday.year.opt=år er valgfritt
/editinfo.bml.bdayreminders.about=Dersom du vil ha e-post som påminner deg om bursdagen til vennene dine på LiveJournal, sett hake her.
/editinfo.bml.bdayreminders.header|staleness=1
/editinfo.bml.bdayreminders.header=Send meg bursdagspåminnelser
/editinfo.bml.bio.about|staleness=1
/editinfo.bml.bio.about=Her kan du skrive en kort biografi om deg selv. Denne vil dukke opp på brukerinformasjonssiden din.
/editinfo.bml.bio.header=Om deg
/editinfo.bml.blockrobots.about|staleness=1
/editinfo.bml.blockrobots.about=Om du setter hake her, vil søkemotorer la din journal i fred. Ikke alle søkemotorer respekterer reglene, men de mest populære gjør det.
/editinfo.bml.blockrobots.header=Bloker roboter og søkemotorer fra å indeksere journalen din
/editinfo.bml.city.title=By
/editinfo.bml.country.choose=Velg et land
/editinfo.bml.country.title=Land
/editinfo.bml.donotlog=Ikke
/editinfo.bml.email.title=E-post
/editinfo.bml.enableboards.about|staleness=1
/editinfo.bml.enableboards.about=Sett kryss her om du vil at andre skal kunne kommentere journaloppføringene du poster (stilen du har satt må også støtte dette).
/editinfo.bml.enableboards.header=Aktiver diskusjonstavler
/editinfo.bml.encoding.about=For brukere som skriver på flere språk og må ta internasjonale hensyn.
/editinfo.bml.encoding.header=Alternativer for koding
/editinfo.bml.error.email.lj_domain|staleness=1
/editinfo.bml.error.email.lj_domain<<
Du kan ikke anngi en @[[domain]] e-postadresse.
Skriv din egentlige e-postadresse i dette feltet.
Om du har en betalt konto, vil e-post sendt [[user]]@[[domain]] videresendes til din egentlige adresse.
For å velge hvilken e-postadresse (eller begge) som vises offentlig, se alternativet nedenfor under "Vis kontaktinformasjon"
.
/editinfo.bml.error.email.no_space<<
Ingen mellomrom er tillatt i en e-postadresse.
Dersom du bruker AOL, husk at din e-postadresse for internett er skjermnavnet ditt med alle mellomrom fjernet, fulgt av <b>@aol.com</b>
.
/editinfo.bml.error.excessive_int<<
Beklager, men du har angitt for mange interesser. Høyeste antall er 150, men du har angitt [[intcount]].
Endringer du gjorde i din interesseliste ble ikke lagret. Gå tilbake, fjern noen interesser og prøv igjen.
.
/editinfo.bml.error.invalidbio=Din lagrede biografi inneholder ugyldige tegn. Du må besøke <a href='/utf8convert.bml'><b>tegnoversettelse</b></a> for å konvertere til Unicode.
/editinfo.bml.error.invalidints=Din interesseliste inneholder ugyldige tegn. Du må besøke <a href='/utf8convert.bml'><b>tegnoversettelse</b></a> for å konverte til Unicode.
/editinfo.bml.error.invalidname=Navnet ditt inneholder ugyldige tegn. Du må besøke <a href='/utf8convert.bml'><b>tegnoversettelse</b></a> for å konvertere til Unicode.
/editinfo.bml.error.locale.country_ne_state=Du valgte United States som land, men du skrev en ikke-amerikansk stat i "Annen stat"-feltet.
/editinfo.bml.error.locale.invalid_country=På et eller annet hvis klarte du å velge et ugyldig land.
/editinfo.bml.error.locale.state_ne_country=Du spesifiserte et annet land enn amerika, men valgte en amerikansk stat.
/editinfo.bml.error.locale.zip_ne_state=Din ZIP-kode stemmer ikke med den staten du valgte. Korriger eller ta vekk ugyldige verdier fra stat og postnummerfeltene.
/editinfo.bml.error.locale.zip_requires_us|staleness=1
/editinfo.bml.error.locale.zip_requires_us=Du fylte ut en ZIP-kode, men valgte ikke Amerika som ditt land. Vi tar bare i mot ZIP-koder fra amerikanske borgere. Vennligst gå tilbake og fjern ZIP-koden, eller velg Amerika som ditt land.
/editinfo.bml.error.tm.require.number=Dersom du vil motta SMS eller Mobilpost må du anngi ditt telefonnummer.
/editinfo.bml.error.tm.require_provider|staleness=1
/editinfo.bml.error.tm.require_provider=Om du vil bruke SMS eller Mobilpost må du velge mobilleverandøren din. Dersom din ikke finnes på listen, kontakt oss, så kan vil legge til støtte for den.
/editinfo.bml.finished.about=Når du er ferdig, trykk "Lagre endringer" nedenfor.
/editinfo.bml.finished.header=Ferdig?
/editinfo.bml.finished.save_button=Lagre endringer
/editinfo.bml.gender.title=Kjønn
/editinfo.bml.getreplies.about|staleness=1
/editinfo.bml.getreplies.about=Sett kryss her dersom du vil ha e-postvarsling når noen kommenterer dine journaloppføringer.
/editinfo.bml.getreplies.header=Motta diskusjonstavlesvar
/editinfo.bml.hidefriendof.about=Om du setter kryss her, skjuler du listen over hvem som lister deg som venn på din brukerinformasjonsside.
/editinfo.bml.hidefriendof.header=Skjul "venn av"-liste
/editinfo.bml.howhear.about<<
Bare for nysgjerrighetens skyld, hvor hørte du om [[sitename]] fra?
Var det en spesiell person fyller du ut brukernavnet deres. Om det var fra en annen kilde/artikkel/lenke/nettside vær snill å beskrive den.
.
/editinfo.bml.howhear.header=Nysgjerrighet
/editinfo.bml.htmlemail.about|staleness=1
/editinfo.bml.htmlemail.about<<
Sett kryss her dersom e-postklienten din støtter HTML-formatert e-post. Mange klienter prøver å støtte det, men feiler totalt.
Om du fjerner krysset, vil LiveJournal bare sende e-post i ren tekst.
.
/editinfo.bml.htmlemail.header=Send HTML Eposter
/editinfo.bml.int.about<<
Om du ønsker at andre skal kunne søke i katalogen og finne deg via interesse, skriv inn nedenfor alt du er interesert i, separer med komma.
Korte En-ords setninger er best. <b>Tommelregel:</b> Du skulle kunne putte inn interessen i en setning som "Jeg liker _______". Når du referer til et adjektiv, bruk flertalls form. "Jeg liker DVDer" istedetfor "Jeg liker DVD".
.
/editinfo.bml.int.ex.bad=<font color=#FF0000><b>DÅRLIG</b></FONT> Eksempel:</b> Jeg liker masse forskjellige grupper og å se filmer og snakke med venner og gå på diskotek.</b> Den slags kan gå i bio'en din ovenfor.
/editinfo.bml.int.ex.good=<FONT COLOR=#009000><B>GODT</b></font>Eksampel: <B> sykling, skigåing, datamaskiner, dvder, mp3er, ost, kvinner</b>
/editinfo.bml.int.header=Interesser
/editinfo.bml.login.enterinfo=Skriv inn brukernavn og passord for å endre din person informasjon:
/editinfo.bml.login.forgot.header=Glemt noe?
/editinfo.bml.login.forgot.recover=Om du har glemt ditt brukernavn eller passord, <a href='lostinfo.bml'>få det tilbake her!</a>.
/editinfo.bml.logip.always=Alltid
/editinfo.bml.logip.anon_only=Kun anonyme postere
/editinfo.bml.logip.header=Logg IP adresse av folk som kommenterer?
/editinfo.bml.mangleaddress.about|staleness=1
/editinfo.bml.mangleaddress.about=Om du er redd for at spam-roboter vil finne din epost adresse på Livejournal, tikk av dette valget og din epost adresse vil bli modifisert slik at den ikke kan bli funnet av epost-søkende roboter.
/editinfo.bml.name.title=Navn
/editinfo.bml.optional=Valgfri
/friends/index.bml.title=Vennelistetilpassing
/index.bml.boldcreate=Opprett din egen LiveJournal!
/index.bml.frank.image.alt=Frank, LiveJournal sin maskottgeit
/index.bml.frank.logo=<b><i>"Bæææ",</i> sier <a href="/site/goat.bml">Frank</a>.</b>
/index.bml.meta.desc=LiveJournal.com er et sted du kan dele dine tanker med verden.
/index.bml.meta.keywords=dagbok, journal, online journal, dagbøker, skriving, online dagbok, nettbasert dagbok, elektronisk dagbok, personlig dagbok
/interests.bml.findsim.searchwait=<b>Vennligst Merk:</b> Søk vil ta flere sekunder. Vennligst vent.
/interests.bml.findsim_do.account.notallowed=Beklager, din konto type kan ikke bruke dette verktøyet.
/interests.bml.findsim_do.magic=Magisk Liste
/interests.bml.findsim_do.magic.head=Magisk Liste
/lostinfo.bml.enter_username=Skriv inn ditt brukernavn:
/lostinfo.bml.lostpassword.text|staleness=1
/lostinfo.bml.lostpassword.text=Om du har mistet passordet ditt, skriv inn brukernavnet ditt og valgfritt også epost adressen du ønsker passordet sent til. Merk, denne epost adressen må være en du har brukt på Livejournal før og hatt bekreftet. Om du lar epost feltet være blankt, vil det bli sent til din nåværende adresse.
/lostinfo.bml.lostpassword.title=Misted passordet ditt?
/lostinfo.bml.lostusername.text=Om du har misted brukernavnet ditt, skriv inn epost adressen din og vi vil sende deg brukernavnet.
/lostinfo.bml.lostusername.title=Mistet brukernavnet ditt?
/lostinfo.bml.title=Mistet informasjon
/lostinfo_do.bml.error.no_usernames_for_email=Ingen brukernavn for denne epost adressen: [[adress]].
/lostinfo_do.bml.error1.text=Du brukte aldri denne epost adressen med denne kontoen, eller det var aldri bekreftet.
/lostinfo_do.bml.lostpasswordmail.part1|staleness=1
/lostinfo_do.bml.lostpasswordmail.part1<<
*** Dette er en autogenerert epost. Du trenger ikke svare på den. ***
.
/lostinfo_do.bml.lostpasswordmail.part2=For å bekrefte din epost adresse, gå her:
/modify_do.bml.colortheme.color.head2=(#rrggbb eller navn)
/modify_do.bml.colortheme.customcolors=Valgfrie farger
/modify_do.bml.domainalias.domainname=Domene navn:
/modify_do.bml.domainalias.example=Eksempel: <i>min-dagbok.com</i>
/modify_do.bml.moodicons.select=Velg Humør Ikoner:
/modify_do.bml.overrides.warning=DETTE ER <U>IKKE</U> HVOR DU OPPDATERER DAGBOKEN DIN!!
/support/faqbrowse.bml.backfaq=Tilbake til <a href="faq.bml">OBS</a>-seksjonen.
/support/faqbrowse.bml.backsupport=Tilbake til <a href="./">support-sidene</a>.
/support/faqbrowse.bml.lastupdated=Sist Oppdatert:
btn.search=Søk
dystopia.btn.login=LOGG PÅ
dystopia.hello_anonymous=Velkommen til LiveJournal!
dystopia.hello_loggedin=Hei, [[username]]!
dystopia.nav.createjournal=Opprett en journal
dystopia.nav.developer=Utviklerområdet
dystopia.nav.download=Last ned
dystopia.nav.editentries=Rediger oppføringer
dystopia.nav.editfriends=Dine venner
dystopia.nav.editpassword=Ditt passord
dystopia.nav.editpics=Dine ikoner
dystopia.nav.editstyle=Tilpass stil
dystopia.nav.faq=LiveJournal OBS
dystopia.nav.findcomm=Etter gruppe
dystopia.nav.finddir=Katalogsøk
dystopia.nav.findint=Etter interesse
dystopia.nav.findrandom=Tilfeldig
dystopia.nav.findregion=Etter område
dystopia.nav.home=Hjem
dystopia.nav.journalcalendar=Kalender
dystopia.nav.journalfriends=Venner
dystopia.nav.journalinfo=Brukerinformasjon
dystopia.nav.journalrecent=Siste
dystopia.nav.legalcoppa=Barnevern
dystopia.nav.legalprivacy=Personvern
dystopia.nav.legaltos=Tjenestebetingelser
dystopia.nav.login=Logg på
dystopia.nav.logout=Logg ut
dystopia.nav.lostinfo=Mistet passordet
dystopia.nav.memories=Minner
dystopia.nav.modifyjournal=Tilpass din journal
dystopia.nav.news=Nyheter
dystopia.nav.paidaccts=Betalkontoer
dystopia.nav.personalinfo=Personinformasjon
dystopia.nav.support=Har du et spørsmål?
dystopia.nav.updatejournal=Oppdater dagbok
dystopia.navhead.findusers=Finn brukere
dystopia.navhead.help=Hjelp og support
dystopia.navhead.journal=Din Journal
dystopia.navhead.legal=Lovinformasjon
dystopia.navhead.settings=Dine Valg
dystopia.navhead.welcome=Velkommen!
dystopia.search.icq=ICQ-nummer
dystopia.search.int=Interesse
dystopia.search.region=Område
dystopia.searchlj=Søk i LiveJournal
Email=E-post
Help=Hjelp
langname.da=Dansk
langname.de=Tysk
langname.en=Engelsk
langname.en_GB=Engelsk (Storbritannia)
langname.en_LJ=Engelsk - LJ
langname.es=Spansk
langname.fi=Finsk
langname.fr=Fransk
langname.ga=Irsk
langname.gd=Gelisk
langname.he=Hebraisk
langname.is=Islandsk
langname.ja=Japansk
langname.nb=Norsk bokmål
langname.nl=Nederlandsk
langname.nn=Nynorsk
langname.pl=Polsk
langname.pt=Portugisisk
langname.ru=Russisk
langname.sv=Svensk
Password=Passord
talk.commentpermlink=lenke til denne kommentaren
talk.commentpost=Kommenter denne
talk.commentsread=Les kommentarer
talk.parentlink=Forelder
talk.replytothis=Svar på denne
talk.somebodywrote=[[realname]] ([[userlink]]) skrev,
talk.somebodywrote_comm=[[realname]] ([[userlink]]) skrev i [[commlink]],
talk.threadlink=Tråd
thislang.community|notes=Name of community you use to discuss the translation for this language.
thislang.community=lj_norsk
Username=Brukernavn

2934
ljcom/bin/upgrading/nl.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
;; -*- coding: utf-8 -*-

4298
ljcom/bin/upgrading/pl.dat Normal file

File diff suppressed because it is too large Load Diff

2430
ljcom/bin/upgrading/pt.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
;; -*- coding: utf-8 -*-
/accountstatus.bml.journalstatus.about=Se você quiser deletar ou recuperar seu journal deletado, o lugar para fazê-lo é aqui. Assim que você deletar seu journal, você terá 30 dias para recuperá-lo, se por acaso mudar de idéia. Após 30 dias, o journal será permanentemente deletado e não haverá maneira de recuperá-lo.
/allpics.bml.edit2=Você pode estar interessado em <a href='[[editlink]]'>editar as palavras-chave da sua imagem</a> ou <a href='[[uploadlink]]'>fazer upload de uma nova imagem</a>.
/allpics.bml.error.noparam=Você precisa especificar um usuário como parâmetro.
/allpics.bml.nopics.text.other=Este usuário ainda não fez upload de nenhuma imagem.
/allpics.bml.nopics.text2=Você não tem nenhuma imagem. Para fazer upload de uma, clique <a href='[[link]]'>aqui</a>.
/approve.bml.comm.text<<
Você foi adicionado à comunidade [[comm]].
Clique <a [[aopts]]>aqui</a> para adicionar a comunidade à sua lista de amigos.
.
/approve.bml.error.actionperformed=Essa ação já foi executada
/approve.bml.error.internerr.invalidaction=Erro Interno: ação inválida
/approve.bml.error.invalidargument=Argumento inválido
/approve.bml.error.unknownactiontype=Tipo de ação desconhecido
/approve.bml.title=Ação Aprovada
/birthdays.bml.description=Abaixo estão as datas de aniversário de todas as pessoas na sua lista de amigos.
/changepassword.bml.btn.proceed=Prosseguir
/changepassword.bml.changepassword.instructions=Preencha o formulário abaixo para mudar sua senha. Para obter ajuda ao escolher uma boa senha e manter sua conta segura, veja <a href="http://www.livejournal.com/support/faqbrowse.bml?faqid=71">este FAQ</a>.
/changepassword.bml.email.subject=Troca de Senha
/changepassword.bml.error.badcheck=Nova senha inválida: [[error]]

5240
ljcom/bin/upgrading/ru.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,39 @@
################################################################
# LiveJournal.com's non-free (not GPL) layers. You can use the
# source to learn from, but not copy.
################################################################
# base filename layer type parent
3column/layout layout core1
3column/themes theme+ 3column/layout
anovelconundrum/layout layout core1
anovelconundrum/themes theme+ anovelconundrum/layout
boxer/layout layout core1
boxer/themes theme+ boxer/layout
component/layout layout core1
component/themes theme+ component/layout
cuteness/layout layout core1
flexiblesquares/layout layout core1
flexiblesquares/themes theme+ flexiblesquares/layout
nebula/layout layout core1
nebula/themes theme+ nebula/layout
opal/layout layout core1
opal/themes theme+ opal/layout
smoothsailing/layout layout core1
smoothsailing/themes theme+ smoothsailing/layout
tranquilityii/layout layout core1
tranquilityii/themes theme+ tranquilityii/layout
unearthed/layout layout core1
unearthed/themes theme+ unearthed/layout
s2layers-ljcomint.dat INCLUDE

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,233 @@
#NEWLAYER: 3column/blue
layerinfo "type" = "theme";
layerinfo "name" = "Blue";
layerinfo "redist_uniq" = "3column/blue";
set color_bg = "#e9f3fa";
set font_color = "#0d446b";
set link_color = "#0d446b";
set link_hover = "#0d446b";
set link_side = "#0d446b";
set link_side_h = "#0d446b";
set side_bg = "#e9f3fa";
set entries_bg = "#e9f3fa";
set entries_border = "#0d446b";
set side_t_color = "#0d446b";
set button_bg = "#e9f3fa";
set button_bg_h = "#b0cce0";
set entries_font_color = "#0d446b";
set side_border = "#0d446b";
set c_sub_color = "#b0cce0";
set c_sub_bg = "#0d446b";
set side_h_color = "#0d446b";
set side_h_border = "#0d446b";
set side_h_bg = "#b0cce0";
set sub_color = "#0d446b";
#NEWLAYER: 3column/dark
layerinfo "type" = "theme";
layerinfo "name" = "Dark";
layerinfo "redist_uniq" = "3column/dark";
set color_bg = "#000000";
set font_color = "#c0c0c0";
set link_color = "#202020";
set link_hover = "#FFFFFF";
set link_side = "#95432D";
set link_side_h = "#BA7625";
set side_bg = "#000000";
set side_t_color = "C0C0C0";
set side_border = "#000000";
set side_h_color = "#C0C0C0";
set side_h_border = "#C0C0C0";
set side_h_bg = "#000000";
set entries_bg = "#58494E";
set entries_border = "#FFFFFF";
set button_bg = "#FFFFFF";
set button_bg_h = "#c0c0c0";
set entries_font_color = "#000000";
set c_sub_color = "#000000";
set c_sub_bg = "#ffffff";
set sub_color = "#C0C0C0";
#NEWLAYER: 3column/earth
layerinfo "type" = "theme";
layerinfo "name" = "Earth";
layerinfo "redist_uniq" = "3column/earth";
set color_bg = "#ECECEA";
set font_color = "#4F4637";
set link_color = "#4F4637";
set link_hover = "#1D4629";
set link_side = "#7B6E59";
set link_side_h = "#1D4629";
set side_bg = "#DBCEB9";
set side_t_color = "4F4637";
set side_border = "#7B6E59";
set side_h_color = "#ECECEA";
set side_h_border = "#ECECEA";
set side_h_bg = "#7B6E59";
set entries_bg = "#AB9F8B";
set entries_border = "#7B6E59";
set button_bg = "#ECECEA";
set button_bg_h = "#4F4637";
set entries_font_color = "#4F4637";
set c_sub_color = "#4F4637";
set c_sub_bg = "#ECECEA";
set sub_color = "#4F4637";
#NEWLAYER: 3column/unnamed
layerinfo "type" = "theme";
layerinfo "name" = "Unnamed";
layerinfo "redist_uniq" = "3column/unnamed";
set color_bg = "#E5D5C6";
set font_color = "#000000";
set link_color = "#202020";
set link_hover = "#000000";
set link_side = "#95432D";
set link_side_h = "#D63C3C";
set side_bg = "#E5D5C6";
set side_t_color = "#000000";
set side_border = "#E5D5C6";
set side_h_color = "#000000";
set side_h_border = "#000000";
set side_h_bg = "#E5D5C6";
set entries_bg = "#E5D5C6";
set entries_border = "#E5D5C6";
set button_bg = "#E5D5C6";
set button_bg_h = "#ccab8a";
set entries_font_color = "#000000";
set c_sub_color = "#ccab8a";
set c_sub_bg = "#E5D5C6";
set sub_color = "#000000";
#NEWLAYER: 3column/greenenvy
layerinfo "type" = "theme";
layerinfo "name" = "Green of Envy";
layerinfo "redist_uniq" = "3column/greenenvy";
set color_bg = "#d8ece7";
set font_color = "#1b2d29";
set link_color = "#1b2d29";
set link_hover = "#1b2d29";
set link_side = "#1b2d29";
set link_side_h = "#1b2d29";
set side_bg = "#d8ece7";
set entries_bg = "#d8ece7";
set entries_border = "#1b2d29";
set side_t_color = "#1b2d29";
set button_bg = "#d8ece7";
set button_bg_h = "#b1d5cb";
set entries_font_color = "#1b2d29";
set side_border = "#1b2d29";
set c_sub_color = "#b1d5cb";
set c_sub_bg = "#1b2d29";
set side_h_color = "#1b2d29";
set side_h_border = "#1b2d29";
set side_h_bg = "#b1d5cb";
set sub_color = "#1b2d29";
#NEWLAYER: 3column/blackwhite
layerinfo "type" = "theme";
layerinfo "name" = "Black and White";
layerinfo "redist_uniq" = "3column/blackwhite";
set color_bg = "#FFFFFF";
set font_color = "#808080";
set link_color = "#808080";
set link_hover = "#202020";
set link_side = "#c0c0c0";
set link_side_h = "#FFFFFF";
set side_bg = "#000000";
set side_t_color = "808080";
set side_border = "#ffffff";
set side_h_color = "#c0c0c0";
set side_h_border = "#c0c0c0";
set side_h_bg = "#808080";
set entries_bg = "#ffffff";
set entries_border = "#000000";
set button_bg = "#c0c0c0";
set button_bg_h = "#808080";
set entries_font_color = "#000000";
set c_sub_color = "#ffffff";
set c_sub_bg = "#000000";
set sub_color = "#202020";
#NEWLAYER: 3column/agentorange
layerinfo "type" = "theme";
layerinfo "name" = "Agent Orange";
layerinfo "redist_uniq" = "3column/agentorange";
set color_bg = "#f7e6d3";
set font_color = "#582604";
set link_color = "#582604";
set link_hover = "#582604";
set link_side = "#582604";
set link_side_h = "#582604";
set side_bg = "#f7e6d3";
set entries_bg = "#f7e6d3";
set entries_border = "#582604";
set side_t_color = "#582604";
set button_bg = "#f7e6d3";
set button_bg_h = "#e0c7aa";
set entries_font_color = "#582604";
set side_border = "#582604";
set c_sub_color = "#e0c7aa";
set c_sub_bg = "#582604";
set side_h_color = "#582604";
set side_h_border = "#582604";
set side_h_bg = "#e0c7aa";
set sub_color = "#b64c06";
#NEWLAYER: 3column/purple
layerinfo "type" = "theme";
layerinfo "name" = "Purple";
layerinfo "redist_uniq" = "3column/purple";
set color_bg = "#e8cff1";
set font_color = "#410458";
set link_color = "#410458";
set link_hover = "#410458";
set link_side = "#410458";
set link_side_h = "#410458";
set side_bg = "#e8cff1";
set entries_bg = "#e8cff1";
set entries_border = "#410458";
set side_t_color = "#410458";
set button_bg = "#e8cff1";
set button_bg_h = "#d1aae0";
set entries_font_color = "#410458";
set side_border = "#410458";
set c_sub_color = "#d1aae0";
set c_sub_bg = "#410458";
set side_h_color = "#410458";
set side_h_border = "#410458";
set side_h_bg = "#d1aae0";
set sub_color = "#410458";
#NEWLAYER: 3column/mellowyellow
layerinfo "type" = "theme";
layerinfo "name" = "Mellow Yellow";
layerinfo "redist_uniq" = "3column/mellowyellow";
set color_bg = "#f8f6da";
set font_color = "#42331e";
set link_color = "#42331e";
set link_hover = "#8d452f";
set link_side = "#8d452f";
set link_side_h = "#42331e";
set side_bg = "#f2c98e";
set entries_bg = "#f8f6da";
set entries_border = "#42331e";
set side_t_color = "#42331e";
set button_bg = "#f2c98e";
set button_bg_h = "#e8c098";
set entries_font_color = "#42331e";
set side_border = "#42331e";
set c_sub_color = "#42331e";
set c_sub_bg = "#f2c98e";
set side_h_color = "#333333";
set side_h_border = "#333333";
set side_h_bg = "#f8f6da";
set sub_color = "#d39945";

View File

@@ -0,0 +1,999 @@
# -*-s2-*-
layerinfo "type" = "layout";
layerinfo "name" = "A Novel Conundrum";
layerinfo "source_viewable" = 1;
layerinfo "redist_uniq" = "anovelconundrum/layout";
layerinfo "author_name" = "taion";
propgroup colors {
property Color page_back {
des = "Page background";
}
property Color entry_text {
des = "Entry text color";
}
property Color text_weaker {
des = "Weaker text color";
}
property Color page_link {
des = "Link color";
}
property Color page_vlink {
des = "Visited link color";
}
property Color page_alink {
des = "Active link color";
}
}
# From my last e-mail with Taion, the plan was to rasterize the leading fonts so that
# appearance issues could be avoided. However, I don't have access to many of the fonts
# that he tested with, so I'll have to put that off for later.
# You will need access to Microsoft provided fonts for most accurate rendering, but
# we are working on specifying usable alternatives that are cross platform friendly.
propgroup fonts {
property use font_base;
property string font_fallback {
des = "Alternative font style";
}
property string font_type {
des = "Body font type";
note = "General font class for body text";
}
property int font_size {
des = "Body font size (points)";
}
property int font_leading {
des = "Body font leading (points)";
}
property string title_letterspacing {
des = "Letterspacing in titles";
}
property bool title_smallcaps {
des = "Smallcaps in titles";
}
property bool title_underline {
des = "Underlined titles";
}
property string font_flourish_base {
des = "Font face for decorative flourishes";
}
property string font_flourish_fallback {
des = "Alternate font face for decorative flourishes";
}
property string font_flourish_type {
des = "Font type for decorative flourishes";
}
property string font_secondary_base {
des = "Font face for secondary text";
}
property string font_secondary_fallback {
des = "Alternate font face for secondary text";
}
property string font_secondary_type {
des = "Font type for secondary text";
}
property int font_secondary_size {
des = "Secondary font size (points)";
note = "For best results, match optical x-height with the body font";
}
property string flourish_rm {
des = "Right margin for flourishes";
}
property string dc_rm {
des = "Right margin for drop caps";
}
}
propgroup presentation {
property string dingbar_url {
des = "URL to spacer image between portions of content";
note = "A default will be chosen for you if left blank.";
}
property use page_recent_items;
property use page_friends_items;
property string body_width {
des = "Text body width";
}
property int dcLen {
des = "Minimum length in characters before using drop caps";
}
property use view_entry_disabled;
property use use_shared_pic;
property use comment_userpic_style;
property bool show_entrynav_icons {
des = "Toggle to show the next, memory, edit, etc icons on the entry view page";
}
property string page_background_image {
des = "URL to an image to be used for the page background";
}
property use external_stylesheet;
}
propgroup text {
property use text_post_comment;
property use text_read_comments;
property use text_post_comment_friends;
property use text_read_comments_friends;
property use text_meta_music;
property use text_meta_mood;
property string text_dingbar_alt {
des = "Alternative text for dingbar images";
noui = 1;
}
}
# Set default colors
set entry_text = "#000000";
set text_weaker = "#666666";
set page_link = "#000000";
set page_vlink = "#666666";
set page_alink = "#333333";
set page_back = "#F5F5DC";
set body_width = "35em";
set dcLen = 200;
set show_entrynav_icons = true;
set page_background_image = "";
set font_base = "Palatino Linotype";
set font_fallback = "Book Antiqua";
set font_type = "serif";
set font_flourish_base = "Edwardian Script ITC\", \"Edwardian Script ITC Semi-Expanded";
set font_flourish_fallback = "Zapfino\", \"Viner Hand ITC";
set font_flourish_type = "cursive";
set font_secondary_base = "Frutiger Linotype";
set font_secondary_fallback = "Tahoma";
set font_secondary_type = "sans-serif";
set font_size = 10;
set font_leading = 14;
set title_smallcaps = true;
set title_underline = false;
set title_letterspacing = "0.08em";
set font_secondary_size = 9;
set flourish_rm = "0.093em";
set dc_rm = "0.2em";
set dingbar_url = "";
set text_poster_anonymous = "an anonymous reader";
set text_dingbar_alt = "* * *";
set text_view_recent = "Entries";
set text_view_friends = "Friends";
set text_view_archive = "Archive";
set text_view_userinfo = "Profile";
function prop_init() {
var PalItem start = PalItem(0, $*entry_text);
var PalItem end = PalItem(13, $*page_back);
if ($*dingbar_url == "") { $*dingbar_url = palimg_gradient("anovelconundrum/dingbar.gif", $start, $end); }
}
function print_stylesheet() {
print clean_url($*page_background_image) != "" ? "body { background-image: url($*page_background_image); }" : "";
"""
body {
margin-top: 1in;
margin-bottom: 0.6in;
}
body, td, h2, .caption, h1, h3 {
""";
if ($*font_base != "" or $*font_fallback != "" or $*font_type != "") {
"font-family: ";
if ($*font_base != "") {
"\"$*font_base\"";
if ($*font_fallback != "" or $*font_type != "") {
", ";
}
}
if ($*font_fallback != "") {
"\"$*font_fallback\"";
if ($*font_type != "") {
", ";
}
}
if ($*font_type != "") {
"$*font_type";
}
";\n";
}
"""
font-size: ${*font_size}pt;
line-height: ${*font_leading}pt;
font-weight: normal;
}
.caption, h1, h3 {
"""; if($*title_smallcaps) {"""
font-variant: small-caps;
text-transform: lowercase;
"""; }
""" letter-spacing: $*title_letterspacing;
}
h1 { font-size: 16pt; }
h3 { font-size: 12pt; }
h2, .noul, .ult {
font-style: italic;
margin: 0px;
}
.caption {
"""; if($*title_underline) {"""
text-decoration: underline;
"""; }
""" }
.flourish, .bodyl:first-letter {
""";
if ($*font_flourish_base != "" or $*font_flourish_fallback != "" or $*font_flourish_type != "") {
"font-family: ";
if ($*font_flourish_base != "") {
"\"$*font_flourish_base\"";
if ($*font_flourish_fallback != "" or $*font_flourish_type != "") {
", ";
}
}
if ($*font_flourish_fallback != "") {
"\"$*font_flourish_fallback\"";
if ($*font_flourish_type != "") {
", ";
}
}
if ($*font_flourish_type != "") {
"$*font_flourish_type";
}
";\n";
}
"""
}
.flourish {
margin-right: ${*flourish_rm};
z-index: 1;
font-size: 34pt;
position: relative;
top: 0.1em;
text-transform: uppercase;
}
.sfon, .index, .author, select, input {
""";
if ($*font_secondary_base != "" or $*font_secondary_fallback != "" or $*font_secondary_type != "") {
"font-family: ";
if ($*font_secondary_base != "") {
"\"$*font_secondary_base\"";
if ($*font_secondary_fallback != "" or $*font_secondary_type != "") {
", ";
}
}
if ($*font_secondary_fallback != "") {
"\"$*font_secondary_fallback\"";
if ($*font_secondary_type != "") {
", ";
}
}
if ($*font_secondary_type != "") {
"$*font_secondary_type";
}
";\n";
}
""" font-size: ${*font_secondary_size}pt;
line-height: ${*font_leading}pt;
}
.index {
width: 10em;
margin-right: 1.2em;
}
.bodybox { width: $*body_width; }
.body, .bodyl, .bodyns {
text-align: justify;
}
.bodyl:first-letter {
font-size: """ + (2* $*font_leading) + """pt;
margin-bottom: -""" + $*font_size + """pt;
margin-right: ${*dc_rm};
float: left;
border-bottom: none;
text-transform: uppercase;
line-height: """ + (2* $*font_leading) + """pt;
}
.bodyns:first-line, .sc, small, .sct {
"""; if($*title_smallcaps) {"""
font-variant: small-caps;
text-transform: lowercase;
"""; }
if($*title_underline) {"""
text-decoration: underline;
"""; }
""" letter-spacing: 0.05em;
}
.sct {
letter-spacing: $*title_letterspacing;
text-align: center;
}
.author {
float: right;
text-align: center;
margin-left: 1.5em;
margin-bottom: 0.5em;
}
.ywp {
width: 2em;
margin-left: 0.5em;
margin-right: 0.5em;
}
blockquote {
margin-top: ${*font_leading}pt;
margin-bottom: ${*font_leading}pt;
margin-left: 2em;
}
tt, pre, textarea {
font-family: "Lucida Console", monospace;
font-size:"""+ ((${*font_size}*4)/5) + """pt;
}
a {text-decoration: none;}
.body a, .bodyl a, .bodyns a, .bodynsl a, .author a, .ult a, .uts a { border-bottom: 1px dotted; }
.ljuser a, a img, .smallbar a, .noul a { border-bottom: none; }
a:hover, .ljuser a:hover { border-bottom: 1px solid; }
p {
text-indent: 1.5em;
margin: 0px;
padding: 0px;
}
blockquote + p { text-indent: 0px; }
.uts {
font-size: 80%;
font-style: italic;
text-align: center;
line-height: """ + $*font_size + """pt;
margin-bottom: """ + ($*font_leading-$*font_size) + """pt;
}
.smallbar {
font-size: 80%;
font-style: italic;
text-align: center;
line-height: """ + (2*$*font_leading) + """pt;
clear: right;
}
.ljcomsel {
position: relative;
top: 0.75pt;
height: 7.5pt;
padding-left: 1pt;
}
input#username, input#password { margin-right: 0.5em; }
.bs {
margin-top: """ + (2*$*font_leading) + """pt;
margin-bottom: """ + (2*$*font_leading) + """pt;
text-align: center;
line-height: ${*font_leading}pt;
}
""";
}
function find_lpar(string t) : int {
foreach var int i (reverse (0 .. ($t->length()-1))) {
if($t->substr($i,1)=="(") { return $i; }
}
return -1;
}
function render_title(string t, int len) {
foreach var int i (0 .. ($len-1)) {
var string pc = $t->substr($i-1,1);
var string cc = $t->substr($i,1);
if($cc==" ") { " &middot; "; }
elseif( $i > 0 and $pc != " ") { "$cc"; }
elseif ($cc=="A" or $cc=="B" or $cc=="C" or $cc=="D" or $cc=="E" or $cc=="F" or $cc=="G" or $cc=="H" or $cc=="I" or $cc=="J" or $cc=="K" or $cc=="L" or $cc=="M" or $cc=="N" or $cc=="O" or $cc=="P" or $cc=="Q" or $cc=="R" or $cc=="S" or $cc=="T" or $cc=="U" or $cc=="V" or $cc=="W" or $cc=="X" or $cc=="Y" or $cc=="Z") {
"<span class='flourish'>$cc</span>";
}
else { "$cc"; }
}
}
function render_body(string t) {
var int str=0;
var bool par=false;
var bool pars=false;
$str = ($t->substr(0,6) == "<br />" ? 6 : 0);
if($t->substr(0,3) == "<p>") { $str = 3; $pars=true; }
foreach var int i ($str .. ($t->length()-1)) {
if($t->substr($i,12) == "<br /><br />") {
$str=$i+12;
if($par) { "</p><p>"; }
else { "<p>"; $par=true; }
}
elseif($pars and $t->substr($i,4) == "</p>") { $str=$i+4; $pars=false; }
elseif($i >= $str) { print $t->substr($i,1); }
}
if($par) { "</p>"; }
}
function display_title(Page p) {
var string dtitle = $p.global_title;
var string stitle = $p->view_title();
$stitle = ($p.view == "recent" ? $p.global_subtitle : $stitle);
var int lenm=$stitle->length()-1;
var int i=$dtitle->length()+1;
if ($dtitle == "") {
$dtitle = $p.journal.name;
$i=$dtitle->length()+1;
}
if ($p.view == "friends") {
$dtitle = $p->view_title();
$i=find_lpar($dtitle);
if($i==-1) { $i = $lenm+2; }
}
"""<div align="center">
<h1>"""; render_title($dtitle,$i-1); """</h1>""";
if($p.view != "friends" and $stitle != "") { """<br /><h3 style="margin-top:-1em;">$stitle</h3>"""; }
elseif($p.view == "friends" and $i<$lenm) { "<br /><h3 style='margin-top:-1em;'>" + $dtitle->substr($i+1,($lenm-$i)-1) + "</h3>"; }
"""</div>""";
}
function Page::print() {
var string title = $this->title();
var string links;
var bool firstlink = true;
foreach var string v ($.views_order) {
if ($firstlink == false) {
$links = "$links &middot; ";
}
else {
$firstlink = false;
}
$links = $links + ("<a href='$.view_url{$v}'>"+lang_viewname($v)+"</a>");
}
"""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n""";
if ($*external_stylesheet) {
println """<link rel="stylesheet" href="$.stylesheet_url" type="text/css" />""";
} else {
println """<style type="text/css">"""; print_stylesheet(); "</style>";
}
$this->print_head();
"""<title>$title</title>
</head>
<body bgcolor="$*page_back" text="$*entry_text" link="$*page_link" vlink="$*page_vlink" alink="$*page_alink">""";
display_title($this);
"""<div style="text-align:center; margin-bottom: ${*font_leading}pt;">
<h2>$links</h2>
</div>
""";
$this->print_body();
"""
</body>
</html>
""";
}
function print_entry(Page p, Entry e) {
var string date=$e.time->date_format("short");
var string time=$e.time->time_format();
"""
<table cellpadding='0' cellspacing='0' border='0' align='center'>
<tr><td align="center" colspan="2"><img
src="$*dingbar_url" alt="$*text_dingbar_alt" class="bs"/></td></tr>
<tr>
<td align="right" valign="top" width="100"><div class="index">""";
""" <a href="$e.permalink_url">$time<br />
$date</a><br /><br />
""";
$e.comments->print();
""" </div></td>
<td valign="top">
<div class="bodybox">
<div class="author">""";
if (defined $e.userpic) {
"""<img border="0" src="$e.userpic.url" width="$e.userpic.width" height="$e.userpic.height" alt=""><br />""";
}
elseif ($e.poster.journal_type == "C") {
"""<img border="0" src="$*IMGDIR/community.gif" alt="" /><br />""";
}
elseif ($e.poster.journal_type == "Y") {
"""<img border="0" src="$*IMGDIR/syndicated.gif" alt="" /><br />""";
}
else {
"""<img border="0" src="$*IMGDIR/userinfo.gif" alt="" /><br />""";
}
"<a href=\"" +
$e.poster->base_url() + "/\">$e.poster.username</a>";
if ($e.security != "") {
$e.security_icon->print();
}
if ($e.poster.username != $e.journal.username and $e.journal.journal_type =="C") {
""",<br />
<img border="0" src="$*IMGDIR/community.gif" alt="" align="absmiddle" />
<a href=\"""" + $e.journal->base_url() + """/">$e.journal.username</a>""";
}
var string subject=$e.subject;
if($p.view=="entry") { $subject=""; }
"""</div>
<div class="caption">
$subject
</div>""";
if ($subject == "" and $p.view!="entry") {"<div class='bodyns'>";}
elseif ($e.text->length() > $*dcLen) {"<div class='bodyl'>";}
else {"<div class='body'>";}
render_body($e.text);
var string metadata;
if ($e.metadata) {
$metadata = "<div style='margin-top:${*font_leading}pt;'><table cellspacing='0' cellpadding='0' border='0'>";
foreach var string k ($e.metadata) {
var string text = $k;
var string val = $e.metadata{$k};
if ($k == "mood") {
$text = $*text_meta_mood;
} elseif ($k == "music") {
$text = $*text_meta_music;
}
if ($k == "mood" and defined $e.mood_icon) {
var Image i = $e.mood_icon;
$val = "<img src='$i.url' width='$i.width' height='$i.height' align='middle' alt='$val'> $val";
}
$metadata = """$metadata\n<tr><td align="right"><div class="sc" style="margin-right:1em;">$text:</div></td>
<td align="left">$val</td></tr>""";
}
$metadata = """$metadata</table></div>""";
}
"""$metadata</div></div></td>
</tr>""";
if ($p.view == "entry" and $*show_entrynav_icons)
{
"""<tr><td align="center" colspan="2" style="line-height:${*font_leading}pt;"><img
src="$*dingbar_url" alt="$*text_dingbar_alt" class="bs" /></td></tr>
<tr><td colspan="2"><div style='text-align: center; margin-top: 0px;'>""";
$e->print_linkbar();
"""</div></td></tr>""";
}
"</table>";
} # print_entry(Page,Entry,Color,Color)
function Entry::print_linkbar() {
## There's no point in showing previous/next links on pages which show
## multiple entries anyway, so we only print them on EntryPage and ReplyPage.
var Page p = get_page();
var Link link;
var bool show_interentry = ($p.view == "entry" or $p.view == "reply");
"<h2>";
if ($show_interentry) {
var Link prev = $this->get_link("nav_prev");
"""<a href="$prev.url">$prev.caption</a> &middot """;
}
if ($p.view == "entry" and $.comments.enabled) {
if ($.comments.maxcomments) {
"Maximum Comments Reached";
} else {
"<a href=\"$.comments.post_url\">Leave a Comment</a>";
}
" &middot; ";
}
var int i=0;
foreach var string k ($.link_keyseq) {
$link = $this->get_link($k);
if($link.caption != "") {
if($i>0) { " &middot; "; }
"<a href='$link.url'>$link.caption</a>";
$i++;
}
}
if ($show_interentry) {
var Link next = $this->get_link("nav_next");
""" &middot <a href="$next.url">$next.caption</a>""";
}
"</h2>";
}
function Page::print_entry(Entry e) {
print_entry($this, $e);
}
function FriendsPage::print_entry(Entry e) {
print_entry($this, $e);
}
function RecentPage::print_body() {
foreach var Entry e ($.entries) {
$this->print_entry($e);
}
"""
<div align="center" class="bs" style="line-height: ${*font_leading}pt;"><img
src="$*dingbar_url" style="text-align:center;" alt="$*text_dingbar_alt" /></div>
<div align="center"><h2>
""";
# go forward/backward if possible
if ($.nav.forward_url != "" or $.nav.backward_url != "") {
var string sep;
var string back;
var string forward;
if ($.nav.backward_url != "") {
$back = """<a href="$.nav.backward_url">Previous</a>""";
}
if ($.nav.forward_url != "") {
$forward = """<a href="$.nav.forward_url">Next</a>""";
}
if ($back != "" and $forward != "") { $sep = " &middot; "; }
"$back$sep$forward";
}
"</h2></div>";
}
function CommentInfo::print() {
if (not $.enabled) { return; }
if ($.count > 0 or $.screened) {
$this->print_readlink(); "<br />";
}
$this->print_postlink();
}
function YearPage::print_year_links() {
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div><div class="sct">Years</div><h2 style="text-align:center;">""";
var bool d=false;
foreach var YearYear y ($.years) {
if($d) { " &middot; "; }
else { $d=true; }
if ($y.displayed) {
"$y.year";
} else {
"<a href=\"$y.url\">$y.year</a>";
}
}
"</h2>";
}
function YearPage::print_month(YearMonth m) {
if (not $m.has_entries) { return; }
"""<div class="bs">
<table cellpadding="0" cellspacing="0" border="0" summary="" align="center">
<tr><center class="noul">
<a href="$m.url">""";
print $m->month_format();
"""</a>
<!-- now the headings for the week -->
<table align="center" cellpadding="0" cellspacing="0" border="0" summary="">
<tr align="center">
""";
foreach var int d (weekdays()) {
"<td align='center'>"+$*lang_dayname_short[$d]+"</td>\n";
}
"</tr>";
foreach var YearWeek w ($m.weeks) {
$w->print();
}
"""</table></center>""";
}
function YearWeek::print() {
"<tr valign='top'>";
if ($.pre_empty) { "<td colspan='$.pre_empty'></td>"; }
foreach var YearDay d ($.days) {
"""<td><div class="ywp"><div class="sfon">$d.day</div>""";
if ($d.num_entries) {
"""<div class="uts"><a href="$d.url">$d.num_entries</a></div>""";
} else {
"&nbsp;";
}
"</div></td>";
}
if ($.post_empty) { "<td colspan='$.post_empty'></td>"; }
"</tr>";
}
function DayPage::print_body() {
if (not $.has_entries) { print "<div class='sct'>" + ehtml($*text_noentries_day) + "</div>"; }
foreach var Entry e ($.entries) {
$this->print_entry($e);
}
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
var string tprev = ehtml($*text_day_prev);
var string tnext = ehtml($*text_day_next);
"""<center><h2><a href="$.prev_url">$tprev</a> &middot; <a href="$.next_url">$tnext</a></h2></center>""";
}
function MonthPage::print_body() {
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
"<center><div class='bodybox'><center><table border='0' cellspacing='0' cellpadding='0'><tr><td><dl>";
foreach var MonthDay d ($.days) {
if ($d.has_entries) {
"<dt><a href=\"$d.url\"><i>";
print lang_ordinal($d.day);
"</i></a>:</dt>\n<dd>";
$d->print_subjectlist();
"</dd>\n";
}
}
"</dl></td></tr></table></center></div></center>\n";
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
"<form method='post' action='$.redir.url'><center>";
$.redir->print_hiddens();
if ($.prev_url != "") { "<a href='$.prev_url' style='font-size:12pt;'>&#9756;</a> "; }
if (size $.months > 1) {
"<select name='redir_key'>\n";
foreach var MonthEntryInfo mei ($.months) {
var string sel;
if ($mei.date.year == $.date.year and $mei.date.month == $.date.month) {
$sel = " selected='selected'";
}
"<option value='$mei.redir_key'$sel>" + $mei.date->date_format($*lang_fmt_month_long) + "</option>";
}
"</select>\n<input type='submit' value='View' />";
}
if ($.next_url != "") { " <a href='$.next_url' style='font-size:12pt;'>&#9758;</a>\n"; }
"</center></form>";
}
function EntryPage::print_body() {
print_entry($this, $.entry);
if ($.entry.comments.enabled and $.comment_pages.total_subitems > 0) {
$.comment_pages->print();
$this->print_multiform_start();
"<div style='margin-top: 7pt;'></div>";
"<table align='center' cellspacing='0' border='0' cellpadding='0' style='display: none;'><tr><td>";
$this->print_comments($.comments);
"</td></tr></table>";
$.comment_pages->print();
if ($*show_entrynav_icons) {
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
"""<div class="bs">""";
$.entry->print_linkbar();
"""</div>""";
}
if ($this.multiform_on) {"""
<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>
<div style="text-align: center;">""";
$this->print_multiform_actionline();
$this->print_multiform_end();
"</div>";
}
}
}
function ItemRange::print() {
if ($.all_subitems_displayed) { return; }
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
"<center>";
"<a name='comments'></a><div style='width: $*body_width; text-align:center;'>";
"<h2>" + lang_page_of_pages($.current, $.total) + "</h2>";
var string url_prev = $this->url_of($.current - 1);
"<table cellspacing='0' cellpadding='0' border='0' align='center'><tr><td align='center' style='font-size: 14pt'>";
if ($.current != 1) {
print "<a href='$url_prev#comments'>&#9756;</a>";
} else {
print "&#9756;";
}
print " </td><td align='center'>";
foreach var int i (1..$.total) {
if ($i == $.current) { "$i"; }
else {
var string url_of = $this->url_of($i);
"<a href='$url_of#comments'>$i</a>";
}
if ($i != $.total) { ", "; }
}
"</td><td align='center' style='font-size: 14pt'> ";
var string url_next = $this->url_of($.current + 1);
if ($.current != $.total) {
print "<a href='$url_next#comments'>&#9758;</a>";
} else {
print "&#9758;";
}
"</td></tr></table></div></center>";
}
function EntryPage::print_comments(Comment[] cs) {
if (size $cs == 0) { return; }
foreach var Comment c ($cs) {
if($c.depth==1) {
"</td></tr></table>";
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
"<table align='center' cellspacing='0' border='0' cellpadding='0'><tr><td>";
}
var int indent = ($c.depth - 1) * 21;
"<div style='margin-left: ${indent}pt;'>\n";
if ($c.full) {
$this->print_comment($c);
} else {
$this->print_comment_partial($c);
}
"</div>";
$this->print_comments($c.replies);
}
}
function EntryPage::print_comment(Comment c) {
var string poster = defined $c.poster ? $c.poster->as_string() : $*text_poster_anonymous;
var string sub_icon;
if (defined $c.subject_icon) {
$sub_icon = $c.subject_icon->as_string();
}
"<a name='$c.anchor'></a>";
"<div class='bodybox'" + ($c.depth>1? " style='margin-top:${*font_leading}pt;'" : "") + ">";
if (defined $c.userpic and $*comment_userpic_style != "off") {
var int w = $c.userpic.width;
var int h = $c.userpic.height;
# WARNING: this will later be done by the system (it'll be a
# constructional property), so don't copy this hack into your
# layout layers or you'll be messed up later.
if ($*comment_userpic_style == "small") {
$w = $w / 2;
$h = $h / 2;
}
"<img src='$c.userpic.url' width='$w' height='$h' alt='[User Picture]' style='float: right;' class='author' />";
}
### From, date, etc
"<div class='noul'>";
if ($c.screened) { "<span style='color:$*text_weaker;'>(Screened) </span>"; }
"On " + $c.time->date_format("long") + ", " + $c.time->time_format() + ", $poster ";
if ($c.metadata{"poster_ip"}) { "(" + $c.metadata{"poster_ip"} + ") "; }
"<a href='$c.permalink_url'>";
if ($c.depth == 1) { "commented"; }
else { "replied"; }
"</a>:</div>";
print (defined $c.subject_icon or $c.subject != "") ? "<div class='caption'>$c.subject_icon $c.subject</div>" : "";
"<div class='body'>";
render_body($c.text);
print "</div><div class='smallbar'>";
if ($c.frozen) {
"Replies Frozen";
} else {
"<a href='$c.reply_url'>Reply</a>";
}
if ($c.parent_url != "") { " &middot; <a href='$c.parent_url'>Parent</a>"; }
if ($c.thread_url != "") { " &middot; <a href='$c.thread_url'>Thread</a>"; }
$c->print_linkbar();
if ($this.multiform_on) {
" &middot; ";
"<label for='ljcomsel_$c.talkid'>$*text_multiform_check</label>";
$c->print_multiform_check();
}
"</div></div>";
}
function EntryPage::print_comment_partial(Comment c) {
var string poster = defined $c.poster ? $c.poster->as_string() : $*text_poster_anonymous;
var bool subj = $c.subject != "";
"<div class='ult' style='width:$*body_width; margin-top:${*font_leading}pt;'>";
"&mdash;&thinsp;On " + $c.time->date_format("long") + ", " + $c.time->time_format() + ", $poster ";
if ($c.metadata{"poster_ip"}) { "(" + $c.metadata{"poster_ip"} + ") "; }
if($subj) { """replied, <a href="$c.permalink_url">&ldquo;$c.subject&rdquo;</a>"""; }
else { """posted <a href="$c.permalink_url">a reply</a>"""; }
".</div>";
}
function Comment::print_linkbar() {
var Link link;
foreach var string k ($.link_keyseq) {
$link = $this->get_link($k);
($link.caption != "") ? " &middot; <a href='$link.url'>$link.caption</a>" : "";
}
}
function ReplyPage::print_body() {
var bool ent = $.replyto.permalink_url == $.entry.permalink_url;
if($ent) {
print_entry($this, $.entry);
}
else {
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
var EntryLite c = $.replyto;
var string poster = defined $c.poster ? $c.poster->as_string() : $*text_poster_anonymous;
"<center><div style='width: $*body_width;'>";
if (defined $c.userpic and $*comment_userpic_style != "off") {
var int w = $c.userpic.width;
var int h = $c.userpic.height;
# WARNING: this will later be done by the system (it'll be a
# constructional property), so don't copy this hack into your
# layout layers or you'll be messed up later.
if ($*comment_userpic_style == "small") {
$w = $w / 2;
$h = $h / 2;
}
"<img src='$c.userpic.url' width='$w' height='$h' alt='[User Picture]' style='float: right;' class='author' />";
}
### From, date, etc
"<div class='noul'>";
"On " + $c.time->date_format("long") + ", " + $c.time->time_format() + ", $poster ";
if ($c.metadata{"poster_ip"}) { "(" + $c.metadata{"poster_ip"} + ") "; }
"<a href='$c.permalink_url'>commented:</a></div>";
print ($c.subject != "") ? "<div class='caption'>$c.subject</div>" : "";
"<div class='body'>";
render_body($c.text);
"</div></div></center>";
}
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
"<div style='text-align:center;'><h2><a href='$.entry.comments.read_url'>Read Comments</a></h2></div>";
"""<div class="bs">
<img src="$*dingbar_url" alt="$*text_dingbar_alt" />
</div>""";
if (not $.entry.comments.enabled) {
print "<div class='sct'>$*text_reply_nocomments</div>";
return;
}
"<center><h3 style='margin-top:0px; line-height:" + (2*$*font_leading) + "pt;'>Reply " + ($ent ? "to this entry" : "to this comment") + ":</h3>";
$.form->print();
"</center>";
}

View File

@@ -0,0 +1,179 @@
#NEWLAYER: anovelconundrum/renaissance
layerinfo "type" = "theme";
layerinfo "name" = "Renaissance";
layerinfo "redist_uniq" = "anovelconundrum/renaissance";
set font_secondary_fallback = "";
set font_secondary_size = 10;
set font_secondary_type = "serif";
set font_leading = 12;
set page_back = "#FAF2C8";
set font_fallback = "";
set font_secondary_base = "Garamond";
set font_base = "Garamond";
#NEWLAYER: anovelconundrum/modern
layerinfo "type" = "theme";
layerinfo "name" = "Modern";
layerinfo "redist_uniq" = "anovelconundrum/modern";
set font_leading = 14;
set page_back = "#F5F5E8";
set font_fallback = "";
set font_base = "Georgia";
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.1em";
set dcLen = 5000;
#NEWLAYER: anovelconundrum/clippy
layerinfo "type" = "theme";
layerinfo "name" = "Clippy";
layerinfo "redist_uniq" = "anovelconundrum/clippy";
set font_leading = 13;
set page_back = "#FFFFFF";
set font_fallback = "Times";
set font_base = "Times New Roman";
set font_secondary_base = "Helvetica";
set font_secondary_fallback = "Arial";
set font_secondary_type = "sans-serif";
set font_secondary_size = 8;
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.1em";
set flourish_rm = "0.08em";
set dcLen = 99999;
set body_width = "65ex";
#NEWLAYER: anovelconundrum/childsplay
layerinfo "type" = "theme";
layerinfo "name" = "Child's Play";
layerinfo "redist_uniq" = "anovelconundrum/childsplay";
set page_back = "#FFE6FF";
set font_base = "Comic Sans";
set font_fallback = "Chalkboard";
set font_type = "cursive";
set font_secondary_base = "";
set font_secondary_fallback = "";
set font_secondary_type = "";
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.12em";
set flourish_rm = "0.08em";
set dcLen = 1000;
#NEWLAYER: anovelconundrum/laketahoe
layerinfo "type" = "theme";
layerinfo "name" = "Lake Tahoe";
layerinfo "redist_uniq" = "anovelconundrum/laketahoe";
set page_back = "#E6E6FF";
set font_base = "Tahoma";
set font_fallback = "Verdana";
set font_type = "sans-serif";
set font_secondary_base = "";
set font_secondary_fallback = "";
set font_secondary_type = "";
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.14em";
set flourish_rm = "0.08em";
set dcLen = 500;
#NEWLAYER: anovelconundrum/deardiary
layerinfo "type" = "theme";
layerinfo "name" = "Dear Diary";
layerinfo "redist_uniq" = "anovelconundrum/deardiary";
set page_back = "#f9f7d6";
set font_base = "Lucida Handwriting";
set font_fallback = "";
set font_type = "cursive";
set font_leading = 16;
set body_width = "38em";
set font_secondary_base = "";
set font_secondary_fallback = "";
set font_secondary_type = "";
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.12em";
set flourish_rm = "0.05em";
set dcLen = 500;
#NEWLAYER: anovelconundrum/scribal
layerinfo "type" = "theme";
layerinfo "name" = "Scribal";
layerinfo "redist_uniq" = "anovelconundrum/scribal";
set page_back = "#FAF2C8";
set font_base = "Lucida Calligraphy";
set font_fallback = "";
set font_type = "cursive";
set font_leading = 15;
set title_smallcaps = false;
set title_underline = true;
set font_secondary_base = "";
set font_secondary_fallback = "";
set font_secondary_type = "";
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.12em";
set flourish_rm = "0.05em";
set dcLen = 500;
#NEWLAYER: anovelconundrum/glossy
layerinfo "type" = "theme";
layerinfo "name" = "Glossy Magazine";
layerinfo "redist_uniq" = "anovelconundrum/glossy";
set page_back = "#F4FBFF";
set font_base = "Lucida Bright";
set font_fallback = "Georgia";
set font_type = "serif";
set font_secondary_base = "Lucida Sans";
set font_secondary_fallback = "";
set font_secondary_type = "sans-serif";
set font_secondary_size = 9;
set font_flourish_base = "Agency FB";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.08em";
set flourish_rm = "0.02em";
set dcLen = 1200;
#NEWLAYER: anovelconundrum/retro
layerinfo "type" = "theme";
layerinfo "name" = "Retrossential";
layerinfo "redist_uniq" = "anovelconundrum/retro";
set page_back = "#f9f9e3";
set font_base = "Rockwell";
set font_fallback = "";
set font_type = "serif";
set font_size = 11;
set font_secondary_base = "";
set font_secondary_fallback = "";
set font_secondary_type = "";
set font_secondary_size = 10;
set font_flourish_base = "";
set font_flourish_fallback = "";
set font_flourish_type = "";
set flourish_rm = "0.05em";
set dc_rm = "0.12em";
set flourish_rm = "0.05em";
set dcLen = 500;

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,225 @@
#NEWLAYER: boxer/lipstick
layerinfo "type" = "theme";
layerinfo "name" = "Lipstick";
layerinfo redist_uniq = "boxer/lipstick";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#B46F60";
set entry_link = "#ffeae5";
set entry_bg = "#eebbaf";
set nav_scale = "darker";
set info_font = "#A55745";
set bg_color = "#fac7bb";
set entry_font = "#A55745";
set info_link_visited = "#ffeae5";
set page_background_pattern = "background-hearts.gif";
set entry_link_visited = "#ffffff";
set info_bg = "#e5a799";
set info_link = "#FFF9F8";
#NEWLAYER: boxer/greyskies
layerinfo "type" = "theme";
layerinfo "name" = "Grey Skies";
layerinfo redist_uniq = "boxer/greyskies";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#9aaeb6";
set entry_link = "#997D63";
set entry_bg = "#f2eae2";
set nav_scale = "lighter";
set info_font = "#627a84";
set bg_color = "#dde1e3";
set entry_font = "#7f97a0";
set info_link_visited = "#CEDBDF";
set page_background_pattern = "background-vert-stripes.gif";
set entry_link_visited = "#b4a18f";
set info_bg = "#8c9ca2";
set info_link = "#b9c7cc";
#NEWLAYER: boxer/eggplant
layerinfo "type" = "theme";
layerinfo "name" = "Eggplant";
layerinfo redist_uniq = "boxer/eggplant";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#4e6559";
set entry_link = "#9FAE8D";
set entry_bg = "#635A48";
set nav_scale = "lighter";
set info_font = "#899BA3";
set bg_color = "#9fae8d";
set entry_font = "#E7DFCF";
set info_link_visited = "#b9c7cc";
set entry_link_visited = "#A6B2AC";
set info_bg = "#464640";
set info_link = "#b9c7cc";
#NEWLAYER: boxer/lonelyturquoise
layerinfo "type" = "theme";
layerinfo "name" = "Lonely Turquoise";
layerinfo redist_uniq = "boxer/lonelyturquoise";
layerinfo "source_viewable" = 0;
set page_background_pattern = "background-lg-boxes.gif";
set color_nav_bg = "#7f7f7f";
set entry_link_visited = "#ededed";
set entry_link = "#ffffff";
set entry_bg = "#ABABAB";
set info_font = "#000000";
set info_bg = "#00b1ae";
set bg_color = "#ffffff";
set entry_font = "#363636";
set info_link = "#006260";
#NEWLAYER: boxer/legallypink
layerinfo "type" = "theme";
layerinfo "name" = "Legally Pink";
layerinfo redist_uniq = "boxer/legallypink";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#ff089b";
set entry_link_visited = "#70086F";
set entry_link = "#4D0870";
set entry_bg = "#ec008c";
set nav_scale = "lighter";
set info_font = "#ec008c";
set bg_color = "#f49ac1";
set entry_font = "#fbdbee";
set info_link_visited = "#CE1182";
set page_background_pattern = "background-hearts.gif";
set info_bg = "#ffadde";
set info_link = "#E3026A";
#NEWLAYER: boxer/greybrowngreen
layerinfo "type" = "theme";
layerinfo "name" = "Grey Brown Green";
layerinfo redist_uniq = "boxer/greybrowngreen";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#2f372e";
set entry_link = "#212919";
set entry_bg = "#586C44";
set nav_scale = "lighter";
set info_font = "#A1926C";
set bg_color = "#000000";
set entry_font = "#D9E1D2";
set info_link_visited = "#B1AD9B";
set entry_link_visited = "#2C3F28";
set info_bg = "#433a1e";
set info_link = "#B1AD9B";
#NEWLAYER: boxer/precious
layerinfo "type" = "theme";
layerinfo "name" = "Precious";
layerinfo redist_uniq = "boxer/precious";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#A17682";
set entry_link = "#0F486E";
set entry_bg = "#c6cfd5";
set nav_scale = "lighter";
set info_font = "#F7FDFC";
set bg_color = "#d9e1d9";
set entry_font = "#6C7982";
set info_link_visited = "#E4ECEB";
set entry_link_visited = "#3F6A86";
set info_bg = "#a2b2b1";
set info_link = "#E4ECEB";
#NEWLAYER: boxer/purple
layerinfo "type" = "theme";
layerinfo "name" = "Purple";
layerinfo redist_uniq = "boxer/purple";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#78629C";
set entry_link = "#F9F5FC";
set entry_bg = "#62536C";
set nav_scale = "lighter";
set info_font = "#A38FA3";
set bg_color = "#8B77A9";
set entry_font = "#DCD3E2";
set info_link_visited = "#A799BF";
set entry_link_visited = "#ffffff";
set info_bg = "#472B47";
set info_link = "#A799BF";
#NEWLAYER: boxer/green
layerinfo "type" = "theme";
layerinfo "name" = "Green";
layerinfo redist_uniq = "boxer/green";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#748A25";
set entry_link = "#EAF9D4";
set entry_bg = "#748A25";
set nav_scale = "lighter";
set info_font = "#004C3C";
set bg_color = "#254634";
set entry_font = "#E2EED0";
set info_link_visited = "#00EEBC";
set entry_link_visited = "#EAF9D4";
set info_bg = "#0E9B7D";
set info_link = "#61EFD1";
#NEWLAYER: boxer/purpange
layerinfo "type" = "theme";
layerinfo "name" = "Purpange";
layerinfo redist_uniq = "boxer/purpange";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#151e1a";
set nav_scale = "lighter";
set entry_link = "#ffffff";
set entry_bg = "#E7513E";
set info_font = "#f6cab7";
set bg_color = "#ffffff";
set entry_font = "#FDE9E6";
set info_link_visited = "#afe900";
set page_background_pattern = "background-stitched.gif";
set entry_link_visited = "#ffffff";
set info_bg = "#91125f";
set info_link = "#afe900";
#NEWLAYER: boxer/purplesalmon
layerinfo "type" = "theme";
layerinfo "name" = "Purple Salmon";
layerinfo redist_uniq = "boxer/purplesalmon";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#AA6B90";
set entry_link = "#633F4B";
set entry_bg = "#CEADB8";
set nav_scale = "same";
set info_font = "#F0B4AA";
set bg_color = "#151E1A";
set entry_font = "#6D5B61";
set info_link_visited = "#7E3D33";
set entry_link_visited = "#633F4B";
set info_bg = "#D26E5E";
set info_link = "#7E3D33";
#NEWLAYER: boxer/refriedtribute
layerinfo "type" = "theme";
layerinfo "name" = "Refried Tribute";
layerinfo redist_uniq = "boxer/refriedtribute";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#666666";
set entry_link = "#336699";
set entry_bg = "#e6e6e6";
set info_font = "#999966";
set bg_color = "#ffffff";
set entry_font = "#656565";
set info_link_visited = "#4d4d4d";
set page_background_pattern = "none";
set entry_link_visited = "#336699";
set info_bg = "#cccc99";
set info_link = "#666666";
#NEWLAYER: boxer/blue
layerinfo "type" = "theme";
layerinfo "name" = "Blue";
layerinfo redist_uniq = "boxer/blue";
layerinfo "source_viewable" = 0;
set color_nav_bg = "#3A6A74";
set entry_link = "#E0DFCE";
set entry_bg = "#4F7B8A";
set info_font = "#908F78";
set bg_color = "#435754";
set entry_font = "#E7EEF0";
set info_link_visited = "#5D5C50";
set entry_link_visited = "#E0DFCE";
set info_bg = "#E0DFCE";
set info_link = "#4E5964";

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,187 @@
#NEWLAYER: component/aquatic
layerinfo "type" = "theme";
layerinfo "name" = "Aquatic";
layerinfo redist_uniq = "component/aquatic";
layerinfo "source_viewable" = 0;
set entry_fgcolor = "#515151";
set comp_bgcolor = "#51ada6";
set header_link = "#ffffff";
set entry_link = "#0C5D57";
set entry_bgcolor = "#ffffff";
set header_fgcolor = "#c7d1cc";
set main_bgcolor = "#51ada6";
set calendar_active = "#318D86";
set header_bgcolor = "#0e3b4a";
set calendar_inactive = "#ffffff";
set comp_fgcolor = "#F7FEFF";
#NEWLAYER: component/bluetiful
layerinfo "type" = "theme";
layerinfo "name" = "Bluetiful";
layerinfo redist_uniq = "component/bluetiful";
layerinfo "source_viewable" = 0;
set entry_fgcolor = "#606060";
set comp_bgcolor = "#f4f4f4";
set header_link = "#f7fcfb";
set entry_link = "#2d3679";
set entry_bgcolor = "#eff5ff";
set header_fgcolor = "#327192";
set main_bgcolor = "#a2c5e3";
set header_bgcolor = "#6da6c4";
set comments_bgcolor = "#84b5d2";
#NEWLAYER: component/darkness
layerinfo "type" = "theme";
layerinfo "name" = "Darkness";
layerinfo redist_uniq = "component/darkness";
layerinfo "source_viewable" = 0;
set comments_screened_bgcolor = "#22620e";
set calendar_fgcolor = "#5b6c7a";
set calendar_active = "#5b6c7a";
set calendar_inactive = "#adbac5";
set comp_fgcolor = "#dadde0";
set entry_fgcolor = "#dddcd6";
set comp_bgcolor = "#758491";
set entry_link = "#adb6be";
set header_link = "#c7ccd1";
set entry_bgcolor = "#32343d";
set main_bgcolor = "#71837A";
set header_fgcolor = "#c7d1cc";
set header_bgcolor = "#728d80";
set comments_bgcolor = "#5a5a5a";
#NEWLAYER: component/jedicloak
layerinfo "type" = "theme";
layerinfo "name" = "Jedi Cloak";
layerinfo redist_uniq = "component/jedicloak";
layerinfo "source_viewable" = 0;
set entry_fgcolor = "#F1EDE5";
set comp_bgcolor = "#988b67";
set header_link = "#dddbd6";
set entry_link = "#615020";
set entry_bgcolor = "#ada386";
set comments_screened_bgcolor = "#a29f97";
set header_fgcolor = "#bcb59f";
set main_bgcolor = "#6e5845";
set calendar_active = "#817452";
set header_bgcolor = "#6e6449";
set calendar_inactive = "#988b67";
set comp_fgcolor = "#383325";
set comments_bgcolor = "#948B6F";
#NEWLAYER: component/mellow
layerinfo "type" = "theme";
layerinfo "name" = "Mellow";
layerinfo redist_uniq = "component/mellow";
layerinfo "source_viewable" = 0;
set comments_screened_bgcolor = "#D6C8CC";
set page_background_image = "";
set calendar_active = "#D9E1D9";
set calendar_inactive = "#A2B2B1";
set comp_fgcolor = "878D8D";
set entry_fgcolor = "#355351";
set comp_bgcolor = "#C6CFD5";
set entry_link = "#6B7F8D";
set header_link = "6B7F8D";
set entry_bgcolor = "#A2B2B1";
set main_bgcolor = "#D6C8CC";
set header_fgcolor = "#96A891";
set header_bgcolor = "#D9E1D9";
set comments_bgcolor = "#BCC4C3";
#NEWLAYER: component/mocha
layerinfo "type" = "theme";
layerinfo "name" = "Mocha";
layerinfo redist_uniq = "component/mocha";
layerinfo "source_viewable" = 0;
set page_background_image = "";
set entry_fgcolor = "#807C75";
set comp_bgcolor = "#b1bbb4";
set comp_fgcolor = "#78746e";
set header_link = "#716C53";
set entry_link = "#67716a";
set entry_bgcolor = "#ebe6d1";
set comments_screened_bgcolor = "#b2c9b9";
set header_fgcolor = "#7a6f43";
set main_bgcolor = "#d8d0ae";
set calendar_active = "#8da193";
set header_bgcolor = "#d8d0ae";
set calendar_inactive = "#d3e1d7";
set comments_bgcolor = "#dbdedc";
#NEWLAYER: component/orangesoda
layerinfo "type" = "theme";
layerinfo "name" = "Orange Soda";
layerinfo redist_uniq = "component/orangesoda";
layerinfo "source_viewable" = 0;
set entry_fgcolor = "#8a5b33";
set comp_bgcolor = "#c4bd8e";
set header_link = "#FFFFFF";
set entry_link = "#613815";
set entry_bgcolor = "#dbd7b9";
set comments_screened_bgcolor = "#cbc9b9";
set header_fgcolor = "#d7d2af";
set main_bgcolor = "#cd9338";
set calendar_active = "#cd9338";
set header_bgcolor = "#c6710a";
set calendar_inactive = "#dbd7b9";
set comments_bgcolor = "#e4deb5";
#NEWLAYER: component/pinkelephants
layerinfo "type" = "theme";
layerinfo "name" = "Pink Elephants";
layerinfo redist_uniq = "component/pinkelephants";
layerinfo "source_viewable" = 0;
set comments_screened_bgcolor = "#e29994";
set page_background_image = "";
set calendar_active = "#a8a8a7";
set calendar_inactive = "#e29994";
set comp_fgcolor = "#ad5a55";
set entry_fgcolor = "#ffffff";
set comp_bgcolor = "#f7b3ae";
set entry_link = "#777776";
set header_link = "#FFFFFF";
set entry_bgcolor = "#a8a8a7";
set main_bgcolor = "#e29994";
set header_fgcolor = "#ad5a55";
set header_bgcolor = "#e29994";
set comments_bgcolor = "#9c9c9c";
#NEWLAYER: component/sugarspice
layerinfo "type" = "theme";
layerinfo "name" = "Sugar and Spice";
layerinfo redist_uniq = "component/sugarspice";
layerinfo "source_viewable" = 0;
set entry_fgcolor = "#927DAD";
set comp_bgcolor = "#D5EBFA";
set header_link = "#6e5593";
set entry_link = "#759EBA";
set entry_bgcolor = "#D5E9D7";
set comments_screened_bgcolor = "#BEC9BF";
set header_fgcolor = "#6E5593";
set main_bgcolor = "#FCD9C4";
set calendar_active = "#FCD9C4";
set header_bgcolor = "#D4CAE1";
set calendar_inactive = "#D4CAE1";
set comp_fgcolor = "AA9ABF";
set comments_bgcolor = "#B9DABC";
#NEWLAYER: component/greensuperhero
layerinfo "type" = "theme";
layerinfo "name" = "That Green Superhero";
layerinfo redist_uniq = "component/greensuperhero";
layerinfo "source_viewable" = 0;
set comments_screened_bgcolor = "#c99bd7";
set page_background_image = "";
set calendar_active = "#bc6ed4";
set calendar_inactive = "#c99bd7";
set comp_fgcolor = "#bc87cb";
set entry_fgcolor = "#424242";
set comp_bgcolor = "#efefe1";
set entry_link = "#027040";
set header_link = "#ffffff";
set entry_bgcolor = "#e4ede9";
set main_bgcolor = "#16b16c";
set header_fgcolor = "#d0efe2";
set header_bgcolor = "#049957";
set comments_bgcolor = "#bed8cc";

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,615 @@
#NEWLAYER: flexiblesquares/autumn
layerinfo "redist_uniq" = "flexiblesquares/autumn";
layerinfo "type" = "theme";
layerinfo "name" = "Autumn";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#351805";
set page_fgcolor = "#000000";
set content_bgcolor = "#6a3106";
set entry_bgcolor = "#eee293";
set entry_fgcolor = "#661f0c";
set border_color = "#000000";
set entrytitle_bgcolor = "#8b4e1d";
set outer_table_bgcolor = "#c47b51";
set sidebar_header_bgcolor = "#8b4e1d";
set sidebar_fgcolor = "#000000";
set header_footer_bgcolor = "#eee293";
set header_footer_fgcolor = "#661f0c";
set link_color = "#608729";
set link_hover_color = "#661f0c";
set comments_link_color = "#FFFFFF";
set comments_link_hover = "#c47b51";
set sidebar_link_color = "#608729";
set sidebar_link_hover = "#eee293";
set header_footer_link_color = "#608729";
set header_footer_link_hover = "#661f0c";
#NEWLAYER: flexiblesquares/blackwhite
layerinfo "redist_uniq" = "flexiblesquares/blackwhite";
layerinfo "type" = "theme";
layerinfo "name" = "Black and White and Red All Over";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#cccccc";
set page_fgcolor = "#ff0000";
set content_bgcolor = "#000000";
set entry_bgcolor = "#ffffff";
set entry_fgcolor = "#000000";
set border_color = "#ffffff";
set entrytitle_bgcolor = "#cc0000";
set outer_table_bgcolor = "#666666";
set sidebar_header_bgcolor = "#cc0000";
set sidebar_fgcolor = "#ffffff";
set header_footer_bgcolor = "#000000";
set header_footer_fgcolor = "#cc0000";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set link_color = "#999999";
set link_hover_color = "#000000";
set comments_link_color = "#FFFFFF";
set comments_link_hover = "#000000";
set sidebar_link_color = "#999999";
set sidebar_link_hover = "#ffffff";
set header_footer_link_color = "#ffffff";
set header_footer_link_hover = "#999999";
#NEWLAYER: flexiblesquares/freshpaint
layerinfo "redist_uniq" = "flexiblesquares/freshpaint";
layerinfo "type" = "theme";
layerinfo "name" = "Fresh Paint";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#993366";
set page_fgcolor = "#006633";
set content_bgcolor = "#ff9933";
set entry_bgcolor = "#ffff99";
set entry_fgcolor = "#000000";
set border_color = "#6699cc";
set entrytitle_bgcolor = "#ccff66";
set outer_table_bgcolor = "#330033";
set sidebar_header_bgcolor = "#ccff66";
set sidebar_fgcolor = "#000000";
set header_footer_bgcolor = "#ffff99";
set header_footer_fgcolor = "#006633";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set link_color = "#993333";
set link_hover_color = "#330033";
set comments_link_color = "#993333";
set comments_link_hover = "#330033";
set sidebar_link_color = "#993333";
set sidebar_link_hover = "#330033";
set header_footer_link_color = "#993333";
set header_footer_link_hover = "#330033";
#NEWLAYER: flexiblesquares/nautical
layerinfo "redist_uniq" = "flexiblesquares/nautical";
layerinfo "type" = "theme";
layerinfo "name" = "Nautical";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#bad2f6";
set page_fgcolor = "#000000";
set content_bgcolor = "#213659";
set entry_bgcolor = "#ffffff";
set entry_fgcolor = "#000000";
set border_color = "#d4e2f8";
set entrytitle_bgcolor = "#f0ef8e";
set outer_table_bgcolor = "#335288";
set sidebar_header_bgcolor = "#f0ef8e";
set sidebar_fgcolor = "#7fa1d5";
set header_footer_bgcolor = "#213659";
set header_footer_fgcolor = "#f0ef8e";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set link_color = "#7fa1d5";
set link_hover_color = "#000000";
set comments_link_color = "#335288";
set comments_link_hover = "#7fa1d5";
set sidebar_link_color = "#f0ef8e";
set sidebar_link_hover = "#000000";
set header_footer_link_color = "#7fa1d5";
set header_footer_link_hover = "#ffffff";
#NEWLAYER: flexiblesquares/machine
layerinfo "redist_uniq" = "flexiblesquares/machine";
layerinfo "type" = "theme";
layerinfo "name" = "Machine";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#000000";
set page_fgcolor = "#C1C1C1";
set content_bgcolor = "#000000";
set entry_bgcolor = "#000000";
set entry_fgcolor = "#cbd3d8";
set border_color = "#7e8997";
set entrytitle_bgcolor = "#555a60";
set outer_table_bgcolor = "#000000";
set sidebar_header_bgcolor = "#555a60";
set sidebar_fgcolor = "#C1C1C1";
set header_footer_bgcolor = "#000000";
set header_footer_fgcolor = "#C1C1C1";
set date_fgcolor = "#C1C1C1";
set subject_fgcolor = "#C1C1C1";
set link_color = "#8797a0";
set link_hover_color = "#ffffff";
set comments_link_color = "#8797a0";
set comments_link_hover = "#ffffff";
set sidebar_link_color = "#8797a0";
set sidebar_link_hover = "#ffffff";
set header_footer_link_color = "#8797a0";
set header_footer_link_hover = "#ffffff";
#NEWLAYER: flexiblesquares/pastelspring
layerinfo "redist_uniq" = "flexiblesquares/pastelspring";
layerinfo "type" = "theme";
layerinfo "name" = "Pastel Spring";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#ffffff";
set page_fgcolor = "#993333";
set content_bgcolor = "#ffffcc";
set entry_bgcolor = "#ffffff";
set entry_fgcolor = "#000000";
set border_color = "#ebccb1";
set entrytitle_bgcolor = "#ebccb1";
set outer_table_bgcolor = "#dae3b2";
set sidebar_header_bgcolor = "#ebccb1";
set sidebar_fgcolor = "#993333";
set header_footer_bgcolor = "#ffffff";
set header_footer_fgcolor = "#9FA876";
set date_fgcolor = "#993333";
set subject_fgcolor = "#993333";
set link_color = "#9d7980";
set link_hover_color = "#000000";
set comments_link_color = "#993333";
set comments_link_hover = "#ffffff";
set sidebar_link_color = "#9d7980";
set sidebar_link_hover = "#9FA876";
set header_footer_link_color = "#9F3E3E";
set header_footer_link_hover = "#ebccb1";
#NEWLAYER: flexiblesquares/pinkpunk
layerinfo "redist_uniq" = "flexiblesquares/pinkpunk";
layerinfo "type" = "theme";
layerinfo "name" = "Pink Punk";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#000000";
set page_fgcolor = "#cc0066";
set content_bgcolor = "#000000";
set entry_bgcolor = "#ffccff";
set entry_fgcolor = "#000000";
set border_color = "#000000";
set entrytitle_bgcolor = "#ff6699";
set outer_table_bgcolor = "#cc0066";
set sidebar_header_bgcolor = "#ff6699";
set sidebar_fgcolor = "#ffccff";
set header_footer_bgcolor = "#ffccff";
set header_footer_fgcolor = "#000000";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set link_color = "#6666cc";
set link_hover_color = "#ff6699";
set comments_link_color = "#ffccff";
set comments_link_hover = "#6666cc";
set sidebar_link_color = "#6666cc";
set sidebar_link_hover = "#ff6699";
set header_footer_link_color = "#6666cc";
set header_footer_link_hover = "#ff6699";
#NEWLAYER: flexiblesquares/purpleperiwinkle
layerinfo "redist_uniq" = "flexiblesquares/purpleperiwinkle";
layerinfo "type" = "theme";
layerinfo "name" = "Purple Periwinkle";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#2f0b31";
set page_fgcolor = "#2f0b31";
set content_bgcolor = "#671368";
set entry_bgcolor = "#f4a3e9";
set entry_fgcolor = "#2f0b31";
set border_color = "#2f0b31";
set entrytitle_bgcolor = "#9488d8";
set outer_table_bgcolor = "#a13ea7";
set sidebar_header_bgcolor = "#9488d8";
set sidebar_fgcolor = "#DADADA";
set header_footer_bgcolor = "#f4a3e9";
set header_footer_fgcolor = "#2f0b31";
set date_fgcolor = "#2f0b31";
set subject_fgcolor = "#2f0b31";
set link_color = "#dc039d";
set link_hover_color = "#7e025a";
set comments_link_color = "#7e025a";
set comments_link_hover = "#f4a3e9";
set sidebar_link_color = "#dc039d";
set sidebar_link_hover = "#FFCCCC";
set header_footer_link_color = "#dc039d";
set header_footer_link_hover = "#7e025a";
#NEWLAYER: flexiblesquares/grays
layerinfo "redist_uniq" = "flexiblesquares/grays";
layerinfo "type" = "theme";
layerinfo "name" = "Grays";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#111111";
set page_fgcolor = "#ffffff";
set content_bgcolor = "#333333";
set entry_bgcolor = "#666666";
set entry_fgcolor = "#ffffff";
set border_color = "#ffffff";
set entrytitle_bgcolor = "#000000";
set outer_table_bgcolor = "#222222";
set sidebar_header_bgcolor = "#000000";
set sidebar_fgcolor = "#ffffff";
set header_footer_bgcolor = "#666666";
set header_footer_fgcolor = "#ffffff";
set date_fgcolor = "#ffffff";
set subject_fgcolor = "#ffffff";
set link_color = "#ffcc33";
set link_hover_color = "#ff9933";
set comments_link_color = "#ffcc33";
set comments_link_hover = "#ff9933";
set sidebar_link_color = "#ffcc33";
set sidebar_link_hover = "#ff9933";
set header_footer_link_color = "#ffcc33";
set header_footer_link_hover = "#ff9933";
#NEWLAYER: flexiblesquares/lemongrapetang
layerinfo "redist_uniq" = "flexiblesquares/lemongrapetang";
layerinfo "type" = "theme";
layerinfo "name" = "Lemon Grapefruit Tangerine";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#ffff66";
set page_fgcolor = "#993333";
set content_bgcolor = "#cc3333";
set entry_bgcolor = "#ffffcc";
set entry_fgcolor = "#000000";
set border_color = "#ff9999";
set entrytitle_bgcolor = "#ff9933";
set outer_table_bgcolor = "#ffcc33";
set sidebar_header_bgcolor = "#ff9933";
set sidebar_fgcolor = "#000000";
set header_footer_bgcolor = "#ffffcc";
set header_footer_fgcolor = "#993333";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set link_color = "#ff9999";
set link_hover_color = "#993333";
set comments_link_color = "#993333";
set comments_link_hover = "#000000";
set sidebar_link_color = "#ff9999";
set sidebar_link_hover = "#000000";
set header_footer_link_color = "#ff9999";
set header_footer_link_hover = "#993333";
#NEWLAYER: flexiblesquares/tanteal
layerinfo "redist_uniq" = "flexiblesquares/tanteal";
layerinfo "type" = "theme";
layerinfo "name" = "Tan and Teal";
layerinfo author_name = "sub_divided/cyrnelle";
set page_bgcolor = "#003333";
set page_fgcolor = "#000000";
set content_bgcolor = "#cc9966";
set entry_bgcolor = "#ffffcc";
set entry_fgcolor = "#000000";
set border_color = "#ffffff";
set entrytitle_bgcolor = "#996633";
set outer_table_bgcolor = "#ffcc99";
set sidebar_header_bgcolor = "#996633";
set sidebar_fgcolor = "#000000";
set header_footer_bgcolor = "#ffffcc";
set header_footer_fgcolor = "#000000";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set link_color = "#993333";
set link_hover_color = "#603913";
set comments_link_color = "#ffffcc";
set comments_link_hover = "#000000";
set sidebar_link_color = "#993333";
set sidebar_link_hover = "#000000";
set header_footer_link_color = "#993333";
set header_footer_link_hover = "#000000";
#NEWLAYER: flexiblesquares/gentledawn
layerinfo "redist_uniq" = "flexiblesquares/gentledawn";
layerinfo "type" = "theme";
layerinfo "name" = "Gentle Dawn";
layerinfo author_name = "Yati Mansor";
set page_bgcolor = "#747D86";
set page_fgcolor = "#605734";
set content_bgcolor = "#FCCA7D";
set entry_bgcolor = "#FFD3B9";
set entry_fgcolor = "#605734";
set border_color = "#908350";
set entrytitle_bgcolor = "#BAA969";
set outer_table_bgcolor = "#DABD63";
set sidebar_header_bgcolor = "#BAA969";
set sidebar_fgcolor = "#605734";
set header_footer_bgcolor = "#FFD3B9";
set header_footer_fgcolor = "#605734";
set link_color = "#7E858D";
set link_hover_color = "#C68DA5";
set comments_link_color = "#FFFFFF";
set comments_link_hover = "#605734";
set sidebar_link_color = "#7E858D";
set sidebar_link_hover = "#C68DA5";
set header_footer_link_color = "#7E858D";
set header_footer_link_hover = "#C68DA5";
#NEWLAYER: flexiblesquares/icyblue
layerinfo "redist_uniq" = "flexiblesquares/icyblue";
layerinfo "type" = "theme";
layerinfo "name" = "Icy Blue";
layerinfo author_name = "Yati Mansor";
set page_bgcolor = "#C6C2F8";
set page_fgcolor = "#4F4D65";
set content_bgcolor = "#D3DCFC";
set entry_bgcolor = "#DDEFFF";
set entry_fgcolor = "#4F4D65";
set border_color = "#FFFFFF";
set entrytitle_bgcolor = "#FFFFFF";
set date_fgcolor = "#4F4D65";
set subject_fgcolor = "#4F4D65";
set outer_table_bgcolor = "#CED2FA";
set sidebar_header_bgcolor = "#FFFFFF";
set sidebar_fgcolor = "#4F4D65";
set header_footer_bgcolor = "#FFFFFF";
set header_footer_fgcolor = "#4F4D65";
set link_color = "#5DABAA";
set link_hover_color = "#779595";
set comments_link_color = "#5DABAA";
set comments_link_hover = "#779595";
set sidebar_link_color = "#5DABAA";
set sidebar_link_hover = "#779595";
set header_footer_link_color = "#5DABAA";
set header_footer_link_hover = "#779595";
#NEWLAYER: flexiblesquares/chocolatemilkshake
layerinfo "redist_uniq" = "flexiblesquares/chocolatemilkshake";
layerinfo "type" = "theme";
layerinfo "name" = "Chocolate Milkshake";
layerinfo author_name = "Yati Mansor";
set page_bgcolor = "#746E4A";
set page_fgcolor = "#000000";
set content_bgcolor = "#BEA16D";
set entry_bgcolor = "#ECD6B2";
set entry_fgcolor = "#000000";
set border_color = "#FFFFFF";
set entrytitle_bgcolor = "#867A52";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set outer_table_bgcolor = "#A18D5F";
set sidebar_header_bgcolor = "#867A52";
set sidebar_fgcolor = "#000000";
set header_footer_bgcolor = "#ECD6B2";
set header_footer_fgcolor = "#000000";
set link_color = "#867A52";
set link_hover_color = "#790000";
set comments_link_color = "#ECD6B2";
set comments_link_hover = "#790000";
set sidebar_link_color = "#790000";
set sidebar_link_hover = "#ECD6B2";
set header_footer_link_color = "#867A52";
set header_footer_link_hover = "#790000";
#NEWLAYER: flexiblesquares/eclipse
layerinfo "redist_uniq" = "flexiblesquares/eclipse";
layerinfo "type" = "theme";
layerinfo "name" = "Eclipse";
layerinfo author_name = "Yati Mansor";
set page_bgcolor = "#000000";
set page_fgcolor = "#000000";
set content_bgcolor = "#EEA802";
set entry_bgcolor = "#FBE274";
set entry_fgcolor = "#000000";
set border_color = "#000000";
set entrytitle_bgcolor = "#CA5D00";
set date_fgcolor = "#000000";
set subject_fgcolor = "#000000";
set outer_table_bgcolor = "#921800";
set sidebar_header_bgcolor = "#CA5D00";
set sidebar_fgcolor = "#000000";
set header_footer_bgcolor = "#EEA802";
set header_footer_fgcolor = "#000000";
set link_color = "#790000";
set link_hover_color = "#000000";
set comments_link_color = "#ECD6B2";
set comments_link_hover = "#790000";
set sidebar_link_color = "#790000";
set sidebar_link_hover = "#ffffff";
set header_footer_link_color = "#790000";
set header_footer_link_hover = "#ffffff";

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,269 @@
#NEWLAYER: nebula/ohblue
layerinfo "type" = "theme";
layerinfo "name" = "Oh blue";
layerinfo "redist_uniq" = "nebula/ohblue";
set col_entry_bg = "#44366d";
set col_stronger_fg = "#1b0c66";
set col_cmtbarscrn_bg = "#ffffff";
set col_cmtbarone_bg = "#9f9cfd";
set col_neutral_fg = "#2f2e55";
set col_cmtbartwo_bg = "#adb3e5";
set col_sidebar_link = "#2f2e55";
set col_weaker_bg = "#d9dcff";
set col_strong_fg = "#2f2e55";
set col_neutral_bg = "#ab5c90";
set col_cmtbarscrn_fg = "#1b0c66";
set col_stronger_bg = "#b8bef8";
set col_cmtbartwo_fg = "#000000";
set col_weak_bg = "#404380";
set col_cmtbarone_fg = "#000000";
set col_weaker_fg = "#04025a";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_strong_bg = "#7e7cb1";
set col_weak_fg = "#9ba2e8";
set col_sidebar_vlink = "#1f1d46";
#NEWLAYER: nebula/ohgreen
layerinfo "type" = "theme";
layerinfo "name" = "Oh green";
layerinfo "redist_uniq" = "nebula/ohgreen";
set col_entry_bg = "#4ca65b";
set col_stronger_fg = "#12661a";
set col_cmtbarscrn_bg = "#ffffff";
set col_cmtbarone_bg = "#bffdbe";
set col_neutral_fg = "#12661a";
set col_cmtbartwo_bg = "#72e580";
set col_sidebar_link = "#12661a";
set col_weaker_bg = "#0d6315";
set col_strong_fg = "#12661a";
set col_neutral_bg = "#000000";
set col_cmtbarscrn_fg = "#000000";
set col_stronger_bg = "#9df89f";
set col_cmtbartwo_fg = "#000000";
set col_weak_bg = "#08390b";
set col_cmtbarone_fg = "#000000";
set col_weaker_fg = "#0e2a05";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_strong_bg = "#4f9f58";
set col_weak_fg = "#08390b";
set col_sidebar_vlink = "#12661a";
#NEWLAYER: nebula/ohpurple
layerinfo "type" = "theme";
layerinfo "name" = "Oh purple";
layerinfo "redist_uniq" = "nebula/ohpurple";
set col_cmtbartwo_bg = "#D89EE5";
set col_cmtbarscrn_fg = "#000000";
set col_entry_bg = "#eebfed";
set col_weaker_bg = "#eebfed";
set col_stronger_bg = "#efd5f8";
set col_cmtbartwo_fg = "#000000";
set col_sidebar_link = "#592b7d";
set col_strong_bg = "#9c6e9f";
set col_cmtbarone_bg = "#EECCFD";
set col_stronger_fg = "#c459d1";
set col_weaker_fg = "#0e2a05";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_sidebar_vlink = "#2d1e41";
set col_strong_fg = "#614a62";
set col_weak_bg = "#614a62";
set col_neutral_bg = "#000000";
set col_cmtbarone_fg = "#000000";
set col_cmtbarscrn_bg = "#ffffff";
set col_weak_fg = "#a1319a";
set col_neutral_fg = "#614a62";
#NEWLAYER: nebula/ohblack
layerinfo "type" = "theme";
layerinfo "name" = "Oh black";
layerinfo "redist_uniq" = "nebula/ohblack";
set col_cmtbartwo_bg = "#ffffff";
set col_cmtbarscrn_fg = "#000000";
set col_entry_bg = "#ffffff";
set col_weaker_bg = "#ffffff";
set col_stronger_bg = "#ffffff";
set col_cmtbartwo_fg = "#000000";
set col_sidebar_link = "#606060";
set col_strong_bg = "#ffffff";
set col_cmtbarone_bg = "#ffffff";
set col_stronger_fg = "#000000";
set col_weaker_fg = "#000000";
set col_entry_link = "#606060";
set col_entry_vlink = "#606060";
set col_sidebar_vlink = "#606060";
set col_strong_fg = "#000000";
set col_weak_bg = "#ffffff";
set col_neutral_bg = "#ffffff";
set col_cmtbarone_fg = "#000000";
set col_cmtbarscrn_bg = "#ffffff";
set col_weak_fg = "#000000";
set col_neutral_fg = "#000000";
#NEWLAYER: nebula/ohcontrast
layerinfo "type" = "theme";
layerinfo "name" = "Oh contrast";
layerinfo "redist_uniq" = "nebula/ohcontrast";
set col_cmtbartwo_bg = "#000000";
set col_cmtbarscrn_fg = "#ffffff";
set col_entry_bg = "#000000";
set col_weaker_bg = "#000000";
set col_stronger_bg = "#000000";
set col_cmtbartwo_fg = "#ffffff";
set col_sidebar_link = "#c0c0c0";
set col_strong_bg = "#000000";
set col_cmtbarone_bg = "#000000";
set col_stronger_fg = "#ffffff";
set col_weaker_fg = "#000000";
set col_entry_link = "#c0c0c0";
set col_entry_vlink = "#c0c0c0";
set col_sidebar_vlink = "#c0c0c0";
set col_strong_fg = "#ffffff";
set col_weak_bg = "#000000";
set col_neutral_bg = "#000000";
set col_cmtbarone_fg = "#ffffff";
set col_cmtbarscrn_bg = "#000000";
set col_weak_fg = "#ffffff";
set col_neutral_fg = "#ffffff";
#NEWLAYER: nebula/ohbedtime
layerinfo "type" = "theme";
layerinfo "name" = "Oh bed time";
layerinfo "redist_uniq" = "nebula/ohbedtime";
set col_cmtbartwo_bg = "#5c60b6";
set col_cmtbarscrn_fg = "#ffffff";
set col_entry_bg = "#ffffff";
set col_weaker_bg = "#5e5b7d";
set col_stronger_bg = "#8381da";
set col_cmtbartwo_fg = "#ffffff";
set col_sidebar_link = "#000000";
set col_strong_bg = "#8381da";
set col_cmtbarone_bg = "#605f9a";
set col_stronger_fg = "#ffffff";
set col_weaker_fg = "#000000";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_sidebar_vlink = "#000000";
set col_strong_fg = "#ffffff";
set col_weak_bg = "#ffffff";
set col_neutral_bg = "#000000";
set col_cmtbarone_fg = "#ffffff";
set col_cmtbarscrn_bg = "#879afa";
set col_weak_fg = "#3c3c60";
set col_neutral_fg = "#080255";
#NEWLAYER: nebula/ohgreenywhite
layerinfo "type" = "theme";
layerinfo "name" = "Oh greeny white";
layerinfo "redist_uniq" = "nebula/ohgreenywhite";
set col_entry_bg = "#ffffff";
set col_stronger_fg = "#ffffff";
set col_cmtbarscrn_bg = "#93f390";
set col_cmtbarone_bg = "#7fe278";
set col_neutral_fg = "#550301";
set col_cmtbartwo_bg = "#4a8f41";
set col_sidebar_link = "#000000";
set col_weaker_bg = "#546847";
set col_strong_fg = "#ffffff";
set col_neutral_bg = "#000000";
set col_cmtbarscrn_fg = "#ffffff";
set col_stronger_bg = "#69ac59";
set col_cmtbartwo_fg = "#ffffff";
set col_weak_bg = "#ffffff";
set col_cmtbarone_fg = "#ffffff";
set col_weaker_fg = "#000000";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_strong_bg = "#69ac59";
set col_weak_fg = "#366030";
set col_sidebar_vlink = "#000000";
#NEWLAYER: nebula/ohchocchip
layerinfo "type" = "theme";
layerinfo "name" = "Oh choc chip";
layerinfo "redist_uniq" = "nebula/ohchocchip";
set col_cmtbartwo_bg = "#4A8F41";
set col_cmtbarscrn_fg = "#ffffff";
set col_entry_bg = "#977e3b";
set col_weaker_bg = "#546847";
set col_stronger_bg = "#69ac59";
set col_cmtbartwo_fg = "#ffffff";
set col_sidebar_link = "#000000";
set col_strong_bg = "#69ac59";
set col_cmtbarone_bg = "#7FE278";
set col_stronger_fg = "#5b4b26";
set col_weaker_fg = "#000000";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_sidebar_vlink = "#000000";
set col_strong_fg = "#5b4b26";
set col_weak_bg = "#5b4b26";
set col_neutral_bg = "#000000";
set col_cmtbarone_fg = "#ffffff";
set col_cmtbarscrn_bg = "#93F390";
set col_weak_fg = "#ffffff";
set col_neutral_fg = "#550301";
#NEWLAYER: nebula/ohcoffee
layerinfo "type" = "theme";
layerinfo "name" = "Oh coffee";
layerinfo "redist_uniq" = "nebula/ohcoffee";
set col_cmtbartwo_bg = "#AFB13E";
set col_cmtbarscrn_fg = "#ffffff";
set col_entry_bg = "#977e3b";
set col_weaker_bg = "#effe8f";
set col_stronger_bg = "#fbe46a";
set col_cmtbartwo_fg = "#ffffff";
set col_sidebar_link = "#000000";
set col_strong_bg = "#fbe46a";
set col_cmtbarone_bg = "#E2C956";
set col_stronger_fg = "#5b4b26";
set col_weaker_fg = "#000000";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_sidebar_vlink = "#000000";
set col_strong_fg = "#5b4b26";
set col_weak_bg = "#5b4b26";
set col_neutral_bg = "#000000";
set col_cmtbarone_fg = "#ffffff";
set col_cmtbarscrn_bg = "#FCDA3E";
set col_weak_fg = "#ffffff";
set col_neutral_fg = "#550301";
#NEWLAYER: nebula/ohred
layerinfo "type" = "theme";
layerinfo "name" = "Oh red";
layerinfo "redist_uniq" = "nebula/ohred";
set col_cmtbartwo_bg = "#983035";
set col_cmtbarscrn_fg = "#ffffff";
set col_entry_bg = "#d90d12";
set col_weaker_bg = "#fe0410";
set col_stronger_bg = "#dd6568";
set col_cmtbartwo_fg = "#ffffff";
set col_sidebar_link = "#000000";
set col_strong_bg = "#dd6568";
set col_cmtbarone_bg = "#d25c64";
set col_stronger_fg = "#ffffff";
set col_weaker_fg = "#000000";
set col_entry_link = "#000000";
set col_entry_vlink = "#000000";
set col_sidebar_vlink = "#000000";
set col_strong_fg = "#ffffff";
set col_weak_bg = "#bc0811";
set col_neutral_bg = "#000000";
set col_cmtbarone_fg = "#ffffff";
set col_cmtbarscrn_bg = "#D38086";
set col_weak_fg = "#ffffff";
set col_neutral_fg = "#550301";

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,105 @@
#NEWLAYER: opal/irishluck
layerinfo "type" = "theme";
layerinfo "name" = "The Luck of the Irish";
layerinfo redist_uniq = "opal/irishluck";
layerinfo "source_viewable" = 1;
set color_med = "#8BA485";
set color_fg_font = "#01331E";
set color_fg = "#A1CB78";
set color_med_font = "#E5FCDE";
set color_bg = "#0B4107";
#NEWLAYER: opal/undersea
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/undersea";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Under the Sea";
set color_med = "#98A3A4";
set color_fg = "#93CBCA";
set color_med_font = "#526160";
set color_bg = "#124D51";
#NEWLAYER: opal/forest
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/forest";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Natural Forest";
set color_link = "#4C6502";
set color_med = "#90a47a";
set color_bg_font = "#ffeabf";
set color_fg = "#cacba9";
set color_med_font = "#eaf2cc";
set color_bg = "#514541";
set color_visited = "#846D06";
#NEWLAYER: opal/greybeard
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/greybeard";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Greybeard";
set color_link = "#05445C";
set color_med = "#6a6a6a";
set color_fg_font = "#dddddd";
set color_bg = "#424242";
set color_visited = "#390856";
set color_fg = "#7c7c7c";
set color_med_font = "#E2E2E2";
#NEWLAYER: opal/desert
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/desert";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Spring Desert";
set color_link = "#4c6502";
set color_med = "#bc7f48";
set color_fg_font = "#794234";
set color_fg = "#cea36f";
set color_med_font = "#F2E6C8";
set color_bg = "#795021";
#NEWLAYER: opal/carnvial
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/carnvial";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Carnvial";
set color_med = "#9681b7";
set color_fg = "#E9973F";
set color_bg = "#2d4b9b";
#NEWLAYER: opal/snowcone
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/snowcone";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Snow Cone";
set color_med = "#7c9bc1";
set color_fg_font = "#4F6C9C";
set color_fg = "#bfe2f8";
set color_bg = "#8d54a0";
#NEWLAYER: opal/adobeclay
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/adobeclay";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Adobe Clay";
set color_link = "#FF9422";
set color_med = "#a4562b";
set color_fg_font = "#33100b";
set color_fg = "#c1643b";
set color_med_font = "#fce7d5";
set color_bg = "#7b4832";
set color_visited = "#FFC437";
#NEWLAYER: opal/gentle
layerinfo "type" = "theme";
layerinfo redist_uniq = "opal/gentle";
layerinfo "source_viewable" = 1;
layerinfo "name" = "Gentle";
set color_bg_font = "#616568";
set color_fg = "#ebdbd0";
set color_visited = "#A97F63";
set color_link = "#bd9a82";
set color_med = "#b3c5c5";
set color_bg = "#a2b2b1";
set color_med_font = "#878894";
set color_fg_font = "#757575";

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,612 @@
#NEWLAYER: smoothsailing/starry
layerinfo "redist_uniq" = "smoothsailing/starry";
layerinfo "type" = "theme";
layerinfo "name" = "Starry Night";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#000000";
set color_header_title_text = "#FFFFB9";
set color_header_subtitle_text = "#dddddd";
set color_header_menubar_background = "#000044";
set color_header_menubar_text = "#FFFFB9";
set color_header_menubar_background_hover = "#000000";
set color_header_menubar_text_hover = "#dddddd";
set color_header_borders = "#89a2be";
set color_body_links = "#ffffb9";
set color_body_links_visited = "#dddddd";
set color_body_titlebar_background = "#aaaaaa";
set color_body_titlebar_text = "#000044";
set color_body_footer_background = "#000000";
set color_body_footer_text = "#ffffb9";
set color_body_background = "#000044";
set color_body_text = "#FFFFB9";
set color_body_entrytitle_background = "#000000";
set color_body_entrytitle_background_alternate = "#aaaaaa";
set color_body_entrytitle_border = "#89A2BE";
set color_body_entrytitle_text = "#89a2be";
set color_body_entrytitle_links = "#89a2be";
set color_body_entry_background = "#000044";
set color_body_entry_userinfo_background = "#000044";
set color_body_entry_text = "#FFFFB9";
set color_month_borders = "#89A2BE";
set color_month_title_background = "#aaaaaa";
set color_month_title_text = "#000000";
set color_month_dates = "#aaaaaa";
set color_month_postcount = "#FFFFB9";
#NEWLAYER: smoothsailing/pink
layerinfo "redist_uniq" = "smoothsailing/pink";
layerinfo "type" = "theme";
layerinfo "name" = "Pretty in Pink";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#CC4E5C";
set color_header_title_text = "#FFEEFF";
set color_header_subtitle_text = "#FFB6C1";
set color_header_menubar_background = "#e6828f";
set color_header_menubar_text = "#FFEEFF";
set color_header_menubar_background_hover = "#CC4E5C";
set color_header_menubar_text_hover = "#FFEEFF";
set color_header_borders = "#FFEEFF";
set color_body_links = "#CC4E5C";
set color_body_links_visited = "#CC4E5C";
set color_body_titlebar_background = "#FFB6C1";
set color_body_titlebar_text = "#CC4E5C";
set color_body_footer_background = "#FFB6C1";
set color_body_footer_text = "#CC4E5C";
set color_body_background = "#FFEEFF";
set color_body_text = "#CC4E5C";
set color_body_entrytitle_background = "#FFB6C1";
set color_body_entrytitle_background_alternate = "#e6828f";
set color_body_entrytitle_border = "#CC4E5C";
set color_body_entrytitle_text = "#CC4E5C";
set color_body_entrytitle_links = "#CC4E5C";
set color_body_entry_text = "#CC4E5C";
set color_body_entry_background = "#FFEEFF";
set color_body_entry_userinfo_background = "#FFEEFF";
set color_month_borders = "#CC4E5C";
set color_month_title_background = "#FFB6C1";
set color_month_title_text = "#CC4E5C";
set color_month_dates = "#CC4E5C";
set color_month_postcount = "#e6828f";
#NEWLAYER: smoothsailing/easter
layerinfo "redist_uniq" = "smoothsailing/easter";
layerinfo "type" = "theme";
layerinfo "name" = "Easter Basket";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#00B789";
set color_header_title_text = "#FFFF82";
set color_header_subtitle_text = "#005100";
set color_header_menubar_background = "#FFFF82";
set color_header_menubar_text = "#005100";
set color_header_menubar_background_hover = "#C7A0CB";
set color_header_menubar_text_hover = "#005100";
set color_header_borders = "#009300";
set color_body_links = "#005100";
set color_body_links_visited = "#005100";
set color_body_titlebar_background = "#C7A0CB";
set color_body_titlebar_text = "#005100";
set color_body_footer_background = "#C7A0CB";
set color_body_footer_text = "#005100";
set color_body_background = "#DDDFF0";
set color_body_text = "#005100";
set color_body_entrytitle_background = "#FFFF82";
set color_body_entrytitle_background_alternate = "#C7A0CB";
set color_body_entrytitle_border = "#009300";
set color_body_entrytitle_text = "#005100";
set color_body_entrytitle_links = "#005100";
set color_body_entry_text = "#005100";
set color_body_entry_background = "#DDDFF0";
set color_body_entry_userinfo_background = "#DDDFF0";
set color_month_borders = "#00B789";
set color_month_title_background = "#FFFF82";
set color_month_title_text = "#005100";
set color_month_dates = "#C7A0CB";
set color_month_postcount = "#005100";
#NEWLAYER: smoothsailing/mocha
layerinfo "redist_uniq" = "smoothsailing/mocha";
layerinfo "type" = "theme";
layerinfo "name" = "Mochachino";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#666666";
set color_header_title_text = "#e6e6e6";
set color_header_subtitle_text = "#B1A68B";
set color_header_menubar_background = "#635a48";
set color_header_menubar_text = "#b1a68b";
set color_header_menubar_background_hover = "#b1a68b";
set color_header_menubar_text_hover = "#666666";
set color_header_borders = "#e6e6e6";
set color_body_links = "#464640";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#B1A68B";
set color_body_titlebar_text = "#e6e6e6";
set color_body_footer_background = "#b1a68b";
set color_body_footer_text = "#e6e6e6";
set color_body_background = "#e6e6e6";
set color_body_entrytitle_background = "#b1a68b";
set color_body_entrytitle_background_alternate = "#796D51";
set color_body_entrytitle_border = "#666666";
set color_body_entrytitle_text = "#e6e6e6";
set color_body_entrytitle_links = "#e6e6e6";
set color_body_entry_text = "#464640";
set color_body_entry_background = "#e6e6e6";
set color_body_entry_userinfo_background = "#e6e6e6";
set color_month_borders = "#666666";
set color_month_title_background = "#e6e6e6";
set color_month_title_text = "#464640";
set color_month_dates = "#464640";
set color_month_postcount = "#796D51";
#NEWLAYER: smoothsailing/yellow
layerinfo "redist_uniq" = "smoothsailing/yellow";
layerinfo "type" = "theme";
layerinfo "name" = "Insane Yellow";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#202020";
set color_header_title_text = "#FFFF04";
set color_header_subtitle_text = "#dddddd";
set color_header_menubar_background = "#000000";
set color_header_menubar_text = "#FFFFB9";
set color_header_menubar_background_hover = "#202020";
set color_header_menubar_text_hover = "#FFFFB9";
set color_header_borders = "#FFFF04";
set color_body_links = "#aaaaaa";
set color_body_links_visited = "#dddddd";
set color_body_titlebar_background = "#aaaaaa";
set color_body_titlebar_text = "#000000";
set color_body_footer_background = "#202020";
set color_body_footer_text = "#ffffb9";
set color_body_background = "#000000";
set color_body_text = "#FFFFB9";
set color_body_entrytitle_background = "#202020";
set color_body_entrytitle_background_alternate = "#aaaaaa";
set color_body_entrytitle_border = "#FFFF04";
set color_body_entrytitle_text = "#FFFF04";
set color_body_entrytitle_links = "#FFFF04";
set color_body_entry_background = "#000000";
set color_body_entry_userinfo_background = "#000000";
set color_body_entry_text = "#aaaaaa";
set color_month_borders = "#FFFFB9";
set color_month_title_background = "#aaaaaa";
set color_month_title_text = "#000000";
set color_month_dates = "#aaaaaa";
set color_month_postcount = "#FFFFB9";
#NEWLAYER: smoothsailing/forest
layerinfo "redist_uniq" = "smoothsailing/forest";
layerinfo "type" = "theme";
layerinfo "name" = "In the Forest";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#635a48";
set color_header_title_text = "#e7dfcf";
set color_header_subtitle_text = "#607c6d";
set color_header_menubar_background = "#899ba3";
set color_header_menubar_text = "#464640";
set color_header_menubar_background_hover = "#e7dfcf";
set color_header_menubar_text_hover = "#464640";
set color_header_borders = "#464640";
set color_body_links = "#e7dfcf";
set color_body_links_visited = "#e7dfcf";
set color_body_titlebar_background = "#e7dfcf";
set color_body_titlebar_text = "#464640";
set color_body_footer_background = "#e7dfcf";
set color_body_footer_text = "#464640";
set color_body_background = "#607c6d";
set color_body_text = "#e7dfcf";
set color_body_entrytitle_background = "#635a48";
set color_body_entrytitle_background_alternate = "#464640";
set color_body_entrytitle_border = "#e7dfcf";
set color_body_entrytitle_text = "#e7dfcf";
set color_body_entrytitle_links = "#e7dfcf";
set color_body_entry_userinfo_background = "#626b5b";
set color_body_entry_background = "#626b5b";
set color_body_entry_text = "#e7dfcf";
set color_month_borders = "#464640";
set color_month_title_background = "#e7dfcf";
set color_month_title_text = "#464640";
set color_month_dates = "#899ba3";
set color_month_postcount = "#e7dfcf";
#NEWLAYER: smoothsailing/red
layerinfo "redist_uniq" = "smoothsailing/red";
layerinfo "type" = "theme";
layerinfo "name" = "Seeing Red";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#bb0000";
set color_header_title_text = "#ffffff";
set color_header_subtitle_text = "#ffffff";
set color_header_menubar_background = "#880000";
set color_header_menubar_text = "#ffffff";
set color_header_menubar_background_hover = "#ffffff";
set color_header_menubar_text_hover = "#bb0000";
set color_header_borders = "#ffffff";
set color_body_links = "#880000";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#bb0000";
set color_body_titlebar_text = "#ffffff";
set color_body_footer_background = "#bb0000";
set color_body_footer_text = "#ffffff";
set color_body_background = "#f6f6f6";
set color_body_text = "#880000";
set color_body_entrytitle_background = "#bb0000";
set color_body_entrytitle_background_alternate = "#880000";
set color_body_entrytitle_border = "#000000";
set color_body_entrytitle_text = "#ffffff";
set color_body_entrytitle_links = "#ffffff";
set color_body_entry_background = "#f6f6f6";
set color_body_entry_text = "#880000";
set color_month_borders = "#880000";
set color_month_title_background = "#bb0000";
set color_month_title_text = "#ffffff";
set color_month_dates = "#880000";
set color_month_postcount = "#bb0000";
#NEWLAYER: smoothsailing/army
layerinfo "redist_uniq" = "smoothsailing/army";
layerinfo "type" = "theme";
layerinfo "name" = "Army Attire";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#444444";
set color_header_title_text = "#cccc99";
set color_header_subtitle_text = "#e6e6e6";
set color_header_menubar_background = "#665d34";
set color_header_menubar_text = "#cccc99";
set color_header_menubar_background_hover = "#cccc99";
set color_header_menubar_text_hover = "#444444";
set color_header_borders = "#e6e6e6";
set color_body_links = "#444444";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#cccc99";
set color_body_titlebar_text = "#665d34";
set color_body_footer_background = "#cccc99";
set color_body_footer_text = "#665d34";
set color_body_background = "#e6e6e6";
set color_body_entrytitle_background = "#cccc99";
set color_body_entrytitle_background_alternate = "#665d34";
set color_body_entrytitle_border = "#444444";
set color_body_entrytitle_text = "#665d34";
set color_body_entrytitle_links = "#665d34";
set color_body_entry_text = "#444444";
set color_body_entry_background = "#e6e6e6";
set color_body_entry_userinfo_background = "#e6e6e6";
set color_month_borders = "#444444";
set color_month_title_background = "#e6e6e6";
set color_month_title_text = "#444444";
set color_month_dates = "#444444";
set color_month_postcount = "#665d34";
#NEWLAYER: smoothsailing/midnight
layerinfo "redist_uniq" = "smoothsailing/midnight";
layerinfo "type" = "theme";
layerinfo "name" = "Midnight";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#000000";
set color_header_title_text = "#BEAA61";
set color_header_subtitle_text = "#76456B";
set color_header_menubar_background = "#76456B";
set color_header_menubar_text = "#dddddd";
set color_header_menubar_background_hover = "#000000";
set color_header_menubar_text_hover = "#dddddd";
set color_header_borders = "#dddddd";
set color_body_links = "#aaaaaa";
set color_body_links_visited = "#dddddd";
set color_body_titlebar_background = "#BEAA61";
set color_body_titlebar_text = "#000000";
set color_body_footer_background = "#76456B";
set color_body_footer_text = "#dddddd";
set color_body_background = "#000000";
set color_body_text = "#aaaaaa";
set color_body_entrytitle_background = "#76456B";
set color_body_entrytitle_background_alternate = "#888888";
set color_body_entrytitle_border = "#cccccc";
set color_body_entrytitle_text = "#dddddd";
set color_body_entrytitle_links = "#dddddd";
set color_body_entry_userinfo_background = "#000000";
set color_body_entry_background = "#000000";
set color_body_entry_text = "#aaaaaa";
set color_month_borders = "#dddddd";
set color_month_title_background = "#aaaaaa";
set color_month_title_text = "#000000";
set color_month_dates = "#aaaaaa";
set color_month_postcount = "#BEAA61";
#NEWLAYER: smoothsailing/violet
layerinfo "redist_uniq" = "smoothsailing/violet";
layerinfo "type" = "theme";
layerinfo "name" = "Very Violet";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#7c52ab";
set color_header_subtitle_text = "#dbcfe9";
set color_header_menubar_background = "#bfaad7";
set color_header_menubar_background_hover = "#7c52ab";
set color_body_links_visited = "#563976";
set color_body_titlebar_background = "#dbcfe9";
set color_body_footer_background = "#bfaad7";
set color_body_entrytitle_background = "#dbcfe9";
#NEWLAYER: smoothsailing/purple
layerinfo "redist_uniq" = "smoothsailing/purple";
layerinfo "type" = "theme";
layerinfo "name" = "Bruised Purple";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_body_entrytitle_border = "#d4ddee";
set color_body_footer_text = "#454b74";
set color_month_title_text = "#8792bd";
set color_header_borders = "#8792bd";
set color_body_links_visited = "#dddddd";
set color_header_menubar_text_hover = "#ffffff";
set color_body_titlebar_text = "#454b74";
set color_body_entrytitle_background_alternate = "#d4ddee";
set color_body_entrytitle_links = "#6b7da6";
set color_body_entry_background = "#454b74";
set color_header_title_background = "#454b74";
set color_body_entry_userinfo_background = "#454b74";
set color_month_dates = "#8792bd";
set color_body_links = "#ececec";
set color_body_background = "#6b7da6";
set color_month_postcount = "#8792bd";
set color_body_entry_text = "#8792bd";
set color_body_text = "#ffffff";
set color_body_entrytitle_background = "#d4ddee";
set color_header_menubar_text = "#ffffff";
set color_body_entrytitle_text = "#454b74";
#NEWLAYER: smoothsailing/parrot
layerinfo "redist_uniq" = "smoothsailing/parrot";
layerinfo "type" = "theme";
layerinfo "name" = "Parrot Feathers";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#009900";
set color_header_title_text = "#f8f8f8";
set color_header_subtitle_text = "#66ff66";
set color_header_menubar_background = "#33cc33";
set color_header_menubar_text = "#ffffff";
set color_header_menubar_background_hover = "#66ff66";
set color_header_menubar_text_hover = "#ffffff";
set color_header_borders = "#ffffff";
set color_body_links = "#006600";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#66cc66";
set color_body_titlebar_text = "#ffffff";
set color_body_footer_background = "#66cc66";
set color_body_footer_text = "#ffffff";
set color_body_background = "#f8f8f8";
set color_body_text = "#000000";
set color_body_entrytitle_background = "#66cc66";
set color_body_entrytitle_background_alternate = "#66ff66";
set color_body_entrytitle_border = "#006600";
set color_body_entrytitle_text = "#000000";
set color_body_entrytitle_links = "#000000";
set color_body_entry_background = "#f8f8f8";
set color_body_entry_userinfo_background = "#f8f8f8";
set color_body_entry_text = "#000000";
set color_month_borders = "#006600";
set color_month_title_background = "#f8f8f8";
set color_month_title_text = "#000000";
set color_month_dates = "#000000";
set color_month_postcount = "#006600";
#NEWLAYER: smoothsailing/toxic
layerinfo "redist_uniq" = "smoothsailing/toxic";
layerinfo "type" = "theme";
layerinfo "name" = "Toxic Teal";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#7cb3b0";
set color_header_title_text = "#496a68";
set color_header_subtitle_text = "#c9eae8";
set color_header_menubar_background = "#aededb";
set color_header_menubar_text = "#496a68";
set color_header_menubar_background_hover = "#c9eae8";
set color_header_menubar_text_hover = "#496a68";
set color_header_borders = "#496a68";
set color_body_links = "#496a68";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#c9eae8";
set color_body_titlebar_text = "#496a68";
set color_body_footer_background = "#c9eae8";
set color_body_footer_text = "#496a68";
set color_body_background = "#496a68";
set color_body_text = "#aededb";
set color_body_entrytitle_background = "#7cb3b0";
set color_body_entrytitle_background_alternate = "#6e9e9b";
set color_body_entrytitle_border = "#c9eae8";
set color_body_entrytitle_text = "#000000";
set color_body_entrytitle_links = "#000000";
set color_body_entry_background = "#aededb";
set color_body_entry_userinfo_background = "#aededb";
set color_body_entry_text = "#000000";
set color_month_borders = "#496a68";
set color_month_title_background = "#c9eae8";
set color_month_title_text = "#000000";
set color_month_dates = "#000000";
set color_month_postcount = "#496a68";
#NEWLAYER: smoothsailing/banana
layerinfo "redist_uniq" = "smoothsailing/banana";
layerinfo "type" = "theme";
layerinfo "name" = "Banana Tree";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#3D5D2E";
set color_header_title_text = "#F6F6BB";
set color_header_subtitle_text = "#E1D751";
set color_header_menubar_background = "#E1D751";
set color_header_menubar_text = "#3D5D2E";
set color_header_menubar_background_hover = "#9A722E";
set color_header_menubar_text_hover = "#F6F6BB";
set color_header_borders = "#F6F6BB";
set color_body_links = "#3D5D2E";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#9A722E";
set color_body_titlebar_text = "#F6F6BB";
set color_body_footer_background = "#3D5D2E";
set color_body_footer_text = "#F6F6BB";
set color_body_background = "#F6F6BB";
set color_body_text = "#3D5D2E";
set color_body_entrytitle_background = "#3D5D2E";
set color_body_entrytitle_background_alternate = "#9A722E";
set color_body_entrytitle_border = "#9A722E";
set color_body_entrytitle_text = "#E1D751";
set color_body_entrytitle_links = "#E1D751";
set color_body_entry_background = "#F6F6BB";
set color_body_entry_userinfo_background = "#F6F6BB";
set color_body_entry_text = "#000000";
set color_month_borders = "#9A722E";
set color_month_title_background = "#F6F6BB";
set color_month_title_text = "#3D5D2E";
set color_month_dates = "#000000";
set color_month_postcount = "#3D5D2E";
#NEWLAYER: smoothsailing/fire
layerinfo "redist_uniq" = "smoothsailing/fire";
layerinfo "type" = "theme";
layerinfo "name" = "Under Fire";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#95261F";
set color_header_title_text = "#F5EBC2";
set color_header_subtitle_text = "#CA6036";
set color_header_menubar_background = "#CA6036";
set color_header_menubar_text = "#F5EBC2";
set color_header_menubar_background_hover = "#DEB450";
set color_header_menubar_text_hover = "#95261F";
set color_header_borders = "#F5EBC2";
set color_body_links = "#95261F";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#DEB450";
set color_body_titlebar_text = "#95261F";
set color_body_footer_background = "#95261F";
set color_body_footer_text = "#F5EBC2";
set color_body_background = "#F5EBC2";
set color_body_text = "#000000";
set color_body_entrytitle_background = "#95261F";
set color_body_entrytitle_background_alternate = "#CA6036";
set color_body_entrytitle_border = "#DEB450";
set color_body_entrytitle_text = "#F5EBC2";
set color_body_entrytitle_links = "#F5EBC2";
set color_body_entry_background = "#F5EBC2";
set color_body_entry_userinfo_background = "#F5EBC2";
set color_body_entry_text = "#000000";
set color_month_borders = "#95261F";
set color_month_title_background = "#F5EBC2";
set color_month_title_text = "#95261F";
set color_month_dates = "#95261F";
set color_month_postcount = "#CA6036";
#NEWLAYER: smoothsailing/chocolate
layerinfo "redist_uniq" = "smoothsailing/chocolate";
layerinfo "type" = "theme";
layerinfo "name" = "Chocolate Caramel Creme";
layerinfo author_name = "Michael Raffoul";
layerinfo author_email = "masterslacker@livejournal.com";
set color_header_title_background = "#6D4506";
set color_header_title_text = "#E1D6C0";
set color_header_subtitle_text = "#CF9B48";
set color_header_menubar_background = "#A2701F";
set color_header_menubar_text = "#E1D6C0";
set color_header_menubar_background_hover = "#CF9B48";
set color_header_menubar_text_hover = "#E1D6C0";
set color_header_borders = "#E1D6C0";
set color_body_links = "#6D4506";
set color_body_links_visited = "#000000";
set color_body_titlebar_background = "#CF9B48";
set color_body_titlebar_text = "#E1D6C0";
set color_body_footer_background = "#6D4506";
set color_body_footer_text = "#E1D6C0";
set color_body_background = "#E1D6C0";
set color_body_text = "#000000";
set color_body_entrytitle_background = "#A2701F";
set color_body_entrytitle_background_alternate = "#CF9B48";
set color_body_entrytitle_border = "#6D4506";
set color_body_entrytitle_text = "#E1D6C0";
set color_body_entrytitle_links = "#E1D6C0";
set color_body_entry_background = "#E1D6C0";
set color_body_entry_userinfo_background = "#E1D6C0";
set color_body_entry_text = "#000000";
set color_month_borders = "#A2701F";
set color_month_title_background = "#E1D6C0";
set color_month_title_text = "#6D4506";
set color_month_dates = "#6D4506";
set color_month_postcount = "#A2701F";

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,707 @@
#NEWLAYER: tranquilityii/plain
layerinfo "redist_uniq" = "tranquilityii/plain";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Plain Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#fff";
set c_menu_border = "#fff";
set c_header_background = "#fff";
set c_header_border = "#fff";
set c_page_title = "#000";
set c_page_background = "#fff";
set c_page_text = "#333";
set c_page_link = "#036";
set c_page_link_visited = "#036";
set c_page_link_hover = "#069";
set c_page_link_active = "#069";
set c_menu_background = "#fff";
set c_menu_link = "#000";
set c_menu_link_visited = "#000";
set c_menu_link_hover = "#f00";
set c_menu_link_active = "#f00";
set c_menu_text_color = "#000";
set c_menu_header_color = "#000";
set c_menu_current = "#000";
set c_entry_background = "#fff";
set c_entry_link = "#000";
set c_entry_link_visited = "#000";
set c_entry_link_hover = "#000";
set c_entry_link_active = "#000";
set c_entry_text_color = "#000";
set c_entry_title_color = "#000";
set c_entry_border = "#999";
set c_meta_background = "#fff";
set c_meta_link = "#000";
set c_meta_link_visited = "#000";
set c_meta_link_hover = "#000";
set c_meta_link_active = "#000";
set c_meta_text_color = "#000";
set c_footer_background = "#fff";
set c_footer_link = "#000";
set c_footer_link_visited = "#000";
set c_footer_link_hover = "#000";
set c_footer_link_active = "#000";
set c_footer_text_color = "#000";
set c_comment_one_link = "#000";
set c_comment_one_link_visited = "#000";
set c_comment_one_link_hover = "#000";
set c_comment_one_link_active = "#000";
set c_comment_one_text_color = "#000";
set c_comment_one_title_color = "#000";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#000";
set c_comment_two_link_visited = "#000";
set c_comment_two_link_hover = "#000";
set c_comment_two_link_active = "#000";
set c_comment_two_text_color = "#000";
set c_comment_two_title_color = "#000";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#000";
set c_comment_screened_link_visited = "#000";
set c_comment_screened_link_hover = "#000";
set c_comment_screened_link_active = "#000";
set c_comment_screened_text_color = "#000";
set c_comment_screened_title_color = "#000";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
#NEWLAYER: tranquilityii/earth
layerinfo "redist_uniq" = "tranquilityii/earth";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Earth Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#424B15";
set c_header_background = "#667320";
set c_header_border = "#667320";
set c_page_title = "#fff";
set c_page_background = "#667320";
set c_page_text = "#333";
set c_page_link = "#000";
set c_page_link_visited = "#666";
set c_page_link_hover = "#999";
set c_page_link_active = "#999";
set c_menu_border = "#424B15";
set c_menu_background = "#88992B";
set c_menu_link = "#fff";
set c_menu_link_visited = "#424B15";
set c_menu_link_hover = "#424B15";
set c_menu_link_active = "#f00";
set c_menu_text_color = "#fff";
set c_menu_header_color = "#fff";
set c_menu_current = "#fff";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#99602B";
set c_entry_link_visited = "#BF7836";
set c_entry_link_hover = "#734820";
set c_entry_link_active = "#734820";
set c_entry_text_color = "#333";
set c_entry_title_color = "#000";
set c_entry_border = "#BFBFBF";
set c_meta_background = "#fff";
set c_meta_link = "#99602B";
set c_meta_link_visited = "#BF7836";
set c_meta_link_hover = "#734820";
set c_meta_link_active = "#734820";
set c_meta_text_color = "#666";
set c_footer_background = "#667320";
set c_footer_link = "#000";
set c_footer_link_visited = "#000";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#000";
set c_footer_text_color = "#000";
set c_comment_one_link = "#99602B";
set c_comment_one_link_visited = "#BF7836";
set c_comment_one_link_hover = "#734820";
set c_comment_one_link_active = "#734820";
set c_comment_one_text_color = "#333";
set c_comment_one_title_color = "#000";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#99602B";
set c_comment_two_link_visited = "#BF7836";
set c_comment_two_link_hover = "#734820";
set c_comment_two_link_active = "#734820";
set c_comment_two_text_color = "#333";
set c_comment_two_title_color = "#000";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#99602B";
set c_comment_screened_link_visited = "#BF7836";
set c_comment_screened_link_hover = "#734820";
set c_comment_screened_link_active = "#734820";
set c_comment_screened_text_color = "#333";
set c_comment_screened_title_color = "#000";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
#NEWLAYER: tranquilityii/money
layerinfo "redist_uniq" = "tranquilityii/money";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Money Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#68754D";
set c_header_background = "#ACC280";
set c_header_border = "#ACC280";
set c_page_title = "#3D3D3D";
set c_page_background = "#ACC280";
set c_page_text = "#3D3D3D";
set c_page_link = "#000";
set c_page_link_visited = "#666";
set c_page_link_hover = "#999";
set c_page_link_active = "#999";
set c_menu_border = "#68754D";
set c_menu_background = "#8A9C67";
set c_menu_link = "#000";
set c_menu_link_visited = "#000";
set c_menu_link_hover = "#EBF7D4";
set c_menu_link_active = "#ebf7d4";
set c_menu_text_color = "#000";
set c_menu_header_color = "#000";
set c_menu_current = "#EBF7D4";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#679C67";
set c_entry_link_visited = "#80C280";
set c_entry_link_hover = "#4D754D";
set c_entry_link_active = "#4D754D";
set c_entry_text_color = "#000";
set c_entry_title_color = "#000";
set c_entry_border = "#3D3D3D";
set c_meta_background = "#fff";
set c_meta_link = "#679C67";
set c_meta_link_visited = "#80C280";
set c_meta_link_hover = "#4D754D";
set c_meta_link_active = "#4D754D";
set c_meta_text_color = "#3D3D3D";
set c_footer_background = "#ACC280";
set c_footer_link = "#000";
set c_footer_link_visited = "#000";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#000";
set c_footer_text_color = "#000";
set c_comment_one_link = "#679C67";
set c_comment_one_link_visited = "#80C280";
set c_comment_one_link_hover = "#4D754D";
set c_comment_one_link_active = "#4D754D";
set c_comment_one_text_color = "#000";
set c_comment_one_title_color = "#000";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#679C67";
set c_comment_two_link_visited = "#80C280";
set c_comment_two_link_hover = "#4D754D";
set c_comment_two_link_active = "#4D754D";
set c_comment_two_text_color = "#000";
set c_comment_two_title_color = "#000";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#679C67";
set c_comment_screened_link_visited = "#80C280";
set c_comment_screened_link_hover = "#4D754D";
set c_comment_screened_link_active = "#4D754D";
set c_comment_screened_text_color = "#000";
set c_comment_screened_title_color = "#000";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
set f_page = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_link = "Verdana, Helvetica, sans-serif";
set f_menu = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_header = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_current = "Verdana, Helvetica, sans-serif";
set f_entry = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_meta = "Verdana, Helvetica, sans-serif";
set f_meta_link = "Verdana, Helvetica, sans-serif";
set f_footer = "Tahoma, Verdana, Helvetica, sans-serif";
set f_footer_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_link = "Tahoma, Verdana, Helvetica, sans-serif";
#NEWLAYER: tranquilityii/winterice
layerinfo "redist_uniq" = "tranquilityii/winterice";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - WinterIce Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#000";
set c_header_background = "#694D73";
set c_header_border = "#694D73";
set c_page_title = "#000";
set c_page_background = "#694D73";
set c_page_text = "#3D3D3D";
set c_page_link = "#000";
set c_page_link_visited = "#666";
set c_page_link_hover = "#999";
set c_page_link_active = "#999";
set c_menu_border = "#694D73";
set c_menu_background = "#694D73";
set c_menu_link = "#fff";
set c_menu_link_visited = "#fff";
set c_menu_link_hover = "#C5A2D0";
set c_menu_link_active = "#C5A2D0";
set c_menu_text_color = "#fff";
set c_menu_header_color = "#fff";
set c_menu_current = "#C5A2D0";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#5E71AE";
set c_entry_link_visited = "#5E71AE";
set c_entry_link_hover = "#808FBF";
set c_entry_link_active = "#808FBF";
set c_entry_text_color = "#000";
set c_entry_title_color = "#000";
set c_entry_border = "#3D3D3D";
set c_meta_background = "#fff";
set c_meta_link = "#B080BF";
set c_meta_link_visited = "#C29FCB";
set c_meta_link_hover = "#854D93";
set c_meta_link_active = "#854D93";
set c_meta_text_color = "#3D3D3D";
set c_footer_background = "#694D73";
set c_footer_link = "#fff";
set c_footer_link_visited = "#fff";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#fff";
set c_footer_text_color = "#fff";
set c_comment_one_link = "#5E71AE";
set c_comment_one_link_visited = "#5E71AE";
set c_comment_one_link_hover = "#808FBF";
set c_comment_one_link_active = "#808FBF";
set c_comment_one_text_color = "#000";
set c_comment_one_title_color = "#000";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#5E71AE";
set c_comment_two_link_visited = "#5E71AE";
set c_comment_two_link_hover = "#808FBF";
set c_comment_two_link_active = "#808FBF";
set c_comment_two_text_color = "#000";
set c_comment_two_title_color = "#000";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#5E71AE";
set c_comment_screened_link_visited = "#5E71AE";
set c_comment_screened_link_hover = "#808FBF";
set c_comment_screened_link_active = "#808FBF";
set c_comment_screened_text_color = "#000";
set c_comment_screened_title_color = "#000";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
set f_page = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_link = "Verdana, Helvetica, sans-serif";
set f_menu = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_header = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_current = "Verdana, Helvetica, sans-serif";
set f_entry = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_meta = "Verdana, Helvetica, sans-serif";
set f_meta_link = "Verdana, Helvetica, sans-serif";
set f_footer = "Tahoma, Verdana, Helvetica, sans-serif";
set f_footer_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_link = "Tahoma, Verdana, Helvetica, sans-serif";
#NEWLAYER: tranquilityii/fire
layerinfo "redist_uniq" = "tranquilityii/fire";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Fire Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#A65000";
set c_header_background = "#A65000";
set c_header_border = "#A65000";
set c_page_title = "#000";
set c_page_background = "#A65000";
set c_page_text = "#3D3D3D";
set c_page_link = "#000";
set c_page_link_visited = "#666";
set c_page_link_hover = "#999";
set c_page_link_active = "#999";
set c_menu_border = "#A68700";
set c_menu_background = "#CCA700";
set c_menu_link = "#fff";
set c_menu_link_visited = "#FFD100";
set c_menu_link_hover = "#CC4100";
set c_menu_link_active = "#CC4100";
set c_menu_text_color = "#fff";
set c_menu_header_color = "#fff";
set c_menu_current = "#CC4100";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#CC6300";
set c_entry_link_visited = "#F27500";
set c_entry_link_hover = "#A65000";
set c_entry_link_active = "#A65000";
set c_entry_text_color = "#333";
set c_entry_title_color = "#333";
set c_entry_border = "#666";
set c_meta_background = "#fff";
set c_meta_link = "#CCA700";
set c_meta_link_visited = "#F2C600";
set c_meta_link_hover = "#A68700";
set c_meta_link_active = "#A68700";
set c_meta_text_color = "#3D3D3D";
set c_footer_background = "#A65000";
set c_footer_link = "#fff";
set c_footer_link_visited = "#fff";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#fff";
set c_footer_text_color = "#fff";
set c_comment_one_link = "#CC6300";
set c_comment_one_link_visited = "#F27500";
set c_comment_one_link_hover = "#A65000";
set c_comment_one_link_active = "#A65000";
set c_comment_one_text_color = "#333";
set c_comment_one_title_color = "#000";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#CC6300";
set c_comment_two_link_visited = "#F27500";
set c_comment_two_link_hover = "#A65000";
set c_comment_two_link_active = "#A65000";
set c_comment_two_text_color = "#333";
set c_comment_two_title_color = "#000";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#CC6300";
set c_comment_screened_link_visited = "#F27500";
set c_comment_screened_link_hover = "#A65000";
set c_comment_screened_link_active = "#A65000";
set c_comment_screened_text_color = "#333";
set c_comment_screened_title_color = "#000";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
#NEWLAYER: tranquilityii/mobile
layerinfo "redist_uniq" = "tranquilityii/mobile";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Mobile Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#fff";
set c_header_background = "#fff";
set c_header_border = "#fff";
set c_page_title = "#000";
set c_page_background = "#fff";
set c_page_text = "#000";
set c_page_link = "#00f";
set c_page_link_visited = "#999";
set c_page_link_hover = "#f00";
set c_page_link_active = "#f00";
set c_menu_border = "#fff";
set c_menu_background = "#fff";
set c_menu_link = "#00f";
set c_menu_link_visited = "#999";
set c_menu_link_hover = "#f00";
set c_menu_link_active = "#f00";
set c_menu_text_color = "#000";
set c_menu_header_color = "#00";
set c_menu_current = "#000";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#00f";
set c_entry_link_visited = "#999";
set c_entry_link_hover = "#f00";
set c_entry_link_active = "#f00";
set c_entry_text_color = "#000";
set c_entry_title_color = "#000";
set c_entry_border = "#fff";
set c_meta_background = "#fff";
set c_meta_link = "#00f";
set c_meta_link_visited = "#999";
set c_meta_link_hover = "#f00";
set c_meta_link_active = "#f00";
set c_meta_text_color = "#000";
set c_footer_background = "#fff";
set c_footer_link = "#00f";
set c_footer_link_visited = "#999";
set c_footer_link_hover = "#f00";
set c_footer_link_active = "#f00";
set c_footer_text_color = "#000";
set c_comment_one_link = "#00f";
set c_comment_one_link_visited = "#999";
set c_comment_one_link_hover = "#f00";
set c_comment_one_link_active = "#f00";
set c_comment_one_text_color = "#000";
set c_comment_one_title_color = "#000";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#fff";
set c_comment_two_link = "#00f";
set c_comment_two_link_visited = "#999";
set c_comment_two_link_hover = "#f00";
set c_comment_two_link_active = "#f00";
set c_comment_two_text_color = "#000";
set c_comment_two_title_color = "#000";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#fff";
set c_comment_screened_link = "#00f";
set c_comment_screened_link_visited = "#999";
set c_comment_screened_link_hover = "#f00";
set c_comment_screened_link_active = "#f00";
set c_comment_screened_text_color = "#000";
set c_comment_screened_title_color = "#000";
set c_comment_screened_background = "#999";
set c_comment_screened_border = "#fff";
set menu_disable_summary = true;
set css_style_overrides = "hr { display: block; } #menu { float: none; width: auto; } #content { margin-left: 0; } #container { margin: 0; padding: 0; text-align: left; width: 100%; }";
#NEWLAYER: tranquilityii/pinky
layerinfo "redist_uniq" = "tranquilityii/pinky";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Pinky Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#242E35";
set c_header_background = "#242E35";
set c_header_border = "#242E35";
set c_page_title = "#fff";
set c_page_background = "#242E35";
set c_page_text = "#fff";
set c_page_link = "#f0c";
set c_page_link_visited = "#FF82E5";
set c_page_link_hover = "#B30090";
set c_page_link_active = "#B30090";
set c_menu_border = "#B4A361";
set c_menu_background = "#ECE9D8";
set c_menu_link = "#000";
set c_menu_link_visited = "#999";
set c_menu_link_hover = "#000";
set c_menu_link_active = "#000";
set c_menu_text_color = "#333";
set c_menu_header_color = "#333";
set c_menu_current = "#000";
set f_menu_header_size = "140%";
set c_entry_background = "#F8F7F1";
set c_entry_link = "#f0c";
set c_entry_link_visited = "#FF82E5";
set c_entry_link_hover = "#B30090";
set c_entry_link_active = "#B30090";
set c_entry_text_color = "#333";
set c_entry_title_color = "#666";
set c_entry_border = "000";
set c_meta_background = "#F8F7F1";
set c_meta_link = "#f0c";
set c_meta_link_visited = "#FF82E5";
set c_meta_link_hover = "#B30090";
set c_meta_link_active = "#B30090";
set c_meta_text_color = "#666";
set c_footer_background = "#242E35";
set c_footer_link = "#fff";
set c_footer_link_visited = "#fff";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#fff";
set c_footer_text_color = "#fff";
set c_comment_one_link = "#f0c";
set c_comment_one_link_visited = "#FF82E5";
set c_comment_one_link_hover = "#B30090";
set c_comment_one_link_active = "#B30090";
set c_comment_one_text_color = "#333";
set c_comment_one_title_color = "#666";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#f0c";
set c_comment_two_link_visited = "#FF82E5";
set c_comment_two_link_hover = "#B30090";
set c_comment_two_link_active = "#B30090";
set c_comment_two_text_color = "#333";
set c_comment_two_title_color = "#666";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#f0c";
set c_comment_screened_link_visited = "#FF82E5";
set c_comment_screened_link_hover = "#B30090";
set c_comment_screened_link_active = "#B30090";
set c_comment_screened_text_color = "#333";
set c_comment_screened_title_color = "#666";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
set f_page = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_link = "Verdana, Helvetica, sans-serif";
set f_menu = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_header = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_current = "Verdana, Helvetica, sans-serif";
set f_entry = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_meta = "Verdana, Helvetica, sans-serif";
set f_meta_link = "Verdana, Helvetica, sans-serif";
set f_footer = "Tahoma, Verdana, Helvetica, sans-serif";
set f_footer_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_link = "Tahoma, Verdana, Helvetica, sans-serif";
#NEWLAYER: tranquilityii/fresh
layerinfo "redist_uniq" = "tranquilityii/fresh";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Fresh Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#7A97B2";
set c_header_background = "#7A97B2";
set c_header_border = "#7A97B2";
set c_page_title = "#273849";
set c_page_background = "#242E35";
set c_page_text = "#fff";
set c_page_link = "#036";
set c_page_link_visited = "#036";
set c_page_link_hover = "#069";
set c_page_link_active = "#069";
set c_menu_border = "#CFE0E6";
set c_menu_background = "#CFE0E6";
set c_menu_link = "#000";
set c_menu_link_visited = "#999";
set c_menu_link_hover = "#000";
set c_menu_link_active = "#000";
set c_menu_text_color = "#333";
set c_menu_header_color = "#333";
set c_menu_current = "#000";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#036";
set c_entry_link_visited = "#036";
set c_entry_link_hover = "#069";
set c_entry_link_active = "#069";
set c_entry_text_color = "#333";
set c_entry_title_color = "#999";
set c_entry_border = "000";
set c_meta_background = "#fff";
set c_meta_link = "#036";
set c_meta_link_visited = "#036";
set c_meta_link_hover = "#069";
set c_meta_link_active = "#069";
set c_meta_text_color = "#999";
set c_footer_background = "#7A97B2";
set c_footer_link = "#fff";
set c_footer_link_visited = "#fff";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#fff";
set c_footer_text_color = "#fff";
set c_comment_one_link = "#036";
set c_comment_one_link_visited = "#036";
set c_comment_one_link_hover = "#069";
set c_comment_one_link_active = "#069";
set c_comment_one_text_color = "#333";
set c_comment_one_title_color = "#999";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#036";
set c_comment_two_link_visited = "#036";
set c_comment_two_link_hover = "#069";
set c_comment_two_link_active = "#069";
set c_comment_two_text_color = "#333";
set c_comment_two_title_color = "#999";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#036";
set c_comment_screened_link_visited = "#036";
set c_comment_screened_link_hover = "#069";
set c_comment_screened_link_active = "#069";
set c_comment_screened_text_color = "#333";
set c_comment_screened_title_color = "#999";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";
set f_page = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_page_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_link = "Verdana, Helvetica, sans-serif";
set f_menu = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_header = "Tahoma, Verdana, Helvetica, sans-serif";
set f_menu_current = "Verdana, Helvetica, sans-serif";
set f_entry = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_entry_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_meta = "Verdana, Helvetica, sans-serif";
set f_meta_link = "Verdana, Helvetica, sans-serif";
set f_footer = "Tahoma, Verdana, Helvetica, sans-serif";
set f_footer_link = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_title = "Tahoma, Verdana, Helvetica, sans-serif";
set f_comment_link = "Tahoma, Verdana, Helvetica, sans-serif";
#NEWLAYER: tranquilityii/auto
layerinfo "redist_uniq" = "tranquilityii/auto";
layerinfo "type" = "theme";
layerinfo "name" = "Tranquility II - Auto Theme";
layerinfo "author_name" = "Matthew Vince";
set c_main_border = "#515151";
set c_header_background = "#515151";
set c_header_border = "#515151";
set c_page_title = "#fff";
set c_page_background = "#515151";
set c_page_text = "#333";
set c_page_link = "#00B4FF";
set c_page_link_visited = "#00B4FF";
set c_page_link_hover = "#006894";
set c_page_link_active = "#006894";
set c_menu_border = "#ccc";
set c_menu_background = "#eee";
set c_menu_link = "#000";
set c_menu_link_visited = "#999";
set c_menu_link_hover = "#000";
set c_menu_link_active = "#000";
set c_menu_text_color = "#333";
set c_menu_header_color = "#333";
set c_menu_current = "#000";
set f_menu_header_size = "140%";
set c_entry_background = "#fff";
set c_entry_link = "#00B4FF";
set c_entry_link_visited = "#00B4FF";
set c_entry_link_hover = "#006894";
set c_entry_link_active = "#006894";
set c_entry_text_color = "#333";
set c_entry_title_color = "#999";
set c_entry_border = "000";
set c_meta_background = "#fff";
set c_meta_link = "#036";
set c_meta_link_visited = "#036";
set c_meta_link_hover = "#069";
set c_meta_link_active = "#069";
set c_meta_text_color = "#999";
set c_footer_background = "#515151";
set c_footer_link = "#fff";
set c_footer_link_visited = "#fff";
set c_footer_link_hover = "#fff";
set c_footer_link_active = "#fff";
set c_footer_text_color = "#fff";
set c_comment_one_link = "#00B4FF";
set c_comment_one_link_visited = "#00B4FF";
set c_comment_one_link_hover = "#006894";
set c_comment_one_link_active = "#006894";
set c_comment_one_text_color = "#333";
set c_comment_one_title_color = "#999";
set c_comment_one_background = "#fff";
set c_comment_one_border = "#999";
set c_comment_two_link = "#00B4FF";
set c_comment_two_link_visited = "#00B4FF";
set c_comment_two_link_hover = "#006894";
set c_comment_two_link_active = "#006894";
set c_comment_two_text_color = "#333";
set c_comment_two_title_color = "#999";
set c_comment_two_background = "#f2f2f2";
set c_comment_two_border = "#999";
set c_comment_screened_link = "#00B4FF";
set c_comment_screened_link_visited = "#00B4FF";
set c_comment_screened_link_hover = "#006894";
set c_comment_screened_link_active = "#006894";
set c_comment_screened_text_color = "#333";
set c_comment_screened_title_color = "#999";
set c_comment_screened_background = "#ccc";
set c_comment_screened_border = "#999";

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,118 @@
#NEWLAYER: unearthed/rampant
layerinfo "type" = "theme";
layerinfo "name" = "Rampant Tenderfoot";
layerinfo redist_uniq = "unearthed/rampant";
set stronger_bgcolor = "#ff3300";
set strong_bgcolor = "#ff8000";
set neutral_bgcolor = "#ffb200";
set weak_bgcolor = "#ffb380";
set weaker_bgcolor = "#ffcc80";
#NEWLAYER: unearthed/acrid
layerinfo "type" = "theme";
layerinfo "name" = "Acrid Slide";
layerinfo redist_uniq = "unearthed/acrid";
set title_texture = "rough";
set stronger_bgcolor = "#33ff00";
set strong_bgcolor = "#0066b2";
set neutral_bgcolor = "#00B266";
set weak_bgcolor = "#99ff80";
set weaker_bgcolor = "#ccffbf";
#NEWLAYER: unearthed/leisure
layerinfo "type" = "theme";
layerinfo "name" = "Leisure Renewal";
layerinfo redist_uniq = "unearthed/leisure";
set title_texture = "camouflage";
set stronger_bgcolor = "#285577";
set strong_bgcolor = "#3c3773";
set neutral_bgcolor = "#287755";
set weak_bgcolor = "#c0c0ec";
set weaker_bgcolor = "#b1ecd3";
#NEWLAYER: unearthed/craftis
layerinfo "type" = "theme";
layerinfo "name" = "Craftis";
layerinfo redist_uniq = "unearthed/craftis";
set title_texture = "camouflage";
set stronger_bgcolor = "#dd0000";
set strong_bgcolor = "#aa4f39";
set neutral_bgcolor = "#d2d2d2";
set weak_bgcolor = "#fcffcf";
set weaker_bgcolor = "#eeeeee";
#NEWLAYER: unearthed/unveiled
layerinfo "type" = "theme";
layerinfo "name" = "Unveiled Metal";
layerinfo redist_uniq = "unearthed/unveiled";
set title_texture = "brushed_metal";
set stronger_bgcolor = "#666666";
set strong_bgcolor = "#999999";
set neutral_bgcolor = "#333333";
set weak_bgcolor = "#cccccc";
set weaker_bgcolor = "#eeeeee";
#NEWLAYER: unearthed/wait
layerinfo "type" = "theme";
layerinfo "name" = "Wait Screw";
layerinfo redist_uniq = "unearthed/wait";
set title_texture = "chalk";
set stronger_bgcolor = "#009999";
set strong_bgcolor = "#ff6600";
set neutral_bgcolor = "#66cccc";
set weak_bgcolor = "#ffb380";
set weaker_bgcolor = "#eeeeee";
#NEWLAYER: unearthed/drinkdna
layerinfo "type" = "theme";
layerinfo "name" = "Drinking DNA";
layerinfo redist_uniq = "unearthed/drinkdna";
set title_texture = "cork";
set stronger_bgcolor = "#4C9978";
set strong_bgcolor = "#468C8C";
set neutral_bgcolor = "#53A653";
set weak_bgcolor = "#ACE6E6";
set weaker_bgcolor = "#eeeeee";
#NEWLAYER: unearthed/gainful
layerinfo "type" = "theme";
layerinfo "name" = "Gainful Magic";
layerinfo redist_uniq = "unearthed/gainful";
set title_texture = "fibers";
set stronger_bgcolor = "#DFDFA7";
set strong_bgcolor = "#FFFF80";
set neutral_bgcolor = "#AAAA39";
set weak_bgcolor = "#eeeeee";
set weaker_bgcolor = "#FFFFBF";
#NEWLAYER: unearthed/inaccurate
layerinfo "type" = "theme";
layerinfo "name" = "Inaccurate Lingo";
layerinfo redist_uniq = "unearthed/inaccurate";
set title_texture = "stucco";
set stronger_bgcolor = "#FF8080";
set strong_bgcolor = "#FF9980";
set neutral_bgcolor = "#E572A5";
set weak_bgcolor = "#F2B6D0";
set weaker_bgcolor = "#eeeeee";
#NEWLAYER: unearthed/current
layerinfo "type" = "theme";
layerinfo "name" = "Current Protector";
layerinfo redist_uniq = "unearthed/current";
set title_texture = "type";
set stronger_bgcolor = "#B5D9D9";
set strong_bgcolor = "#285577";
set neutral_bgcolor = "#226666";
set weak_bgcolor = "#7DA0BB";
set weaker_bgcolor = "#B5D9D9";

3248
ljcom/bin/upgrading/sv.dat Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,221 @@
# -*- coding: utf-8 -*-
domain:100:faq
domain:101:journal/news
# EnglishLJ is child of English for general domain:
lang:100:en_LJ:English (LJ):sim:en
langdomain:en_LJ:general
# EnglishLJ is root of FAQ & news journal:
langdomain:en_LJ:faq:1
langdomain:en_LJ:journal/news:1
# German is child of EnglishLJ for all domains:
lang:101:de:German:diff:en_LJ
langdomain:de:general
langdomain:de:journal/news
langdomain:de:faq
# Danish
lang:102:da:Danish:diff:en_LJ
langdomain:da:general
langdomain:da:journal/news
langdomain:da:faq
# Spanish
lang:103:es:Spanish:diff:en_LJ
langdomain:es:general
langdomain:es:journal/news
langdomain:es:faq
# French
lang:104:fr:French:diff:en_LJ
langdomain:fr:general
langdomain:fr:journal/news
langdomain:fr:faq
# Japanese
lang:105:ja:Japanese:diff:en_LJ
langdomain:ja:general
langdomain:ja:journal/news
langdomain:ja:faq
# Russian
lang:106:ru:Russian:diff:en_LJ
langdomain:ru:general
langdomain:ru:journal/news
langdomain:ru:faq
# Esperanto
lang:107:eo:Esperanto:diff:en_LJ
langdomain:eo:general
langdomain:eo:journal/news
langdomain:eo:faq
# Hebrew
lang:108:he:Hebrew:diff:en_LJ
langdomain:he:general
langdomain:he:journal/news
langdomain:he:faq
# Norwegian Bokmål
lang:109:nb:Norwegian Bokmål:diff:en_LJ
langdomain:nb:general
langdomain:nb:journal/news
langdomain:nb:faq
# Norwegian Nynorsk
lang:110:nn:Norwegian Nynorsk:diff:en_LJ
langdomain:nn:general
langdomain:nn:journal/news
langdomain:nn:faq
# Dutch
lang:111:nl:Dutch:diff:en_LJ
langdomain:nl:general
langdomain:nl:journal/news
langdomain:nl:faq
# Irish
lang:112:ga:Irish:diff:en_LJ
langdomain:ga:general
langdomain:ga:journal/news
langdomain:ga:faq
# Icelandic
lang:113:is:Icelandic:diff:en_LJ
langdomain:is:general
langdomain:is:journal/news
langdomain:is:faq
# European Portuguese
lang:114:pt:Portuguese:diff:en_LJ
langdomain:pt:general
langdomain:pt:journal/news
langdomain:pt:faq
# Swedish
lang:115:sv:Swedish:diff:en_LJ
langdomain:sv:general
langdomain:sv:journal/news
langdomain:sv:faq
# Polish
lang:116:pl:Polish:diff:en_LJ
langdomain:pl:general
langdomain:pl:journal/news
langdomain:pl:faq
# Finnish
lang:117:fi:Finnish:diff:en_LJ
langdomain:fi:general
langdomain:fi:journal/news
langdomain:fi:faq
# English - UK
lang:118:en_GB:English (UK):sim:en_LJ
langdomain:en_GB:general
langdomain:en_GB:journal/news
langdomain:en_GB:faq
# Hungarian
lang:119:hu:Hungarian:diff:en_LJ
langdomain:hu:general
langdomain:hu:journal/news
langdomain:hu:faq
# Malay
lang:120:ms:Malay:diff:en_LJ
langdomain:ms:general
langdomain:ms:journal/news
langdomain:ms:faq
# Chinese Simplified
lang:121:zh:Chinese (Simplified):diff:en_LJ
langdomain:zh:general
langdomain:zh:journal/news
langdomain:zh:faq
# Belarusian
lang:122:be:Belarusian:diff:en_LJ
langdomain:be:general
langdomain:be:journal/news
langdomain:be:faq
# Italian
lang:123:it:Italian:diff:en_LJ
langdomain:it:general
langdomain:it:journal/news
langdomain:it:faq
# Latvian
lang:124:lv:Latvian:diff:en_LJ
langdomain:lv:general
langdomain:lv:journal/news
langdomain:lv:faq
# Greek
lang:125:gr:Greek:diff:en_LJ
langdomain:gr:general
langdomain:gr:journal/news
langdomain:gr:faq
# Turkish
lang:126:tr:Turkish:diff:en_LJ
langdomain:tr:general
langdomain:tr:journal/news
langdomain:tr:faq
# Chinese Traditional
lang:127:zh_TR:Chinese (Traditional):diff:zh
langdomain:zh_TR:general
langdomain:zh_TR:journal/news
langdomain:zh_TR:faq
# Latin
lang:128:la:Latin:diff:en_LJ
langdomain:la:general
langdomain:la:journal/news
langdomain:la:faq
# Estonian
lang:129:et:Estonian:diff:en_LJ
langdomain:et:general
langdomain:et:journal/news
langdomain:et:faq
# Brazilian Portuguese
lang:130:pt_BR:Brazilian Portuguese:diff:pt
langdomain:pt_BR:general
langdomain:pt_BR:journal/news
langdomain:pt_BR:faq
# Ukrainian
lang:131:uk:Ukrainian:diff:en_LJ
langdomain:uk:general
langdomain:uk:journal/news
langdomain:uk:faq
# Lithuanian
lang:132:lt:Lithuanian:diff:en_LJ
langdomain:lt:general
langdomain:lt:journal/news
langdomain:lt:faq
# Hindi
lang:133:hi:Hindi:diff:en_LJ
langdomain:hi:general
langdomain:hi:journal/news
langdomain:hi:faq
# Basque
lang:134:eu:Basque:diff:en_LJ
langdomain:eu:general
langdomain:eu:journal/news
langdomain:eu:faq
# Afrikaans
lang:135:af:Afrikaans:diff:en_LJ
langdomain:af:general
langdomain:af:journal/news
langdomain:af:faq

Some files were not shown because too many files have changed in this diff Show More