Merge dw-nonfree into dw-free
This basically transplants the repository into ext/. There are cleaner ways we can do this (by actually folding the code into the right places) but this will suffice for now to solve the problems.
|
@ -1,7 +1,10 @@
|
|||
/logs
|
||||
/temp
|
||||
/extlib
|
||||
/ext
|
||||
/ext/dw-private
|
||||
/ext/local
|
||||
/ext/ruby
|
||||
/ext/yuicompressor
|
||||
/etc/config*.pl
|
||||
/build
|
||||
/locks
|
||||
|
|
4
LICENSE
|
@ -45,6 +45,10 @@ licensed under the terms indicated in each file, specifically:
|
|||
modify it under the same terms as Perl itself. For a copy of the
|
||||
license, please reference 'perldoc perlartistic' or 'perldoc perlgpl'.
|
||||
|
||||
Finally, files in ext/dw-nonfree are not licensed for use or
|
||||
distribution. They are provided as examples only as they are the
|
||||
Dreamwidth Studios branding and custom code.
|
||||
|
||||
--------
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
cd $LJHOME
|
||||
perl -I$LJHOME/extlib/lib/perl5 $LJHOME/extlib/bin/tidyall -a
|
||||
|
||||
cd $LJHOME/ext/dw-nonfree
|
||||
perl -I$LJHOME/extlib/lib/perl5 $LJHOME/extlib/bin/tidyall -a
|
|
@ -0,0 +1,2 @@
|
|||
local
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
[PerlTidy]
|
||||
select = {bin,cgi-bin,t}/**/*.{pl,pm,t}
|
||||
argv = -ole=unix -ci=4 -l=100
|
|
@ -0,0 +1,7 @@
|
|||
This directory, with the directories and files contained herein recursively,
|
||||
are not licensed for use or distribution.
|
||||
|
||||
These are provided for developers of the Dreamwidth service to work on and
|
||||
with to build Dreamwidth.
|
||||
|
||||
All contents copyright (C) 2008-2022 by Dreamwidth Studios, LLC.
|
|
@ -0,0 +1,7 @@
|
|||
This directory contains the non-free overlays for Dreamwidth
|
||||
Studios' installation of the Dreamwidth source code. None of the
|
||||
code in this directory is licensed for use: it consists of our
|
||||
branding and of material we cannot license for re-use by others.
|
||||
|
||||
The Dreamwidth open source code repository is located in the
|
||||
directories above this one.
|
|
@ -0,0 +1 @@
|
|||
general /index.bml.create.paymentlink
|
|
@ -0,0 +1,442 @@
|
|||
;; -*- coding: utf-8 -*-
|
||||
|
||||
entryform.htmlfaq=Supported HTML
|
||||
|
||||
entryform.htmlfaq.detail=HTML examples
|
||||
|
||||
entryform.htmlfaq.site=Site-specific markup tags
|
||||
|
||||
entryform.pollcreator=Poll Creator
|
||||
|
||||
invitecodes.userclass.active30d=Accounts active during the past 30 days
|
||||
|
||||
invitecodes.userclass.basic_paid=Basic paid accounts
|
||||
|
||||
invitecodes.userclass.noinvleft=Accounts with no unused invite codes
|
||||
|
||||
invitecodes.userclass.noinvleft_apinv=Accounts with no unused invite codes and at least 1 active, paid, or permanent invitee
|
||||
|
||||
invitecodes.userclass.paidusers=Paid users
|
||||
|
||||
invitecodes.userclass.permanent_paid=Seed accounts
|
||||
|
||||
invitecodes.userclass.permusers=Permanent users
|
||||
|
||||
invitecodes.userclass.premium_paid=Premium Paid accounts
|
||||
|
||||
langname.en_DW=English
|
||||
|
||||
shop.admin.checkmoneyorder.body=[[user]] just sent a check/money order. Receipt is at: [[receipturl]]
|
||||
|
||||
shop.admin.checkmoneyorder.subject=New Check/Money Order Pending
|
||||
|
||||
shop.anniversarypromoblurb=Dreamwidth is currently offering a Holiday Promotion -- we're giving you 10% more points on all of your orders!
|
||||
|
||||
shop.annivpromo.nopoints=This order will not earn you any Dreamwidth Points as part of our Holiday Promotion. Bonus points are only given for orders that cost money.
|
||||
|
||||
shop.annivpromo.points=This order will earn you <strong>[[points]] Dreamwidth [[?points|Point|Points]]</strong> to spend on your next order as part of our Holiday Promotion.
|
||||
|
||||
shop.cc.charge.from=If you are using someone else's credit card, make sure you get their permission first. Charges will appear on your statement from Dreamwidth Studios, LLC.
|
||||
|
||||
shop.email.acct.body.end<<
|
||||
|
||||
Best,
|
||||
Mark, Denise, and the [[sitename]] team
|
||||
|
||||
.
|
||||
|
||||
shop.email.comm.close<<
|
||||
|
||||
Congratulations on your community's paid time! You can see a list of all the premium features you now have access to here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
Thanks for supporting Dreamwidth, and for making it possible for us to
|
||||
keep building an awesome service.
|
||||
|
||||
.
|
||||
|
||||
shop.email.confirm.checkmoneyorder.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
This email confirms your purchase from the [[sitename]] shop. You can view your
|
||||
receipt here:
|
||||
|
||||
[[receipturl]]
|
||||
|
||||
Your order will not be processed until we receive your check or money order as
|
||||
described below:
|
||||
|
||||
Amount Due: [[total]]
|
||||
Payable To: [[payableto]]
|
||||
|
||||
Mail To:
|
||||
[[address]]
|
||||
|
||||
Please remember to include both the order number and the PO box number! Also, be sure to sign your check or endorse your money order.
|
||||
|
||||
Thank you for your purchase! You can see a list of all the premium features you'll have access to here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
Thanks for supporting Dreamwidth, and for making it possible for us to
|
||||
keep building an awesome service.
|
||||
|
||||
Best,
|
||||
Mark, Denise, and the [[sitename]] team
|
||||
|
||||
.
|
||||
|
||||
shop.email.confirm.paypal.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
This email confirms your purchase from the [[sitename]] shop. You can view your receipt here:
|
||||
|
||||
[[receipturl]]
|
||||
|
||||
[[statustext]]
|
||||
|
||||
Thank you for your purchase! You can see a list of all the premium features
|
||||
here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
Thanks for supporting Dreamwidth, and for making it possible for us to
|
||||
keep building an awesome service.
|
||||
|
||||
Best,
|
||||
Mark, Denise, and the [[sitename]] team
|
||||
|
||||
.
|
||||
|
||||
shop.email.email.close<<
|
||||
|
||||
We look forward to having you on the site! You can see a list of all the premium features you'll have access to here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
.
|
||||
|
||||
shop.email.user.close<<
|
||||
|
||||
Congratulations on your paid time! You can see a list of all the premium features you now have access to here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
Thanks for supporting Dreamwidth, and for making it possible for us to
|
||||
keep building an awesome service.
|
||||
|
||||
.
|
||||
|
||||
shop.expiration.comm.0.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
We wanted to let you know that your [[sitename]] community
|
||||
[[commname]]'s paid time has now expired.
|
||||
|
||||
You can add more paid time to the community in the [[sitename]] shop:
|
||||
|
||||
[[shopurl]]
|
||||
|
||||
If you don't renew your community's paid time, don't worry -- the
|
||||
community will still be there for you and your members to post in.
|
||||
You just won't have access to the paid account features anymore.
|
||||
|
||||
We really hope that you'll consider renewing your paid time, though.
|
||||
All of our income comes entirely from your payments -- we don't take
|
||||
money from any outside investors, just from our users for the
|
||||
service we provide. If there's anything we could be doing better,
|
||||
or anything we could do to make you more satisfied with the service,
|
||||
we'd love to hear from you. You can email us at:
|
||||
|
||||
feedback@dreamwidth.org
|
||||
|
||||
Even if you decide not to renew your paid [[sitename]] account,
|
||||
we're still really glad to have you here. Thanks for your support.
|
||||
|
||||
Best,
|
||||
Denise, Mark, and the [[sitename]] team
|
||||
.
|
||||
|
||||
shop.expiration.comm.14.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
We wanted to let you know that your paid [[sitename]] community,
|
||||
[[commname]], will be expiring in two weeks.
|
||||
|
||||
If you'd like, you can add more paid time to your community account
|
||||
here:
|
||||
|
||||
[[shopurl]]
|
||||
|
||||
If you don't want to renew your community's paid account, don't worry -- it'll still be there for you to use. You and your community members just
|
||||
won't have access to all of the paid account features. You can see a list of those paid account features here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
[[sitename]] is supported entirely by your payments. We aren't owned
|
||||
by a corporate conglomerate, we haven't taken any venture capital from
|
||||
outside investors, and we don't accept advertising, so we're 100%
|
||||
focused on making you happy with our service and our site. If there's
|
||||
anything at all that you think we're not doing right, or if there's
|
||||
something that we could do better, we'd love to hear from you. You
|
||||
can email us at:
|
||||
|
||||
feedback@dreamwidth.org
|
||||
|
||||
Thank you so much for supporting Dreamwidth and making it possible
|
||||
for us to build an awesome service.
|
||||
|
||||
Best,
|
||||
Denise, Mark, and the [[sitename]] team
|
||||
|
||||
.
|
||||
|
||||
shop.expiration.comm.3.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
We just wanted to remind you that your paid [[sitename]] community,
|
||||
[[commname]], will be expiring in approximately three days.
|
||||
|
||||
You can renew your paid account in our Shop:
|
||||
|
||||
[[shopurl]]
|
||||
|
||||
This is the last reminder we'll send you -- we don't want to nag!
|
||||
Your community will automatically revert to a free account in
|
||||
another three days if you don't renew. If that happens, you'll still
|
||||
be able to use it; you just won't have access to our paid features
|
||||
anymore. You can see a list of those paid features here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
Thanks for supporting Dreamwidth, and for making it possible for us
|
||||
to build an awesome online home.
|
||||
|
||||
Best,
|
||||
Denise, Mark, and the [[sitename]] team
|
||||
.
|
||||
|
||||
shop.expiration.user.0.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
We wanted to let you know that your [[sitename]] account, [[touser]],
|
||||
has now expired.
|
||||
|
||||
You can add more paid time to your account in the [[sitename]] shop:
|
||||
|
||||
[[shopurl]]
|
||||
|
||||
If you don't renew your paid time, don't worry -- your account is
|
||||
still there, and you can keep using all of the basic features.
|
||||
You just won't have access to the paid account features anymore.
|
||||
|
||||
We really hope that you'll consider renewing your paid time, though.
|
||||
All of our income comes entirely from your payments -- we don't take
|
||||
money from any outside investors, just from our users for the
|
||||
service we provide. If there's anything we could be doing better,
|
||||
or anything we could do to make you more satisfied with the service,
|
||||
we'd love to hear from you. You can email us at:
|
||||
|
||||
feedback@dreamwidth.org
|
||||
|
||||
Even if you decide not to renew your paid [[sitename]] account,
|
||||
we're still really glad to have you here. Thanks for your support.
|
||||
|
||||
Best,
|
||||
Denise, Mark, and the [[sitename]] team
|
||||
.
|
||||
|
||||
shop.expiration.user.14.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
We wanted to let you know that your paid [[sitename]] account will be
|
||||
expiring in two weeks.
|
||||
|
||||
If you'd like, you can add more paid time to your account here:
|
||||
|
||||
[[shopurl]]
|
||||
|
||||
If you don't want to renew your paid account, don't worry -- you can
|
||||
still keep using the site. You just won't have access to all of the
|
||||
paid account features. You can see a list of those paid account features
|
||||
here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
[[sitename]] is supported entirely by your payments. We aren't owned
|
||||
by a corporate conglomerate, we haven't taken any venture capital from
|
||||
outside investors, and we don't accept advertising, so we're 100%
|
||||
focused on making you happy with our service and our site. If there's
|
||||
anything at all that you think we're not doing right, or if there's
|
||||
something that we could do better, we'd love to hear from you. You
|
||||
can email us at:
|
||||
|
||||
feedback@dreamwidth.org
|
||||
|
||||
Thank you so much for supporting Dreamwidth and making it possible
|
||||
for us to build an awesome service.
|
||||
|
||||
Best,
|
||||
Denise, Mark, and the [[sitename]] team
|
||||
|
||||
.
|
||||
|
||||
shop.expiration.user.3.body<<
|
||||
Dear [[touser]],
|
||||
|
||||
We just wanted to remind you that your paid [[sitename]] account,
|
||||
[[touser]], will be expiring in approximately three days.
|
||||
|
||||
You can renew your paid account in our Shop:
|
||||
|
||||
[[shopurl]]
|
||||
|
||||
This is the last reminder we'll send you -- we don't want to nag!
|
||||
Your account will automatically revert to a free account in
|
||||
another three days if you don't renew. If that happens, you'll still
|
||||
be able to use it; you just won't have access to our paid features
|
||||
anymore. You can see a list of those paid features here:
|
||||
|
||||
https://www.dreamwidth.org/support/faqbrowse?faqid=4
|
||||
|
||||
Thanks for supporting Dreamwidth, and for making it possible for us
|
||||
to build an awesome online home.
|
||||
|
||||
Best,
|
||||
Denise, Mark, and the [[sitename]] team
|
||||
.
|
||||
|
||||
shop.holidaypromoblurb=Dreamwidth is currently offering a Holiday Promotion! For every 6 months of paid account time that you purchase for somebody else, we will give you 2 months of paid account time for free.
|
||||
|
||||
siteskins.tropo-purple.alt=Tropospherical Purple: Black text on light grey background; light and dark purple color highlights
|
||||
|
||||
siteskins.tropo-purple.desc=Light grey background for less glare; serif font 75% of the browser default; horizontal, drop-down expanding dynamic menus (requires fine mouse control).
|
||||
|
||||
siteskins.tropo-red.alt=Tropospherical Red (default): Black text on light grey background; red and salmon color highlights
|
||||
|
||||
siteskins.tropo-red.desc=Light grey background for less glare; serif font 75% of the browser default; horizontal, drop-down expanding dynamic menus (requires fine mouse control).
|
||||
|
||||
tropo.accountlinks.account=Account Settings
|
||||
|
||||
tropo.accountlinks.btn.login=Log In
|
||||
|
||||
tropo.accountlinks.btn.logout=Log Out
|
||||
|
||||
tropo.accountlinks.help=Help
|
||||
|
||||
tropo.accountlinks.inbox=Inbox
|
||||
|
||||
tropo.accountlinks.invitefriend=Invite Someone
|
||||
|
||||
tropo.accountlinks.login.forgotpassword=Forgot password?
|
||||
|
||||
tropo.accountlinks.login.openid=Log in with OpenID
|
||||
|
||||
tropo.accountlinks.login.password=Password:
|
||||
|
||||
tropo.accountlinks.login.rememberme=Remember me
|
||||
|
||||
tropo.accountlinks.login.username=Account name:
|
||||
|
||||
tropo.accountlinks.post=Post
|
||||
|
||||
tropo.accountlinks.readinglist=Reading Page
|
||||
|
||||
tropo.accountlinks.userpic.alt=Upload Icons
|
||||
|
||||
tropo.footer.info=Copyright © 2009-2010 Dreamwidth Studios, LLC. All rights reserved.
|
||||
|
||||
tropo.footer.legal.abusepolicy=Abuse Policy
|
||||
|
||||
tropo.footer.legal.diversitystatement=Diversity Statement
|
||||
|
||||
tropo.footer.legal.guidingprinciples=Guiding Principles
|
||||
|
||||
tropo.footer.legal.privacypolicy=Privacy Policy
|
||||
|
||||
tropo.footer.legal.tos=Terms of Service
|
||||
|
||||
tropo.footer.opensource=Open Source
|
||||
|
||||
tropo.footer.sitemap=Site Map
|
||||
|
||||
tropo.footer.suggestion=Make a Suggestion
|
||||
|
||||
tropo.nav.create=Create
|
||||
|
||||
tropo.nav.create.createaccount=Create Account
|
||||
|
||||
tropo.nav.create.createcommunity=Create Community
|
||||
|
||||
tropo.nav.create.editjournal=Edit Entries
|
||||
|
||||
tropo.nav.create.editprofile=Edit Profile
|
||||
|
||||
tropo.nav.create.updatejournal=Post Entry
|
||||
|
||||
tropo.nav.create.uploaduserpics=Upload Icons ([[num]] of [[max]])
|
||||
|
||||
tropo.nav.explore=Explore
|
||||
|
||||
tropo.nav.explore.directorysearch=Directory Search
|
||||
|
||||
tropo.nav.explore.faq=FAQ
|
||||
|
||||
tropo.nav.organize=Organize
|
||||
|
||||
tropo.nav.organize.customizestyle=Customize Style
|
||||
|
||||
tropo.nav.organize.manageaccount=Manage Account
|
||||
|
||||
tropo.nav.organize.managecommunities=Manage Communities
|
||||
|
||||
tropo.nav.organize.managefilters=Manage Filters
|
||||
|
||||
tropo.nav.organize.managerelationships=Manage Circle
|
||||
|
||||
tropo.nav.organize.managetags=Manage Tags
|
||||
|
||||
tropo.nav.organize.selectstyle=Select Style
|
||||
|
||||
tropo.nav.read=Read
|
||||
|
||||
tropo.nav.read.inbox.nounread=Inbox
|
||||
|
||||
tropo.nav.read.inbox.unread=Inbox ([[num]])
|
||||
|
||||
tropo.nav.read.profile=Profile
|
||||
|
||||
tropo.nav.read.readinglist=Reading Page
|
||||
|
||||
tropo.nav.read.recentcomments=Recent Comments
|
||||
|
||||
tropo.nav.read.syndicatedfeeds=Feeds
|
||||
|
||||
tropo.nav.read.tags=Tags
|
||||
|
||||
tropo.search=Search…
|
||||
|
||||
tropo.search.btn.go=Go
|
||||
|
||||
tropo.search.email=Email
|
||||
|
||||
tropo.search.faq=FAQ
|
||||
|
||||
tropo.search.iminfo=IM Info
|
||||
|
||||
tropo.search.interest=Interest
|
||||
|
||||
tropo.search.region=Region
|
||||
|
||||
tropo.search.siteuser=Site & User
|
||||
|
||||
widget.createaccountentercode.getcode=If you do not have an account creation code, you can find or request one in <?ljcomm dw_codesharing ljcomm?>.
|
||||
|
||||
widget.createaccountentercode.info1=To create a new account, enter an account creation code (<a href="https://www.dreamwidth.org/support/faqbrowse?faqid=105">Why?</a>):
|
||||
|
||||
widget.importchoosesource.disabled1=Starting a new import is temporarily disabled due to high volume. Existing imports will still be processed in the order they were submitted. New imports will be available again once the import queue clears out a little more. For more information, see <a href="https://dw-maintenance.dreamwidth.org">dw_maintenance</a>.
|
||||
|
||||
widget.shopcart.paymentmethod.creditcardpp=[N/A]
|
||||
|
||||
widget.shopcart.paymentmethod.paypal=[N/A]
|
|
@ -0,0 +1,133 @@
|
|||
MOODTHEME Sina'i Enantia's Dreamy Ds: Dreamy D's by Sina'i Enantia
|
||||
90 /img/mood/dreamy_ds/accomplished.gif 30 41
|
||||
1 /img/mood/dreamy_ds/aggravated.gif 30 41
|
||||
44 /img/mood/dreamy_ds/amused.gif 30 41
|
||||
2 /img/mood/dreamy_ds/angry.gif 30 41
|
||||
3 /img/mood/dreamy_ds/annoyed.gif 30 41
|
||||
4 /img/mood/dreamy_ds/anxious.gif 30 41
|
||||
114 /img/mood/dreamy_ds/apathetic.gif 30 41
|
||||
108 /img/mood/dreamy_ds/artistic.gif 30 41
|
||||
87 /img/mood/dreamy_ds/awake.gif 30 41
|
||||
110 /img/mood/dreamy_ds/bitchy.gif 30 41
|
||||
92 /img/mood/dreamy_ds/blah.gif 30 41
|
||||
113 /img/mood/dreamy_ds/blank.gif 30 41
|
||||
5 /img/mood/dreamy_ds/bored.gif 30 41
|
||||
59 /img/mood/dreamy_ds/bouncy.gif 30 41
|
||||
91 /img/mood/dreamy_ds/busy.gif 30 41
|
||||
68 /img/mood/dreamy_ds/calm.gif 30 41
|
||||
125 /img/mood/dreamy_ds/cheerful.gif 30 41
|
||||
99 /img/mood/dreamy_ds/chipper.gif 30 41
|
||||
84 /img/mood/dreamy_ds/cold.gif 30 41
|
||||
63 /img/mood/dreamy_ds/complacent.gif 30 41
|
||||
6 /img/mood/dreamy_ds/confused.gif 30 41
|
||||
101 /img/mood/dreamy_ds/contemplative.gif 30 41
|
||||
64 /img/mood/dreamy_ds/content.gif 30 41
|
||||
8 /img/mood/dreamy_ds/cranky.gif 30 41
|
||||
7 /img/mood/dreamy_ds/crappy.gif 30 41
|
||||
106 /img/mood/dreamy_ds/crazy.gif 30 41
|
||||
107 /img/mood/dreamy_ds/creative.gif 30 41
|
||||
129 /img/mood/dreamy_ds/crushed.gif 30 41
|
||||
56 /img/mood/dreamy_ds/curious.gif 30 41
|
||||
104 /img/mood/dreamy_ds/cynical.gif 30 41
|
||||
9 /img/mood/dreamy_ds/depressed.gif 30 41
|
||||
45 /img/mood/dreamy_ds/determined.gif 30 41
|
||||
130 /img/mood/dreamy_ds/devious.gif 30 41
|
||||
119 /img/mood/dreamy_ds/dirty.gif 30 41
|
||||
55 /img/mood/dreamy_ds/disappointed.gif 30 41
|
||||
10 /img/mood/dreamy_ds/discontent.gif 30 41
|
||||
127 /img/mood/dreamy_ds/distressed.gif 30 41
|
||||
35 /img/mood/dreamy_ds/ditzy.gif 30 41
|
||||
115 /img/mood/dreamy_ds/dorky.gif 30 41
|
||||
40 /img/mood/dreamy_ds/drained.gif 30 41
|
||||
34 /img/mood/dreamy_ds/drunk.gif 30 41
|
||||
98 /img/mood/dreamy_ds/ecstatic.gif 30 41
|
||||
79 /img/mood/dreamy_ds/embarrassed.gif 30 41
|
||||
11 /img/mood/dreamy_ds/energetic.gif 30 41
|
||||
12 /img/mood/dreamy_ds/enraged.gif 30 41
|
||||
13 /img/mood/dreamy_ds/enthralled.gif 30 41
|
||||
80 /img/mood/dreamy_ds/envious.gif 30 41
|
||||
78 /img/mood/dreamy_ds/exanimate.gif 30 41
|
||||
41 /img/mood/dreamy_ds/excited.gif 30 41
|
||||
14 /img/mood/dreamy_ds/exhausted.gif 30 41
|
||||
67 /img/mood/dreamy_ds/flirty.gif 30 41
|
||||
47 /img/mood/dreamy_ds/frustrated.gif 30 41
|
||||
93 /img/mood/dreamy_ds/full.gif 30 41
|
||||
103 /img/mood/dreamy_ds/geeky.gif 30 41
|
||||
120 /img/mood/dreamy_ds/giddy.gif 30 41
|
||||
72 /img/mood/dreamy_ds/giggly.gif 30 41
|
||||
38 /img/mood/dreamy_ds/gloomy.gif 30 41
|
||||
126 /img/mood/dreamy_ds/good.gif 30 41
|
||||
132 /img/mood/dreamy_ds/grateful.gif 30 41
|
||||
51 /img/mood/dreamy_ds/groggy.gif 30 41
|
||||
95 /img/mood/dreamy_ds/grumpy.gif 30 41
|
||||
111 /img/mood/dreamy_ds/guilty.gif 30 41
|
||||
15 /img/mood/dreamy_ds/happy.gif 30 41
|
||||
16 /img/mood/dreamy_ds/high.gif 30 41
|
||||
43 /img/mood/dreamy_ds/hopeful.gif 30 41
|
||||
17 /img/mood/dreamy_ds/horny.gif 30 41
|
||||
83 /img/mood/dreamy_ds/hot.gif 30 41
|
||||
18 /img/mood/dreamy_ds/hungry.gif 30 41
|
||||
52 /img/mood/dreamy_ds/hyper.gif 30 41
|
||||
116 /img/mood/dreamy_ds/impressed.gif 30 41
|
||||
48 /img/mood/dreamy_ds/indescribable.gif 30 41
|
||||
65 /img/mood/dreamy_ds/indifferent.gif 30 41
|
||||
19 /img/mood/dreamy_ds/infuriated.gif 30 41
|
||||
128 /img/mood/dreamy_ds/intimidated.gif 30 41
|
||||
20 /img/mood/dreamy_ds/irate.gif 30 41
|
||||
112 /img/mood/dreamy_ds/irritated.gif 30 41
|
||||
133 /img/mood/dreamy_ds/jealous.gif 30 41
|
||||
21 /img/mood/dreamy_ds/jubilant.gif 30 41
|
||||
33 /img/mood/dreamy_ds/lazy.gif 30 41
|
||||
75 /img/mood/dreamy_ds/lethargic.gif 30 41
|
||||
76 /img/mood/dreamy_ds/listless.gif 30 41
|
||||
22 /img/mood/dreamy_ds/lonely.gif 30 41
|
||||
86 /img/mood/dreamy_ds/loved.gif 30 41
|
||||
39 /img/mood/dreamy_ds/melancholy.gif 30 41
|
||||
57 /img/mood/dreamy_ds/mellow.gif 30 41
|
||||
36 /img/mood/dreamy_ds/mischievous.gif 30 41
|
||||
23 /img/mood/dreamy_ds/moody.gif 30 41
|
||||
37 /img/mood/dreamy_ds/morose.gif 30 41
|
||||
117 /img/mood/dreamy_ds/naughty.gif 30 41
|
||||
97 /img/mood/dreamy_ds/nauseated.gif 30 41
|
||||
102 /img/mood/dreamy_ds/nerdy.gif 30 41
|
||||
134 /img/mood/dreamy_ds/nervous.gif 30 41
|
||||
60 /img/mood/dreamy_ds/nostalgic.gif 30 41
|
||||
124 /img/mood/dreamy_ds/numb.gif 30 41
|
||||
61 /img/mood/dreamy_ds/okay.gif 30 41
|
||||
70 /img/mood/dreamy_ds/optimistic.gif 30 41
|
||||
58 /img/mood/dreamy_ds/peaceful.gif 30 41
|
||||
73 /img/mood/dreamy_ds/pensive.gif 30 41
|
||||
71 /img/mood/dreamy_ds/pessimistic.gif 30 41
|
||||
24 /img/mood/dreamy_ds/pissedoff.gif 30 41
|
||||
109 /img/mood/dreamy_ds/pleased.gif 30 41
|
||||
118 /img/mood/dreamy_ds/predatory.gif 30 41
|
||||
89 /img/mood/dreamy_ds/productive.gif 30 41
|
||||
105 /img/mood/dreamy_ds/quixotic.gif 30 41
|
||||
77 /img/mood/dreamy_ds/recumbent.gif 30 41
|
||||
69 /img/mood/dreamy_ds/refreshed.gif 30 41
|
||||
123 /img/mood/dreamy_ds/rejected.gif 30 41
|
||||
62 /img/mood/dreamy_ds/rejuvenated.gif 30 41
|
||||
53 /img/mood/dreamy_ds/relaxed.gif 30 41
|
||||
42 /img/mood/dreamy_ds/relieved.gif 30 41
|
||||
54 /img/mood/dreamy_ds/restless.gif 30 41
|
||||
100 /img/mood/dreamy_ds/rushed.gif 30 41
|
||||
25 /img/mood/dreamy_ds/sad.gif 30 41
|
||||
26 /img/mood/dreamy_ds/satisfied.gif 30 41
|
||||
46 /img/mood/dreamy_ds/scared.gif 30 41
|
||||
122 /img/mood/dreamy_ds/shocked.gif 30 41
|
||||
82 /img/mood/dreamy_ds/sick.gif 30 41
|
||||
66 /img/mood/dreamy_ds/silly.gif 30 41
|
||||
49 /img/mood/dreamy_ds/sleepy.gif 30 41
|
||||
27 /img/mood/dreamy_ds/sore.gif 30 41
|
||||
28 /img/mood/dreamy_ds/stressed.gif 30 41
|
||||
121 /img/mood/dreamy_ds/surprised.gif 30 41
|
||||
81 /img/mood/dreamy_ds/sympathetic.gif 30 41
|
||||
131 /img/mood/dreamy_ds/thankful.gif 30 41
|
||||
29 /img/mood/dreamy_ds/thirsty.gif 30 41
|
||||
30 /img/mood/dreamy_ds/thoughtful.gif 30 41
|
||||
31 /img/mood/dreamy_ds/tired.gif 30 41
|
||||
32 /img/mood/dreamy_ds/touched.gif 30 41
|
||||
74 /img/mood/dreamy_ds/uncomfortable.gif 30 41
|
||||
96 /img/mood/dreamy_ds/weird.gif 30 41
|
||||
88 /img/mood/dreamy_ds/working.gif 30 41
|
||||
85 /img/mood/dreamy_ds/worried.gif 30 41
|
|
@ -0,0 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
domain:101:journal/news
|
||||
domain:102:widget
|
||||
|
||||
# dreamwidth custom language
|
||||
lang:100:en_DW:English (DW):sim:en
|
||||
langdomain:en_DW:general
|
||||
langdomain:en_DW:faq
|
||||
langdomain:en_DW:journal/news:1
|
||||
langdomain:en_DW:widget:1
|
|
@ -0,0 +1,95 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::BusinessRules::Pay
|
||||
#
|
||||
# This package contains functions to convert Paid to Premium Paid time
|
||||
# and vice-versa as needed when applying or removing paid time
|
||||
#
|
||||
# Authors:
|
||||
# Ryan Southwell <teshiron@chaosfire.net>
|
||||
#
|
||||
# Copyright (c) 2012 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::BusinessRules::Pay::DWS;
|
||||
|
||||
use strict;
|
||||
|
||||
use base 'DW::BusinessRules::Pay';
|
||||
|
||||
use Carp qw/ confess /;
|
||||
|
||||
use constant SECS_IN_DAY => 86400;
|
||||
use constant CONVERSION_RATE => 0.7;
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# DW::BusinessRules::Pay::convert
|
||||
#
|
||||
# Converts paid to premium paid time at a rate of 70% for day and second values,
|
||||
# and a rate of 21 days for each whole month (also 70%). Converts premium paid
|
||||
# to paid time at a rate of 1/70% (approx 143% or 42.8 days per month).
|
||||
#
|
||||
# ARGUMENTS: from_type, dest_type, months, days, seconds
|
||||
#
|
||||
# from_type required type of paid time being converted
|
||||
# dest_type required destination account type
|
||||
#
|
||||
# At least one of months, days, or seconds must be supplied. If more than one
|
||||
# time field is supplied, the fields will be added together before conversion.
|
||||
#
|
||||
# RETURN: appropriate amount of paid time in seconds
|
||||
#
|
||||
sub convert {
|
||||
my ( $from_type, $dest_type, $months, $days, $seconds ) = @_;
|
||||
|
||||
confess "invalid paid time type $from_type"
|
||||
unless $from_type =~ /^(?:premium|paid)$/;
|
||||
|
||||
confess "invalid destination account type $dest_type"
|
||||
unless $dest_type =~ /^(?:premium|paid)$/;
|
||||
|
||||
confess "redundant conversion from $from_type to $dest_type"
|
||||
if $from_type eq $dest_type;
|
||||
|
||||
confess "no amount of time was specified for conversion"
|
||||
unless $months || $days || $seconds;
|
||||
|
||||
if ( $from_type eq 'paid' and $dest_type eq 'premium' ) { # paid to premium
|
||||
|
||||
# first, convert any seconds value supplied
|
||||
$seconds = int( $seconds * CONVERSION_RATE ) if $seconds;
|
||||
|
||||
# convert individual days to seconds and add on
|
||||
$seconds += int( $days * CONVERSION_RATE * SECS_IN_DAY ) if $days;
|
||||
|
||||
# convert months to seconds and add on
|
||||
# A 30-day month is assumed as per existing business logic
|
||||
$seconds += int( $months * 30 * CONVERSION_RATE * SECS_IN_DAY ) if $months;
|
||||
|
||||
}
|
||||
else { # premium to paid
|
||||
|
||||
# again, first with the seconds.
|
||||
# remember that dividing by a fraction is the same as multiplying by
|
||||
# the reciprocal, so dividing by CONVERSION_RATE is the inverse function.
|
||||
$seconds = int( $seconds / CONVERSION_RATE ) if $seconds;
|
||||
|
||||
# then the days
|
||||
$seconds += int( $days / CONVERSION_RATE * SECS_IN_DAY ) if $days;
|
||||
|
||||
# then the months
|
||||
$seconds += int( $months * 30 / CONVERSION_RATE * SECS_IN_DAY ) if $months;
|
||||
|
||||
}
|
||||
|
||||
return $seconds;
|
||||
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::Controller::Dreamwidth::Misc
|
||||
#
|
||||
# Controller for Dreamwidth specific miscellaneous pages.
|
||||
#
|
||||
# Authors:
|
||||
# Mark Smith <mark@dreamwidth.org>
|
||||
#
|
||||
# Copyright (c) 2009-2016 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Controller::Dreamwidth::Misc;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use DW::Routing;
|
||||
|
||||
DW::Routing->register_static( '/about', 'misc/about.tt', app => 1 );
|
||||
|
||||
DW::Routing->register_static( '/site/bot', 'site/bot.tt', app => 1 );
|
||||
DW::Routing->register_static( '/site/brand', 'site/brand.tt', app => 1 );
|
||||
DW::Routing->register_static( '/site/policy', 'site/policy.tt', app => 1 );
|
||||
|
||||
DW::Routing->register_string( "/internal/local/404", \&error_404_handler, app => 1 );
|
||||
|
||||
sub error_404_handler {
|
||||
my @quips = (
|
||||
"I accidentally your page :(",
|
||||
"Invisible Content!",
|
||||
"We can't stop here... this is 404 country!",
|
||||
"Not found page is not found.",
|
||||
"That's no moon - it's a 404!",
|
||||
"Fetch, or fetch not. There is no 404",
|
||||
"Quoth the server: four oh four.",
|
||||
"Tonight, we browse in 404!",
|
||||
"Curse your sudden but inevitable 404!",
|
||||
"404: the lights have gone out. Careful, you might get eaten by a grue.",
|
||||
"Why did the 404 cross the road? Because it couldn't find a page to cross.",
|
||||
"404: the page is a lie.",
|
||||
"404 ALL the things?",
|
||||
"Never gonna run around and 404 you...",
|
||||
"THERE ... ARE ... 404 ... LIGHTS!",
|
||||
"We'll always have 404.",
|
||||
"The sky above the port was the color of television tuned to a 404'd page.",
|
||||
"There was a PAGE here. it's gone now.",
|
||||
"Oh dear.",
|
||||
"It's dangerous to browse alone! Take this.",
|
||||
"Thank you, Mario! But the page is in another castle.",
|
||||
"Holy flying 404, Batman!",
|
||||
"KHAAAAAAAAAAAANNNNNNNNNNN!",
|
||||
"What is your quest? 404!",
|
||||
"But WHY is the page gone?",
|
||||
"Ia! Ia! 404 fthagn!",
|
||||
"418 I'm A Teapot ... wait, no, 404 Not Found.",
|
||||
"i'm in ur server, 404ing ur pages",
|
||||
"These are not the 404s you're looking for.",
|
||||
"Heisenberg may or may not have 404ed here.",
|
||||
);
|
||||
|
||||
my $quip = $quips[ int( rand( scalar @quips ) ) ];
|
||||
return DW::Template->render_template( 'error/404.tt', { quip => $quip } );
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,67 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::Controller::Dreamwidth::Staff
|
||||
#
|
||||
# Controller for Dreamwidth staff page.
|
||||
#
|
||||
# Authors:
|
||||
# Andrea Nall <anall@andreanall.com>
|
||||
#
|
||||
# Copyright (c) 2011 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Controller::Dreamwidth::Staff;
|
||||
|
||||
use strict;
|
||||
use DW::Routing;
|
||||
use DW::Template;
|
||||
use YAML::Any;
|
||||
|
||||
DW::Routing->register_string( '/site/staff', \&staff_page, app => 1 );
|
||||
|
||||
my $staff_groups = undef;
|
||||
|
||||
sub staff_page {
|
||||
$staff_groups ||= generate_staff_groups();
|
||||
|
||||
return DW::Template->render_template( "site/staff.tt", { groups => $staff_groups } );
|
||||
}
|
||||
|
||||
sub generate_staff_groups {
|
||||
my $groups = YAML::Any::LoadFile( LJ::resolve_file("etc/staff.yaml") );
|
||||
|
||||
# This takes the list of usernames, determines if they are a journal or a community
|
||||
# and makes a list of the ljuser_display under the proper type if the username exists
|
||||
# otherwise treats it as a journal, and just lists the plain text username.
|
||||
foreach my $group (@$groups) {
|
||||
foreach my $person ( @{ $group->{people} } ) {
|
||||
my $official = $person->{official} || [];
|
||||
my $result = {};
|
||||
foreach my $name (@$official) {
|
||||
my $u = LJ::load_user($name);
|
||||
my $text = $u ? $u->ljuser_display : $name;
|
||||
if ( $u && $u->is_community ) {
|
||||
push @{ $result->{community} }, $text;
|
||||
}
|
||||
else {
|
||||
push @{ $result->{journal} }, $text;
|
||||
}
|
||||
}
|
||||
if ( $result != {} ) {
|
||||
$person->{official} = $result;
|
||||
}
|
||||
else {
|
||||
delete $person->{official};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return $groups;
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,242 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::Controller::Dreamwidth::Suggest
|
||||
#
|
||||
# Controller for the site suggestion form.
|
||||
#
|
||||
# Authors:
|
||||
# Denise Paolucci <denise@dreamwidth.org> -- original version
|
||||
# Jen Griffin <kareila@livejournal.com> -- controller conversion
|
||||
#
|
||||
# Copyright (c) 2009-2016 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Controller::Dreamwidth::Suggest;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use DW::Routing;
|
||||
use DW::Template;
|
||||
use DW::Controller;
|
||||
|
||||
DW::Routing->register_string( "/site/suggest", \&suggestion_handler, app => 1 );
|
||||
|
||||
sub suggestion_handler {
|
||||
my ( $ok, $rv ) = controller();
|
||||
return $rv unless $ok;
|
||||
|
||||
my $fatal_err = sub {
|
||||
return DW::Template->render_template( 'error.tt', { message => $_[0] } );
|
||||
};
|
||||
|
||||
# the community to post to:
|
||||
my $destination = LJ::load_user($LJ::SUGGESTIONS_COMM);
|
||||
$rv->{destination} = $destination; # used in template
|
||||
|
||||
# the user (which should also be an admin of the community)
|
||||
# to post the maintainer-only address as:
|
||||
my $suggestions_bot = LJ::load_user($LJ::SUGGESTIONS_USER);
|
||||
|
||||
# verify proper configuration
|
||||
return $fatal_err->("This feature has not been configured for your site.")
|
||||
unless $destination
|
||||
&& $suggestions_bot
|
||||
&& $destination->is_community
|
||||
&& $suggestions_bot->can_manage_other($destination);
|
||||
|
||||
# make sure the remote user is OK to post
|
||||
my $remote = $rv->{remote};
|
||||
return $fatal_err->("Sorry, you must have confirmed your email to make a suggestion.")
|
||||
unless $remote->is_validated;
|
||||
return $fatal_err->("Sorry, suspended accounts can't make suggestions.")
|
||||
if $remote->is_suspended;
|
||||
|
||||
my $r = DW::Request->get;
|
||||
my $post_args = $r->post_args;
|
||||
my $errors = DW::FormErrors->new;
|
||||
|
||||
if ( $r->did_post ) {
|
||||
my @pieces = qw( title area summary description );
|
||||
my %ehtml_args;
|
||||
|
||||
if ( $post_args->{post} ) {
|
||||
|
||||
# verify that all fields are filled out:
|
||||
foreach my $field (@pieces) {
|
||||
if ( $post_args->{$field} ) {
|
||||
$ehtml_args{$field} = LJ::ehtml( $post_args->{$field} );
|
||||
}
|
||||
else {
|
||||
$errors->add_string( $field, "You need to fill out the $field section." );
|
||||
$ehtml_args{$field} = '';
|
||||
}
|
||||
}
|
||||
|
||||
# build out the post body including poll
|
||||
my $suggestion = DW::Template->template_string( "site/suggest_entry.tt",
|
||||
{ post => \%ehtml_args, include_poll => 1 } );
|
||||
|
||||
# We have all the pieces, so let's build the post for DW.
|
||||
# For this, we're going to post as the user (so they get
|
||||
# any comments, etc), and we're going to auto-tag it as
|
||||
# "bugzilla: unmigrated", so the suggestions maintainer
|
||||
# can find new/untagged posts when they want to.
|
||||
|
||||
my ( $response, $response2 ); # for errors returned from postevent
|
||||
my $journalpost;
|
||||
|
||||
unless ( $errors->exist ) {
|
||||
$journalpost = LJ::Protocol::do_request(
|
||||
'postevent',
|
||||
{
|
||||
'ver' => $LJ::PROTOCOL_VER,
|
||||
'username' => $remote->user,
|
||||
'subject' => $post_args->{title},
|
||||
'event' => $suggestion,
|
||||
'usejournal' => $destination->user,
|
||||
'security' => 'public',
|
||||
'usejournal_okay' => 1,
|
||||
'props' => {
|
||||
taglist => 'bugzilla: unmigrated',
|
||||
opt_noemail => !$post_args->{email},
|
||||
opt_preformatted => 1,
|
||||
},
|
||||
'tz' => 'guess',
|
||||
},
|
||||
\$response,
|
||||
{
|
||||
'nopassword' => 1,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if ($journalpost) {
|
||||
|
||||
# having built the post for public display, we now do
|
||||
# a second post containing the link to create the new bug
|
||||
# for the suggestion. we can't use $suggestion that we built,
|
||||
# because we need to use a different escaping function, but
|
||||
# that's okay, because we want to format this a little
|
||||
# differently anyway.
|
||||
|
||||
my ( $ghi_subject, $ghi_desc, $ghi_args );
|
||||
|
||||
$ghi_subject = LJ::eurl( $post_args->{title} );
|
||||
|
||||
$ghi_desc = "Summary%3A%0D%0A%0D%0A";
|
||||
$ghi_desc .= LJ::eurl( $post_args->{summary} );
|
||||
$ghi_desc .= "%0D%0A%0D%0ADescription%3A%0D%0A%0D%0A";
|
||||
$ghi_desc .= LJ::eurl( $post_args->{description} );
|
||||
$ghi_desc .= "%0D%0A%0D%0ASuggested by%3A%0D%0A%0D%0A";
|
||||
$ghi_desc .= LJ::eurl( $remote->user );
|
||||
|
||||
$ghi_args = "body=$ghi_desc&title=$ghi_subject";
|
||||
|
||||
my $ghi_post = DW::Template->template_string( "site/suggest_ghi.tt",
|
||||
{ ghi_args => $ghi_args, title => $post_args->{title} } );
|
||||
|
||||
# and we post that post to the community. (the suggestions_bot
|
||||
# account should have unmoderated posting ability, so that the
|
||||
# post is posted directly to the comm without having to go
|
||||
# through moderation.) for this post, we tag it as
|
||||
# "admin: unmigrated", so the suggestions maintainer can find
|
||||
# any/all unposted GitHub links.
|
||||
|
||||
# get the user's timzeone and put it into +/-0800 format
|
||||
# if we can't figure it out, then just guess based on suggestions bot
|
||||
my ( $remote_tz_sign, $remote_tz_offset ) =
|
||||
( $remote->timezone =~ m/([+|-])?(\d+)/ );
|
||||
my $remote_tz =
|
||||
defined $remote_tz_offset
|
||||
? sprintf( "%s%02d00", $remote_tz_sign || "+", $remote_tz_offset )
|
||||
: "guess";
|
||||
|
||||
LJ::Protocol::do_request(
|
||||
'postevent',
|
||||
{
|
||||
'ver' => $LJ::PROTOCOL_VER,
|
||||
'username' => $suggestions_bot->user,
|
||||
'subject' => $post_args->{title},
|
||||
'event' => $ghi_post,
|
||||
'usejournal' => $destination->user,
|
||||
'security' => 'private',
|
||||
'usejournal_okay' => 1,
|
||||
'props' => {
|
||||
taglist => 'admin: unmigrated',
|
||||
opt_preformatted => 1,
|
||||
},
|
||||
'tz' => $remote_tz,
|
||||
},
|
||||
\$response2,
|
||||
{
|
||||
'nopassword' => 1,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
# once all of that's done, let's tell the user it worked.
|
||||
# (or, if it didn't work, tell them why.)
|
||||
|
||||
if ( $response || $response2 ) {
|
||||
$errors->add_string( '', LJ::Protocol::error_message( $response || $response2 ) );
|
||||
}
|
||||
|
||||
unless ( $errors->exist ) {
|
||||
return DW::Controller->render_success(
|
||||
'site/suggest.tt',
|
||||
{ commname => $destination->ljuser_display },
|
||||
[
|
||||
{
|
||||
text_ml => ".success.link.another",
|
||||
url => "$LJ::SITEROOT/site/suggest"
|
||||
},
|
||||
{
|
||||
text_ml => ".success.link.view",
|
||||
url => $destination->journal_base
|
||||
},
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
elsif ( $post_args->{preview} ) {
|
||||
|
||||
# make preview: first preview the title and text as
|
||||
# it would show up in the entry later; we don't need
|
||||
# the poll in here, as the user can't influence it anyway
|
||||
$ehtml_args{$_} = LJ::html_newlines( LJ::ehtml( $post_args->{$_} ) ) foreach @pieces;
|
||||
|
||||
my $suggestion = DW::Template->template_string( "site/suggest_entry.tt",
|
||||
{ post => \%ehtml_args, include_poll => 0 } );
|
||||
|
||||
$rv->{preview} = 1;
|
||||
$rv->{suggestion} = $suggestion;
|
||||
|
||||
if ($LJ::SPELLER) {
|
||||
my $s = new LJ::SpellCheck {
|
||||
spellcommand => $LJ::SPELLER,
|
||||
class => "searchhighlight",
|
||||
};
|
||||
my $spellcheck_html = $s->check_html( \$suggestion );
|
||||
|
||||
# unescape the <br />s for readability. All other HTML remains untouched.
|
||||
$spellcheck_html =~ s/<br \/>/<br \/>/g;
|
||||
|
||||
$rv->{spellcheck} = $spellcheck_html;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$rv->{errors} = $errors;
|
||||
$rv->{formdata} = $post_args;
|
||||
|
||||
return DW::Template->render_template( 'site/suggest.tt', $rv );
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,139 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::Hooks::AnniversaryPromotion
|
||||
#
|
||||
# This file explains Dreamwidth's plans for world domination. Be sure to keep it updated!
|
||||
#
|
||||
# Authors:
|
||||
# Mark Smith <mark@dreamwidth.org>
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Hooks::AnniversaryPromotion;
|
||||
|
||||
use strict;
|
||||
use LJ::Hooks;
|
||||
use LJ::Time;
|
||||
|
||||
# use mysql date format: year-month-date hour::min:seconds
|
||||
my $start_time = LJ::mysqldate_to_time( "2021-12-01 00:00:00", 1 );
|
||||
my $end_time = LJ::mysqldate_to_time( "2021-12-31 23:59:59", 1 );
|
||||
|
||||
# warn sprintf( "Running shop promo from %s to %s\n", scalar gmtime( $start_time ), scalar gmtime( $end_time ) );
|
||||
|
||||
# returns if the promotion is valid right now
|
||||
sub promo_valid {
|
||||
return 0 if time < $start_time || time > $end_time;
|
||||
return 1;
|
||||
}
|
||||
|
||||
# returns how many points this cart is eligible for
|
||||
# clever; depends on the way that 10 points == $1
|
||||
# so if you buy $1 worth of stuff, you get 1 extra point (==1/10th of what you bought)
|
||||
sub cart_bonus_points {
|
||||
return int( $_[0]->total_cash );
|
||||
}
|
||||
|
||||
# promotion HTML
|
||||
LJ::Hooks::register_hook(
|
||||
'shop_controller',
|
||||
sub {
|
||||
my ($rv) = @_;
|
||||
|
||||
# ensure we're a valid promotional period and not anon
|
||||
return unless promo_valid();
|
||||
return if $rv->{shop}->anonymous;
|
||||
|
||||
# put the note up top so people know
|
||||
$rv->{cart_display} .=
|
||||
"<div class='shop-item-highlight message-box'><strong>"
|
||||
. LJ::Lang::ml('shop.anniversarypromoblurb')
|
||||
. "</strong></div>\n";
|
||||
}
|
||||
);
|
||||
|
||||
# put information after the cart is rendered
|
||||
LJ::Hooks::register_hook(
|
||||
'shop_cart_render',
|
||||
sub {
|
||||
my ( $retref, %opts ) = @_;
|
||||
return if $opts{admin} || ( $opts{receipt} && !$opts{confirm} );
|
||||
|
||||
# promo period and not anonymous
|
||||
return unless promo_valid();
|
||||
return unless $opts{cart}->userid;
|
||||
|
||||
# determine how many points they get ... basically, 1 point per $1 USD
|
||||
# spent.. does not get points for spending points!
|
||||
my $points = cart_bonus_points( $opts{cart} );
|
||||
|
||||
# text depends on how many points they get
|
||||
$$retref .= '<p class="shop-item-highlight shop-account-status">';
|
||||
if ( $points > 0 ) {
|
||||
$$retref .= LJ::Lang::ml( 'shop.annivpromo.points', { points => $points } );
|
||||
}
|
||||
else {
|
||||
$$retref .= LJ::Lang::ml('shop.annivpromo.nopoints');
|
||||
}
|
||||
$$retref .= '</p>';
|
||||
}
|
||||
);
|
||||
|
||||
# this is where the magic happens. when a cart enters or leaves the
|
||||
# paid state, then we have to apply or unapply their bonus points.
|
||||
LJ::Hooks::register_hook(
|
||||
'shop_cart_state_change',
|
||||
sub {
|
||||
my ( $cart, $newstate ) = @_;
|
||||
|
||||
return unless promo_valid();
|
||||
|
||||
# if the cart is going INTO the paid state, then we apply the bonus points
|
||||
# to the user who bought the items
|
||||
if ( $newstate == $DW::Shop::STATE_PAID ) {
|
||||
my $points = cart_bonus_points($cart);
|
||||
my $u = LJ::load_userid( $cart->userid );
|
||||
return unless $points && $u;
|
||||
|
||||
# now give them the points for their bonus
|
||||
$u->give_shop_points(
|
||||
amount => $points,
|
||||
reason => sprintf( 'order %d bonus points', $cart->id )
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
# however, if the OLD state was PROCESSED (means we're being refunded or
|
||||
# something is happening) then we need to email admins. the logic to
|
||||
# determine if we ever gave the user bonus points is too fickle, for now
|
||||
# we can just handle point reversals manually.
|
||||
if ( $cart->state == $DW::Shop::STATE_PROCESSED ) {
|
||||
LJ::send_mail(
|
||||
{
|
||||
to => $LJ::ADMIN_EMAIL,
|
||||
from => $LJ::BOGUS_EMAIL,
|
||||
fromname => $LJ::SITENAME,
|
||||
subject => 'Attention: Order Investigation Needed',
|
||||
body => <<EOF,
|
||||
Dear admins,
|
||||
|
||||
Order #@{[$cart->id]} has left the PROCESSED state during an active promotion
|
||||
period and needs to be investigated. The user may need to have bonus points
|
||||
unapplied from their account.
|
||||
|
||||
|
||||
Best regards,
|
||||
The $LJ::SITENAMESHORT Payment System
|
||||
EOF
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
|
@ -0,0 +1,115 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::Hooks::Community
|
||||
#
|
||||
# This file contains the hooks used to show DW-specific FAQs and comms
|
||||
# on community/index.bml.
|
||||
#
|
||||
# Authors:
|
||||
# Denise Paolucci <denise@dreamwidth.org>
|
||||
#
|
||||
# Copyright (c) 2011-2013 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
|
||||
package DW::Hooks::Community;
|
||||
|
||||
use strict;
|
||||
use LJ::Hooks;
|
||||
|
||||
# returns: dreamwidth.org specific FAQs for info on communities. calling
|
||||
# context should already have the <ul> inside it, so just <li> on each.
|
||||
LJ::Hooks::register_hook(
|
||||
'community_faqs',
|
||||
sub {
|
||||
|
||||
my $ret;
|
||||
my @faqs = qw/ 223 17 201 /;
|
||||
|
||||
foreach my $faq (@faqs) {
|
||||
my $faqobj = LJ::Faq->load($faq);
|
||||
$ret .=
|
||||
"<li><a href='$LJ::SITEROOT/support/faqbrowse?faqid="
|
||||
. $faq . "'>"
|
||||
. $faqobj->question_html
|
||||
. "</a></li>"
|
||||
if $faqobj;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
);
|
||||
|
||||
# returns: dreamwidth.org specific FAQs for info on managing communities.
|
||||
# calling context should already have the <ul> inside it, so just a <li>
|
||||
# on each.
|
||||
LJ::Hooks::register_hook(
|
||||
'community_manage_links',
|
||||
sub {
|
||||
|
||||
my $ret;
|
||||
my @faqs = qw/ 19 100 208 101 102 109 205 110 111 /;
|
||||
|
||||
foreach my $faq (@faqs) {
|
||||
my $faqobj = LJ::Faq->load($faq);
|
||||
$ret .=
|
||||
"<li><a href='$LJ::SITEROOT/support/faqbrowse?faqid="
|
||||
. $faq . "'>"
|
||||
. $faqobj->question_html
|
||||
. "</a></li>"
|
||||
if $faqobj;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
);
|
||||
|
||||
# returns: dw_community_promo, formatted as user tag, with explanation
|
||||
LJ::Hooks::register_hook(
|
||||
'community_search_links',
|
||||
sub {
|
||||
my $ret;
|
||||
my $promo = LJ::load_user("dw_community_promo");
|
||||
return unless $promo;
|
||||
|
||||
$ret .= "<li>"
|
||||
. $promo->ljuser_display . ": "
|
||||
. LJ::Lang::ml('/community/index.tt.promo.explain') . "</li>";
|
||||
return $ret;
|
||||
}
|
||||
);
|
||||
|
||||
# returns: a selection of dreamwidth.org official comms for people to
|
||||
# subscribe to. (only public-facing official comms, or things that might
|
||||
# be of use to the general public -- none of the project-specific comms
|
||||
# that aren't available for general membership.)
|
||||
LJ::Hooks::register_hook(
|
||||
'official_comms',
|
||||
sub {
|
||||
my $ret;
|
||||
my @official =
|
||||
qw/ dw_news dw_maintenance dw_biz dw_suggestions dw_nifty dw_dev dw_styles dw_design /;
|
||||
|
||||
$ret .= "<h2>"
|
||||
. LJ::Lang::ml( '/community/index.tt.official.title',
|
||||
{ sitename => $LJ::SITENAMESHORT } )
|
||||
. "</h2>"
|
||||
. LJ::Lang::ml( '/community/index.tt.official.explain',
|
||||
{ sitename => $LJ::SITENAMESHORT } )
|
||||
. "<ul>";
|
||||
|
||||
foreach my $comm (@official) {
|
||||
my $commu = LJ::load_user($comm);
|
||||
$ret .= "<li>" . $commu->ljuser_display . "</li>" if $commu;
|
||||
}
|
||||
|
||||
$ret .= "</ul>";
|
||||
|
||||
return $ret;
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
|
@ -0,0 +1,34 @@
|
|||
#!/usr/bin/perl
|
||||
#
|
||||
# DW::Hooks::CreditCard
|
||||
#
|
||||
# This file contains hooks related to credit card transactions.
|
||||
#
|
||||
# Authors:
|
||||
# Denise Paolucci <denise@dreamwidth.org>
|
||||
#
|
||||
# Copyright (c) 2013 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
|
||||
package DW::Hooks::CreditCard;
|
||||
|
||||
use strict;
|
||||
use LJ::Hooks;
|
||||
|
||||
# returns: message about having credit card charge permission +
|
||||
# info on what the charge will look like on your statement.
|
||||
LJ::Hooks::register_hook(
|
||||
'cc_charge_from',
|
||||
sub {
|
||||
|
||||
my $ret;
|
||||
|
||||
$ret = "<p>" . LJ::Lang::ml('shop.cc.charge.from') . "</p>";
|
||||
|
||||
return $ret;
|
||||
}
|
||||
);
|
|
@ -0,0 +1,80 @@
|
|||
# Hooks for the entry form
|
||||
#
|
||||
# Authors:
|
||||
# Afuna <coder.dw@afunamatata.com>
|
||||
#
|
||||
# Copyright (c) 2009 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Hooks::EntryForm;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use LJ::Hooks;
|
||||
|
||||
LJ::Hooks::register_hook(
|
||||
'entryforminfo',
|
||||
sub {
|
||||
my ( $journal, $remote ) = @_;
|
||||
|
||||
my $make_list = sub {
|
||||
my $ret = '';
|
||||
foreach my $link_info (@_) {
|
||||
$ret .= "<li><a href='$link_info->[0]'>$link_info->[1]</a></li>"
|
||||
if $link_info->[2];
|
||||
}
|
||||
return "<ul>$ret</ul>";
|
||||
};
|
||||
|
||||
my $usejournal = $journal ? "?usejournal=$journal" : "";
|
||||
my $ju = $journal ? LJ::load_user($journal) : undef;
|
||||
|
||||
my $can_make_poll = 0;
|
||||
$can_make_poll = $remote->can_create_polls if $remote;
|
||||
$can_make_poll ||= $ju->can_create_polls if $ju;
|
||||
|
||||
return $make_list->(
|
||||
|
||||
# URL, link text, whether to show or not
|
||||
[ "/poll/create$usejournal", LJ::Lang::ml('entryform.pollcreator'), $can_make_poll ],
|
||||
[ "/support/faqbrowse?faqid=103", LJ::Lang::ml('entryform.htmlfaq'), 1 ],
|
||||
[ "/support/faqbrowse?faqid=155", LJ::Lang::ml('entryform.htmlfaq.detail'), 1 ],
|
||||
[ "/support/faqbrowse?faqid=82", LJ::Lang::ml('entryform.htmlfaq.site'), 1 ],
|
||||
);
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
LJ::Hooks::register_hook(
|
||||
'faqlink',
|
||||
sub {
|
||||
# This links to the specified faq with the specified link
|
||||
# text -- not the faq title! -- in a new
|
||||
# tab (because called from an iframe)
|
||||
my ( $faqname, $text ) = @_;
|
||||
my $ret;
|
||||
|
||||
# Keep a hash of faqnames => ids because that'll be
|
||||
# nonfree-specific
|
||||
my %faqs = (
|
||||
"alttext" => 207, # "What's the description of an image for?"
|
||||
);
|
||||
return unless exists $faqs{$faqname};
|
||||
|
||||
my $faq = $faqs{$faqname};
|
||||
my $faqobj = LJ::Faq->load($faq)
|
||||
or return;
|
||||
|
||||
$ret .= "<a target='blank' href='$LJ::SITEROOT/support/faqbrowse?faqid=$faq'>$text</a>";
|
||||
|
||||
return $ret;
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
# Hooks to modify the index list for /legal (views/legal/index.tt)
|
||||
#
|
||||
# Authors:
|
||||
# Jen Griffin <kareila@livejournal.com>
|
||||
#
|
||||
# Copyright (c) 2010 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Hooks::LegalIndex;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use LJ::Hooks;
|
||||
|
||||
LJ::Hooks::register_hook(
|
||||
'modify_legal_index',
|
||||
sub {
|
||||
my $index = $_[0];
|
||||
my @extra = qw ( principles diversity dmca );
|
||||
unshift @$index, @extra;
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
|
@ -0,0 +1,46 @@
|
|||
# Alert site administrators when someone makes a money order
|
||||
#
|
||||
# Authors:
|
||||
# Afuna <coder.dw@afunamatata.com>
|
||||
#
|
||||
# Copyright (c) 2011 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Hooks::MailboxAlert;
|
||||
|
||||
use strict;
|
||||
use LJ::Hooks;
|
||||
|
||||
LJ::Hooks::register_hook(
|
||||
'check_money_order_pending',
|
||||
sub {
|
||||
my ( $cart, $u ) = @_;
|
||||
|
||||
LJ::send_mail(
|
||||
{
|
||||
to => $LJ::ACCOUNTS_EMAIL,
|
||||
from => $LJ::BOGUS_EMAIL,
|
||||
fromname => $LJ::SITENAME,
|
||||
subject => LJ::Lang::ml(
|
||||
'shop.admin.checkmoneyorder.subject',
|
||||
{ sitename => $LJ::SITENAME }
|
||||
),
|
||||
body => LJ::Lang::ml(
|
||||
'shop.admin.checkmoneyorder.body',
|
||||
{
|
||||
user => LJ::isu($u) ? $u->display_name : $cart->email,
|
||||
receipturl => "$LJ::SITEROOT/shop/receipt?ordernum=" . $cart->ordernum,
|
||||
}
|
||||
),
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
|
@ -0,0 +1,61 @@
|
|||
# Hooks for the site scheme(s)
|
||||
#
|
||||
# Authors:
|
||||
# Janine Smith <janine@netrophic.com>
|
||||
# Andrea Nall <anall@andreanall.com>
|
||||
#
|
||||
# Copyright (c) 2009-2011 by Dreamwidth Studios, LLC.
|
||||
#
|
||||
# This program is NOT free software or open-source; you can use it as an
|
||||
# example of how to implement your own site-specific extensions to the
|
||||
# Dreamwidth Studios open-source code, but you cannot use it on your site
|
||||
# or redistribute it, with or without modifications.
|
||||
#
|
||||
|
||||
package DW::Hooks::SiteScheme;
|
||||
|
||||
use strict;
|
||||
use LJ::Hooks;
|
||||
use DW::SiteScheme;
|
||||
|
||||
LJ::Hooks::register_hook(
|
||||
'modify_scheme_list',
|
||||
sub {
|
||||
my ( $schemes, $merge_func ) = @_;
|
||||
|
||||
$merge_func->(
|
||||
'celerity-local' => { parent => 'celerity', title => "Celerity" },
|
||||
'dreamwidth' => { parent => 'global', internal => 1 },
|
||||
'gradation-horizontal-local' =>
|
||||
{ parent => 'gradation-horizontal', title => "Gradation Horizontal" },
|
||||
'gradation-vertical-local' =>
|
||||
{ parent => 'gradation-vertical', title => "Gradation Vertical" },
|
||||
'tropo-common' => { parent => 'common', internal => 1 },
|
||||
'tropo-purple' => { parent => 'tropo-common', title => "Tropospherical Purple" },
|
||||
'tropo-red' => { parent => 'tropo-common', title => "Tropospherical Red" },
|
||||
);
|
||||
|
||||
@{$schemes} = (
|
||||
{ scheme => "tropo-red" },
|
||||
{ scheme => "tropo-purple" },
|
||||
{
|
||||
scheme => "celerity-local",
|
||||
alt => 'siteskins.celerity.alt',
|
||||
desc => 'siteskins.celerity.desc',
|
||||
},
|
||||
{
|
||||
scheme => "gradation-horizontal-local",
|
||||
alt => 'siteskins.gradation-horizontal.alt',
|
||||
desc => 'siteskins.gradation-horizontal.desc',
|
||||
},
|
||||
{
|
||||
scheme => "gradation-vertical-local",
|
||||
alt => 'siteskins.gradation-vertical.alt',
|
||||
desc => 'siteskins.gradation-vertical.desc',
|
||||
},
|
||||
{ scheme => "lynx" },
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
1;
|
|
@ -0,0 +1,15 @@
|
|||
package LJ::S2Theme::sundaymorning;
|
||||
use base qw( LJ::S2Theme );
|
||||
use strict;
|
||||
|
||||
sub layouts {
|
||||
(
|
||||
"1" => "one-column",
|
||||
"1s" => "one-column-split",
|
||||
"2l" => "two-columns-left",
|
||||
"2r" => "two-columns-right"
|
||||
)
|
||||
}
|
||||
sub layout_prop { "layout_type" }
|
||||
|
||||
1;
|
|
@ -0,0 +1,87 @@
|
|||
package LJ::S2Theme::transmogrified;
|
||||
use base qw( LJ::S2Theme );
|
||||
use strict;
|
||||
|
||||
sub layouts {
|
||||
(
|
||||
"1" => "one-column",
|
||||
"1s" => "one-column-split",
|
||||
"2l" => "two-columns-left",
|
||||
"2r" => "two-columns-right"
|
||||
)
|
||||
}
|
||||
sub layout_prop { "layout_type" }
|
||||
|
||||
sub page_props {
|
||||
my $self = shift;
|
||||
my @props = qw( color_page_title_background color_main_background );
|
||||
return $self->_append_props( "page_props", @props );
|
||||
}
|
||||
|
||||
sub header_props {
|
||||
my $self = shift;
|
||||
my @props =
|
||||
qw( color_header_background color_header_text color_header_hover_background color_header_hover );
|
||||
return $self->_append_props( "header_props", @props );
|
||||
}
|
||||
|
||||
sub module_props {
|
||||
my $self = shift;
|
||||
my @props = qw( color_module_title_background color_module_title_border );
|
||||
return $self->_append_props( "module_props", @props );
|
||||
}
|
||||
|
||||
sub entry_props {
|
||||
my $self = shift;
|
||||
my @props = qw(
|
||||
color_entry_title_border
|
||||
color_entry_title_background
|
||||
color_entry_border_alt
|
||||
color_entry_background_alt
|
||||
color_entry_link_alt
|
||||
color_entry_link_hover_alt
|
||||
color_entry_link_active_alt
|
||||
color_entry_link_visited_alt
|
||||
color_entry_text_alt
|
||||
color_entry_subject_alt
|
||||
color_entry_subject_alt_border
|
||||
color_entry_subject_alt_background
|
||||
);
|
||||
return $self->_append_props( "entry_props", @props );
|
||||
}
|
||||
|
||||
sub comment_props {
|
||||
my $self = shift;
|
||||
my @props = qw( color_comments_form_border );
|
||||
return $self->_append_props( "comment_props", @props );
|
||||
}
|
||||
|
||||
sub footer_props {
|
||||
my $self = shift;
|
||||
my @props = qw( color_footer_background color_footer_text color_footer_link );
|
||||
return $self->_append_props( "footer_props", @props );
|
||||
}
|
||||
|
||||
sub archive_props {
|
||||
my $self = shift;
|
||||
my @props = qw(
|
||||
color_archivemonth_background
|
||||
color_archivemonth_border
|
||||
color_archivemonth_title_background
|
||||
color_archivemonth_title_border
|
||||
color_archivemonth_title
|
||||
);
|
||||
return $self->_append_props( "archive_props", @props );
|
||||
}
|
||||
|
||||
sub navigation_props {
|
||||
my $self = shift;
|
||||
my @props = qw(
|
||||
color_navigation_background
|
||||
color_navigation_text
|
||||
color_navigation_border
|
||||
);
|
||||
return $self->_append_props( "navigation_props", @props );
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,14 @@
|
|||
package LJ::S2Theme;
|
||||
use strict;
|
||||
use Carp qw(croak);
|
||||
|
||||
sub local_default_themes {
|
||||
return (
|
||||
colorside => 'colorside/nadeshiko',
|
||||
modish => 'modish/scarlet',
|
||||
sundaymorning => 'sundaymorning/greensquiggle',
|
||||
transmogrified => 'transmogrified/basic',
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,19 @@
|
|||
# Set this to the root of your project when deployed:
|
||||
http_path = "/"
|
||||
css_dir = "htdocs/stc/css"
|
||||
sass_dir = "htdocs/scss"
|
||||
images_dir = "htdocs/img"
|
||||
javascripts_dir = "htdocs/js"
|
||||
|
||||
add_import_path "../../htdocs/scss"
|
||||
|
||||
env_from_cli = environment
|
||||
if (environment.nil?)
|
||||
environment = :development
|
||||
else
|
||||
environment = env_from_cli
|
||||
end
|
||||
|
||||
output_style = (environment == :production) ? :compressed : :expanded
|
||||
line_comments = (environment == :production) ? false : true
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
#!/usr/bin/perl
|
||||
# -*-perl-*-
|
||||
|
||||
# THIS FILE IS INTENDED FOR EXAMPLE/DOCUMENTATION PURPOSES ONLY.
|
||||
# An active site should have a customized version of this file
|
||||
# located in ext/local/etc. This file exists primarily to document
|
||||
# what options are being used in production on the main Dreamwidth
|
||||
# site, for use in development. A more generic etc/config-local.pl
|
||||
# is available in the dw-free repository.
|
||||
|
||||
# Dreamwidth configuration file. Copy this out of the current
|
||||
# directory to ext/local/etc/config-local.pl and edit as necessary.
|
||||
# This will separate your active config file from the canonical
|
||||
# one under version control, and protect it from getting clobbered
|
||||
# when you upgrade to the newest Dreamwidth code in the future.
|
||||
|
||||
# This, and config-private.pl should be the only files you need to
|
||||
# change to get the Dreamwidth code to run on your site. Variables
|
||||
# which are set by $DW::PRIVATE::... should be configured in
|
||||
# config-private.pl instead.
|
||||
|
||||
# Use the checkconfig.pl utility to find any other config variables
|
||||
# that might not be documented here. You should be able to set config
|
||||
# values here and have the DW code run; if you have to modify the
|
||||
# code itself, it's a bug and you should report it.
|
||||
|
||||
{
|
||||
package LJ;
|
||||
|
||||
# keep this enabled only if this site is a development server
|
||||
$IS_DEV_SERVER = 1;
|
||||
|
||||
# home directory
|
||||
$HOME = $ENV{'LJHOME'};
|
||||
|
||||
# the base domain of your site.
|
||||
$DOMAIN = $DW::PRIVATE::DOMAIN;
|
||||
|
||||
# human readable name of this site as well as shortened versions
|
||||
# CHANGE THIS
|
||||
$SITENAME = "Dreamwidth Studios";
|
||||
$SITENAMESHORT = "Dreamwidth";
|
||||
$SITENAMEABBREV = "DW";
|
||||
$SITECOMPANY = "Dreamwidth Studios, LLC";
|
||||
|
||||
# supported languages (defaults to qw(en) if none given)
|
||||
# First element is default language for user interface, untranslated text
|
||||
@LANGS = qw( en_DW );
|
||||
|
||||
# MemCache information, if you have MemCache servers running
|
||||
@MEMCACHE_SERVERS = ('127.0.0.1:11211');
|
||||
#$MEMCACHE_COMPRESS_THRESHOLD = 1_000; # bytes
|
||||
|
||||
# optional SMTP server if it is to be used instead of sendmail
|
||||
$SMTP_SERVER = "localhost";
|
||||
$MAIL_TO_THESCHWARTZ = 1;
|
||||
|
||||
# setup recaptcha
|
||||
%RECAPTCHA = (
|
||||
public_key => $DW::PRIVATE::RECAPTCHA{public_key},
|
||||
private_key => $DW::PRIVATE::RECAPTCHA{private_key},
|
||||
);
|
||||
|
||||
# setup textcaptcha
|
||||
%TEXTCAPTCHA = (
|
||||
api_key => $DW::PRIVATE::TEXTCAPTCHA{api_key},
|
||||
);
|
||||
|
||||
# PayPal configuration. If you want to use PayPal, uncomment this
|
||||
# section and make sure to fill in the fields at the bottom of config-private.pl.
|
||||
#%PAYPAL_CONFIG = (
|
||||
# # express checkout URL, the token gets appended to this
|
||||
# url => 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=',
|
||||
# api_url => 'https://api-3t.sandbox.paypal.com/nvp',
|
||||
|
||||
# # credentials for the API
|
||||
# user => $DW::PRIVATE::PAYPAL{user},
|
||||
# password => $DW::PRIVATE::PAYPAL{password},
|
||||
# signature => $DW::PRIVATE::PAYPAL{signature},
|
||||
|
||||
# # set this to someone who is responsible for getting emails about
|
||||
# # various PayPal related events
|
||||
# email => $DW::PRIVATE::PAYPAL{email},
|
||||
# );
|
||||
|
||||
# YouTube configuration.
|
||||
# To get access to YouTube APIs, you will need to create a Google API key.
|
||||
# Uncomment this section and make sure to fill in the fields at the bottom of config-private.pl.
|
||||
#%YOUTUBE_CONFIG = (
|
||||
# # api URL, the token gets appended to this
|
||||
# api_url => 'https://www.googleapis.com/youtube/v3/videos?id=',
|
||||
#
|
||||
# # credentials for the API
|
||||
# apikey => $DW::PRIVATE::YOUTUBE{apikey},
|
||||
#);
|
||||
|
||||
# if you define these, little help bubbles appear next to common
|
||||
# widgets to the URL you define:
|
||||
%HELPURL = (
|
||||
paidaccountinfo => "https://www.dreamwidth.org/support/faqbrowse?faqid=4",
|
||||
);
|
||||
|
||||
# Configuration for suggestions community & adminbot
|
||||
$SUGGESTIONS_COMM = "dw_suggestions";
|
||||
$SUGGESTIONS_USER = "suggestions_bot";
|
||||
|
||||
# 404 page
|
||||
# Uncomment if you don't want the (dw-free) default, 404-error.bml
|
||||
# (Note: you need to provide your own 404-error-local.bml)
|
||||
$PAGE_404 = "404-error-local.bml";
|
||||
|
||||
# additional domain from which to serve the iframes for embedded content
|
||||
# for security reasons, we strongly recommend that this not be on your $DOMAIN
|
||||
#$EMBED_MODULE_DOMAIN = "embedded.dreamwidth.net";
|
||||
|
||||
# merchandise link
|
||||
$MERCH_URL = "https://www.zazzle.com/dreamwidth*";
|
||||
|
||||
# shop/pricing configuration
|
||||
%SHOP = (
|
||||
# key => [ $USD, months, account type, cost in points ],
|
||||
prem6 => [ 20, 6, 'premium', 200 ],
|
||||
prem12 => [ 40, 12, 'premium', 400 ],
|
||||
paid1 => [ 3, 1, 'paid', 30 ],
|
||||
paid2 => [ 5, 2, 'paid', 50 ],
|
||||
paid6 => [ 13, 6, 'paid', 130 ],
|
||||
paid12 => [ 25, 12, 'paid', 250 ],
|
||||
seed => [ 200, 99, 'seed', 2000 ],
|
||||
points => [],
|
||||
rename => [ 15, undef, undef, 150 ],
|
||||
# vgifts => [], # if present, sell virtual gifts
|
||||
);
|
||||
|
||||
# number of days to display virtual gifts on the profile - default to two weeks
|
||||
# $VGIFT_EXPIRE_DAYS = 14;
|
||||
|
||||
# You can turn on/off community importing here.
|
||||
$ALLOW_COMM_IMPORTS = 0;
|
||||
|
||||
# If this is defined and a number, if someone tries to import more than this many
|
||||
# comments in a single import, the error specified will be raised and the job will fail.
|
||||
$COMMENT_IMPORT_MAX = undef;
|
||||
$COMMENT_IMPORT_ERROR = "Importing more than 10,000 comments is currently disabled.";
|
||||
|
||||
# privileges for various email aliases in /admin/sendmail
|
||||
# make sure these map to existing support categories on your site
|
||||
%SENDMAIL_ACCOUNTS = (
|
||||
support => 'supportread:support',
|
||||
abuse => 'supportread:abuse',
|
||||
accounts => 'supportread:accounts',
|
||||
antispam => 'siteadmin:spamreports',
|
||||
);
|
||||
|
||||
# Set the URI for iOS to find the icon it uses for home-screen
|
||||
# bookmarks on user subdomains (or anything else rendered through
|
||||
# S2). This file is not part of the dw-free installation, and is
|
||||
# therefore disabled by default.
|
||||
$APPLE_TOUCH_ICON = "$LJ::RELATIVE_SITEROOT/apple-touch-icon.png";
|
||||
# Similarly for the icon used by Facebook for previews on links
|
||||
$FACEBOOK_PREVIEW_ICON = "$LJ::RELATIVE_SITEROOT/img/Swirly-d-square.png";
|
||||
|
||||
# Needed for concatenation of static resources (see bin/build-static.sh)
|
||||
$STATDOCS = "$HOME/build/static";
|
||||
|
||||
# sphinx search daemon
|
||||
#@SPHINX_SEARCHD = ( '127.0.0.1', 3312 );
|
||||
|
||||
# example betafeature config
|
||||
# %BETA_FEATURES = (
|
||||
# "updatepage" => {
|
||||
# start_time => 0,
|
||||
# end_time => "Inf",
|
||||
# },
|
||||
# "s2comments" => {
|
||||
# start_time => 0,
|
||||
# end_time => "Inf",
|
||||
# sitewide => 1,
|
||||
# },
|
||||
# );
|
||||
|
||||
}
|
||||
|
||||
1;
|
|
@ -0,0 +1,3 @@
|
|||
personal_ws-1.1 en 0
|
||||
Dreamwidth
|
||||
DW
|
|
@ -0,0 +1,131 @@
|
|||
- name: Dreamwidth Studios, LLC's Owners
|
||||
people:
|
||||
- name: Denise Paolucci
|
||||
img: https://www.dreamwidth.org/userpic/256/6
|
||||
bio:
|
||||
- |
|
||||
(the Suit) began working on the
|
||||
LiveJournal.com project in 2001. Since then, she's done everything from
|
||||
customer service to product planning to documentation to user advocacy
|
||||
to QA testing to falling over exhausted because she's trying to do too
|
||||
much at once. She left LiveJournal in 2007 to pursue a career in
|
||||
writing. She hopes that with Dreamwidth Studios, she'll be able to use
|
||||
her experience to create a place where creative people of all types will
|
||||
find a home for their expression where they feel safe, welcomed, and
|
||||
supported.
|
||||
- |
|
||||
Denise lives in Baltimore, Maryland, with her long-suffering
|
||||
wife, who fortunately enjoys the frequent "c'mere, look, isn't
|
||||
this <em>cool</em>?" invocations, and three cats, who don't care about
|
||||
the internet as long as they get fed on time.
|
||||
official:
|
||||
- denise
|
||||
- dw_biz
|
||||
- name: Mark Smith
|
||||
img: https://www.dreamwidth.org/userpic/257/6
|
||||
bio:
|
||||
- |
|
||||
(the Geek) began volunteering with LiveJournal.com in 2001 in technical
|
||||
support and code development. He joined the staff in 2004, where he
|
||||
contributed heavily to all areas of the site and worked on utilities
|
||||
such as Perlbal and MogileFS that are now used by many other web sites.
|
||||
After transitioning to Six Apart, Mark worked to design and build out
|
||||
the systems infrastructure for the Vox.com product launch.
|
||||
- |
|
||||
Since those days, Mark has been a MySQL DBA, managed an operations team,
|
||||
and maintained a cadre of open source projects of his own while working
|
||||
for companies such as Google, Mozilla, and Bump.
|
||||
- |
|
||||
He currently resides near San Francisco, CA with his partner, Ari, and
|
||||
their two small sons. In his free time, he enjoys motorcycles, tabletop
|
||||
and LARP gaming, and amateur radio (license KC8BCW).
|
||||
official:
|
||||
- mark
|
||||
- dw_dev
|
||||
- name: Dreamwidth Studios, LLC's Employees
|
||||
people:
|
||||
- name: Alierak
|
||||
img: https://www.dreamwidth.org/userpic/314317/7805
|
||||
bio:
|
||||
- |
|
||||
is Dreamwidth's backup sysadmin on call, helping Mark wrangle servers
|
||||
and keeping an eye out for problems. He has approximately two decades of
|
||||
experience with Unix systems and open source, resulting in ninja-like reflexes
|
||||
for troubleshooting and bug hunting. He became <s>disillusioned</s> familiar
|
||||
with the LiveJournal codebase in 2006 when Brad announced a cross-site
|
||||
scripting contest offering permanent accounts for reporting security bugs
|
||||
(Alierak won three and maintains a healthy mistrust of our HTML cleaner).
|
||||
- |
|
||||
He is also a sysadmin at a major university, husband and father of two, and
|
||||
enjoys building or fixing things, cooking, and playing with math. He can
|
||||
often be found singing or playing various instruments in church.
|
||||
official:
|
||||
- alierak
|
||||
- name: Jennifer Griffin
|
||||
img: https://www.dreamwidth.org/userpic/210571/6
|
||||
bio:
|
||||
- |
|
||||
does Terms of Service enforcement because Mark
|
||||
asked her to, and submits tons of Bugzilla patches because it's fun. An
|
||||
MIT graduate, she has been on the internet since before the invention of
|
||||
this newfangled "World Wide Web" thing. She runs the MU* where Mark &
|
||||
Janine met, which lets her claim indirect partial responsibility for the
|
||||
existence of Dreamwidth. You're welcome.
|
||||
- |
|
||||
Jen is passionate about computers, communities, crafts, all varieties
|
||||
of music, speculative fiction, space exploration... basically the whole
|
||||
damn universe. She grew up and currently lives in the reddest of the
|
||||
red states, but also spent 12 years residing in the bluest of the blue
|
||||
states, so she is used to navigating ideological extremes. After spending
|
||||
several years working as top-tier IT support in a non-profit organization,
|
||||
she changed gears and is now a full-time mom to two precious, precocious
|
||||
children.
|
||||
official:
|
||||
- dw_tos
|
||||
- name: Community Project Leaders
|
||||
note: "People who are currently working on major projects for Dreamwidth!"
|
||||
people:
|
||||
- name: Azurelunatic
|
||||
img: https://www.dreamwidth.org/userpic/529546/6
|
||||
bio:
|
||||
- |
|
||||
came into the LiveJournal volunteer IRC channel during one of the early
|
||||
data center "power events" to find out what was going on. Denise obtained
|
||||
another minion shortly thereafter. Azz specializes in thoughtful analysis
|
||||
of any social media system she immerses herself in, and enjoys finding the
|
||||
root needs underlying any request for more bells and whistles, and thinking
|
||||
up a way to fulfil that need that fits in with the site's gestalt and actually
|
||||
could be implemented. She was in IRC not looking busy enough when Denise and
|
||||
Mark needed a team leader for spam, and now enjoys squashing spammers.
|
||||
- |
|
||||
By day, Azz is a mild-mannered minion in the cloudy part of Silicon Valley
|
||||
(and lives in the foggy part of the Bay Area). She dreamed of becoming a
|
||||
Communications Officer like Lt. Uhura when she was a child; now she spends
|
||||
most of her commute using a suspiciously similar headset. Her hobbies include
|
||||
talking to Kat, crocheting, IRC, and having bizarre, one-sided conversations
|
||||
with the characters in her current draft novel.
|
||||
official:
|
||||
- dw_antispam
|
||||
- name: Deborah
|
||||
img: https://www.dreamwidth.org/userpic/5456520/37793
|
||||
bio:
|
||||
- |
|
||||
co-leads the accessibility team. She spends her time writing accessibility
|
||||
improvements for the Dreamwidth code, as well as educating the other developers
|
||||
and designers about accessibility. In her other life she works in library
|
||||
technology, where she's gained a reputation as That Person Who Will Glare
|
||||
at You If Your Library Software Isn't Accessible.
|
||||
official:
|
||||
- dw_accessibility
|
||||
- name: Sarah
|
||||
img: https://www.dreamwidth.org/userpic/529553/6
|
||||
bio:
|
||||
- |
|
||||
serves as Dreamwidth's executive assistant, which involves
|
||||
much filing of paperwork and weekly trips to the credit union. Yes, she
|
||||
will get you coffee, but only if she's already getting some for herself.
|
||||
And if you drink it full-octane. And if she can find a second clean mug.
|
||||
- |
|
||||
Sarah's superpowers include paying the bills on time, keeping the taxman
|
||||
from battering down the door, and keeping the pantry she shares with
|
||||
Denise well-stocked with Diet Coke with Lime.
|
|
@ -0,0 +1,63 @@
|
|||
<h1>Oops!</h1>
|
||||
<p>If you've gotten this error, it means that something is currently (and, with luck, temporarily) broken. Please wait five minutes and try again.</p>
|
||||
|
||||
<p>If the problem persists after five minutes, please check our <a href="http://twitter.com/dreamwidth">offsite status page</a> to see if we're aware of the problem. If we haven't updated it, <a href="http://www.downforeveryoneorjustme.com/dreamwidth.org">check to see if it's just a problem for you</a>. If it isn't, don't worry -- we'll fix it as soon as we can!</p>
|
||||
|
||||
<!--
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
||||
-->
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
DefaultLanguage en_DW
|
||||
DefaultScheme tropo-red
|
|
@ -0,0 +1,13 @@
|
|||
LookRoot $LJHOME/cgi-bin/bml/scheme
|
||||
DefaultLanguage en
|
||||
DefaultScheme blueshift
|
||||
IncludePath inc/
|
||||
|
||||
AllowOldSyntax 0
|
||||
ExtraConfig _config-local.bml, $LJHOME/cgi-bin/LJ/Global/BMLInit.pm
|
||||
AllowCode 1
|
||||
AllowTemplateCode 1
|
||||
MildXSSProtection 1
|
||||
|
||||
SubConfig: guide/, clients/, files/
|
||||
AllowCode 0
|
After Width: | Height: | Size: 5.8 KiB |
|
@ -0,0 +1 @@
|
|||
.staytuned.generic=Send all your feedback to <?ljuser dw_beta ljuser?>. We'll also put up updates about our upcoming beta features in that community. Thank you.
|
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 6.8 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 6.4 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 8.0 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 15 KiB |