forked from github/kensanata.oddmuse
Compare commits
173 Commits
2.3.5
...
cleaning-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73d04103c4 | ||
|
|
b58f83351d | ||
|
|
b3a1f199c1 | ||
|
|
9fbf8a6f39 | ||
|
|
c96b9bb71c | ||
|
|
71ff0f7de3 | ||
|
|
89fa22d1c9 | ||
|
|
7582aaaba1 | ||
|
|
58e9a1e240 | ||
|
|
bd39fe5d38 | ||
|
|
1c776e1080 | ||
|
|
d088887337 | ||
|
|
0ba76bafb2 | ||
|
|
c7756a8861 | ||
|
|
5462b215be | ||
|
|
f98374df9b | ||
|
|
4614990e04 | ||
|
|
6658886b72 | ||
|
|
5130a92f9c | ||
|
|
a602bc0678 | ||
|
|
09efd911e6 | ||
|
|
958c118649 | ||
|
|
c031898184 | ||
|
|
d32ebaddc8 | ||
|
|
9c90bba602 | ||
|
|
93cc1578d0 | ||
|
|
79610f7490 | ||
|
|
be2b87635c | ||
|
|
8e38179b66 | ||
|
|
1300cfad52 | ||
|
|
bc6ae67a9a | ||
|
|
c989bdab1d | ||
|
|
3d339a2bf5 | ||
|
|
ac7d68d134 | ||
|
|
a50c2da042 | ||
|
|
6ccf5b7c14 | ||
|
|
7a54eff9b1 | ||
|
|
3c2ff5577b | ||
|
|
d721704a1f | ||
|
|
2ba67e1d8b | ||
|
|
eb0a4b6416 | ||
|
|
7f9b23a704 | ||
|
|
1576c80c9f | ||
|
|
894748b6b8 | ||
|
|
a70618c3be | ||
|
|
7e92227414 | ||
|
|
57788b375a | ||
|
|
b363cb535f | ||
|
|
e31662cda6 | ||
|
|
ec84200a0b | ||
|
|
6f5a4f974c | ||
|
|
7d7383de7f | ||
|
|
892d462e53 | ||
|
|
4e26f0ea37 | ||
|
|
ca0a429027 | ||
|
|
d72ee44c3d | ||
|
|
5b8caecee9 | ||
|
|
9e58992459 | ||
|
|
408df36c0b | ||
|
|
46183d0246 | ||
|
|
3e6de210f8 | ||
|
|
f50b617b76 | ||
|
|
2c4df27922 | ||
|
|
823f518615 | ||
|
|
2a2987ac79 | ||
|
|
dfd97d4958 | ||
|
|
826d1cd6ef | ||
|
|
642cec5e7d | ||
|
|
dfa71cb2e3 | ||
|
|
5ed32a6d3f | ||
|
|
06c7fedec0 | ||
|
|
b29ce6c44d | ||
|
|
ef6d9172f5 | ||
|
|
eaf4433505 | ||
|
|
259dc5c27d | ||
|
|
e606016ece | ||
|
|
c7692fad5b | ||
|
|
3206947b6b | ||
|
|
1eb5bb06a5 | ||
|
|
0b4007ff5a | ||
|
|
92c64bbba9 | ||
|
|
f7d5430451 | ||
|
|
22bf1e8df3 | ||
|
|
9ec075c1c0 | ||
|
|
a767bb5c94 | ||
|
|
6d62283927 | ||
|
|
445e80cefc | ||
|
|
6589e84d10 | ||
|
|
59e79d2b17 | ||
|
|
ea426db112 | ||
|
|
b3759296e2 | ||
|
|
00388009f7 | ||
|
|
c50fb63c36 | ||
|
|
9f49cf49ea | ||
|
|
1c240033d8 | ||
|
|
c04743d6e1 | ||
|
|
f740251bbb | ||
|
|
4e90046b66 | ||
|
|
d1f9c401cd | ||
|
|
4027e142bc | ||
|
|
76b26df765 | ||
|
|
b054fa463d | ||
|
|
538dac4d3f | ||
|
|
1a2d690487 | ||
|
|
b7ff38b8a8 | ||
|
|
c0c79cfbf2 | ||
|
|
80ef71f3e4 | ||
|
|
846ddce24e | ||
|
|
4ec48bb963 | ||
|
|
70c7d154a3 | ||
|
|
eb0738dedc | ||
|
|
f993903c8c | ||
|
|
a5ecd94393 | ||
|
|
2c823013e7 | ||
|
|
e8b7ad4b67 | ||
|
|
3c84add52a | ||
|
|
e0c38a6fe6 | ||
|
|
f0588fa299 | ||
|
|
2942b9427d | ||
|
|
7acb6cf516 | ||
|
|
2a433a7513 | ||
|
|
62d6dc4bd4 | ||
|
|
9b35704a57 | ||
|
|
77fd49544c | ||
|
|
b3fa76bfb6 | ||
|
|
1ab2aa9427 | ||
|
|
57c2413b51 | ||
|
|
aa8dcd54fa | ||
|
|
81721e29de | ||
|
|
9d3b5e25ee | ||
|
|
2ca2d43068 | ||
|
|
697c320d52 | ||
|
|
de1b4c3a3b | ||
|
|
c6f00323fc | ||
|
|
300d8e9ad3 | ||
|
|
f78f0ad7e8 | ||
|
|
afb21a02d4 | ||
|
|
98af7703d7 | ||
|
|
b4b82e8050 | ||
|
|
9636fe2e0a | ||
|
|
cda31ad0aa | ||
|
|
5e35d0aa79 | ||
|
|
66ea19a686 | ||
|
|
b302e1f8d4 | ||
|
|
874586f27d | ||
|
|
5566297f91 | ||
|
|
295d64e34f | ||
|
|
8e3d36610e | ||
|
|
e1781c0651 | ||
|
|
c53f9c7954 | ||
|
|
a8ca3b6b95 | ||
|
|
02d90f1fc2 | ||
|
|
2ddd13eea5 | ||
|
|
ff069557f5 | ||
|
|
51f85d9581 | ||
|
|
9e6f63c0e8 | ||
|
|
4689452d8e | ||
|
|
90829ca433 | ||
|
|
eb3071d0db | ||
|
|
c4671a8909 | ||
|
|
aa759e5c04 | ||
|
|
7e27af5998 | ||
|
|
3c25fcb9ba | ||
|
|
7aa86d29fe | ||
|
|
7a8ffb8e64 | ||
|
|
f1f2ed71a5 | ||
|
|
4f4ad14850 | ||
|
|
7ad2d0ed38 | ||
|
|
9589c42a6a | ||
|
|
8d4c15e948 | ||
|
|
c7274a267b | ||
|
|
fafb051632 | ||
|
|
cb8c7a1234 |
16
BUGS
16
BUGS
@@ -1,16 +0,0 @@
|
||||
I've seen a bug that shows as follows: <strong class="changes">think
|
||||
it belongs anymore.</stron><strong class="changes">g>.
|
||||
|
||||
Is DiffHtmlMarkWords called twice for a chunk?
|
||||
|
||||
It seems that following the diff link from RC to a page that has
|
||||
a minor edit at the end will show a minor diff instead of a major
|
||||
diff, eventhough it *says* that it will show a major diff!
|
||||
|
||||
mod_perl:
|
||||
|
||||
After a while, the script forgets some pages, so that links to these
|
||||
pages turn into questionmarks.
|
||||
|
||||
From time to time, the script will show for a page X the page content
|
||||
of the previous page.
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IFPkgDescriptionDeleteWarning</key>
|
||||
<string></string>
|
||||
<key>IFPkgDescriptionDescription</key>
|
||||
<string>A wiki engine.</string>
|
||||
<key>IFPkgDescriptionTitle</key>
|
||||
<string>Oddmuse</string>
|
||||
<key>IFPkgDescriptionVersion</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,42 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>Oddmuse</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>Oddmuse</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string></string>
|
||||
<key>IFMajorVersion</key>
|
||||
<integer>1</integer>
|
||||
<key>IFMinorVersion</key>
|
||||
<integer>0</integer>
|
||||
<key>IFPkgFlagAllowBackRev</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagAuthorizationAction</key>
|
||||
<string>RootAuthorization</string>
|
||||
<key>IFPkgFlagDefaultLocation</key>
|
||||
<string>/Library/WebServer</string>
|
||||
<key>IFPkgFlagFollowLinks</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagInstallFat</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagIsRequired</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagOverwritePermissions</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagRelocatable</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagRestartAction</key>
|
||||
<string>NoRestart</string>
|
||||
<key>IFPkgFlagRootVolumeOnly</key>
|
||||
<true/>
|
||||
<key>IFPkgFlagUpdateInstalledLanguages</key>
|
||||
<false/>
|
||||
<key>IFPkgFlagUseUserMask</key>
|
||||
<integer>0</integer>
|
||||
<key>IFPkgFormatVersion</key>
|
||||
<real>0.10000000149011612</real>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
package OddMuse;
|
||||
$DataDir = '/Library/WebServer/Oddmuse';
|
||||
do 'current';
|
||||
@@ -1 +0,0 @@
|
||||
$AdminPass = '';
|
||||
@@ -1 +0,0 @@
|
||||
$AdminPass = '';
|
||||
4
Mac/wiki
4
Mac/wiki
@@ -1,4 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
package OddMuse;
|
||||
$DataDir = '/Library/WebServer/Oddmuse';
|
||||
do 'current';
|
||||
132
Makefile
132
Makefile
@@ -1,5 +1,6 @@
|
||||
# The Makefile is only for developpers wanting to prepare the tarball.
|
||||
# Make sure the CVS keywords for the sed command on the next line are not expanded.
|
||||
# In order to build a copy of Oddmuse with all the version numbers, use:
|
||||
# make build. This creates modified copies of the files in the build
|
||||
# subdirectory.
|
||||
|
||||
VERSION_NO=$(shell git describe --tags)
|
||||
TRANSLATIONS=$(wildcard modules/translations/[a-z]*.pl$)
|
||||
@@ -45,130 +46,3 @@ translations: $(TRANSLATIONS)
|
||||
|
||||
test:
|
||||
prove t
|
||||
|
||||
# UNTESTED/OBSOLETE: these targets have not been tested in a long time
|
||||
# and are potentially obsolete.
|
||||
VERSION=oddmuse-$(VERSION_NO)
|
||||
UPLOADVERSION=oddmuse-inkscape-$(VERSION_NO)
|
||||
INKSCAPE=GPL $(wildcard inkscape/*.py inkscape/*.inx inkscape/*.sh)
|
||||
PACKAGEMAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
|
||||
DIST=$(VERSION).tar.gz $(VERSION).tar.gz.sig \
|
||||
contrib/simple-install/$(VERSION)-simple.tar.gz \
|
||||
contrib/simple-install/$(VERSION)-simple.tar.gz.sig
|
||||
OLDDIST=$(VERSION).dmg $(VERSION).dmg.sig \
|
||||
$(VERSION).tgz $(VERSION).tgz.sig
|
||||
PWD=$(shell pwd)
|
||||
|
||||
dist: $(DIST)
|
||||
|
||||
upload: $(DIST)
|
||||
for f in $^; do \
|
||||
scp $$f as@dl.sv.nongnu.org:/releases/oddmuse/; \
|
||||
done
|
||||
|
||||
upload-text: new-utf8.pl
|
||||
wikiupload new-utf8.pl http://www.oddmuse.org/cgi-bin/oddmuse-en/New_Translation_File
|
||||
|
||||
contrib/simple-install/$(VERSION)-simple.tar.gz:
|
||||
cd contrib/simple-install && make $(VERSION)-simple.tar.gz
|
||||
|
||||
$(VERSION).tar.gz: README FDL GPL ChangeLog wiki.pl $(TRANSLATIONS) $(MODULES) current.pl
|
||||
rm -rf $(VERSION)
|
||||
mkdir $(VERSION)
|
||||
cp $^ $(VERSION)
|
||||
tar czf $@ $(VERSION)
|
||||
|
||||
$(UPLOADVERSION).tar.gz: $(INKSCAPE)
|
||||
rm -rf $(UPLOADVERSION)
|
||||
mkdir $(UPLOADVERSION)
|
||||
cp $^ $(UPLOADVERSION)
|
||||
cp wikiupload $(UPLOADVERSION)/oddmuse-upload.py
|
||||
tar czf $@ $(UPLOADVERSION)
|
||||
|
||||
%.sig: %
|
||||
gpg --sign -b $<
|
||||
|
||||
# OSX: .pkg is the package, and .dmg is the disk image.
|
||||
|
||||
# Make sure to copy the files into a new directory so that the CVS
|
||||
#subdirectory are not inlcuded in the .pkg. And fix permissions. Skip
|
||||
#if we can't run PackageMaker. All cp commands need sudo because on a
|
||||
#second run the directories will already exist.
|
||||
$(VERSION).pkg: wiki.pl modules/creole.pl Mac/config Mac/wiki
|
||||
if test -x $(PACKAGEMAKER); then \
|
||||
mkdir -p Mac/pkg/CGI-Executables; \
|
||||
sudo cp wiki.pl Mac/pkg/CGI-Executables/current; \
|
||||
sudo cp Mac/wiki Mac/pkg/CGI-Executables/wiki; \
|
||||
sudo chown -R root:admin Mac/pkg/CGI-Executables; \
|
||||
sudo chmod 644 Mac/pkg/CGI-Executables/current; \
|
||||
sudo chmod 755 Mac/pkg/CGI-Executables/wiki; \
|
||||
mkdir -p Mac/pkg/Oddmuse; \
|
||||
sudo cp Mac/config Mac/pkg/Oddmuse; \
|
||||
sudo chown www:admin Mac/pkg/Oddmuse; \
|
||||
sudo chmod 775 Mac/pkg/Oddmuse; \
|
||||
sudo chown root:admin Mac/pkg/Oddmuse/config; \
|
||||
sudo chmod 664 Mac/pkg/Oddmuse/config; \
|
||||
mkdir -p Mac/pkg/Oddmuse/modules; \
|
||||
sudo cp modules/mac.pl Mac/pkg/Oddmuse/modules; \
|
||||
sudo cp modules/creole.pl Mac/pkg/Oddmuse/modules; \
|
||||
sudo chown -R root:admin Mac/pkg/Oddmuse/modules; \
|
||||
sudo chmod 775 Mac/pkg/Oddmuse/modules; \
|
||||
sudo chmod 644 Mac/pkg/Oddmuse/modules/*; \
|
||||
$(PACKAGEMAKER) -build \
|
||||
-p $(PWD)/$@ \
|
||||
-i $(PWD)/Mac/Info.plist \
|
||||
-d $(PWD)/Mac/Description.plist \
|
||||
-f $(PWD)/Mac/pkg; \
|
||||
fi;
|
||||
|
||||
$(VERSION).dmg: $(VERSION).pkg
|
||||
hdiutil create -srcfolder $< -fs HFS+ -volname "Oddmuse" $@
|
||||
|
||||
# Slackware: .tgz are .tar.gz files used by the installer
|
||||
# Slackware webserver is run by nobody uid/gid 99/99.
|
||||
|
||||
$(VERSION).tgz: wiki.pl modules/creole.pl Mac/config Mac/wiki
|
||||
sudo rm -rf Slack/var Slack/install
|
||||
mkdir -p Slack/var/www/wiki/modules
|
||||
mkdir -p Slack/var/www/cgi-bin
|
||||
mkdir -p Slack/install
|
||||
sudo cp Mac/config Slack/var/www/wiki
|
||||
sudo cp Mac/wiki Slack/var/www/cgi-bin
|
||||
sudo cp README Slack/var/www/wiki
|
||||
sudo cp modules/creole.pl Slack/var/www/wiki/modules
|
||||
sudo cp wiki.pl Slack/var/www/cgi-bin/current
|
||||
sudo sed -e 's/VERSION/$(VERSION_NO)/' < Slack/slack-desc > Slack/install/slack-desc
|
||||
sudo chown -R 0:0 Slack/var Slack/install
|
||||
sudo chgrp 99 Slack/var/www/cgi-bin/wiki
|
||||
sudo chmod 644 Slack/var/www/cgi-bin/current
|
||||
sudo chmod 775 Slack/var/www/cgi-bin/wiki
|
||||
cd Slack && tar czf ../$@ var install
|
||||
|
||||
update-translations: $(TRANSLATIONS)
|
||||
|
||||
upload-translations: always
|
||||
for f in $(TRANSLATIONS); do \
|
||||
cvs status $$f | grep 'Status: Up-to-date'; \
|
||||
wikiput -z "ham" -u "cvs" -s "update" \
|
||||
"http://www.oddmuse.org/cgi-bin/oddmuse/raw/$$f" < $$f; \
|
||||
done
|
||||
|
||||
deb:
|
||||
equivs-build control
|
||||
|
||||
install:
|
||||
@echo This only installs the deb file, not the script itself.
|
||||
dpkg -i oddmuse*.deb
|
||||
|
||||
package-upload: debian-$(VERSION).tar.gz debian-$(VERSION).tar.gz.sig
|
||||
curl -T "{debian-$(VERSION).tar.gz,debian-$(VERSION).tar.gz.sig}" \
|
||||
ftp://savannah.gnu.org/incoming/savannah/oddmuse/
|
||||
|
||||
package: debian-$(VERSION).tar.gz
|
||||
gpg --ascii --encrypt $<
|
||||
|
||||
debian-$(VERSION).tar.gz:
|
||||
rm -rf $(VERSION)
|
||||
mkdir $(VERSION)
|
||||
cp README FDL GPL wiki.pl $(VERSION)
|
||||
tar czf $@ $(VERSION)
|
||||
|
||||
37
OddMuse.pm
37
OddMuse.pm
@@ -1,37 +0,0 @@
|
||||
# Copyright (C) 2005 Alex Schroeder <alex@emacswiki.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the
|
||||
# Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use Apache2::RequestRec ();
|
||||
use Apache2::RequestIO ();
|
||||
use Apache2::Const -compile => qw(OK);
|
||||
|
||||
package OddMuse;
|
||||
|
||||
$RunCGI = 0;
|
||||
require 'wiki.pl';
|
||||
|
||||
sub handler {
|
||||
my $r = shift;
|
||||
for my $var (qw{DataDir UseConfig ConfigFile ModuleDir ConfigPage
|
||||
AdminPass EditPass ScriptName FullUrl}) {
|
||||
no strict "refs";
|
||||
$$var = $ENV{"Wiki$var"} if exists $ENV{"Wiki$var"}; # symbolic references
|
||||
}
|
||||
DoWikiRequest();
|
||||
return Apache2::Const::OK;
|
||||
}
|
||||
48
README
48
README
@@ -1,48 +0,0 @@
|
||||
This is the README file distributed together with the Oddmuse script.
|
||||
|
||||
To install the script, copy wiki.pl into your cgi-bin directory. This
|
||||
will store the pages in a temporary directory for you. In order to
|
||||
make this permanent, change the $DataDir option in the script from
|
||||
'/tmp/oddmuse' to 'oddmuse'. This will save the pages in a
|
||||
subdirectory of your cgi-bin directory.
|
||||
|
||||
In order to start your wiki, click on the edit link (the first link
|
||||
below the navigation bar, at the bottom of the page). This will allow
|
||||
you to enter some text for this page. Click the Save button and you
|
||||
are done.
|
||||
|
||||
To add new pages, edit the homepage and add links to new pages. Links
|
||||
are traditionally formed by ConcatenatingCapitalizedWords. This kind
|
||||
of link pattern is called a wiki word.
|
||||
|
||||
Alternatively, put links in [[double square brackets]]. This kind of
|
||||
link pattern is called a free link.
|
||||
|
||||
As long as the new pages don't exist, links to these pages are
|
||||
followed by a clickable question mark. Click on the question mark to
|
||||
create the new page.
|
||||
|
||||
Enjoy your wiki experience.
|
||||
|
||||
Visit http://www.oddmuse.org/ to learn more about the translation
|
||||
files and modules that are part of this package.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.1 or
|
||||
any later version published by the Free Software Foundation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
Both the GNU Free Documentation License, and the GNU General Public
|
||||
License are distributed together with this script. See the files FDL
|
||||
and GPL, respectively.
|
||||
157
README.creole
Normal file
157
README.creole
Normal file
@@ -0,0 +1,157 @@
|
||||
This is the README file distributed together with the
|
||||
[[http://oddmuse.org/|Oddmuse]] script.
|
||||
|
||||
== Installing Oddmuse on a Debian System running Apache
|
||||
|
||||
The following instructions require a number of tools. You can make sure
|
||||
they're all installed by issuing the following command as {{{root}}}:
|
||||
|
||||
{{{
|
||||
apt-get install coreutils apache2 sudo wget w3m perl \
|
||||
libwww-perl libxml-rss-perl diffutils
|
||||
}}}
|
||||
|
||||
You probably created an account for yourself. You might have to add this
|
||||
user to the {{{sudo}}} group. Here's how I created my own user as
|
||||
{{{root}}}:
|
||||
|
||||
{{{
|
||||
adduser alex
|
||||
usermod -a -G sudo alex
|
||||
}}}
|
||||
|
||||
Now you can login as {{{alex}}} and do everything else using {{{sudo}}}.
|
||||
|
||||
You need to copy wiki.pl into your cgi-bin directory, and you need to
|
||||
make the script executable.
|
||||
|
||||
{{{
|
||||
sudo wget -O /usr/lib/cgi-bin/wiki.pl \
|
||||
http://git.savannah.gnu.org/cgit/oddmuse.git/plain/wiki.pl
|
||||
sudo chmod +x /usr/lib/cgi-bin/wiki.pl
|
||||
}}}
|
||||
|
||||
You should be able to test it right now! Visit
|
||||
{{{http://localhost/cgi-bin/wiki.pl}}}. If your site is available from
|
||||
the outside, you will be able to use a normal browser. If don't have a
|
||||
domain name yet, you'll probably have to use a text browser like
|
||||
{{{w3m}}}.
|
||||
|
||||
{{{
|
||||
w3m http://localhost/cgi-bin/wiki.pl
|
||||
}}}
|
||||
|
||||
If you create pages in this wiki, these will get stored in a temporary
|
||||
directory. You need change the data directory from {{{"/tmp/oddmuse"}}}
|
||||
to like {{{"/var/local/oddmuse"}}}. The best way to do this without
|
||||
changing {{{wiki.pl}}} is by editing
|
||||
{{{/etc/apache2/sites-available/default}}}. Add the following line:
|
||||
|
||||
{{{
|
||||
SetEnv WikiDataDir /var/local/oddmuse
|
||||
}}}
|
||||
|
||||
Enable the default site by calling the following command:
|
||||
|
||||
{{{
|
||||
sudo a2ensite default
|
||||
}}}
|
||||
|
||||
Reload the Apache configuration by calling the following command:
|
||||
|
||||
{{{
|
||||
sudo service apache2 reload
|
||||
}}}
|
||||
|
||||
You need to create the new data directory. You webserver runs CGI
|
||||
scripts as {{{www-data}}}. Thus, you need to change the owner and group
|
||||
of the directory to {{{www-data}}}.
|
||||
|
||||
{{{
|
||||
sudo mkdir -p /var/local/oddmuse
|
||||
sudo chown www-data.www-data /var/local/oddmuse
|
||||
}}}
|
||||
|
||||
Done! Visit your wiki and start editing. Click on the edit link (the
|
||||
first link below the navigation bar, at the bottom of the page). This
|
||||
will allow you to enter some text for this page. Click the Save button
|
||||
and you are done.
|
||||
|
||||
To add new pages, edit the homepage and add links to new pages by
|
||||
putting their names in {{{[[double square brackets]]}}}.
|
||||
|
||||
Enjoy your wiki experience.
|
||||
|
||||
Visit http://www.oddmuse.org/ to learn more about the translation
|
||||
files and modules that are part of this package.
|
||||
|
||||
== Apache
|
||||
|
||||
If you think this information doesn't work for you, here are some things
|
||||
to check.
|
||||
|
||||
Apache's config directory is {{{/etc/apache2/apache2.conf}}}. This is
|
||||
where we get the {{{www-data}}} username from. It says:
|
||||
|
||||
{{{
|
||||
# These need to be set in /etc/apache2/envvars
|
||||
User ${APACHE_RUN_USER}
|
||||
Group ${APACHE_RUN_GROUP}
|
||||
}}}
|
||||
|
||||
Checking {{{/etc/apache2/envvars}}} we see the following:
|
||||
|
||||
{{{
|
||||
export APACHE_RUN_USER=www-data
|
||||
export APACHE_RUN_GROUP=www-data
|
||||
}}}
|
||||
|
||||
So that's what we're using in the {{{chown}}} command in our
|
||||
instructions above.
|
||||
|
||||
The default site is configured in
|
||||
{{{/etc/apache2/sites-available/default}}}. In order for it to be
|
||||
//enabled//, there must be a symlink from a file in
|
||||
{{{/etc/apache2/sites-enabled}}} to the file in
|
||||
{{{sites-available}}}. You can enable it using the following command:
|
||||
|
||||
{{{
|
||||
sudo a2ensite default
|
||||
}}}
|
||||
|
||||
This file also lists the directories we've used in out instructions
|
||||
above.
|
||||
|
||||
{{{
|
||||
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
||||
}}}
|
||||
|
||||
This means that {{{http://localhost/cgi-bin/wiki.pl}}} will call
|
||||
{{{/usr/lib/cgi-bin/wiki.pl}}}
|
||||
|
||||
Don't forget to reload the Apache configuration as shown above, or
|
||||
simply restart it all:
|
||||
|
||||
{{{
|
||||
sudo service apache2 graceful
|
||||
}}}
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.1 or
|
||||
any later version published by the Free Software Foundation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
Both the GNU Free Documentation License, and the GNU General Public
|
||||
License are distributed together with this script. See the files FDL
|
||||
and GPL, respectively.
|
||||
@@ -1,19 +0,0 @@
|
||||
# HOW TO EDIT THIS FILE:
|
||||
# The "handy ruler" below makes it easier to edit a package description. Line
|
||||
# up the first '|' above the ':' following the base package name, and the '|'
|
||||
# on the right side marks the last column you can put a character in. You must
|
||||
# make exactly 11 lines for the formatting to be correct. It's also
|
||||
# customary to leave one space after the ':'.
|
||||
|
||||
|-----handy-ruler------------------------------------------------------|
|
||||
oddmuse: Oddmuse VERSION
|
||||
oddmuse:
|
||||
oddmuse: Oddmuse is the name of the wiki engine being further developed by
|
||||
oddmuse: Alex Schröder. The wiki engine consists of one big Perl script.
|
||||
oddmuse: When installed on a web host, the script generates a wiki -- a
|
||||
oddmuse: web site where users can read pages, change pages, add new pages,
|
||||
oddmuse: and delete old pages. All pages are accessed via the script.
|
||||
oddmuse:
|
||||
oddmuse: This package will also install the Creole markup extension.
|
||||
oddmuse:
|
||||
oddmuse: Package created by Alex Schröder
|
||||
@@ -1,172 +0,0 @@
|
||||
Name: Oddmuse
|
||||
Version: 2007.12.31
|
||||
Release: 1suse
|
||||
Group: Applications/Productivity
|
||||
License: /opt/oddmuse/doc/COPYING
|
||||
Summary: Simple user-editted website (wiki)
|
||||
|
||||
Distribution: any perl+webserver+cgi distro
|
||||
Vendor: Alex Schröder
|
||||
Packager: Dr. Robert J. Meier <grandfather@sourceforge.org>
|
||||
URL: http://www.oddmuse.org/
|
||||
|
||||
BuildRoot: /var/tmp/rpm-oddmusewiki-root
|
||||
BuildArch: noarch
|
||||
Prefix: /opt/oddmuse
|
||||
Prefix: /srv/www/wiki
|
||||
Prefix: /srv/www/cgi-bin
|
||||
Prefix: /etc/httpd/conf.d
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
Source1: %{name}-modules-%{version}.tar.gz
|
||||
Source2: %{name}-contents-%{version}.tar.gz
|
||||
|
||||
Provides: wiki
|
||||
Requires: perl >= 5.0.0
|
||||
|
||||
# Avoid automatic dependency calculation macros, as they are seldom portable.
|
||||
AutoReq: no
|
||||
AutoProv: no
|
||||
|
||||
|
||||
|
||||
%description
|
||||
Oddmuse is a program to run a wiki.
|
||||
A wiki can be used for communication in a team or for documentation,
|
||||
when things have to be quick and easy: Content Management for everybody.
|
||||
|
||||
A wiki enables other people to quickly join efforts. In the office,
|
||||
you can introduce new employees, distribute phone lists, store memos,
|
||||
plan trips, document projects, prepare meetings,
|
||||
or describe internal processes.
|
||||
|
||||
For many free software projects wikis have taken an important role
|
||||
somewhere between manual, FAQ, IRC, and mailing lists.
|
||||
|
||||
Oddmuse is very easy to install: Simple installation, compact code,
|
||||
and easy extensibility were the most important design factors.
|
||||
|
||||
Features
|
||||
|
||||
1. Easy to install: Just copy one file into the correct directory.
|
||||
2. No dependencies on version management tools or database installation.
|
||||
3. Web server needs only Perl installed.
|
||||
4. Easy to use for users, easy to hack for programmers.
|
||||
5. Capable of multilingual sites.
|
||||
6. Unicode (UTF-8) per default.
|
||||
7. Valid HTML; CSS friendly.
|
||||
8. Caching on several levels.
|
||||
9. Easy to download.
|
||||
|
||||
|
||||
|
||||
%prep
|
||||
# Record the environment variables
|
||||
# $RPM_ARCH $RPM_OS - host configuration
|
||||
# $RPM_OPT_FLAGS - c compile flags
|
||||
# $RPM_PACKAGE_[NAME VERSION RELEASE] - spec file fields
|
||||
# $RPM_SOURCE_DIR - base for Source and Patch filenames
|
||||
# $RPM_BUILD_DIR - base for setup macro filenames
|
||||
# $RPM_BUILD_ROOT - %{BuildRoot}
|
||||
# modified by rpmbuild --buildroot
|
||||
# $RPM_DOC_DIR - base for doc macro filenames
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-prep.log; fi
|
||||
|
||||
%setup -q -b1 -b2
|
||||
|
||||
|
||||
|
||||
%build
|
||||
# Record the environment variables
|
||||
# Nomimally these are the same as for %prep
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-build.log; fi
|
||||
|
||||
# Nothing to build yet.
|
||||
|
||||
|
||||
|
||||
%install
|
||||
# Record the environment variables
|
||||
# Nomimally these are the same as for %prep
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-install.log; fi
|
||||
|
||||
rm -rf "$RPM_BUILD_ROOT"
|
||||
mkdir -p "$RPM_BUILD_ROOT"/opt/oddmuse/cgi-bin
|
||||
mkdir -p "$RPM_BUILD_ROOT"/opt/oddmuse/doc
|
||||
mkdir -p "$RPM_BUILD_ROOT"/opt/oddmuse/etc
|
||||
mkdir -p "$RPM_BUILD_ROOT"/opt/oddmuse/libperl
|
||||
mkdir -p "$RPM_BUILD_ROOT"/srv/www/cgi-bin
|
||||
mkdir -p "$RPM_BUILD_ROOT"/srv/www/wiki
|
||||
mkdir -p "$RPM_BUILD_ROOT"/etc/httpd/conf.d
|
||||
|
||||
install cgi-bin/wiki.pl "$RPM_BUILD_ROOT"/opt/oddmuse/cgi-bin
|
||||
install cgi-bin/wiki.pl "$RPM_BUILD_ROOT"/srv/www/cgi-bin
|
||||
install doc/COPYING "$RPM_BUILD_ROOT"/opt/oddmuse/doc
|
||||
install etc/oddmusewiki.conf "$RPM_BUILD_ROOT"/opt/oddmuse/etc
|
||||
install libperl/current libperl/*.pl "$RPM_BUILD_ROOT"/opt/oddmuse/libperl
|
||||
cp -r wiki "$RPM_BUILD_ROOT"/srv/www
|
||||
|
||||
|
||||
|
||||
%clean
|
||||
# Record the environment variables
|
||||
# Nomimally these are the same as for %prep
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-clean.log; fi
|
||||
rm -rf "$RPM_BUILD_ROOT"
|
||||
|
||||
|
||||
|
||||
%pre
|
||||
# Record local environment variables.
|
||||
# $RPM_INSTALL_PREFIX* reflect the Prefix: field(s)
|
||||
# modified by --relocate and --prefix arguments
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-pre.log; fi
|
||||
|
||||
|
||||
|
||||
%post
|
||||
# Record local environment variables
|
||||
# $RPM_INSTALL_PREFIX* reflect the Prefix: field(s)
|
||||
# modified by --relocate and --prefix arguments
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-post.log; fi
|
||||
|
||||
# Because relocation may change configuration,
|
||||
# it cannot be symlinked into a public access site at rpmbuild -bb time.
|
||||
if [ \( -d "$RPM_INSTALL_PREFIX2" -a -w "$RPM_INSTALL_PREFIX2" \) -o -w "$RPM_INSTALL_PREFIX2"/wiki.pl ]; then
|
||||
cat "$RPM_INSTALL_PREFIX0"/cgi-bin/wiki.pl |
|
||||
perl -pe 's:/opt/oddmuse:'"$RPM_INSTALL_PREFIX0"':;' |
|
||||
perl -pe 's:/srv/www/wiki:'"$RPM_INSTALL_PREFIX1"':;' |
|
||||
cat > "$RPM_INSTALL_PREFIX2"/wiki.pl
|
||||
fi
|
||||
|
||||
|
||||
|
||||
%preun
|
||||
# Record local environment variables
|
||||
# $RPM_INSTALL_PREFIX* reflect the Prefix: field(s)
|
||||
# modified by --relocate and --prefix arguments at rpm -i time
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-preun.log; fi
|
||||
|
||||
|
||||
|
||||
%postun
|
||||
# Record local environment variables
|
||||
# $RPM_INSTALL_PREFIX* reflect the Prefix: field(s)
|
||||
# modified by --relocate and --prefix arguments at rpm -i time
|
||||
if [ "$RPM_DUMPENV" != "" ] ; then env | sort > /tmp/rpm-postun.log; fi
|
||||
|
||||
|
||||
|
||||
%files
|
||||
# The doc, config, attr and many other macros are well documented in RPM-HOWTO
|
||||
%defattr(0444,root,root)
|
||||
%license
|
||||
%attr(0555,root,root) /opt/oddmuse
|
||||
%config /opt/oddmuse/etc/oddmusewiki.conf
|
||||
%attr(0777,root,root) /srv/www/wiki
|
||||
%attr(0555,root,root) /srv/www/cgi-bin/wiki.pl
|
||||
|
||||
|
||||
|
||||
%changelog
|
||||
* Wed Jan 3 2008 Dr. Robert Meier <grandfather@sourceforge.org> 2007.12.13-1suse
|
||||
- copy-and-edit from hello.rpm
|
||||
@@ -1,26 +1,20 @@
|
||||
#!/usr/bin/perl
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (C) 2004 Alex Schroeder <alex@emacswiki.org>
|
||||
# Copyright (C) 2004 Alex Schroeder <alex@gnu.org>
|
||||
# Copyright (C) 2007 Vinicius José Latorre <viniciusjl at ig.com.br>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
# This program is free software: you can redistribute it and/or modify it under
|
||||
# the terms of the GNU General Public License as published by the Free Software
|
||||
# Foundation, either version 3 of the License, or (at your option) any later
|
||||
# version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the
|
||||
# Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
# $Id: ell-to-wiki.pl,v 1.5 2007/02/15 22:00:26 as Exp $
|
||||
# You should have received a copy of the GNU General Public License along with
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use LWP::UserAgent;
|
||||
use XML::Parser;
|
||||
|
||||
122
contrib/fix-copyright-years
Executable file
122
contrib/fix-copyright-years
Executable file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# GNU Radio is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# GNU Radio is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GNU Radio; see the file COPYING. If not, write to
|
||||
# the Free Software Foundation, Inc., 51 Franklin Street,
|
||||
# Boston, MA 02110-1301, USA.
|
||||
|
||||
# This file is based on code from GNU Radio.
|
||||
# https://github.com/balister/GNU-Radio/blob/master/dtools/bin/fix-copyright-years
|
||||
|
||||
import re
|
||||
import datetime
|
||||
import subprocess
|
||||
import multiprocessing
|
||||
|
||||
def command(*args): return subprocess.Popen(args, stdout=subprocess.PIPE).communicate()[0]
|
||||
|
||||
def is_free_software(lines):
|
||||
for line in lines[:50]:
|
||||
if 'This program is free software' in line: return True
|
||||
return False
|
||||
|
||||
def get_copyright_lines(lines):
|
||||
start = -1
|
||||
end = -1
|
||||
for i, line in enumerate(lines[:20]):
|
||||
if line.startswith('# Copyright'):
|
||||
if start == -1: start = i
|
||||
end = i
|
||||
if start == -1: raise Exception
|
||||
return start, end
|
||||
|
||||
def copyright_line(author, years):
|
||||
from_year = years.pop()
|
||||
to_year = from_year
|
||||
for year in years:
|
||||
if year > to_year: to_year = year
|
||||
elif year < from_year: from_year = year
|
||||
|
||||
if from_year == to_year:
|
||||
return '# Copyright (C) %d %s\n' % (from_year, author)
|
||||
else:
|
||||
return '# Copyright (C) %d–%d %s\n' % (from_year, to_year, author)
|
||||
|
||||
author_re = re.compile('\nAuthor: (.*)\nDate:.* (\d\d\d\d) ')
|
||||
|
||||
def fix_co_years(files):
|
||||
for file in files:
|
||||
print file
|
||||
years = {}
|
||||
changed = False
|
||||
lines = open(file).readlines()
|
||||
if not is_free_software(lines):
|
||||
print ' is not Free Software'
|
||||
continue
|
||||
|
||||
# extract authors and years from git log
|
||||
log = command('git', 'log', file)
|
||||
it = re.finditer(author_re, log)
|
||||
for match in it:
|
||||
author, year = match.groups()
|
||||
if author in years:
|
||||
years[author].add(int(year))
|
||||
else:
|
||||
years[author] = set([int(year)])
|
||||
|
||||
# extract copyright beginning and end from
|
||||
try:
|
||||
start, end = get_copyright_lines(lines)
|
||||
except:
|
||||
print ' copyright lines not found'
|
||||
continue
|
||||
|
||||
# only update or add existing authors, don't touch authors not in git log
|
||||
for author in years.keys():
|
||||
found = False
|
||||
for i in range(start, end + 1):
|
||||
if author in lines[i]:
|
||||
line = copyright_line(author, years[author])
|
||||
if line != lines[i]:
|
||||
lines[i] = line
|
||||
changed = True
|
||||
found = True
|
||||
continue
|
||||
|
||||
if not found:
|
||||
lines.insert(end, copyright_line(author, years[author]))
|
||||
changed = True
|
||||
|
||||
# write file
|
||||
if changed:
|
||||
# print ''.join(lines[:30])
|
||||
# print '------------------------------------------------------------------------'
|
||||
open(file, 'w').write(''.join(lines))
|
||||
|
||||
if __name__ == "__main__":
|
||||
# get recursive list of files in the repo
|
||||
files = command('git', 'ls-tree', '--name-only', 'HEAD', '-r').splitlines()
|
||||
# files = ['contrib/campaignwiki/add-link.pl']
|
||||
|
||||
# start n+1 processes to handle the files
|
||||
num_procs = multiprocessing.cpu_count()
|
||||
# num_procs = 1
|
||||
procs = [multiprocessing.Process(
|
||||
target=lambda *files: fix_co_years(files),
|
||||
args=files[num::num_procs],
|
||||
) for num in range(num_procs)]
|
||||
map(multiprocessing.Process.start, procs)
|
||||
map(multiprocessing.Process.join, procs)
|
||||
@@ -602,7 +602,7 @@ This command is used to reflect new pages to `oddmuse-pages-hash'."
|
||||
("{{{.*?}}}"
|
||||
0 '(face shadow
|
||||
help-echo "Creole code"))
|
||||
("^{{{\n\\(.*\n\\)+?}}}\n"
|
||||
("^{{{\\(.*\n\\)+?}}}\n"
|
||||
0 '(face shadow
|
||||
help-echo "Creole multiline code")))
|
||||
"Implement markup rules for the Creole markup extension.
|
||||
@@ -841,7 +841,9 @@ WIKI is the name of the wiki as defined in `oddmuse-wikis',
|
||||
PAGENAME is the pagename of the page you want to edit. If the
|
||||
page is already in a buffer, pop to that buffer instead of
|
||||
loading the page Use a prefix argument to force a reload of the
|
||||
page."
|
||||
page. Use \\[oddmuse-reload] to reload the list of pages
|
||||
available if you changed the URL in `oddmuse-wikis' or if other
|
||||
people have been editing the wiki in the mean time."
|
||||
(interactive (oddmuse-pagename))
|
||||
(make-directory (concat oddmuse-directory "/" wiki) t)
|
||||
(let ((name (concat wiki ":" pagename)))
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
/* Copyright 2005 Alex Schroeder <alex@emacswiki.org>
|
||||
based on http://simon.incutio.com/archive/2004/05/30/plinks#p-13
|
||||
Copyright 2004 Simon Willison
|
||||
|
||||
This script adds purple numbers to paragraphs.
|
||||
https://oddmuse.org/wiki/Purple_Numbers_Extension
|
||||
*/
|
||||
|
||||
function plinkHighlight() {
|
||||
@@ -1,17 +0,0 @@
|
||||
DirectoryIndex wiki.pl
|
||||
Options ExecCGI SymLinksIfOwnerMatch
|
||||
AddHandler cgi-script .pl
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} !=/favicon.ico
|
||||
RewriteRule ^(.*)$ wiki.pl?$1 [L,QSA]
|
||||
|
||||
# The config file might contain passwords. Also protect possible
|
||||
# backup filenames.
|
||||
RewriteRule ^config(\~|\.bak)?$ wiki.pl/config [L]
|
||||
# The visitor.log file contains IP numbers of visitors.
|
||||
RewriteRule ^visitors.log$ wiki.pl/visitor.log [L]
|
||||
</IfModule>
|
||||
@@ -1,14 +0,0 @@
|
||||
all:
|
||||
@echo Please invoke make dist on the top level
|
||||
|
||||
%-simple.tar.gz: README config wiki.pl .htaccess current.pl FDL GPL
|
||||
tar czf $@ $^
|
||||
|
||||
current.pl: ../../wiki.pl
|
||||
cp $^ $@
|
||||
|
||||
FDL: ../../FDL
|
||||
cp $^ $@
|
||||
|
||||
GPL: ../../GPL
|
||||
cp $^ $@
|
||||
@@ -1,76 +0,0 @@
|
||||
This is the README file distributed as part of the simple-install
|
||||
package together with the Oddmuse script.
|
||||
|
||||
Unzip all the files into a directory served by Apache. Get the
|
||||
current.pl file from here: http://emacswiki.org/scripts/current.pl
|
||||
|
||||
Your directory should now contain the following files:
|
||||
|
||||
* README (this file)
|
||||
* .htaccess (information for Apache)
|
||||
* config (a simple config file for you to modify)
|
||||
* wiki.pl (a wrapper script setting the data directory)
|
||||
* current.pl (the main script)
|
||||
* modules (a directory containing modules)
|
||||
* modules/creole.pl (support for the standard wiki markup)
|
||||
|
||||
The wiki pages will be saved in this directory.
|
||||
|
||||
Make sure the www user (or whoever Apache runs under) has write access
|
||||
to this directory. In that directory, try chmod o+w . and see if that
|
||||
helps when you get an error message saying that Oddmuse cannot create
|
||||
the temp directory.
|
||||
|
||||
You need to make sure that your administrator has allowed
|
||||
AllowOverride All in his httpd.conf file for the settings in the
|
||||
.htaccess file provided to have an effect.
|
||||
|
||||
Running Oddmuse will create more files, eventually.
|
||||
|
||||
* pages (the directory containing the pages)
|
||||
* keep (the directory containing older versions of pages)
|
||||
* pageidx (a file containing the names of existing pages)
|
||||
* rc.log (the file used to produce RecentChanges)
|
||||
* visitors.log (the file used to log the most recent visitors)
|
||||
* temp (a temporary directory for log files and the like)
|
||||
|
||||
In order to start your wiki, click on the edit link (the first link
|
||||
below the navigation bar, at the bottom of the page). This will allow
|
||||
you to enter some text for this page. Click the Save button and you
|
||||
are done.
|
||||
|
||||
To add new pages, edit the homepage and add links to new pages. Links
|
||||
are traditionally formed by ConcatenatingCapitalizedWords. This kind
|
||||
of link pattern is called a wiki word.
|
||||
|
||||
Alternatively, put links in [[double square brackets]]. This kind of
|
||||
link pattern is called a free link.
|
||||
|
||||
As long as the new pages don't exist, links to these pages are
|
||||
followed by a clickable question mark. Click on the question mark to
|
||||
create the new page.
|
||||
|
||||
Enjoy your wiki experience.
|
||||
|
||||
Visit http://www.oddmuse.org/ to learn more about the translation
|
||||
files and modules that are part of this package.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.1 or
|
||||
any later version published by the Free Software Foundation.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or (at
|
||||
your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
Both the GNU Free Documentation License, and the GNU General Public
|
||||
License are distributed together with this script. See the files FDL
|
||||
and GPL, respectively.
|
||||
@@ -1,2 +0,0 @@
|
||||
# Where to find diff(1) and grep(1)
|
||||
$ENV{PATH} = '/usr/bin:/bin';
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# This wrapper does nothing but tell Oddmuse to use the current
|
||||
# directory as its data directory.
|
||||
package OddMuse;
|
||||
$DataDir = '.';
|
||||
|
||||
# You need to get the latest copy of this script from
|
||||
# http://emacswiki.org/scripts/current.pl
|
||||
do 'current.pl';
|
||||
114
contrib/undo-double-quotes.pl
Executable file
114
contrib/undo-double-quotes.pl
Executable file
@@ -0,0 +1,114 @@
|
||||
#! /usr/bin/perl -w
|
||||
|
||||
# Copyright (C) 2015 Alex Schroeder <alex@gnu.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use utf8;
|
||||
use strict;
|
||||
use warnings;
|
||||
undef $/; # slurp
|
||||
|
||||
my %index = ();
|
||||
my $verbose = '';
|
||||
|
||||
sub write_file {
|
||||
my ($file, $data) = @_;
|
||||
return unless $data;
|
||||
open(my $fh, '>:utf8', $file) or die "Cannot write $file: $!";
|
||||
print $fh $data;
|
||||
close($fh);
|
||||
}
|
||||
|
||||
sub replacement_block {
|
||||
my ($block, $pos, @no_go) = @_;
|
||||
|
||||
while (@no_go) {
|
||||
my $first = shift @no_go;
|
||||
print "Is $pos between " . $first->[0] . " and " . $first->[1] . "?\n" if $verbose;
|
||||
return $block if $pos >= $first->[0] and $pos <= $first->[1];
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
sub translate_file {
|
||||
my ($data) = @_;
|
||||
my @no_go = ();
|
||||
|
||||
while ($data =~ /( <nowiki>.*?<\/nowiki>
|
||||
| <code>.*?<\/code>
|
||||
| ^ <pre> (.*\n)+ <\/pre>
|
||||
| ^ {{{ (.*\n)+ }}} )/gmx) {
|
||||
push @no_go, [pos($data) - length $1, pos($data)];
|
||||
print "no go from " . $no_go[-1]->[0] . ".." . $no_go[-1]->[1] . " for $1\n" if $verbose;
|
||||
}
|
||||
|
||||
# The problem is that these replacements don't adjust @no_go! Perhaps it is good enough?
|
||||
my $subs = '';
|
||||
$subs = $subs || $data =~ s/ ( \[\/quote\] \n \n \[quote\] ) /replacement_block($1, pos($data), @no_go)/gex;
|
||||
return $data if $subs;
|
||||
}
|
||||
|
||||
sub read_file {
|
||||
my $file = shift;
|
||||
open(my $fh, '<:utf8', $file) or die "Cannot read $file: $!";
|
||||
my $data = <$fh>;
|
||||
close($fh);
|
||||
return $data;
|
||||
}
|
||||
|
||||
sub main {
|
||||
my ($dir) = @_;
|
||||
mkdir($dir . '-new') or die "Cannot create $dir-new: $!";
|
||||
print "Indexing files\n";
|
||||
foreach my $file (glob("$dir/.* $dir/*")) {
|
||||
next unless $file =~ /$dir\/(.+)/;
|
||||
my $id = $1;
|
||||
next if $id eq ".";
|
||||
next if $id eq "..";
|
||||
$index{$id} = 1;
|
||||
}
|
||||
print "Converting files\n";
|
||||
foreach my $id (sort keys %index) {
|
||||
# this is where you debug a particular page
|
||||
# $verbose = $id eq '2014-12-18_Emacs_Wiki_Migration';
|
||||
write_file("$dir-new/$id", translate_file(read_file("$dir/$id")));
|
||||
}
|
||||
}
|
||||
|
||||
use Getopt::Long;
|
||||
|
||||
my $dir = 'raw';
|
||||
my $help = '';
|
||||
|
||||
GetOptions ("dir=s" => \$dir,
|
||||
"help" => \$help);
|
||||
|
||||
if ($help) {
|
||||
print qq{
|
||||
Usage: $0 [--dir=DIR]
|
||||
|
||||
You need to use the raw.pl script to create a directory full of raw
|
||||
wiki text files.
|
||||
|
||||
--dir=DIR is where the raw wiki text files are. Default: raw. The
|
||||
converted files will be stored in DIR-new, ie. in raw-new by
|
||||
default.
|
||||
|
||||
Example: $0 --dir=~/alexschroeder/raw
|
||||
}
|
||||
} else {
|
||||
main ($dir);
|
||||
}
|
||||
170
contrib/undo-local-names.pl
Executable file
170
contrib/undo-local-names.pl
Executable file
@@ -0,0 +1,170 @@
|
||||
#! /usr/bin/perl -w
|
||||
|
||||
# Copyright (C) 2015 Alex Schroeder <alex@gnu.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use utf8;
|
||||
use strict;
|
||||
use warnings;
|
||||
undef $/; # slurp
|
||||
|
||||
my %index = ();
|
||||
my $verbose = '';
|
||||
|
||||
my $LinkPattern = '(\p{Uppercase}+\p{Lowercase}+\p{Uppercase}\p{Alphabetic}*)';
|
||||
my $FreeLinkPattern = "([-,.()'%&?;<> _1-9A-Za-z\x{0080}-\x{fffd}]|[-,.()'%&?;<> _0-9A-Za-z\x{0080}-\x{fffd}][-,.()'%&?;<> _0-9A-Za-z\x{0080}-\x{fffd}]+)";
|
||||
my $UrlProtocols = 'http|https|ftp|afs|news|nntp|mid|cid|mailto|wais|prospero|telnet|gopher|irc|feed';
|
||||
my $UrlChars = '[-a-zA-Z0-9/@=+$_~*.,;:?!\'"()&#%]'; # see RFC 2396
|
||||
my $FullUrlPattern="((?:$UrlProtocols):$UrlChars+)"; # when used in square brackets
|
||||
|
||||
# either a single letter, or a string that begins with a single letter and ends with a non-space
|
||||
my $words = '([A-Za-z\x{0080}-\x{fffd}](?:[-%.,:;\'"!?0-9 A-Za-z\x{0080}-\x{fffd}]*?[-%.,:;\'"!?0-9A-Za-z\x{0080}-\x{fffd}])?)';
|
||||
# zero-width assertion to prevent km/h from counting
|
||||
my $nowordstart = '(?:(?<=[^-0-9A-Za-z\x{0080}-\x{fffd}])|^)';
|
||||
# zero-width look-ahead assertion to prevent km/h from counting
|
||||
my $nowordend = '(?=[^-0-9A-Za-z\x{0080}-\x{fffd}]|$)';
|
||||
|
||||
my $IrcNickRegexp = qr{[]a-zA-Z^[;\\`_{}|][]^[;\\`_{}|a-zA-Z0-9-]*};
|
||||
|
||||
sub FreeToNormal { # trim all spaces and convert them to underlines
|
||||
my $id = shift;
|
||||
return '' unless $id;
|
||||
$id =~ s/ /_/g;
|
||||
$id =~ s/__+/_/g;
|
||||
$id =~ s/^_//;
|
||||
$id =~ s/_$//;
|
||||
return $id;
|
||||
}
|
||||
|
||||
sub parse_local_names {
|
||||
my $filename = shift;
|
||||
print "Reading $filename\n";
|
||||
open(my $fh, '<:utf8', $filename) or die "Cannot read $filename: $!";
|
||||
my $data = <$fh>;
|
||||
close($fh);
|
||||
print "Parsing $filename\n";
|
||||
my %names = ();
|
||||
while ($data =~ m/\[$FullUrlPattern\s+([^\]]+?)\]/g) {
|
||||
my ($page, $url) = ($2, $1);
|
||||
my $id = FreeToNormal($page);
|
||||
$names{$id} = $url;
|
||||
}
|
||||
return \%names;
|
||||
}
|
||||
|
||||
sub write_file {
|
||||
my ($file, $data) = @_;
|
||||
return unless $data;
|
||||
open(my $fh, '>:utf8', $file) or die "Cannot write $file: $!";
|
||||
print $fh $data;
|
||||
close($fh);
|
||||
}
|
||||
|
||||
sub replacement {
|
||||
my ($names, $id, $pos, @no_go) = @_;
|
||||
|
||||
while (@no_go) {
|
||||
my $first = shift @no_go;
|
||||
print "Is $pos between " . $first->[0] . " and " . $first->[1] . "?\n" if $verbose;
|
||||
return $id if $pos >= $first->[0] and $pos <= $first->[1];
|
||||
}
|
||||
|
||||
return "[[$id]]" if exists $index{$id}; # local page exists
|
||||
return $id unless $names->{$id};
|
||||
return '[' . $names->{$id} . ' ' . $id . ']';
|
||||
}
|
||||
|
||||
sub translate_file {
|
||||
my ($names, $data) = @_;
|
||||
my @no_go = ();
|
||||
|
||||
while ($data =~ /( <nowiki>.*?<\/nowiki>
|
||||
| <code>.*?<\/code>
|
||||
| ^ <pre> (.*\n)+ <\/pre>
|
||||
| ^ {{{ (.*\n)+ }}}
|
||||
| ${nowordstart} \* ${words} \* ${nowordend}
|
||||
| ${nowordstart} \/ ${words} \/ ${nowordend}
|
||||
| ${nowordstart} \_ ${words} \_ ${nowordend}
|
||||
| ${nowordstart} \! ${words} \! ${nowordend}
|
||||
| \[\[ $FreeLinkPattern .*? \]\]
|
||||
| \[ $FullUrlPattern \s+ [^\]]+? \]
|
||||
| ^( \h+.+\n )+
|
||||
| ^(?: \[? \d\d?:\d\d (?:am|pm)? \]? )? \s* < $IrcNickRegexp > )/gmx) {
|
||||
push @no_go, [pos($data) - length $1, pos($data)];
|
||||
print "no go from " . $no_go[-1]->[0] . ".." . $no_go[-1]->[1] . " for $1\n" if $verbose;
|
||||
}
|
||||
|
||||
my $subs = $data =~ s/(?<![:![])\b$LinkPattern(?![:])/replacement($names, $1, pos($data), @no_go)/ge;
|
||||
return $data if $subs;
|
||||
}
|
||||
|
||||
sub read_file {
|
||||
my $file = shift;
|
||||
open(my $fh, '<:utf8', $file) or die "Cannot read $file: $!";
|
||||
my $data = <$fh>;
|
||||
close($fh);
|
||||
return $data;
|
||||
}
|
||||
|
||||
sub main {
|
||||
my ($dir, $local_names) = @_;
|
||||
mkdir($dir . '-new') or die "Cannot create $dir-new: $!";
|
||||
my $names = parse_local_names("$dir/$local_names");
|
||||
print "Indexing files\n";
|
||||
foreach my $file (glob("$dir/.* $dir/*")) {
|
||||
next unless $file =~ /$dir\/(.+)/;
|
||||
my $id = $1;
|
||||
next if $id eq ".";
|
||||
next if $id eq "..";
|
||||
next if $id eq "$local_names";
|
||||
$index{$id} = 1;
|
||||
}
|
||||
print "Converting files\n";
|
||||
foreach my $id (sort keys %index) {
|
||||
# this is where you debug a particular page
|
||||
# $verbose = $id eq '2014-12-18_Emacs_Wiki_Migration';
|
||||
write_file("$dir-new/$id", translate_file($names, read_file("$dir/$id")));
|
||||
}
|
||||
}
|
||||
|
||||
use Getopt::Long;
|
||||
|
||||
my $names = 'LocalNames';
|
||||
my $dir = 'raw';
|
||||
my $help = '';
|
||||
|
||||
GetOptions ("names=s" => \$names,
|
||||
"dir=s" => \$dir,
|
||||
"help" => \$help);
|
||||
|
||||
if ($help) {
|
||||
print qq{
|
||||
Usage: $0 [--dir=DIR] [--names=LocalNames]
|
||||
|
||||
You need to use the raw.pl script to create a directory full of raw
|
||||
wiki text files.
|
||||
|
||||
--dir=DIR is where the raw wiki text files are. Default: raw. The
|
||||
converted files will be stored in DIR-new, ie. in raw-new by
|
||||
default.
|
||||
|
||||
--names=LocalNames is the page name with all the local names on
|
||||
it. Default: LocalNames
|
||||
|
||||
Example: $0 --dir=~/alexschroeder/raw --names=Names
|
||||
}
|
||||
} else {
|
||||
main ($dir, $names);
|
||||
}
|
||||
128
contrib/undo-usemod.pl
Executable file
128
contrib/undo-usemod.pl
Executable file
@@ -0,0 +1,128 @@
|
||||
#! /usr/bin/perl -w
|
||||
|
||||
# Copyright (C) 2015 Alex Schroeder <alex@gnu.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use utf8;
|
||||
use strict;
|
||||
use warnings;
|
||||
undef $/; # slurp
|
||||
|
||||
my %index = ();
|
||||
my $verbose = '';
|
||||
|
||||
sub write_file {
|
||||
my ($file, $data) = @_;
|
||||
return unless $data;
|
||||
open(my $fh, '>:utf8', $file) or die "Cannot write $file: $!";
|
||||
print $fh $data;
|
||||
close($fh);
|
||||
}
|
||||
|
||||
sub replacement_block {
|
||||
my ($block, $pos, @no_go) = @_;
|
||||
|
||||
while (@no_go) {
|
||||
my $first = shift @no_go;
|
||||
print "Is $pos between " . $first->[0] . " and " . $first->[1] . "?\n" if $verbose;
|
||||
return $block if $pos >= $first->[0] and $pos <= $first->[1];
|
||||
}
|
||||
|
||||
return "[quote]\n" . join("\n", split(/ \n :+ \h? /x, $block)) . "[/quote]\n";
|
||||
}
|
||||
|
||||
sub replacement {
|
||||
my ($block, $tag, $pos, @no_go) = @_;
|
||||
|
||||
while (@no_go) {
|
||||
my $first = shift @no_go;
|
||||
print "Is $pos between " . $first->[0] . " and " . $first->[1] . "?\n" if $verbose;
|
||||
return $block if $pos >= $first->[0] and $pos <= $first->[1];
|
||||
}
|
||||
|
||||
return $tag . $block . $tag;
|
||||
}
|
||||
|
||||
sub translate_file {
|
||||
my ($data) = @_;
|
||||
my @no_go = ();
|
||||
|
||||
while ($data =~ /( <nowiki>.*?<\/nowiki>
|
||||
| <code>.*?<\/code>
|
||||
| ^ <pre> (.*\n)+ <\/pre>
|
||||
| ^ {{{ (.*\n)+ }}} )/gmx) {
|
||||
push @no_go, [pos($data) - length $1, pos($data)];
|
||||
print "no go from " . $no_go[-1]->[0] . ".." . $no_go[-1]->[1] . " for $1\n" if $verbose;
|
||||
}
|
||||
|
||||
# The problem is that these replacements don't adjust @no_go! Perhaps it is good enough?
|
||||
my $subs = '';
|
||||
$subs = $subs || $data =~ s/ ''' (.*?) ''' /replacement($1, '**', pos($data), @no_go)/gxe;
|
||||
$subs = $subs || $data =~ s/ '' (.*?) '' /replacement($1, '\/\/', pos($data), @no_go)/gxe;
|
||||
$subs = $data =~ s/ ^ :+ \h? ( .* \n (?: .+ \n ) * ) /replacement_block($1, pos($data), @no_go)/gmxe;
|
||||
return $data if $subs;
|
||||
}
|
||||
|
||||
sub read_file {
|
||||
my $file = shift;
|
||||
open(my $fh, '<:utf8', $file) or die "Cannot read $file: $!";
|
||||
my $data = <$fh>;
|
||||
close($fh);
|
||||
return $data;
|
||||
}
|
||||
|
||||
sub main {
|
||||
my ($dir) = @_;
|
||||
mkdir($dir . '-new') or die "Cannot create $dir-new: $!";
|
||||
print "Indexing files\n";
|
||||
foreach my $file (glob("$dir/.* $dir/*")) {
|
||||
next unless $file =~ /$dir\/(.+)/;
|
||||
my $id = $1;
|
||||
next if $id eq ".";
|
||||
next if $id eq "..";
|
||||
$index{$id} = 1;
|
||||
}
|
||||
print "Converting files\n";
|
||||
foreach my $id (sort keys %index) {
|
||||
# this is where you debug a particular page
|
||||
# $verbose = $id eq '2014-12-18_Emacs_Wiki_Migration';
|
||||
write_file("$dir-new/$id", translate_file(read_file("$dir/$id")));
|
||||
}
|
||||
}
|
||||
|
||||
use Getopt::Long;
|
||||
|
||||
my $dir = 'raw';
|
||||
my $help = '';
|
||||
|
||||
GetOptions ("dir=s" => \$dir,
|
||||
"help" => \$help);
|
||||
|
||||
if ($help) {
|
||||
print qq{
|
||||
Usage: $0 [--dir=DIR]
|
||||
|
||||
You need to use the raw.pl script to create a directory full of raw
|
||||
wiki text files.
|
||||
|
||||
--dir=DIR is where the raw wiki text files are. Default: raw. The
|
||||
converted files will be stored in DIR-new, ie. in raw-new by
|
||||
default.
|
||||
|
||||
Example: $0 --dir=~/alexschroeder/raw
|
||||
}
|
||||
} else {
|
||||
main ($dir);
|
||||
}
|
||||
14
control
14
control
@@ -1,14 +0,0 @@
|
||||
Maintainer: Alex Schroeder <alex@oddmuse.org>
|
||||
Section: web
|
||||
Priority: optional
|
||||
Standards-Version: 3.5.10
|
||||
|
||||
Package: oddmuse
|
||||
Architecture: any
|
||||
Depends: httpd, perl5, perl-modules
|
||||
Suggests: libwww-perl, libxml-rss-perl, libmime-base64-perl, diff
|
||||
Description: wiki engine
|
||||
A "wiki" is a website that is usally collaboratively edited
|
||||
by its users, including the ability to alter text written by
|
||||
other users. It is a simple and efficient content management
|
||||
system (CMS).
|
||||
@@ -100,7 +100,7 @@
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Symbola';
|
||||
src: local('Symbola'), url('/fonts/Symbola.woff') format('woff') url('/fonts/Symbola.ttf') format('truetype');
|
||||
src: local('Symbola'), url('/fonts/Symbola.woff') format('woff'), url('/fonts/Symbola.ttf') format('truetype');
|
||||
}
|
||||
|
||||
body, rss {
|
||||
@@ -271,7 +271,7 @@ label[for="searchlang"], #searchlang, .header input[type="submit"] {
|
||||
visibility: hidden; position: absolute;
|
||||
}
|
||||
/* wrap on the iphone */
|
||||
@media media only screen and (max-device-width: 480px) {
|
||||
@media only screen and (max-device-width: 480px) {
|
||||
}
|
||||
|
||||
.header input {
|
||||
|
||||
@@ -188,7 +188,7 @@ div.footer hr {
|
||||
|
||||
div.content > div.comment {
|
||||
border-top: none;
|
||||
padding-top: none;
|
||||
padding-top: 0;
|
||||
border-left: 1ex solid #bbb;
|
||||
padding-left: 1ex;
|
||||
}
|
||||
@@ -213,7 +213,12 @@ pre {
|
||||
|
||||
tt, pre, code {
|
||||
font-size: 80%;
|
||||
};
|
||||
}
|
||||
|
||||
code {
|
||||
background: #eee;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Gentium Basic';
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
# minimum
|
||||
apt-get install perl-modules
|
||||
# recommended
|
||||
apt-get install diff libwww-perl libxml-rss-perl
|
||||
# optional
|
||||
apt-get install libcgi-fast-perl
|
||||
25
fcgi.pl
25
fcgi.pl
@@ -1,25 +0,0 @@
|
||||
# Copyright (C) 2006 Alex Schroeder <alex@emacswiki.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the
|
||||
# Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use CGI::Fast;
|
||||
package OddMuse;
|
||||
$RunCGI = 0;
|
||||
do 'wiki.pl';
|
||||
while ($q = new CGI::Fast) {
|
||||
DoWikiRequest();
|
||||
}
|
||||
@@ -27,7 +27,7 @@ my @path = split(/\//, $ENV{REDIRECT_URL});
|
||||
my $file = $path[$#path];
|
||||
|
||||
# for dynamic pages
|
||||
use vars qw($NotFoundHandlerExceptionsPage);
|
||||
our ($NotFoundHandlerExceptionsPage);
|
||||
$NotFoundHandlerExceptionsPage = 'NoCachePages';
|
||||
$RunCGI = 0;
|
||||
do $script;
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('aawrapperdiv.pl', 'WrapperDiv Module');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('accesskeys.pl', 'Links With AccessKeys Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
our ($q, %Page, %Action, $IndexFile, $PageDir, $KeepDir, @MyAdminCode, $RefererDir);
|
||||
|
||||
@@ -39,7 +40,7 @@ sub AdminPowerDelete {
|
||||
} else {
|
||||
print $q->p(GetPageLink($id) . ' ' . T('deleted'));
|
||||
WriteRcLog($id, Ts('Deleted %s', $id), 0, $Page{revision},
|
||||
GetParam('username', ''), GetRemoteHost(), $Page{languages},
|
||||
GetParam('username', ''), $q->remote_addr(), $Page{languages},
|
||||
GetCluster($Page{text}));
|
||||
}
|
||||
# Regenerate index on next request
|
||||
@@ -88,10 +89,10 @@ sub AdminPowerRename {
|
||||
# RecentChanges
|
||||
OpenPage($new);
|
||||
WriteRcLog($id, Ts('Renamed to %s', $new), 0, $Page{revision},
|
||||
GetParam('username', ''), GetRemoteHost(), $Page{languages},
|
||||
GetParam('username', ''), $q->remote_addr(), $Page{languages},
|
||||
GetCluster($Page{text}));
|
||||
WriteRcLog($new, Ts('Renamed from %s', $id), 0, $Page{revision},
|
||||
GetParam('username', ''), GetRemoteHost(), $Page{languages},
|
||||
GetParam('username', ''), $q->remote_addr(), $Page{languages},
|
||||
GetCluster($Page{text}));
|
||||
print $q->p(Tss('Renamed %1 to %2.', GetPageLink($id), GetPageLink($new)));
|
||||
ReleaseLock();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('adsense.pl', 'AdSense Module');
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('advanced-uploads.pl', 'Advanced File Upload Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('age.pl', 'Age Indication Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('aggregate.pl', 'Front Page Extension');
|
||||
|
||||
@@ -143,7 +144,7 @@ sub DoAggregate {
|
||||
my $minor = $data{minor};
|
||||
my $revision = $data{revision};
|
||||
my $cluster = GetCluster($page);
|
||||
my $description = ToString sub { ApplyRules(QuoteHtml($page), 1, 0, undef, 'p') };
|
||||
my $description = ToString(sub { ApplyRules(QuoteHtml($page), 1, 0, undef, 'p') });
|
||||
$description .= $q->p(GetPageLink($id, T('Learn more...')))
|
||||
if length($page) < $size;
|
||||
$rss .= "\n<item>\n";
|
||||
|
||||
119
modules/agree-disagree.pl
Normal file
119
modules/agree-disagree.pl
Normal file
@@ -0,0 +1,119 @@
|
||||
# Copyright (C) 2005 Bayle Shanks http://purl.net/net/bshanks
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the
|
||||
# Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
our ($Now, @MyMacros, @MyRules, $DefaultStyleSheet, $q, $bol);
|
||||
|
||||
AddModuleDescription('agree-disagree.pl', 'AgreeDisagreePlugin');
|
||||
|
||||
push(@MyRules, \&AgreeDisagreeSupportRule);
|
||||
|
||||
push(@MyMacros, sub{ s/\[\+\]/"[+:" . GetParam('username', T('Anonymous'))
|
||||
. ':' . TimeToText($Now) . "]"/ge });
|
||||
push(@MyMacros, sub{ s/\[\+(:[^]:]+)\]/"[+$1:" . TimeToText($Now) . "]"/ge });
|
||||
push(@MyMacros, sub{ s/\[\-\]/"[-:" . GetParam('username', T('Anonymous'))
|
||||
. ':' . TimeToText($Now) . "]"/ge });
|
||||
push(@MyMacros, sub{ s/\[\-(:[^]:]+)\]/"[-$1:" . TimeToText($Now) . "]"/ge });
|
||||
|
||||
|
||||
$DefaultStyleSheet .= <<'EOT' unless $DefaultStyleSheet =~ /div\.agree/; # mod_perl?
|
||||
div.agreeCount {
|
||||
float: left;
|
||||
clear: left;
|
||||
background-color: Green;
|
||||
padding-left: .5em;
|
||||
padding-right: .5em;
|
||||
padding-top: .5em;
|
||||
padding-bottom: .5em;
|
||||
}
|
||||
div.disagreeCount {
|
||||
float: left;
|
||||
clear: right;
|
||||
background-color: Red;
|
||||
padding-left: .5em;
|
||||
padding-right: .5em;
|
||||
padding-top: .5em;
|
||||
padding-bottom: .5em;
|
||||
}
|
||||
|
||||
div.agreeNames {
|
||||
float: left;
|
||||
background-color: Green;
|
||||
font-size: xx-small;
|
||||
display: none;
|
||||
}
|
||||
div.disagreeNames {
|
||||
float: left;
|
||||
background-color: Red;
|
||||
font-size: xx-small;
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EOT
|
||||
|
||||
|
||||
|
||||
|
||||
my %AgreePortraits = ();
|
||||
|
||||
|
||||
sub AgreeDisagreeSupportRule {
|
||||
if ($bol) {
|
||||
if ($bol && m/(\G(\s*\[\+(.*?)\]|\s*\[-(.*?)\])+)/gcs) {
|
||||
|
||||
my $votes = $1;
|
||||
my @ayes = ();
|
||||
my @nayes = ();
|
||||
while ($votes =~ m/\G.*?\[\+(.*?)\]/gcs) {
|
||||
my ($ignore, $name, $time) = split(/:/, $1, 3);
|
||||
push(@ayes, $name);
|
||||
}
|
||||
my $votes2 = $votes;
|
||||
while ($votes2 =~ m/\G.*?\[-(.*?)\]/gcs) {
|
||||
my ($ignore, $name, $time) = split(/:/, $1, 3);
|
||||
push(@nayes, $name);
|
||||
}
|
||||
|
||||
my $html = CloseHtmlEnvironments() ;
|
||||
$html .= $q->div({-class=>'agreeCount'}) . ($#ayes+1) . ' ' . '</div>' ;
|
||||
|
||||
$html .= $q->div({-class=>'agreeNames'}) . printNames(@ayes) . '</div>' ;
|
||||
$html .= $q->div({-class=>'disagreeCount'}) . ' ' . ($#nayes+1) . '</div>' ;
|
||||
$html .= $q->div({-class=>'disagreeNames'}) . printNames(@nayes) . '</div>' ;
|
||||
|
||||
|
||||
return $html;
|
||||
}
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
sub printNames {
|
||||
my @names = @_;
|
||||
|
||||
my $html = '';
|
||||
foreach my $name (@names) {
|
||||
$html .= "$name<br>";
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('all.pl', 'All Action');
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('anchors.pl', 'Local Anchor Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('antispam.pl', 'Antispam Module');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('archive.pl', 'Archive Extension');
|
||||
|
||||
|
||||
@@ -14,12 +14,13 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('askpage.pl', 'Ask Page Extension');
|
||||
|
||||
use Fcntl qw(:DEFAULT :flock);
|
||||
|
||||
our ($DataDir, $NewComment);
|
||||
our ($DataDir);
|
||||
our ($AskPage, $QuestionPage, $NewQuestion);
|
||||
# Don't forget to set your $CommentsPattern to include both $AskPage and $QuestionPage
|
||||
$AskPage = 'Ask';
|
||||
@@ -50,12 +51,14 @@ sub NewAskPageDoPost {
|
||||
OldAskPageDoPost($id, @_); # keep original functionality for regular edits
|
||||
}
|
||||
|
||||
*OldAskPageGetCommentForm=\&GetCommentForm;
|
||||
*GetCommentForm=\&NewAskPageGetCommentForm;
|
||||
sub NewAskPageGetCommentForm {
|
||||
my ($id, $rev, $comment) = @_;
|
||||
$NewComment = $NewQuestion if $id eq $AskPage;
|
||||
OldAskPageGetCommentForm(@_);
|
||||
*OldAskPageGetTextArea=\&GetTextArea;
|
||||
*GetTextArea=\&NewAskPageGetTextArea;
|
||||
sub NewAskPageGetTextArea {
|
||||
my ($name, $text, @rest) = @_;
|
||||
if ($name eq 'aftertext' and not $text and GetId() eq $AskPage) {
|
||||
$text = $NewQuestion;
|
||||
}
|
||||
OldAskPageGetTextArea($name, $text, @rest);
|
||||
}
|
||||
|
||||
*OldAskPageJournalSort=\&JournalSort;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
use XML::Atom::Entry;
|
||||
use XML::Atom::Link;
|
||||
@@ -21,7 +22,7 @@ use XML::Atom::Person;
|
||||
|
||||
AddModuleDescription('atom.pl', 'Atom Extension');
|
||||
|
||||
our ($q, %Page, %Action, $CommentsPrefix, $ScriptName, $SiteName, $MaxPost, $UseDiff, $NewText, $DeletedPage, @MyInitVariables, @MyMacros, $FS, $BannedContent, $RssStyleSheet, $RssRights, $RssLicense, $RssImageUrl, $RssExclude, $RCName, @UploadTypes, $UploadAllowed, $UsePathInfo, $SiteDescription, $LastUpdate, $InterWikiMoniker);
|
||||
our ($q, %Page, %Action, $CommentsPrefix, $ScriptName, $SiteName, $MaxPost, $UseDiff, $DeletedPage, @MyInitVariables, @MyMacros, $FS, $BannedContent, $RssStyleSheet, $RssRights, $RssLicense, $RssImageUrl, $RssExclude, $RCName, @UploadTypes, $UploadAllowed, $UsePathInfo, $SiteDescription, $LastUpdate, $InterWikiMoniker);
|
||||
|
||||
push(@MyInitVariables, \&AtomInit);
|
||||
|
||||
@@ -185,7 +186,7 @@ sub DoAtomSave {
|
||||
my $oldrev = $Page{revision};
|
||||
if ($old eq $string and $oldid eq $id) {
|
||||
ReportError(T('No changes to be saved.'), '200 OK'); # an update without consequence
|
||||
} elsif ($oldrev == 0 and ($string eq $NewText or $string eq "\n")) {
|
||||
} elsif ($oldrev == 0 and $string eq "\n") {
|
||||
ReportError(T('No changes to be saved.'), '400 BAD REQUEST'); # don't fake page creation because of webdav
|
||||
} else {
|
||||
# My providing a different title, the entry is automatically renamed
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
# ====================[ autolock.pl ]====================
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
# ie: http://search.cpan.org/CPAN/authors/id/C/CH/CHAMAS/MLDBM-2.01.tar.gz
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
use Fcntl;
|
||||
use MLDBM qw( DB_File Storable );
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
# http://www.oddmuse.org/cgi-bin/oddmuse/Backlinks_Extension
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('backlinks.pl', 'Backlinks Extension');
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ the IP or hostname will be added to the C<BannedHosts> page for you.
|
||||
|
||||
=cut
|
||||
use strict;
|
||||
use v5.10;
|
||||
our ($q, $Now, %Page, $OpenPageName, %Action, $UrlPattern, $BannedContent, $BannedHosts, @MyAdminCode);
|
||||
|
||||
AddModuleDescription('ban-contributors.pl', 'Ban Contributors Extension');
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (C) 2013 Alex Schroeder <alex@gnu.org>
|
||||
# Copyright (C) 2013–2015 Alex Schroeder <alex@gnu.org>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it under
|
||||
# the terms of the GNU General Public License as published by the Free Software
|
||||
@@ -16,10 +16,11 @@
|
||||
# editors will be logged.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('ban-quick-editors.pl', 'Banning Quick Editors');
|
||||
|
||||
our ($Now, %RecentVisitors, $SurgeProtection);
|
||||
our ($q, $Now, %RecentVisitors, $SurgeProtection);
|
||||
|
||||
*BanQuickOldUserIsBanned = \&UserIsBanned;
|
||||
*UserIsBanned = \&BanQuickNewUserIsBanned;
|
||||
@@ -29,7 +30,7 @@ sub BanQuickNewUserIsBanned {
|
||||
if (not $rule
|
||||
and $SurgeProtection # need surge protection
|
||||
and GetParam('title')) {
|
||||
my $name = GetParam('username', GetRemoteHost());
|
||||
my $name = GetParam('username', $q->remote_addr());
|
||||
my @entries = @{$RecentVisitors{$name}};
|
||||
# $entry[0] is $Now after AddRecentVisitor
|
||||
my $ts = $entries[1];
|
||||
|
||||
@@ -13,14 +13,17 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('banned-regexps.pl', 'Banning Regular Expressions');
|
||||
|
||||
=h1 Compatibility
|
||||
=encoding utf8
|
||||
|
||||
=head1 Compatibility
|
||||
|
||||
This extension works with logbannedcontent.pl.
|
||||
|
||||
=h1 Example content for the BannedRegexps page:
|
||||
=head1 Example content for the BannedRegexps page:
|
||||
|
||||
# This page lists regular expressions that prevent the saving of a page.
|
||||
# The regexps are matched against any page or comment submitted.
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('bbcode.pl', 'bbCode Extension');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('big-brother.pl', 'Big Brother Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('blockquote.pl', 'Comments on Text Formatting Rules');
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('calendar.pl', 'Calendar Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('canonical.pl', 'Canonical Names');
|
||||
|
||||
|
||||
180
modules/cart.pl
Normal file
180
modules/cart.pl
Normal file
@@ -0,0 +1,180 @@
|
||||
# Copyright (C) 2008 Eric Hsu <apricotan@gmail.com>
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the
|
||||
# Free Software Foundation, Inc.
|
||||
# 59 Temple Place, Suite 330
|
||||
# Boston, MA 02111-1307 USA
|
||||
use strict;
|
||||
use v5.10;
|
||||
use utf8;
|
||||
|
||||
AddModuleDescription('cart.pl', 'Cart Extension');
|
||||
|
||||
our ($q, %Action, $UserGotoBar, $CookieName);
|
||||
our ($CartPic, $CartName, %Cart, $ShowCart, @CartOrdered);
|
||||
my $LOADED_CART_JS;
|
||||
|
||||
# ============
|
||||
# = cart-bfc =
|
||||
# ============
|
||||
|
||||
# This is a simple shopping cart for pages!
|
||||
# Requires searchpaged-bfc.pl.
|
||||
|
||||
# We make a checkbox that onChange, uses Yahoo! UI Cookie 2.6 (note we need 2.6!) routines to set a subcookie.
|
||||
# We have the cookie "$CartName" (by default $Cookiename . "Cart")
|
||||
# which holds the actual cart and is managed almost entirely
|
||||
# in client-side javascript. That means the checkboxes directly control the cookie.
|
||||
|
||||
# If you want a little picture of a cart, you can set the URL at $CartPic.
|
||||
|
||||
# InitCart loads the cookie values into %Cart. $Cart->{$pagename}=1 if it's in the cart.
|
||||
# In theory cookies are capped at 4K. Our page names are capped around 90ish chars. That leaves room for 40 maximal names in the cart. Probably enough.
|
||||
|
||||
# We'll need the cookie values for
|
||||
# action=cart;subaction=show; along with other future subactions (download in latex, bibtex)
|
||||
# we'll feed this display to a variant of search display.
|
||||
# I'll have to check oddmuse.pl.
|
||||
|
||||
# load Yahoo UI code bit to manage subcookies.
|
||||
|
||||
$Action{cart} = \&DoCart;
|
||||
|
||||
sub DoCart {
|
||||
# foreach $key (keys %Cart) {
|
||||
# push @cart, $key if ($Cart{"$key"});
|
||||
# }
|
||||
DoSearch(\@CartOrdered);
|
||||
}
|
||||
|
||||
$UserGotoBar .= '<a href="?action=cart;cache=0">View Cart</a>';
|
||||
|
||||
# Manage Cart Routines
|
||||
|
||||
#push @MyPrintSearchResultsPrefix, \&PrintCheckboxTableStart;
|
||||
#push @MyPrintSearchResultsSuffix, \&PrintCheckboxTableEnd;
|
||||
|
||||
# I can't hack into Init, so let's tap into InitCookie.
|
||||
# We also tap into Cookie() to arrange writing out our cleaned up Cart.
|
||||
|
||||
*OldInitCookie = *InitCookie;
|
||||
*InitCookie = *InitCookieAndCart;
|
||||
|
||||
# To get a checkbox in the titles of pages, we patch GetHeader.
|
||||
*OldGetHeader = *GetHeader;
|
||||
*GetHeader = *GetHeaderAndCart;
|
||||
|
||||
sub InitCookieAndCart {
|
||||
OldInitCookie();
|
||||
InitCart();
|
||||
}
|
||||
|
||||
sub GetHeaderAndCart {
|
||||
my ($id, $title, $oldId, $nocache, $status) = @_;
|
||||
my $result = OldGetHeader(@_);
|
||||
|
||||
return ($result) unless ($id);
|
||||
|
||||
my $checkbox = MakeCheckbox($id);
|
||||
$checkbox = qq(<span class="cart-checkbox" style="float:right">$checkbox</span>);
|
||||
|
||||
$result =~ s/(<\/h1>)/$checkbox$1/;
|
||||
|
||||
return ($result);
|
||||
}
|
||||
|
||||
|
||||
# We load the contents of our Cart cookie into the global %Cart and @CartOrdered
|
||||
sub InitCart {
|
||||
$CartName = $CookieName . "Cart" unless (defined ($CartName) );
|
||||
my @pairs;
|
||||
|
||||
%Cart = ();
|
||||
@CartOrdered = ();
|
||||
|
||||
if ($q->cookie($CartName)) {
|
||||
# @pairs = split(/&/, $q->cookie($CartName));
|
||||
@pairs = $q->cookie($CartName);
|
||||
foreach my $pair (@pairs) {
|
||||
# my $encodedequals = UrlEncode("=");
|
||||
my ($name, $val)= split(/\=/, $pair);
|
||||
$Cart{"$name"}=$val;
|
||||
push @CartOrdered, $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub PrintCheckboxTableStart {
|
||||
my ($name, $regex, $text, $type) = @_;
|
||||
my $html;
|
||||
|
||||
$html .= "<table><tr>";
|
||||
my $checkbox = MakeCheckbox(@_);
|
||||
$html .= qq(<td valign=top>$checkbox</td>);
|
||||
$html .= "<td valign=top>";
|
||||
print $html;
|
||||
}
|
||||
|
||||
sub PrintCheckboxTableEnd {
|
||||
my ($name, $regex, $text, $type) = @_;
|
||||
my $html;
|
||||
|
||||
$html .= "</td>";
|
||||
$html .= "</tr></table>";
|
||||
|
||||
print $html;
|
||||
}
|
||||
|
||||
|
||||
sub MakeCheckbox {
|
||||
my ($name, $regex, $text, $type) = @_;
|
||||
my $html;
|
||||
|
||||
return unless ($ShowCart);
|
||||
unless ($LOADED_CART_JS) {
|
||||
$html .= '<script type="text/javascript" src="http://yui.yahooapis.com/combo?2.7.0/build/yahoo/yahoo-min.js&2.7.0/build/cookie/cookie-min.js&2.7.0/build/event/event-min.js"></script>';
|
||||
$LOADED_CART_JS=1;
|
||||
}
|
||||
|
||||
my $selected = qq(checked="yes") if ($Cart{"$name"});
|
||||
|
||||
$html .=<<HTMLEND;
|
||||
$CartPic<input type="checkbox" value="cart" id="$name-set" title="Add To Cart" $selected/> <br>
|
||||
<script type="text/javascript">
|
||||
(function(){
|
||||
YAHOO.util.Event.on("$name-set", "change", function(){
|
||||
var value = YAHOO.util.Cookie.getSub("$CartName", "$name");
|
||||
if (value == 1 ) { YAHOO.util.Cookie.removeSub("$CartName", "$name"); }
|
||||
else { YAHOO.util.Cookie.setSub("$CartName", "$name", 1 ); }
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
HTMLEND
|
||||
|
||||
return $html unless ($q->param('action') eq 'edit' || $q->param('Preview'));
|
||||
# no checkboxes for edit pages.
|
||||
return;
|
||||
}
|
||||
|
||||
__END__
|
||||
|
||||
=
|
||||
(0.7) Load JS libraries on first checkbox (so won't load if we are editing).
|
||||
(0.6) Changed the JS source to be Yahoo's CDN.
|
||||
(0.51) Use CSS class cart-checkbox for the cart checkbox! That way, we can remove them for printouts, for instance.
|
||||
(0.5) Our hack of cookies was not working cross-platform. We have a mismatch because our attempts to send out a cookie from oddmuse were getting the contents encoded and unreadable for the YUI routines. Instead,we will use removeSub to avoid ever having to send the cookie back from our server!
|
||||
(0.4) Now every page title has a checkbox floated to the right, which controls the cart status.
|
||||
(0.3) Allow cart editing from cart display. Currently, doesn't seem to affect the cart.
|
||||
(0.2) Cart now displays.
|
||||
(0.1) Cart is now persistent and is edited by the checkboxes.
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('checkbox.pl', 'Checklist Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('clustermap.pl', 'ClusterMap Module');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('comment-div-wrapper.pl', 'Comment Div Wrapper Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('commentcount.pl', 'Comment Count Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('compilation.pl', 'Compilation Extension');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('context.pl', 'Calendar Extension');
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
# Of course, you can customize this to store more information
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('creationdate.pl', 'CreationDate Module');
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
# ====================[ creole.pl ]====================
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
# ====================[ creoleaddition.pl ]====================
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
# ====================[ crossbar.pl ]====================
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('crumbs.pl', 'List Parent Pages Extension');
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('csv.pl', 'Comments on Long Table Markup Extension');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('dates.pl', 'Dates Extension');
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('delete-all.pl');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
our ($q, $Now, %IndexHash, %Action, %Page, $OpenPageName, $FS, $BannedContent, $RcFile, $RcDefault, @MyAdminCode, $FullUrlPattern, $DeletedPage, $StrangeBannedContent);
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('diff.pl', 'Diff Action Extension');
|
||||
|
||||
|
||||
@@ -13,16 +13,21 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('div-foo.pl', 'Div Foo Extension');
|
||||
|
||||
our (@MyRules);
|
||||
our ($DivFooPrefix);
|
||||
our (%RuleOrder);
|
||||
|
||||
$DivFooPrefix = 'foo_';
|
||||
|
||||
push(@MyRules, \&DivFooRule);
|
||||
|
||||
# conflicts with <nowiki> and other such rules by usemod.pl
|
||||
$RuleOrder{\&DivFooRule} = 200;
|
||||
|
||||
sub DivFooRule {
|
||||
if (m/\G \< ([a-z_-][a-z0-9 _-]+[a-z0-9_-]) \> \s*\n /cgx) {
|
||||
return CloseHtmlEnvironment('p') . AddHtmlEnvironment('div', 'class="' . join(' ', map {"$DivFooPrefix$_"} split /\s+/, $1) . '"');
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('dojo.pl', 'Using Dojo Instead Of Wiki Markup');
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
# JavaScript enabled for this to work.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('doubleclick.pl', 'Doubleclick Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('download.pl', 'Download Extension');
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
use File::Glob ':glob';
|
||||
our ($DraftDir);
|
||||
@@ -28,7 +29,7 @@ push(@MyInitVariables, \&DraftInit);
|
||||
sub DraftInit {
|
||||
if (GetParam('Draft', '')) {
|
||||
SetParam('action', 'draft') ; # Draft button used
|
||||
} elsif (-f "$DraftDir/" . GetParam('username', GetRemoteHost()) # draft exists
|
||||
} elsif (-f "$DraftDir/" . GetParam('username', $q->remote_addr()) # draft exists
|
||||
and $FooterNote !~ /action=draft/) { # take care of mod_perl persistence
|
||||
$FooterNote = $q->p(ScriptLink('action=draft', T('Recover Draft'))) . $FooterNote;
|
||||
}
|
||||
@@ -38,7 +39,7 @@ $Action{draft} = \&DoDraft;
|
||||
|
||||
sub DoDraft {
|
||||
my $id = shift;
|
||||
my $draft = $DraftDir . '/' . GetParam('username', GetRemoteHost());
|
||||
my $draft = $DraftDir . '/' . GetParam('username', $q->remote_addr());
|
||||
if ($id) {
|
||||
my $text = GetParam('text', '');
|
||||
ReportError(T('No text to save'), '400 BAD REQUEST') unless $text;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('duckduckgo-search.pl', 'Use DuckDuckGo For Searches');
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('dynamic-comments.pl', 'Dynamic Comments Extension');
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('dynlogo.pl', 'Dynamic Logo');
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('edit-assist.pl', 'Edit Assist Extension');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('edit-cluster.pl', 'Edit Cluster Extension');
|
||||
|
||||
@@ -49,7 +50,7 @@ sub GetRc {
|
||||
}
|
||||
}
|
||||
$wanted_clusters{$clusterOnly} = $clusterOnly;
|
||||
@outrc = reverse @outrc if GetParam('newtop', $RecentTop);
|
||||
@outrc = reverse @outrc;
|
||||
my @filters;
|
||||
@filters = SearchTitleAndBody($filterOnly) if $filterOnly;
|
||||
foreach my $rcline (@outrc) {
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('edit-paragraphs.pl', 'Edit Paragraphs Extension');
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
# http://www.oddmuse.org/cgi-bin/oddmuse/Email_Quote_Extension
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('emailquote.pl', 'Email Quote Extension');
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
# this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('emoji.pl', 'Smilies');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('enclosure.pl', 'Podcasting');
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
# the css classes div.question and div.answer.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('faq.pl', 'FAQ Extension');
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA,
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('fckeditor.pl', 'Using FCKeditor In Addition To Wiki Markup');
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
# http://www.oddmuse.org/cgi-bin/oddmuse/Field_List_Extension
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('fieldlist.pl', 'Field List Extension');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('find.pl', 'Find Extension');
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('fix-encoding.pl', 'Fix Encoding');
|
||||
|
||||
|
||||
@@ -1,257 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
|
||||
# ====================[ flashbox.pl ]====================
|
||||
|
||||
=head1 NAME
|
||||
|
||||
flashbox - An Oddmuse module for embedding offsite-hosted Flash videos within
|
||||
an Oddmuse Wiki page - especially those hosted by Google Videos,
|
||||
YouTube, and SlideShare.
|
||||
|
||||
=head1 INSTALLATION
|
||||
|
||||
flashbox is easily installable: move this file into the B<wiki/modules/>
|
||||
directory of your Oddmuse Wiki.
|
||||
|
||||
=cut
|
||||
AddModuleDescription('flashbox.pl', 'Flashbox Extension');
|
||||
|
||||
our ($bol, @MyRules, %RuleOrder);
|
||||
|
||||
# ....................{ CONFIGURATION }....................
|
||||
|
||||
=head1 CONFIGURATION
|
||||
|
||||
flashbox is easily configurable: set these variables in the B<wiki/config.pl>
|
||||
file for your Oddmuse Wiki.
|
||||
|
||||
=cut
|
||||
our ($FlashboxWidth,
|
||||
$FlashboxHeight);
|
||||
|
||||
=head2 $FlashboxWidth
|
||||
|
||||
The width of the HTML object "frame" for Flash videos, in pixels.
|
||||
|
||||
The default value for this variable is (usually) fine.
|
||||
|
||||
=cut
|
||||
$FlashboxWidth = 420;
|
||||
|
||||
=head2 $FlashboxHeight
|
||||
|
||||
The height of the HTML object "frame" for Flash videos, in pixels. For any
|
||||
specific width, a height roughly 83.33% of that width tends to provide a
|
||||
respectable frame for viewing Flash videos.
|
||||
|
||||
The default value for this variable is (usually) fine.
|
||||
|
||||
=cut
|
||||
$FlashboxHeight = 350;
|
||||
|
||||
# ....................{ MARKUP }....................
|
||||
|
||||
=head1 MARKUP
|
||||
|
||||
flashbox provides a few new markup rules. These are:
|
||||
|
||||
=over
|
||||
|
||||
=item [[GoogleVideo:${GoogleVideoID}]]
|
||||
|
||||
=over
|
||||
|
||||
=item Embeds the Google Video uniquely identified by ${GoogleVideoID} into the
|
||||
Oddmuse Wiki page, where ${GoogleVideoID} is the signed integer
|
||||
following the "docID" parameter in the Google Video URL for that video;
|
||||
for example, [[GoogleVideo:8649250863235826256]] embeds Derrick Jensen's
|
||||
"Endgame: Part I" Google Video into the Oddmuse Wiki page.
|
||||
|
||||
=back
|
||||
|
||||
=item [[YouTube:${YouTubeVideoID}]]
|
||||
|
||||
=over
|
||||
|
||||
=item Embeds the YouTube video uniquely identified by ${YouTubeVideoID} into the
|
||||
Oddmuse Wiki page, where ${YouTubeVideoID} is the string following the
|
||||
"watch?v" parameter in the YouTube URL for that video; for example,
|
||||
[[YouTube:Q1ZeXnmDZMQ]] embeds James Howard Kunstler's "The Tragedy of
|
||||
Suburbia TED Talk" YouTube video into the Oddmuse Wiki page.
|
||||
|
||||
=back
|
||||
|
||||
=item [[SlideShare:${SlideSharePresentationID}]]
|
||||
|
||||
=over
|
||||
|
||||
=item Embeds the SlideShare presentation uniquely identified by
|
||||
${SlideSharePresentationID} into the Oddmuse Wiki page, where
|
||||
${SlideSharePresentationID} is a string composed of the title for that
|
||||
presentation and an arbitrary signed integer. Unfortunately, this string
|
||||
is more difficult to obtain than for Google Video and YouTube; for any
|
||||
given presentation, see the small "Embed" box on that presentation's
|
||||
SlideShare page and the string following the "doc" parameter in that
|
||||
box. For example,
|
||||
[[SlideShare:the-tyranny-of-human-civilization-13479]] embeds
|
||||
huer1278ft's "The Tyranny of Human Civilization" SlideShare presentation
|
||||
into the Oddmuse Wiki page.
|
||||
|
||||
=back
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
push(@MyRules, \&FlashboxRule);
|
||||
|
||||
# "FlashboxRule" conflicts with "CreoleRule"-style interpretation of "[[...]]"
|
||||
# syntax; and must, thus, be applied before that rule.
|
||||
$RuleOrder{\&FlashboxRule} = -11;
|
||||
|
||||
sub FlashboxRule {
|
||||
if (/\G\[\[googlevideo:([0-9-]+)\]\]/cgi) {
|
||||
return FlashboxHtml('googlevideo',
|
||||
"http://video.google.com/googleplayer.swf?docId=${1}&hl=en");
|
||||
}
|
||||
elsif (/\G\[\[slideshare:([a-z0-9-]+)\]\]/cgi) {
|
||||
return FlashboxHtml('slideshare',
|
||||
"http://static.slideshare.net/swf/ssplayer2.swf?doc=${1}");
|
||||
}
|
||||
elsif (/\G\[\[youtube:([a-z0-9-_]{11})\]\]/cgi) {
|
||||
return FlashboxHtml('youtube',
|
||||
"http://www.youtube.com/v/${1}");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
sub FlashboxHtml {
|
||||
my ($paragraph_class, $flashbox_url) = @_;
|
||||
return
|
||||
($bol
|
||||
? CloseHtmlEnvironments().AddHtmlEnvironment('p', qq~class="flashbox ${paragraph_class}"~)
|
||||
: '').qq~
|
||||
<object width="${FlashboxWidth}" height="${FlashboxHeight}">
|
||||
<param name="movie" value="${flashbox_url}"/>
|
||||
<param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer"/>
|
||||
<param name="quality" value="high"/>
|
||||
<param name="wmode" value="transparent"/>
|
||||
<param name="allowFullScreen" value="true"/>
|
||||
<param name="allowScriptAccess" value="always"/>
|
||||
<embed type="application/x-shockwave-flash"
|
||||
width="${FlashboxWidth}" height="${FlashboxHeight}"
|
||||
src="${flashbox_url}"
|
||||
wmode="transparent"
|
||||
allowscriptaccess="always" allowfullscreen="true"/>
|
||||
</object>~;
|
||||
}
|
||||
|
||||
=head1 CSS
|
||||
|
||||
flashbox also provides a few new HTML classes for CSS-stylizing the HTML emitted
|
||||
by these markup rules. Of necessity, flashbox embeds Flash videos in an
|
||||
"<object>...</object>" HTML tag-set; technically, therefore, you can stylize
|
||||
such videos with a CSS selector resembling:
|
||||
|
||||
# This CSS selector selects all HTML-embedded objects (e.g., Flash videos).
|
||||
object {
|
||||
# These CSS properties are supposed to horizontally center such objects;
|
||||
# however, they do not.
|
||||
margin: 1.500em auto;
|
||||
padding: 1.500em 0.000em 0.500em 0.000em;
|
||||
text-align: center;
|
||||
text-indent: 0.000em;
|
||||
}
|
||||
|
||||
Unfortunately, most browsers ignore most CSS properties on the CSS "object"
|
||||
selector (including those in the example, above).
|
||||
|
||||
To circumvent this, flashbox enwraps all block-level, flashbox-specific markup
|
||||
(i.e., flashbox-specific markup preceded by at least two newlines) within an
|
||||
HTML paragraph having two unique classes. This HTML paragraph, unlike the
|
||||
"<object>...</object>" HTML tag-set, is styleable by all browsers via CSS
|
||||
selection of these classes:
|
||||
|
||||
=over
|
||||
|
||||
=item "flashbox"; and
|
||||
|
||||
=item "googlevideo", "youtube", or "slideshare" - according to which offsite host
|
||||
a Flash video is embedded from.
|
||||
|
||||
=back
|
||||
|
||||
Let's illustrate with a crude example. Suppose some Oddmuse Wiki page contains
|
||||
this text markup:
|
||||
|
||||
In this compelling reading of his, perhaps, most well-read poetry, Carl Sagan
|
||||
thunders the truth, Vangelis supplies the angel’s harp and music, and YouTube
|
||||
plies the photo-montage seas of "this pale, blue dot": our Earth, from afar.
|
||||
|
||||
[[YouTube:p86BPM1GV8M]]
|
||||
|
||||
Then, flashbox transmutes that text markup into HTML markup resembling:
|
||||
|
||||
<p>
|
||||
In this compelling reading of his, perhaps, most well-read poetry, Carl Sagan
|
||||
thunders the truth, Vangelis supplies the angel’s harp and music, and YouTube
|
||||
plies the photo-montage seas of "this pale, blue dot": our Earth, from afar.
|
||||
</p>
|
||||
<p class="flashbox youtube">
|
||||
<object width="420" height="350">
|
||||
<param name="movie" value="http://www.youtube.com/v/p86BPM1GV8M"/>
|
||||
<param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer"/>
|
||||
<embed type="application/x-shockwave-flash"
|
||||
width="420" height="350"
|
||||
src="http://www.youtube.com/v/p86BPM1GV8M"/>
|
||||
</object>
|
||||
</p>
|
||||
|
||||
Then, your CSS stylesheet can style this HTML markup with CSS resembling:
|
||||
|
||||
# This CSS selector selects flashbox-embedded Flash videos.
|
||||
p.flashbox {
|
||||
# These CSS properties horizontally center such videos.
|
||||
margin: 1.500em auto;
|
||||
padding: 1.500em 0.000em 0.500em 0.000em;
|
||||
text-align: center;
|
||||
text-indent: 0.000em;
|
||||
}
|
||||
|
||||
# This CSS selector selects flashbox-embedded, YouTube-specific Flash videos.
|
||||
p.youtube {
|
||||
# These CSS properties background and border such videos.
|
||||
background: #334466;
|
||||
border: #112255 0.125em solid;
|
||||
}
|
||||
|
||||
Wew! There; that wasn't so gruesomely detailed, was it?
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
The oddmuse.org "YouTube" page off which this Oddmuse extension was founded, at:
|
||||
|
||||
L<http://www.oddmuse.org/cgi-bin/oddmuse/YouTube>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
The information below applies to everything in this distribution,
|
||||
except where noted.
|
||||
|
||||
Copyleft 2008 by B.w.Curry <http://www.raiazome.com>.
|
||||
|
||||
This file is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this file; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
=cut
|
||||
@@ -17,6 +17,7 @@
|
||||
# Boston, MA 02111-1307 USA
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('flickrgallery.pl', 'FlickrGallery Module');
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
# ====================[ footnotes.pl ]====================
|
||||
|
||||
=encoding utf8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
footnotes - An Oddmuse module for adding footnotes to Oddmuse Wiki pages.
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('form_timeout.pl', 'Form Timeout Extension');
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env perl
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
# ====================[ forms.pl ]====================
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use v5.10;
|
||||
|
||||
AddModuleDescription('fractions.pl', 'Fractions');
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user