Compare commits

..

375 Commits

Author SHA1 Message Date
Charles Reid a3f460113a add instructions for blocking IP addresses 1 month ago
Charles Reid e94f911d99 add "ban jerks" section to nginx config 1 month ago
Charles Reid f7446c5a2d chmod the logs 1 year ago
Charles Reid 6d1fa940a7 add wikifiles restore script 1 year ago
Charles Reid cfac7c69dc fix env var problem 1 year ago
Charles Reid 3287d57554 fix script comment 1 year ago
Charles Reid d347024939 update gitea app.ini jinja template 1 year ago
Charles Reid 8e4f86c8c6 smol makefile fix 1 year ago
Charles Reid 5b855a575a make adjustments to bring all pod backup scripts in sync 2 years ago
Charles Reid 4248f86c64 fixup restore db script 2 years ago
Charles Reid f36011d4cc fixup restore wikifiles 2 years ago
Charles Reid 4953dfb8f3 remove tree subdomain 3 years ago
Charles Reid d003935769 update php.ini upload size to match localsettings.php 3 years ago
Charles Reid 58e795bd98 fix backup canary script 3 years ago
Charles Reid 0709e883ea 8am 3 years ago
Charles Reid 8965515215 run backups canary every day 3 years ago
Charles Reid 69523ba027 remove tree 3 years ago
Charles Reid 2a4ed33024 add tree htpasswd to docker-compose 3 years ago
Charles Reid f880c44b79 add .tree.htpasswd to tree subdomain for auth protection 3 years ago
Charles Reid 5cac0fa869 fix cert for tree subdomain 3 years ago
Charles Reid 303ebf8ea3 add tree subdomain to renew cert script 3 years ago
Charles Reid 4d638c456e bind-mount /www tree subdomain htdocs 3 years ago
Charles Reid 72fc465d1d add tree subdomain to nginx config 3 years ago
Charles Reid 2f579f4cfa restore 3 years ago
Charles Reid 1bc4bb4902 add mw to skin footer 3 years ago
Charles Reid d91b7dc735 flush wikifiles and wikidb 3 years ago
Charles Reid acb2f57176 jerks 3 years ago
Charles Reid 3482004df0 add php.ini 3 years ago
Charles Reid 4ed1b479ef JERKS 3 years ago
Charles Reid 5a931c2e38 another jerk 3 years ago
Charles Reid 17da345041 more jerks 3 years ago
Charles Reid 5e9be9e6c8 fix one more robots.txt 3 years ago
Charles Reid 0148fe3e55 fix bind-mounting robots.txt 3 years ago
Charles Reid a144d6070b fix parsing of du command 3 years ago
Charles Reid 989036ac21 add certbot to rsyslog filters 3 years ago
Charles Reid 523ed50647 tell tar to stop crying about the log file and just skip it 3 years ago
Charles Reid 03f81f4a25 more horrible hard-coded python binary 3 years ago
Charles Reid 002ad20d7d stupid stupid stupid hard-coded shim path 3 years ago
Charles Reid 2cb6a39990 restore weekly schedule 3 years ago
Charles Reid 920ff3839e update gitea robots 3 years ago
Charles Reid d3dae75d38 add robots.txt to charlesreid1.com and git.charlesreid1.com 3 years ago
Charles Reid 4004ba6ccb add robots dir 3 years ago
Charles Reid cf982ee2c6 add robots.txt to docker-compose template 3 years ago
Charles Reid efd9487953 add cut cmd to du cmd in aws backup script 3 years ago
Charles Reid b2552b6345 fix gitea backup script 3 years ago
Charles Reid 1a8f699ab4 UGH more endless fixes 3 years ago
Charles Reid 5e3ab1768c add boto/botocore checks, rearrange service installation steps 3 years ago
Charles Reid 291ff2d28a restore daily runs 3 years ago
Charles Reid 229975883c restore once a week schedule 3 years ago
Charles Reid af7ef822f0 remove commented lines 3 years ago
Charles Reid cc3688a982 add botocore/boto3 check for canary 3 years ago
Charles Reid e080cda745 add missing directive to rsyslog conf file 3 years ago
Charles Reid 45c0f1390f update certbot renewal service 3 years ago
Charles Reid dacef1ac09 fix rsyslog config file 3 years ago
Charles Reid 03a8456a2a fix execstartpre for canary service 3 years ago
Charles Reid d1d749d8e4 update makefile and add rsyslog config file 3 years ago
Charles Reid 74adabc43a update log strategy - all services log to syslog, rely on user to filter system log 3 years ago
Charles Reid 3566305577 add rsyslog filtering option 3 years ago
Charles Reid 7442b2ee87 completely remove StandardOutput: from all serivces 3 years ago
Charles Reid 9aa49166a6 remove StandardOutput from service files https://github.com/systemd/systemd/pull/10944 3 years ago
Charles Reid f06ac24ecb fix file: to append: 3 years ago
Charles Reid b796cc9756 bump backup services schedule to daily 3 years ago
Charles Reid 25063ed251 pin mediawiki version to 1.34 in mw Dockerfile 3 years ago
Charles Reid 72a47d71f2 more fail2ban cleanup 3 years ago
Charles Reid dba09976fb remove non-functional fail2banlog ext 3 years ago
Charles Reid 7a3c76b9f9 remove unused script (use one in scripts/ instead) 3 years ago
Charles Reid 18fd6038df fix clean-templates file 3 years ago
Charles Reid 18814b6a1d fix pod install dir variable name 3 years ago
Charles Reid fc35d94b3c fix typos in apply templates script 3 years ago
Charles Reid 3604bc1378 ignore environment when cleaning rendered templates 3 years ago
Charles Reid f0f65db9e3 make mkdocs-material submodule url https instad of git so it works without ssh key preconfigured 3 years ago
Charles Reid e5686d4d9a Merge branch 'feature/environment-template' 3 years ago
Charles Reid 30c4a24b8d massive rename of all ansible variables 3 years ago
Charles Reid 904122db17 prep apply templates script for ansible variable rename 3 years ago
Charles Reid 8760edf0c3 fix missing var name in environment.j2 3 years ago
Charles Reid b4650771bc add environment template 3 years ago
Charles Reid b8182774a4 add --ignore-failed-read flag to gitea tar command 3 years ago
Charles Reid bb3b6c027a update certbot service to send logs to /var/log 3 years ago
Charles Reid 1d18b5e71c send backup canary logs to /var/log 3 years ago
Charles Reid 858cb6c3c8 send backup service logs to /var/log 3 years ago
Charles Reid 0a5f9f99ac fix service description 3 years ago
Charles Reid 2ac521e1c9 fix env var name in clean olderthan script 3 years ago
Charles Reid ffc4f1d0c0 add --no-progress flag to aws bacup script 3 years ago
Charles Reid 7246b0845c cover cleanolderthan service with makefile install/uninstall rules 3 years ago
Charles Reid 67acb4a32b Merge branch 'clean-backups' 3 years ago
Charles Reid 15d4bcecc7 add systemd timer for clean backups service 3 years ago
Charles Reid 9c92f3fd75 Merge branch 'service-updates' 3 years ago
Charles Reid b838446576 add service to clean files older than N days 3 years ago
Charles Reid 25b0f900a7 add ExecStartPre to existing backup services 3 years ago
Charles Reid 0b2943fc3a clean older than 45 days 3 years ago
Charles Reid 6fb8e7fdaa update apply templates script to include ignore list 3 years ago
Charles Reid 573c0a3723 filter warning about password during mysqldump 3 years ago
Charles Reid 6f5ee63c34 fix var problems with build extensions script and fix_* mw scripts 3 years ago
Charles Reid 1e2e7a577f fix hard-coded vars 3 years ago
Charles Reid 79d644e5bf typo fixes 3 years ago
Charles Reid f67faa651b fix var mapping 3 years ago
Charles Reid d5c441f9bf add chmod +x for shell scripts 3 years ago
Charles Reid c20a32b616 run certbot service as root 3 years ago
Charles Reid 18d5d46406 create boto3 s3 resource in backups canary script 3 years ago
Charles Reid b8650cea95 update clean olderthan script 3 years ago
Charles Reid 7caae4c5d6 less verbose aws commands 3 years ago
Charles Reid 9e7f971a33 fix backups canary script 3 years ago
Charles Reid bf78d136c7 add canary to install process in makefile 3 years ago
Charles Reid dbd2effd68 update backups canary to use the right python 3 years ago
Charles Reid 2c6a231983 fix canary service file 3 years ago
Charles Reid 9f894f8780 fix canary timer syntax 3 years ago
Charles Reid 07fd8e8a09 fix env var checks in apply templates script 3 years ago
Charles Reid 31357bf16b restore backup timers to their final time 3 years ago
Charles Reid 1a456a72b4 fix up aws backup script to use native aws cli env vars 3 years ago
Charles Reid 2fe66094a6 fix chmod commands for installed template files 3 years ago
Charles Reid ca88f9ff5c fix permissions in makefile when installing service/timer files 3 years ago
Charles Reid 5dc5ad5fb2 update timer syntax 3 years ago
Charles Reid 455e3aa6e8 correctly specify aws credentials before using aws cli 3 years ago
Charles Reid fda32ac686 minor makefile improvements 3 years ago
Charles Reid 3add031dd5 add aws backups to makefile 3 years ago
Charles Reid 0f93a15f20 fix problem with aws backup script 3 years ago
Charles Reid 20a569277b ignore log files 3 years ago
Charles Reid c6f7e290f4 fix wikifiles dump script 3 years ago
Charles Reid 2a3c0b56c8 update timer description 3 years ago
Charles Reid 2e6a339fbb fix service output/error syntax 3 years ago
Charles Reid 619b09cc2c use abs path to bash 3 years ago
Charles Reid e7859eb4c5 more certbot updates 3 years ago
Charles Reid 92a7189dbe update descriptions of service/timer for certbot 3 years ago
Charles Reid 0401c08a56 install certbot with make install command 3 years ago
Charles Reid 83e22c1cd2 update gitignore 3 years ago
Charles Reid e0ae04dee4 fix typos 3 years ago
Charles Reid 61cd05b01a Merge branch 'cert-renewal' 3 years ago
Charles Reid 1bd7893507 add certbot renewal script, plus service, plus timer 3 years ago
Charles Reid 1d7e3b4c55 run backups canary on sunday at 9 am 3 years ago
Charles Reid ffe898d656 add gitea backups to makefile 3 years ago
Charles Reid d1895de16f update gitignore 3 years ago
Charles Reid 40e9ef3880 Merge branch 'main' of https://github.com/charlesreid1-docker/pod-charlesreid1 3 years ago
Charles Reid 89f8e4dd15 Merge branch 'add-gitea-backups' 3 years ago
Charles Reid 30ad04448c reschedule aws backups for an hour after other backups 3 years ago
Charles Reid 47c60ef5f9 add gitea timer/service 3 years ago
Charles Reid 83b4a08fbd add gitea backup script 3 years ago
Charles Reid 753df5176a update d-gitea readme a bit 3 years ago
Charles Reid 941923c5da fix mediawiki build extensions script 3 years ago
Charles Reid 9103e60eec prefix install/uninstall commands with sudo 3 years ago
Charles Reid ac8c6e7c7c remove unused file 3 years ago
Charles Reid 39eb2f8b00 update gitignore for d-gitea 3 years ago
Charles Reid 9e3db8ea2e update service to specify full path to test 3 years ago
Charles Reid ea814e572f add more rendered templates to gitignore 3 years ago
Charles Reid 8181e334eb update apply templates script 3 years ago
Charles Reid b6209c2bfa revamp jinja-to-env var map 3 years ago
Charles Reid 895605e340 fix apply templates 3 years ago
Charles Reid dd119618e9 ignore gitea data dir 3 years ago
Charles Reid 46aeb84217 Merge branch 'make-stuff' 3 years ago
Charles Reid 857f5eaad8 Merge branch 'backup-stuff' into make-stuff 3 years ago
Charles Reid a4e157223a backup canary -> backups canary 3 years ago
Charles Reid 1cd2100c03 add backup canary 3 years ago
Charles Reid cfb48578da update env example 3 years ago
Charles Reid 8f049c05d3 remove gitea from makefile 3 years ago
Charles Reid 2db3cf5001 update scripts readme 3 years ago
Charles Reid 48d8184022 add readme for backup scripts 3 years ago
Charles Reid ad7cad9521 update timers to run on sunday 3 years ago
Charles Reid cef2e260b0 more scripts cleanup 3 years ago
Charles Reid ae4abd454b clean up existing scripts, remove gitea dump scripts 3 years ago
Charles Reid ab245284d7 add aws backup scripts (first draft) 3 years ago
Charles Reid 9c8317c2bc disable gitea backups 3 years ago
Charles Reid cf6a3a89ba Merge branch 'break-submodules' into make-stuff 3 years ago
Charles Reid 7eb3284405 Merge branch 'break-submodules-rm-submodules' into break-submodules 3 years ago
Charles Reid bff7152d35 remove gitea, mediawiki, mysql, nginx submodules 3 years ago
Charles Reid a2d32411bc Merge branch 'break-submodules-nginx' into break-submodules 3 years ago
Charles Reid 115dd87f32 add nginx dir 3 years ago
Charles Reid 1177dfbece Merge branch 'break-submodules-mysql' into break-submodules 3 years ago
Charles Reid d292db8b44 add d-mysql directory contents 3 years ago
Charles Reid eb5d688a7a Merge branch 'break-submodules-mediawiki' into break-submodules 3 years ago
Charles Reid d91e00a2e1 adding charlesreid1.com wiki config dir - includes MW skin 3 years ago
Charles Reid 51dafe3768 update gitignore 3 years ago
Charles Reid a667966fcf fix clean templates script 3 years ago
Charles Reid dee3b0036b add d-mediawiki files 3 years ago
Charles Reid c70568b6ac revamp makefile, add mw make commands 3 years ago
Charles Reid b60599a701 Merge branch 'break-submodules-gitea' into break-submodules 3 years ago
Charles Reid 8721a6d903 remove unused image 3 years ago
Charles Reid a6434fbf75 more gitea files 3 years ago
Charles Reid 2ddbdd8dca add gitea custom dir 3 years ago
Charles Reid b569412538 add data dir with dummy placeholder 3 years ago
Charles Reid 6bbce6600d rename submodules 3 years ago
Charles Reid cc1595586c update mysql scripts 3 years ago
Charles Reid f2760bf516 update mediawiki scripts 3 years ago
Charles Reid a2df381af3 add make help rule 3 years ago
Charles Reid 256515107b add install/uninstall plus a bunch of other make commands 3 years ago
Charles Reid ee9d9aa66e add makefile 3 years ago
Charles Reid 158daa4dff update gitignore 3 years ago
Charles Reid 3a0102658a update gitignore 3 years ago
Charles Reid 1822e01459 bump d-mediawiki submodule 3 years ago
Charles Reid a931d03ce2 update d-nginx-charlesreid1 template layout 3 years ago
Charles Reid ad033375d2 look for templates recursively 3 years ago
Charles Reid bd140b49cc update d-mw submodule pointer 3 years ago
Charles Reid d72b1f90ca check if pod_charlesreid1_dir env var exists 3 years ago
Charles Reid c1f589fe6c update gitea container pointer 3 years ago
Charles Reid 98a693a005 update gitea container pointer 3 years ago
Charles Reid aa1e373548 update log locations 3 years ago
Charles Reid ae503b2a14 remote todo 3 years ago
Charles Reid 6c123a2ffe remove update submodules script 3 years ago
Charles Reid 1e1611806a remove unused yaml file 3 years ago
Charles Reid 0e674cca36 moving utils-X to scripts/X 3 years ago
Charles Reid deb1db71fa remove attic 3 years ago
Charles Reid bf089eff76 add pod-charlesreid1 startup service script 3 years ago
Charles Reid 49e22483a3 add script to clean old files out 3 years ago
Charles Reid 1428af3b07 add scripts to create backups for gitea/wikidb/wikifiles 3 years ago
Charles Reid aefcfde465 add service and timer scripts for backup utilities 3 years ago
Charles Reid 7cd43c68d0 revamp the scripts dir 3 years ago
Charles Reid a881c044a8 move apply templates script to scripts/ 3 years ago
Charles Reid 95bcc2cd76 remove unused scripts 3 years ago
Charles Reid 160bb1e599 update apply_templates to map all jinja vars to env vars 3 years ago
Charles Reid 6f314e2b86 add example environment file 3 years ago
Charles Reid 5ef08622c4 check for python3 and aws 3 years ago
Charles Reid fa29404ced bump d-nginx-charelsreid1 submodule pointer 3 years ago
Charles Reid 2a1b8ab374 add example environment file environment.example 3 years ago
Charles Reid 24e594bb00 add environment file to .gitignore 3 years ago
Charles Reid efb5485217 update license 3 years ago
Charles Reid 2f7576a44c remove phpmyadmin and python-files submodules 3 years ago
Charles Reid df982538b3 fix docker binary and backup dir structure 3 years ago
Charles Reid 5bb44f76f0 update d-mediawiki submodule 3 years ago
Charles Reid e1560017e7 update d-mediawiki submodule 3 years ago
Charles Reid 3d6e20263a fix wikidb dump script to match private-wiki wikidb dump script 3 years ago
Charles Reid 2977203b52 fix wikifiles backup script docker bin path and container name 3 years ago
Charles Reid 0d6f92e3e1 fix wikidb backup script path to docker and container name 3 years ago
Charles Reid 107e885c83 bind gitea to port 22 3 years ago
Charles Reid 71c91121c5 bump 3 years ago
Charles Reid 8ec2a7db2a fix container names 4 years ago
Charles Reid 543980373a update d-mediawiki submodule 4 years ago
Charles Reid f9fb9e34b4 make nginx dependent on mysql 4 years ago
Charles Reid 1c5512a350 update mw submodule 4 years ago
Charles Reid d2e57efe4b bump d-mysql version 4 years ago
Charles Reid 3453240935 fix math problems with mediawiki extensions upgrade 4 years ago
Charles Reid 31703eb2ed fixups for extensions/LocalSettings in d-mediawiki submodule 5 years ago
Charles Reid c1523bdad6 bump d-mediawiki submodule 5 years ago
Charles Reid 3c2a8f8e7d Merge branch 'master' of github.com:charlesreid1-docker/pod-charlesreid1 5 years ago
Charles Reid 1faf699866 bump commit pointer for d-nginx-charlesreid1 5 years ago
Charles Reid b9f6309e35 fix gitea repo location and mwf2b log location 5 years ago
Charles Reid 0c26201a75 update mw to include a mwf2b log 5 years ago
Charles Reid 24a795aec6 updating d-mediawiki submodules and mw-fail2ban log file 5 years ago
Charles Reid 513cdf6d82 add mwf2b log to mw bind-mounting in docker-compose file 5 years ago
Charles Reid 67ca856233 more new commits for fail2banlog config changes 5 years ago
Charles Reid f7bf5147b4 update charlesreid1-config in d-mediawiki submodule, fail2banlog 5 years ago
Charles Reid 7a938cdd0e update d-mediawiki submodule to latest 5 years ago
Charles Reid 633c83973c chmod +x clean.sh 5 years ago
Charles Reid 957a2d8f94 add script to clean out the backups directory 5 years ago
Charles Reid 2a9a94698d use absolute paths (fixup) 5 years ago
Charles Reid 21c8f89509 use absolute paths 5 years ago
Charles Reid cae87263de fix typos in docs links 5 years ago
Charles Reid c5a8431ba9 fix link 5 years ago
Charles Reid ee4bf4d7c5 update mkdocs-material submodule 5 years ago
Charles Reid 2aba479724 update mkdocs-material submodule (leave me alone, stop bothering me) 5 years ago
Charles Reid 947f844cfb update d-gitea submodule 5 years ago
Charles Reid 05f8b63af0 mount /gitea_repositories into d-gitea container at /data/gitea/repositories 5 years ago
Charles Reid 69f3e0da3a remove unused databot and service scripts 5 years ago
Charles Reid ce116e6757 update d-mediawiki submodule 5 years ago
Charles Reid 2c22c62339 fix docker-compose template 5 years ago
Charles Reid 55b4cb49db fix restore database script commands 5 years ago
Charles Reid 249293dbcf fix restore database config file in d-mysql 5 years ago
Charles Reid 351ac25722 update d-mysql submodule pointer 5 years ago
Charles Reid daccdcc191 try to fix up restore db script 5 years ago
Charles Reid 13a2c455a4 fix up restore db script 5 years ago
Charles Reid 8c9f254ef5 fix permissions in restore_wikifiles 5 years ago
Charles Reid 25e0d8e8d6 fix set -x and set +x commands 5 years ago
Charles Reid 245684aefd remove unused utils-gitea dir 5 years ago
Charles Reid 7eb16dbb1c remove backup wikifiles script 5 years ago
Charles Reid 68f6c50e4d fix more path issues in backup dump scripts 5 years ago
Charles Reid 9f164de798 fix path to backup file (2) 5 years ago
Charles Reid 8933444965 fix path to backup file 5 years ago
Charles Reid 4914c2819c use git user in gitea dump script 5 years ago
Charles Reid e4879d5f6f remove daily script 5 years ago
Charles Reid 65dbd73595 remove monthly script 5 years ago
Charles Reid 5882782865 update/add all backup dump scripts 5 years ago
Charles Reid 50d5ff98e8 remove unused mysql backup script 5 years ago
Charles Reid 562f163154 add new gitea and wikidb dump files 5 years ago
Charles Reid b4da61545d remove unused daily gitea script 5 years ago
Charles Reid dab23e6505 update backup gitea script 5 years ago
Charles Reid 255bf10255 remove unused gitea utils 5 years ago
Charles Reid 6d83e1eccc update d-gitea .gitignore 5 years ago
Charles Reid ee5902d7c0 fix d-gitea bind-mounting 5 years ago
Charles Reid 1ed9a6a231 update d-gitea submodule to latest 5 years ago
Charles Reid 84c474b31f Merge branch 'master' of github.com:charlesreid1-docker/pod-charlesreid1 5 years ago
Charles Reid f953bcba57 add d-gitea submodule 5 years ago
Charles Reid 0e88276628 remove d-gitea submodule 5 years ago
Charles Reid d4483afc98 fix config file 5 years ago
Charles Reid c1d95506af add d-gitea submodule 5 years ago
Charles Reid d561e9dea8 remove d-gitea submodule 5 years ago
Charles Reid 77c7cac926 remove unused scripts 5 years ago
Charles Reid 8b4e7e862b update d-nginx-charlesreid1 5 years ago
Charles Reid 6a7fcafd9e fix name of pod in gitea restore script 5 years ago
Charles Reid c6d9075ac3 take backup_gitea utility script out of commission until gitea dump is finally working 5 years ago
Charles Reid 5f3080cd2b fix path to pod in gitea scrape script 5 years ago
Charles Reid 20781b3c6a fix docs typo 5 years ago
Charles Reid 64098c806f fix wikifiles backup script - some problematic docker commands 5 years ago
Charles Reid c090346b03 update memo on scripts 5 years ago
Charles Reid 88c10dd4eb sleep a little less 5 years ago
Charles Reid 68cb4e38d3 fix container name and set x placement in backup_wikifiles script 5 years ago
Charles Reid 5cd1790039 update and print messages for backup_* scripts 5 years ago
Charles Reid e735372842 fix logfile names in backup scripts 5 years ago
Charles Reid a12ac7e22f update backup_gitea with a few small fixes 5 years ago
Charles Reid f588287930 fix variable name and container name 5 years ago
Charles Reid 3a9a99ba12 fix run_cmd calls in backup scripts 5 years ago
Charles Reid 3b712cfc44 fix datestamps in backup scripts 5 years ago
Charles Reid d3a24d844c add and update apply_templates* scripts 5 years ago
Charles Reid e1330531ff improve placement of set x statements in backup gitea script 5 years ago
Charles Reid 3dde64de62 update mediawiki submodule 5 years ago
Charles Reid aaecd56bc6 fix the -C flag 5 years ago
Charles Reid 5fc6953076 fix container name 5 years ago
Charles Reid e4a34b71e3 update mw skin 5 years ago
Charles Reid a323d65108 remove 5 years ago
Charles Reid 7a9cb10e00 script is currently broken 5 years ago
Charles Reid b7cf150768 update restore database script 5 years ago
Charles Reid 0291bfcc21 Merge branch 'master' of github.com:charlesreid1-docker/pod-charlesreid1 5 years ago
Charles Reid 8041cd0458 rearrange set statements 5 years ago
Charles Reid f8814ecfd5 Merge remote-tracking branch 'cmr/spew-fix' 5 years ago
Charles Reid e5c145d180 add backup_gitea script + service 5 years ago
Charles Reid be8b77f615 remove .j2 extension in service script 5 years ago
Charles Reid ecfc2657da add backup_wikifiles script + service 5 years ago
Charles Reid 5343fc14fb fix typo 5 years ago
Charles Reid 8ac8bb3cb0 add backup mysql script + service 5 years ago
Charles Reid b0d5fbf94d fix paths to scrape and assemble scripts 5 years ago
Charles Reid 9fdb94aae1 add "user" argument to scrape_gitea_as_sudo script 5 years ago
Charles Reid 6504c60f92 update gitea submodule 5 years ago
Charles Reid b03db69305 Merge branch 'master' of github.com:charlesreid1-docker/pod-charlesreid1 5 years ago
Charles Reid 34fe316c28 temper temper 5 years ago
Charles Reid 0df1c8c6cd update gitignore 5 years ago
Charles Reid 1e90942d54 Merge branch 'master' of github.com:charlesreid1-docker/pod-charlesreid1 5 years ago
Charles Reid 77cb672f2c update modifications to app.ini in d-gitea 5 years ago
Charles Reid 0c43293449 Add databot service + script for forever loop 5 years ago
Charles Reid d7e35ce4a7 add forever loop scripts to gitignore file 5 years ago
Charles Reid 7bc3e0cfa5 add a forever loop in python, and a corresponding service to run it forever 6 years ago
Charles Reid 7d65896461 fix imports in git clone data script 6 years ago
Charles Reid 3d650cca74 add clarifying comments 6 years ago
Charles Reid 7c2eabc025 rename the script back to what it should be 6 years ago
Charles Reid b44c9923cc update mediawiki submodule 6 years ago
Charles Reid 17bf7c8bba update mediawiki submodule to latest 6 years ago
Charles Reid dfb4ab1f81 update fix_* scripts in mediawiki submodule 6 years ago
Charles Reid 566ce5f875 fix fix_* scripts in d-mediawiki submodule 6 years ago
Charles Reid 05d4718802 fix variable name typo 6 years ago
Charles Reid 9afcee8dbd update git clone scripts 6 years ago
Charles Reid 986e9bdbca use executor in git_clone_* scripts 6 years ago
Charles Reid 4f8cc11d5e update git pull scripts again 6 years ago
Charles Reid a4119d21e9 update git pull scripts again 6 years ago
Charles Reid 93631333d7 update git pull scripts 6 years ago
Charles Reid 926ed5d5f4 update pull scripts duuumb 6 years ago
Charles Reid fd52e16659 modify print line 6 years ago
Charles Reid 4ec7a01e38 update mkdocs-material 6 years ago
Charles Reid 695e44efd6 fix print lines 6 years ago
Charles Reid c09e167c99 update/fix git pull data 6 years ago
Charles Reid 316a12e9f8 handle stderr when commands fail 6 years ago
Charles Reid 9a183685c3 update readme with todos 6 years ago
Charles Reid a8e605640d update git pull data script docstring 6 years ago
Charles Reid 908d380fb5 add executioner, convert pull scripts to use executioner 6 years ago
Charles Reid e1017e776d copy executioner function to output in apply_templates script 6 years ago
Charles Reid e829de2399 fix git pull www script 6 years ago
Charles Reid ee454bd922 moving apply templates to account for git and pod 6 years ago
Charles Reid fbea6bb235 another typo fix 6 years ago
Charles Reid f5621154be update mkdocs-material to master 6 years ago
Charles Reid fda574e3d2 fix more typos, apply to charlesreid1.red 6 years ago
Charles Reid 09d475efae fix typo 6 years ago
Charles Reid fd1c2b18a0 fix git.htdocs folder name 6 years ago
Charles Reid 95cc9dfb20 update apply_templates script for testing 6 years ago
Charles Reid 0863b01bb7 cleanup 6 years ago
Charles Reid ed711bee04 Move git shell scripts to attic 6 years ago
Charles Reid 9732564bf4 add git pull scripts and apply_template script 6 years ago
Charles Reid e8834a3ac8 improve logic in git clone scripts 6 years ago
Charles Reid a4ca100dff move git clone www and git clone data scripts to templates 6 years ago
Charles Reid 92a255ff6e update d-nginx-charlesreid1 submodule 6 years ago
Charles Reid e2bfba4143 fix variable name in d-nginx-charlesreid1 config file 6 years ago
Charles Reid 6d8a1021f7 update comment in d-nginx-charlesreid1 6 years ago
Charles Reid 645d15f94f update mediawiki submodule 6 years ago
Charles Reid f0bd402e9b update d-nginx-charlesreid1 submodule 6 years ago
Charles Reid 490187bc4f update nginx templates to hard-code subdomains 6 years ago
Charles Reid fbd72ebf2a add apply templates script 6 years ago
Charles Reid 77c313141d clean up docker-compose template 6 years ago
Charles Reid 06308ad8ca replace charlesreid1.com with server_name_default 6 years ago
Charles Reid ab168da9ce tidy up gitea app.ini 6 years ago
Charles Reid 1127114a72 add comment+link 6 years ago
Charles Reid fba385f098 fix submodule import typo 6 years ago
Charles Reid f3c6b55b09 change gh org for mkdocs-material 6 years ago
  1. 27
      .gitignore
  2. 20
      .gitmodules
  3. 2
      LICENSE
  4. 194
      Makefile
  5. 34
      TODO.md
  6. 17
      common.mk
  7. 1
      d-gitea
  8. 34
      d-gitea/README.md
  9. 106
      d-gitea/custom/conf/app.ini.j2
  10. 1
      d-gitea/custom/public/hello.html
  11. 3
      d-gitea/custom/templates/custom/extra_links.tmpl
  12. 3
      d-gitea/custom/templates/home.tmpl
  13. 1
      d-mediawiki
  14. 63
      d-mediawiki/Dockerfile
  15. 97
      d-mediawiki/README.md
  16. 30
      d-mediawiki/Skins.md
  17. 11
      d-mediawiki/charlesreid1-config/Readme.md
  18. 1
      d-mediawiki/charlesreid1-config/apache/.gitignore
  19. 65
      d-mediawiki/charlesreid1-config/apache/charlesreid1.wiki.conf.j2
  20. 2
      d-mediawiki/charlesreid1-config/mediawiki/.gitignore
  21. 243
      d-mediawiki/charlesreid1-config/mediawiki/LocalSettings.php.j2
  22. 18
      d-mediawiki/charlesreid1-config/mediawiki/README.md
  23. 43
      d-mediawiki/charlesreid1-config/mediawiki/apply_templates.py
  24. 329
      d-mediawiki/charlesreid1-config/mediawiki/sample_LocalSettings.php
  25. 452
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/Bootstrap2.php.j2
  26. 339
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/COPYING
  27. 67
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE50Fixes.css
  28. 88
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE55Fixes.css
  29. 125
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE60Fixes.css
  30. 96
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE70Fixes.css
  31. 18
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/_footer.html
  32. 7
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-3.3.4.js
  33. 90
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-alert.js
  34. 96
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-button.js
  35. 169
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-carousel.js
  36. 157
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-collapse.js
  37. 6981
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-cyborg.css
  38. 100
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-dropdown.js
  39. 399
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-image-gallery.js
  40. 1
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-image-gallery.min.js
  41. 218
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-modal.js
  42. 98
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-popover.js
  43. 1109
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-responsive-cyborg.css
  44. 151
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-scrollspy.js
  45. 135
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-tab.js
  46. 275
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-tooltip.js
  47. 61
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-transition.js
  48. 285
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-typeahead.js
  49. 5
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap.css
  50. 2027
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap.js
  51. 6
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap.min.js
  52. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bullet.gif
  53. 490
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/buttons.css
  54. 24
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/cleannavbar.php
  55. 124
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/cmr-bootstrap-cyborg-wiki.css
  56. 81
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/cmr-bootstrap-cyborg.css
  57. 4
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/css/font-awesome.css
  58. 85
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/dox.css
  59. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/FontAwesome.otf
  60. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.eot
  61. 2671
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.svg
  62. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.ttf
  63. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.woff
  64. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.woff2
  65. 53
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/footer.php
  66. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/headbg.jpg
  67. 19
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/header.php
  68. 8
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/hooks.txt
  69. 9
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/i18n/en.json
  70. 105
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/icebrrg.css
  71. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/images/email_black.png
  72. 4
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/jquery-1.11.2.js
  73. 5
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/jquery-1.11.3.min.js
  74. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/link_icon.gif
  75. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/magnify-clip.png
  76. 1296
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main.css
  77. 1178
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main.css.backup
  78. 747
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main_cmr.css
  79. 1231
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main_dark.css
  80. 1165
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main_old.css
  81. 24
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/navbar.php.j2
  82. 36
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/oldnavbar.html
  83. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/required.gif
  84. 33
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/skin.json
  85. 7301
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/slate.css
  86. 120
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/stock_skin.json
  87. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/user.gif
  88. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/wiki-indexed.png
  89. BIN
      d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/wiki.png
  90. 3
      d-mediawiki/php/php.ini
  91. 1
      d-mysql
  92. 11
      d-mysql/Dockerfile
  93. 11
      d-mysql/README.md
  94. 4
      d-mysql/erase_mysql_volume.sh
  95. 4
      d-mysql/make_mysql_volume.sh
  96. 1
      d-nginx-charlesreid1
  97. 6
      d-nginx-charlesreid1/conf.d/_.conf
  98. 1
      d-nginx-charlesreid1/conf.d/csp.conf
  99. 1
      d-nginx-charlesreid1/conf.d/giteacsp.conf
  100. 29
      d-nginx-charlesreid1/conf.d/http.DOMAIN.conf.j2
  101. Some files were not shown because too many files have changed in this diff Show More

27
.gitignore vendored

@ -1,4 +1,31 @@
*.log
*.pyc
environment
attic
# gitea
d-gitea/data/
d-gitea/custom/
# mediawiki
charlesreid1.wiki.conf
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/Bootstrap2.php
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/navbar.php
d-mediawiki/mediawiki/
# nginx
d-nginx-charlesreid1/conf.d/http.DOMAIN.conf
d-nginx-charlesreid1/conf.d/https.DOMAIN.conf
# scripts dir
scripts/git_*_www.py
scripts/certbot/renew_charlesreid1_certs.sh
*.timer
*.service
# misc
site site
root.password root.password
docker-compose.yml docker-compose.yml
*.zip *.zip

20
.gitmodules vendored

@ -1,21 +1,3 @@
[submodule "d-mysql"]
path = d-mysql
url = git@github.com:charlesreid1-docker/d-mysql.git
[submodule "d-mediawiki"]
path = d-mediawiki
url = git@github.com:charlesreid1-docker/d-mediawiki.git
[submodule "d-phpmyadmin"]
path = d-phpmyadmin
url = git@github.com:charlesreid1-docker/d-phpmyadmin.git
[submodule "d-nginx-charlesreid1"]
path = d-nginx-charlesreid1
url = git@github.com:charlesreid1-docker/d-nginx-charlesreid1.git
[submodule "d-gitea"]
path = d-gitea
url = git@github.com:charlesreid1-docker/d-gitea.git
[submodule "d-python-files"]
path = d-python-files
url = git@github.com:charlesreid1-docker/d-python-files.git
[submodule "mkdocs-material"] [submodule "mkdocs-material"]
path = mkdocs-material path = mkdocs-material
url = git@github.com:charlesreid1/mkdocs-material.git url = https://github.com/charlesreid1/mkdocs-material

2
LICENSE

@ -1,4 +1,4 @@
Copyright (c) 2018 Charles Reid Copyright (c) 2018-2021 Charles Reid
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

194
Makefile

@ -0,0 +1,194 @@
include common.mk
all:
@echo "no default make rule defined"
help:
@echo ""
@echo ""
@echo "pod-charlesreid Makefile:"
@echo ""
@echo ""
@echo "This Makefile contains rules for setting up pod-charlesreid1"
@echo ""
@echo "make help: Get help"
@echo ""
@echo "--------------------------------------------------"
@echo " Templates:"
@echo ""
@echo "make templates: Render each .j2 template file in this and all subdirectories"
@echo " (uses environment variables to populate Jinja variables)"
@echo ""
@echo "make list-templates: List each .j2 template file that will be rendered by a 'make template' command"
@echo ""
@echo "make clean-templates: Remove each rendered .j2 template"
@echo ""
@echo "--------------------------------------------------"
@echo " Backups:"
@echo ""
@echo "make backups: Create backups of every service (wiki database, wiki files) in ~/backups"
@echo ""
@echo "make clean-backups: Remove files from ~/backups directory older than 30 days"
@echo ""
@echo "--------------------------------------------------"
@echo " MediaWiki:"
@echo ""
@echo "make mw-build-extensions Build the MediaWiki extensions directory"
@echo ""
@echo "make mw-fix-extensions Copy the built extensions directory into the MW container"
@echo ""
@echo "make mw-fix-localsettings Copy the LocalSettings.php file into the MW container"
@echo ""
@echo "make mw-fix-skins Copy the skins directory into the MW container"
@echo ""
@echo "--------------------------------------------------"
@echo " /www Directory:"
@echo ""
@echo "make clone-www: Create the /www directory structure for charlesreid1.com"
@echo ""
@echo "make pull-www: Update the contents of the /www directory structure for charlesreid1.com"
@echo ""
@echo "--------------------------------------------------"
@echo " Startup Services:"
@echo ""
@echo "make install: Install and start systemd service to run pod-charlesreid1."
@echo " Also install and start systemd service for pod-charlesreid1 backup services"
@echo " for each service (mediawiki/mysql) part of pod-charlesreid1."
@echo ""
@echo "make uninstall: Remove all systemd startup services and timers part of pod-charlesreid1"
@echo ""
# Templates
templates:
@find * -name "*.service.j2" | xargs -I '{}' chmod 644 {}
@find * -name "*.timer.j2" | xargs -I '{}' chmod 644 {}
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/apply_templates.py
list-templates:
@find * -name "*.j2"
clean-templates:
# sudo is required because bind-mounted gitea files end up owned by root. stupid docker.
sudo -E /home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/clean_templates.py
# Backups
backups:
$(POD_CHARLESREID1_DIR)/scripts/backups/wikidb_dump.sh
$(POD_CHARLESREID1_DIR)/scripts/backups/wikifiles_dump.sh
clean-backups:
$(POD_CHARLESREID1_DIR)/scripts/clean_templates.sh
# MediaWiki
mw-build-extensions:
$(POD_CHARLESREID1_DIR)/scripts/mw/build_extensions_dir.sh
mw-fix-extensions: mw-build-extensions
$(POD_CHARLESREID1_DIR)/scripts/mw/build_extensions_dir.sh
mw-fix-localsettings:
$(POD_CHARLESREID1_DIR)/scripts/mw/fix_LocalSettings.sh
mw-fix-skins:
$(POD_CHARLESREID1_DIR)/scripts/mw/fix_skins.sh
# /www Dir
clone-www:
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/git_clone_www.py
pull-www:
/home/charles/.pyenv/shims/python3 $(POD_CHARLESREID1_DIR)/scripts/git_pull_www.py
install:
ifeq ($(shell which systemctl),)
$(error Please run this make command on a system with systemctl installed)
endif
@/home/charles/.pyenv/shims/python3 -c 'import botocore' || (echo "Please install the botocore library using python3 or pip3 binary"; exit 1)
@/home/charles/.pyenv/shims/python3 -c 'import boto3' || (echo "Please install the boto3 library using python3 or pip3 binary"; exit 1)
sudo cp $(POD_CHARLESREID1_DIR)/scripts/pod-charlesreid1.service /etc/systemd/system/pod-charlesreid1.service
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-aws.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-cleanolderthan.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-gitea.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-wikidb.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/pod-charlesreid1-backups-wikifiles.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/canary/pod-charlesreid1-canary.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/certbot/pod-charlesreid1-certbot.{service,timer} /etc/systemd/system/.
sudo cp $(POD_CHARLESREID1_DIR)/scripts/backups/10-pod-charlesreid1-rsyslog.conf /etc/rsyslog.d/.
sudo chmod 664 /etc/systemd/system/pod-charlesreid1*
sudo systemctl daemon-reload
sudo systemctl restart rsyslog
sudo systemctl enable pod-charlesreid1
sudo systemctl enable pod-charlesreid1-backups-wikidb.timer
sudo systemctl enable pod-charlesreid1-backups-wikifiles.timer
sudo systemctl enable pod-charlesreid1-backups-gitea.timer
sudo systemctl enable pod-charlesreid1-backups-aws.timer
sudo systemctl enable pod-charlesreid1-backups-cleanolderthan.timer
sudo systemctl enable pod-charlesreid1-canary.timer
sudo systemctl enable pod-charlesreid1-certbot.timer
sudo systemctl start pod-charlesreid1-backups-wikidb.timer
sudo systemctl start pod-charlesreid1-backups-wikifiles.timer
sudo systemctl start pod-charlesreid1-backups-gitea.timer
sudo systemctl start pod-charlesreid1-backups-aws.timer
sudo systemctl start pod-charlesreid1-backups-cleanolderthan.timer
sudo systemctl start pod-charlesreid1-canary.timer
sudo systemctl start pod-charlesreid1-certbot.timer
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-aws.service.log
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-cleanolderthan.service.log
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-gitea.service.log
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-wikidb.service.log
sudo chown syslog:syslog /var/log/pod-charlesreid1-backups-wikifiles.service.log
sudo chown syslog:syslog /var/log/pod-charlesreid1-canary.service.log
uninstall:
ifeq ($(shell which systemctl),)
$(error Please run this make command on a system with systemctl installed)
endif
-sudo systemctl disable pod-charlesreid1
-sudo systemctl disable pod-charlesreid1-backups-aws.timer
-sudo systemctl disable pod-charlesreid1-backups-cleanolderthan.timer
-sudo systemctl disable pod-charlesreid1-backups-gitea.timer
-sudo systemctl disable pod-charlesreid1-backups-wikidb.timer
-sudo systemctl disable pod-charlesreid1-backups-wikifiles.timer
-sudo systemctl disable pod-charlesreid1-canary.timer
-sudo systemctl disable pod-charlesreid1-certbot.timer
# Leave the pod running!
# -sudo systemctl stop pod-charlesreid1
-sudo systemctl stop pod-charlesreid1-backups-aws.timer
-sudo systemctl stop pod-charlesreid1-backups-cleanolderthan.timer
-sudo systemctl stop pod-charlesreid1-backups-gitea.timer
-sudo systemctl stop pod-charlesreid1-backups-wikidb.timer
-sudo systemctl stop pod-charlesreid1-backups-wikifiles.timer
-sudo systemctl stop pod-charlesreid1-canary.timer
-sudo systemctl stop pod-charlesreid1-certbot.timer
-sudo rm -f /etc/systemd/system/pod-charlesreid1.service
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-aws.{service,timer}
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-cleanolderthan.{service,timer}
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-gitea.{service,timer}
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-wikidb.{service,timer}
-sudo rm -f /etc/systemd/system/pod-charlesreid1-backups-wikifiles.{service,timer}
-sudo rm -f /etc/systemd/system/pod-charlesreid1-canary.{service,timer}
-sudo rm -f /etc/systemd/system/pod-charlesreid1-certbot.{service,timer}
sudo systemctl daemon-reload
-sudo rm -f /etc/rsyslog.d/10-pod-charlesreid1-rsyslog.conf
-sudo systemctl restart rsyslog
.PHONY: help

34
TODO.md

@ -1,34 +0,0 @@
# TODO
`underscores_in_headers on;`
[link](https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/)
- nginx configurations in separate files
- group all subdomain variations in one file
- one place to go
- one file = one domain, subdomain, port, etc. but group stuff easier to change
- network overlay
- nginx can't reverse proxy to 10.5.0.2 b/c doesn't see it
- need to have two networks:
- one virtual private network set up by docker (default)
- one host network only connected to nginx container
- extras in containers:
- fail2ban
- log rotation
- log backups
- netdata on krash?
- plugging docker-compose into netdata?
- disk space
- canary script
- finer grained control and understanding of fs usage
- <s>rebuild and restart for slimmer python files container</s>
- <s>logging? messages? status?
- want to avoid a few things:
- giant pileup of gigabytes of logs, getting bit in the ass
- giant pileup of container stuff, completely running out of space
- second almost happened, at 97% or so</s>

17
common.mk

@ -0,0 +1,17 @@
SHELL=/bin/bash
ifeq ($(shell echo ${POD_CHARLESREID1_DIR}),)
$(error Environment variable POD_CHARLESREID1_DIR not defined. Please run "source environment" in the repo root directory before running make commands)
endif
ifeq ($(shell test -d ${POD_CHARLESREID1_DIR} || echo "nope"), nope)
$(error Environment variable POD_CHARLESREID1_DIR points to a non-existent directory)
endif
ifeq ($(shell which python3),)
$(error Please install python3)
endif
ifeq ($(shell which aws),)
$(error Please install aws-cli)
endif

1
d-gitea

@ -1 +0,0 @@
Subproject commit f73c8c8258989a5eec6d119264964d20884a697a

34
d-gitea/README.md

@ -0,0 +1,34 @@
# d-gitea
This directory contains files for the gitea docker container
in the charlesreid1 docker pod.
See [pod-charlesreid1](https://git.charlesreid1.com/docker/pod-charlesreid1).
## Custom Directory
The custom directory contains the gitea configuration file, plus any other
custom files Gitea might need.
The `custom` directory is bind mounted to `/data/gitea` inside the container.
## Data Directory
The data directory contains any instance-specific gitea data.
The data directory is bind-mounted to `/app/gitea/data` in the container.
## Repository Drive
Gitea stores all of its repositories in a separate drive that is at
`/gitea_repositories` on the host machine.
The gitea repositories drive is bind-mounted to `/data/git/repositories` in the container.
### Rendering app.ini Template
The gitea configuration file is located at `custom/conf/app.ini`.
The app.ini configuration file is not provided, only a template is provided.
Use the top-level pod-charlesreid1 Makefile and scripts to render templates.
Use the top-level environment file to set variable values.

106
d-gitea/custom/conf/app.ini.j2

@ -0,0 +1,106 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; My Amazing Gitea Config File
;;
;; charles reid
;; march 2017
;; https://github.com/go-gitea/gitea/blob/master/conf/app.ini
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
APP_NAME = {{ pod_charlesreid1_gitea_app_name }}
RUN_USER = git
RUN_MODE = prod
[ui]
DEFAULT_THEME = arc-green
[database]
DB_TYPE = sqlite3
HOST =
NAME =
USER =
PASSWD =
SSL_MODE = disable
PATH = /data/gitea/gitea.db
[repository]
ROOT = /data/git/repositories
PREFERRED_LICENSES = MIT License
; This gets rid of the HTTP option to check out repos...
DISABLE_HTTP_GIT = false
[server]
PROTOCOL = http
DOMAIN = git.{{ pod_charlesreid1_server_name }}
#CERT_FILE = /www/gitea/certs/cert.pem
#KEY_FILE = /www/gitea/certs/key.pem
SSH_DOMAIN = git.{{ pod_charlesreid1_server_name }}
HTTP_PORT = 3000
HTTP_ADDR = 0.0.0.0
ROOT_URL = https://git.{{ pod_charlesreid1_server_name }}
;ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
DISABLE_SSH = false
; port to display in clone url:
;SSH_PORT = 222
; port for built-in ssh server to listen on:
SSH_LISTEN_PORT = 22
OFFLINE_MODE = false
; Upper level of template and static file path
; default is the path where Gitea is executed
;;;;STATIC_ROOT_PATH = /www/gitea/static
[mailer]
ENABLED = false
[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION = true
ENABLE_CAPTCHA = false
REQUIRE_SIGNIN_VIEW = false
[picture]
DISABLE_GRAVATAR = true
ENABLE_FEDERATED_AVATAR = false
AVATAR_UPLOAD_PATH = /data/gitea/avatars
[session]
PROVIDER = file
[log]
MODE = file
; Either "Trace", "Debug", "Info", "Warn", "Error", "Critical", default is "Trace"
LEVEL = Info
ROOT_PATH = /data/gitea/log
; For "file" mode only
[log.file]
LEVEL =
; This enables automated log rotate(switch of following options), default is true
LOG_ROTATE = true
; Max line number of single file, default is 1000000
MAX_LINES = 1000000
; Max size shift of single file, default is 28 means 1 << 28, 256MB
MAX_SIZE_SHIFT = 28
; Segment log daily, default is true
DAILY_ROTATE = true
; Expired days of log file(delete after max days), default is 7
MAX_DAYS = 7
[cron.archive_cleanup]
ENABLED = false
[security]
INSTALL_LOCK = true
SECRET_KEY = {{ pod_charlesreid1_gitea_secretkey }}
MIN_PASSWORD_LENGTH = 6
INTERNAL_TOKEN = {{ pod_charlesreid1_gitea_internaltoken }}
[other]
SHOW_FOOTER_BRANDING = false
; Show version information about Gitea and Go in the footer
SHOW_FOOTER_VERSION = false
; Show time of template execution in the footer
SHOW_FOOTER_TEMPLATE_LOAD_TIME = false

1
d-gitea/custom/public/hello.html

@ -0,0 +1 @@
<h2>hallo werld dis is de geeeeeet tea</h2>

3
d-gitea/custom/templates/custom/extra_links.tmpl

@ -0,0 +1,3 @@
<!--
<a class="item" href="{{AppSubUrl}}/hello.html">Hello World</a>
-->

3
d-gitea/custom/templates/home.tmpl

@ -0,0 +1,3 @@
{{template "base/head" .}}
<meta http-equiv="Refresh" content="0; url=/explore/repos" />
{{template "base/footer" .}}

1
d-mediawiki

@ -1 +0,0 @@
Subproject commit 1c765580a8c70c5e840045e2392ca1b2f79253ce

63
d-mediawiki/Dockerfile

@ -0,0 +1,63 @@
FROM mediawiki:1.34
EXPOSE 8989
VOLUME ["/var/www/html"]
# Install ImageMagick
# and math stuff mentioned by Math extension readme
RUN apt-get update && \
apt-get install -y build-essential \
dvipng \
ocaml \
ghostscript \
imagemagick \
texlive-latex-base \
texlive-latex-extra \
texlive-fonts-recommended \
texlive-lang-greek \
texlive-latex-recommended
# Copy skins, config files, and other particulars into container
# WARNING: DOCKER STUPIDITY AHEAD
# MediaWiki needs everything, everything, to be in one folder.
# Docker is totally incapable of mounting a file in a volume.
# I cannot update LocalSettings.php without clearing the cache.
# I cannot clear the cache without reinstalling all of latex.
# I can't bind-mount the skins dir, because then it's owned by root.
# I can't fix the fact that all bind-mounted dirs are owned by root,
# because I can only add commands in THIS DOCKERFILE.
# and when you run the commands in this dockerfile,
# YOU CANNOT SEE THE BIND-MOUNTED STUFF.
# Extensions
COPY charlesreid1-config/mediawiki/extensions/EmbedVideo /var/www/html/extensions/EmbedVideo
COPY charlesreid1-config/mediawiki/extensions/Math /var/www/html/extensions/Math
COPY charlesreid1-config/mediawiki/extensions/ParserFunctions /var/www/html/extensions/ParserFunctions
COPY charlesreid1-config/mediawiki/extensions/SyntaxHighlight_GeSHi /var/www/html/extensions/SyntaxHighlight_GeSHi
RUN chown -R www-data:www-data /var/www/html/*
# Skins
COPY charlesreid1-config/mediawiki/skins /var/www/html/skins
RUN chown -R www-data:www-data /var/www/html/skins
# Settings
COPY charlesreid1-config/mediawiki/LocalSettings.php /var/www/html/LocalSettings.php
RUN chown -R www-data:www-data /var/www/html/LocalSettings*
RUN chmod 600 /var/www/html/LocalSettings.php
# Apache conf file
COPY charlesreid1-config/apache/*.conf /etc/apache2/sites-enabled/
RUN a2enmod rewrite
RUN service apache2 restart
## make texvc
#CMD cd /var/www/html/extensions/Math && make && apache2-foreground
# PHP conf file
# https://hub.docker.com/_/php/
COPY php/php.ini /usr/local/etc/php/
# Start
CMD apache2-foreground

97
d-mediawiki/README.md

@ -0,0 +1,97 @@
# d-mediawiki
This directory contains files used to run the MediaWiki container
for the charlesreid1.com wiki. The MediaWiki container consists of
a PHP-enabled Apache web server serving the MediaWiki application,
and storing data in a MySQL database (different container).
See [pod-charlesreid1](https://git.charelsreid1.com/docker/pod-charlesreid1).
## Directory Layout
This directory contains `charlesreid1-config`, which has both
MediaWiki and Apache configuration files.
## Creating Extensions Directory
## Summary
This directory contains a Dockerfile that modifies the
official MediaWiki docker container. Before launching
the container, it specifies `/var/www/html` as a mounted volume,
and it copies `LocalSettings.php`, the MediaWiki config file,
from this repo into the container.
See [d-mysql repo](https://charlesreid1.com:3000/docker/d-mysql).
Also see [pod-charlesreid1](https://git.charlesreid1.com/docker/pod-charlesreid1.git)
for a working pod using this container.
## Docker Compose
To use this container as part of a pod, as with the charlesreid1.com wiki,
see [pod-charlesreid1-wiki](https://charlesreid1.com:3000/docker/pod-charlesreid1-wiki).
## Troubleshooting
If you are seeing 404s on every page you try, it may be because
your MediaWiki config file is set to redirect you to `/wiki/Main_Page`
but your web server is not set up to handle it.
See [this lin](https://www.mediawiki.org/wiki/Manual:Short_URL)
and the guide for [apache](https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Short_URL/Apache)
and [nginx](https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Short_URL/Nginx).
## Updating Settings
The LocalSettings.php file must be copied into the
container, because we will end up bind-mounting the
entire MediaWiki directory when the container is run
and we can't bind-mount a file inside a bind-mounted
directory.
Thus, to update LocalSettings.php, skins, or extensions,
you will need to re-make the Docker container.
Use the make rules to remake the Docker container:
```
make clean
make build
make run
```
## Submodule
The submodule `charlesreid1-config/`
contains configuration files for both
MediaWiki and Apache.
See the [wiki/charlesreid1-config](https://git.charlesreid1.com/wiki/charlesreid1-config)
repo for details.
To clone the submodule when you clone the repo,
include the `--recursive` flag:
```
git clone --recursive https://git.charlesreid1.com/docker/d-mediawiki.git
```
To check out the submodule after a shallow clone:
```
git submodule init
# or
git submodule update --init
```
To fetch changes to the submodule from the submodule's remote:
```
git submodule update --remote
```

30
d-mediawiki/Skins.md

@ -0,0 +1,30 @@
To update the MediaWiki skin:
- See the long angry rant in the Dockerfile
- You have to rebuild the whole container. Yup, stupid.
- Rebuild the MW container while the docker pod is still running (won't effect the docker pod)
- When finished rebuilding the MW container, restart the docker pod.
```
# switch to main pod directory
cd ../
# rebuild all containers
docker-compose build
# stop and start the pod
sudo service pod-charlesreid1 stop
sudo service pod-charlesreid1 start
```
To verify that the skin has correcty been installed, you can check
the skin file inside the container. First, get a shell in the container:
```
docker exec -it stormy_mw /bin/bash
```
Once inside the container, the main web directory is `/var/www/html/`,
so the skins should be in `/var/www/html/skins/`. You can use `cat` to
print the file to the screen and verify it is correct.

11
d-mediawiki/charlesreid1-config/Readme.md

@ -0,0 +1,11 @@
# charlesreid1-config
Config and other site-specific files
for the charlesreid1.com wiki.
The apache directory contains apache config files
for the apache server runing mediawiki.
The mediawiki directory contains mediawiki
configuration files.

1
d-mediawiki/charlesreid1-config/apache/.gitignore vendored

@ -0,0 +1 @@
charlesreid1.wiki.conf

65
d-mediawiki/charlesreid1-config/apache/charlesreid1.wiki.conf.j2

@ -0,0 +1,65 @@
ServerName {{ pod_charlesreid1_server_name }}
Listen 8989
<VirtualHost *:8989>
# nginx reverse proxy
# talks to apache via 127.0.0.1
# on port 8989
ServerAlias www.{{ pod_charlesreid1_server_name }}
LogLevel warn
ServerAdmin {{ pod_charlesreid1_mediawiki_admin_email }}
DirectoryIndex index.html index.cgi index.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
AddHandler php5-script php
# PHP module settings:
<IfModule php5_module>
# Add php type handler
AddType text/html php
# Make index.php a default file
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
</IfModule>
# =================
# wiki
Alias /wiki /var/www/html/index.php
Alias /w /var/www/html
<Directory /var/www/html>
#
# http://www.mediawiki.org/wiki/Manual:Short_URL/Apache
#
# Enable the rewrite engine
RewriteEngine On
# Short url for wiki pages
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]
Options FollowSymLinks
AllowOverride None
Require all granted
### # Rewrite / to main page
### RewriteRule ^/*$ %{DOCUMENT_ROOT}/w/index.php [L]
</Directory>
</VirtualHost>

2
d-mediawiki/charlesreid1-config/mediawiki/.gitignore vendored

@ -0,0 +1,2 @@
LocalSettings.php
extensions

243
d-mediawiki/charlesreid1-config/mediawiki/LocalSettings.php.j2

@ -0,0 +1,243 @@
<?php
$wgSitename = "charlesreid1";
$wgMetaNamespace = "Charlesreid1";
# from http://www.mediawiki.org/wiki/Manual:Short_URL#Recommended_how-to_guide_.28setup_used_on_Wikipedia.29
$wgScriptPath = "/w"; # Path to the actual files. This should already be there
$wgArticlePath = "/wiki/$1"; # Virtual path. This directory MUST be different from the one used in $wgScriptPath
$wgUsePathInfo = true; # Enable use of pretty URLs
# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}
## The protocol and server name to use in fully-qualified URLs
$wgServer = 'https://{{ pod_charlesreid1_server_name }}';
$wgCanonicalServer = 'https://{{ pod_charlesreid1_server_name }}';
## The URL path to static resources (images, scripts, etc.)
$wgStylePath = "$wgScriptPath/skins";
$wgResourceBasePath = $wgScriptPath;
# The URL path to the logo. Make sure you change this from the default,
# or else you'll overwrite your logo when you upgrade!
$wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";
# UPO means: this is also a user preference option
$wgEnableEmail = true;
$wgEmergencyContact = "charles@charlesreid1.com";
$wgPasswordSender = "charles@charlesreid1.com";
$wgEnableUserEmail = true; # UPO
$wgEnotifUserTalk = false; # UPO
$wgEnotifWatchlist = false; # UPO
$wgEmailAuthentication = true;
# Database settings
$wgDBtype = "mysql";
$wgDBserver = getenv('MYSQL_HOST');
$wgDBname = getenv('MYSQL_DATABASE');
$wgDBuser = getenv('MYSQL_USER');
$wgDBpassword = getenv('MYSQL_PASSWORD');
# MySQL specific settings
$wgDBprefix = "";
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
$wgDBmysql5 = true;
# Shared memory settings
$wgMainCacheType = CACHE_ACCEL;
$wgMemCachedServers = [];
# To enable image uploads, make sure the 'images' directory
# is writable, then set this to true:
$wgEnableUploads = true;
$wgMaxUploadSize = 1024*1024*100; # 100 MB
# also set in php.ini
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
# InstantCommons allows wiki to use images from https://commons.wikimedia.org
$wgUseInstantCommons = false;
# Allow specific file extensions
$wgStrictFileExtensions = false;
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'svg';
$wgFileExtensions[] = 'mm';
$wgFileExtensions[] = 'png';
$wgFileExtensions[] = 'jpg';
$wgFileExtensions[] = 'JPG';
$wgFileExtensions[] = 'jpeg';
$wgFileExtensions[] = 'py';
# Allow any file extensions, but print a warning if not in $wgFileExtensions[]
$wgCheckFileExtensions = false;
# do not send pingback to https://www.mediawiki.org
$wgPingback = false;
# If you use ImageMagick (or any other shell command) on a
# Linux server, this will need to be set to the name of an
# available UTF-8 locale
$wgShellLocale = "en_US.utf8";
# If you have the appropriate support software installed
# you can enable inline LaTeX equations:
$wgUseTeX = true;
$wgTexvc = "$IP/extensions/Math/math/texvc";
#$wgTexvc = '/usr/bin/texvc';
# Set MathML as default rendering option
$wgDefaultUserOptions['math'] = 'mathml';
$wgMathFullRestbaseURL = 'https://en.wikipedia.org/api/rest_';
$wgMathMathMLUrl = 'https://mathoid-beta.wmflabs.org/';
# Site language code, should be one of the list in ./languages/data/Names.php
$wgLanguageCode = "en";
$wgSecretKey = getenv('MEDIAWIKI_SECRETKEY');
# Changing this will log out all existing sessions.
$wgAuthenticationTokenVersion = "1";
# Site upgrade key. Must be set to a string (default provided) to turn on the
# web installer while LocalSettings.php is in place
$wgUpgradeKey = "984c1d9858dabc27";
# No license info
$wgRightsPage = "";
$wgRightsUrl = "";
$wgRightsText = "";
$wgRightsIcon = "";
# Alternative:
$wgEnableCreativeCommonsRdf = true;
$wgRightsPage = "";
$wgRightsUrl = "http://creativecommons.org/licenses/by-nc-nd/3.0/us/";
$wgRightsText = "Attribution-NonCommercial-NoDerivs 3.0 United States";
$wgRightsIcon = "/w/skins/charlesmartinreid/cc.png";
# Path to the GNU diff3 utility. Used for conflict resolution.
$wgDiff3 = "/usr/bin/diff3";
# Boostrap2 skin:
wfLoadSkin( 'Bootstrap2' );
require_once "$IP/skins/Bootstrap2/Bootstrap2.php";
$wgDefaultSkin = 'Bootstrap2';
$wgValidSkinNames['bootstrap2'] = 'Bootstrap2';
# Change to true for debugging
$wgShowExceptionDetails=false;
# When you make changes to this configuration file, this will make
# sure that cached pages are cleared.
session_save_path("tmp");
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( __FILE__ ) ) );
############################################################
############# Charles-Modified Settings ####################
# Allow external images (to do this, simply insert the image's URL)
# http://url.for/some/image.png
# But these cannot be resized.
$wgAllowExternalImages = true;
# Use ImageMagick
$wgUseImageMagic=true;
# $wgAllowDisplayTitle - Allow the magic word { { DISPLAYTITLE: } } to override the title of a page.
$wgAllowdisplayTitle=true;
# Log IP addresses in the recentchanges table.
$wgPutIPinRC=true;
# Getting some weird "Error creating thumbnail: Invalid thumbnail parameters" messages w/ thumbnail
# http://www.gossamer-threads.com/lists/wiki/mediawiki/169439
$wgMaxImageArea=64000000;
$wgMaxShellMemory=0;
$wgFavicon="$wgScriptPath/favicon.ico";
######################
# Edit permissions
# only admin can edit
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = true;
# only admin can register new accounts
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['user']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = true;
# only admin can upload
$wgGroupPermissions['*']['upload'] = false;
$wgGroupPermissions['user']['upload'] = false;
$wgGroupPermissions['sysop']['upload'] = true;
$wgGroupPermissions['*']['reupload'] = false;
$wgGroupPermissions['user']['reupload'] = false;
$wgGroupPermissions['sysop']['reupload'] = true;
###############################
## GeSHi syntax highlighting/code extension
# https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi.git
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
$wgSyntaxHighlightDefaultLang = "text";
##############################
# Parser functions
# http://www.mediawiki.org/wiki/Extension:ParserFunctions
# http://en.wikipedia.org/wiki/Template_talk:Navbox
wfLoadExtension( 'ParserFunctions' );
##############################################
# Embed videos extension
# https://github.com/HydraWiki/mediawiki-embedvideo/
# require_once("$IP/extensions/EmbedVideo/EmbedVideo.php");
wfLoadExtension( 'EmbedVideo' );
###########################################
# Math extension
# https://github.com/wikimedia/mediawiki-extensions-Math.git
require_once "$IP/extensions/Math/Math.php";
#############################################
# Fix cookies crap
session_save_path("/tmp");
##############################################
# Secure login
$wgServer = "https://{{ pod_charlesreid1_server_name }}";
$wgSecureLogin = true;
###################################
# Raw html
$wgRawHtml = true;
# but also keep things locked down
$wgUseRCPatrol=true;
$wgNewUserLog=true;
##################################
# Paths
$wgUploadPath = "$wgScriptPath/images";
$wgUploadDirectory = "$IP/images";
$wgMathPath = "$wgUploadPath/math";
$wgMathDirectory = "$wgUploadDirectory/math";
$wgTmpDirectory = "$wgUploadDirectory/tmp";
$wgLatexCommand = "/usr/bin/latex";
#$wgUploadBaseUrl = false; # not sure about why this one too...
$wgVerifyMimeType = false;
#$wgDebugLogFile = "/var/log/apache2/wiki.log";

18
d-mediawiki/charlesreid1-config/mediawiki/README.md

@ -0,0 +1,18 @@
# mediawiki config files
In the `LocalSettings.php` file, which needs to have the MySQL
account credentials, we have the following:
```
## Database settings
$wgDBtype = "mysql";
$wgDBserver = getenv('MYSQL_HOST');
$wgDBname = getenv('MYSQL_DATABASE');
$wgDBuser = getenv('MYSQL_USER');
$wgDBpassword = getenv('MYSQL_PASSWORD');
```
This information comes from the environment. In our case,
this comes from a MediaWiki docker container (see the
[d-mediawiki](https://git.charlesreid1.com/docker/d-mediawiki)
repo.)

43
d-mediawiki/charlesreid1-config/mediawiki/apply_templates.py

@ -0,0 +1,43 @@
import os, re, sys
from jinja2 import Environment, FileSystemLoader, select_autoescape
"""
Apply Default Values to Jinja Templates
This script applies default values to
mediawiki LocalSettings.php file.
The configuration templates are useful for Ansible,
but this is useful for experiments/one-offs.
All configuration files are for charlesreid1.com
docker pod, nginx, and realted infrastructure.
"""
# Where templates live
TEMPLATEDIR = '.'
# Where rendered templates will go
OUTDIR = '.'
# Should existing files be overwritten
OVERWRITE = True
env = Environment(loader=FileSystemLoader('.'))
tfile = 'LocalSettings.php.j2'
rfile = 'LocalSettings.php'
content = env.get_template(tfile).render({
"server_name_default" : "charlesreid1.com"
})
# Write to file
if os.path.exists(rfile) and not OVERWRITE:
raise Exception("Error: file %s already exists!"%(rfile))
else:
with open(rfile,'w') as f:
f.write(content)

329
d-mediawiki/charlesreid1-config/mediawiki/sample_LocalSettings.php

@ -0,0 +1,329 @@
<?php
# This file was automatically generated by the MediaWiki 1.30.0
# installer. If you make manual changes, please keep track in case you
# need to recreate them later.
#
# See includes/DefaultSettings.php for all configurable settings
# and their default values, but don't forget to make changes in _this_
# file, not there.
#
# Further documentation for configuration settings may be found at:
# https://www.mediawiki.org/wiki/Manual:Configuration_settings
# Protect against web entry
if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}
## Uncomment this to disable output compression
# $wgDisableOutputCompression = true;
$wgSitename = "charlesreid1";
$wgMetaNamespace = "Charlesreid1";
# from http://www.mediawiki.org/wiki/Manual:Short_URL#Recommended_how-to_guide_.28setup_used_on_Wikipedia.29
$wgScriptPath = "/w"; # Path to the actual files. This should already be there
$wgArticlePath = "/wiki/$1"; # Virtual path. This directory MUST be different from the one used in $wgScriptPath
$wgUsePathInfo = true; # Enable use of pretty URLs
## The protocol and server name to use in fully-qualified URLs
$wgServer = 'https://';
$wgCanonicalServer = 'https://';
## The URL path to static resources (images, scripts, etc.)
$wgStylePath = "$wgScriptPath/skins";
$wgResourceBasePath = $wgScriptPath;
## The URL path to the logo. Make sure you change this from the default,
## or else you'll overwrite your logo when you upgrade!
$wgLogo = "$wgResourceBasePath/resources/assets/wiki.png";
## UPO means: this is also a user preference option
$wgEnableEmail = true;
$wgEnableUserEmail = true; # UPO
$wgEmergencyContact = "charles@charlesreid1.com";
$wgPasswordSender = "charles@charlesreid1.com";
$wgEnotifUserTalk = false; # UPO
$wgEnotifWatchlist = false; # UPO
$wgEmailAuthentication = true;
## Database settings
$wgDBtype = "mysql";
$wgDBserver = getenv('MYSQL_HOST');
$wgDBname = getenv('MYSQL_DATABASE');
$wgDBuser = getenv('MYSQL_USER');
$wgDBpassword = getenv('MYSQL_PASSWORD');
# MySQL specific settings
$wgDBprefix = "";
# MySQL table options to use during installation or update
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
# Experimental charset support for MySQL 5.0.
//$wgDBmysql5 = false; // new version
$wgDBmysql5 = true; // true on charlesreid1.com
## Shared memory settings
$wgMainCacheType = CACHE_ACCEL;
$wgMemCachedServers = [];
## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
$wgEnableUploads = true;
$wgMaxUploadSize = 1024*1024*100; # 100 MB
# also set in php.ini
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
# InstantCommons allows wiki to use images from https://commons.wikimedia.org
$wgUseInstantCommons = false;
# Allow specific file extensions
$wgStrictFileExtensions = false;
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'svg';
$wgFileExtensions[] = 'mm';
$wgFileExtensions[] = 'png';
$wgFileExtensions[] = 'jpg';
$wgFileExtensions[] = 'JPG';
$wgFileExtensions[] = 'jpeg';
$wgFileExtensions[] = 'py';
# Allow any file extensions,
# but print a warning if its not
# in $wgFileExtensions[]
$wgCheckFileExtensions = false;
# do not send pingback to https://www.mediawiki.org
$wgPingback = false;
# If you use ImageMagick (or any other shell command) on a
# Linux server, this will need to be set to the name of an
# available UTF-8 locale
//$wgShellLocale = "C.UTF-8"; // modern
$wgShellLocale = "en_US.utf8"; // charlesreid1.com version
## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
#$wgCacheDirectory = "$IP/cache";
## If you have the appropriate support software installed
## you can enable inline LaTeX equations:
$wgUseTeX = true;
$wgTexvc = "$IP/extensions/Math/math/texvc";
//$wgTexvc = '/usr/bin/texvc';
$wgDefaultUserOptions['math'] = 0; //Always render eqns as .pngs
# Site language code, should be one of the list in ./languages/data/Names.php
$wgLanguageCode = "en";
$wgSecretKey = getenv('MEDIAWIKI_SECRETKEY');
# Changing this will log out all existing sessions.
$wgAuthenticationTokenVersion = "1";
# Site upgrade key. Must be set to a string (default provided) to turn on the
# web installer while LocalSettings.php is in place
$wgUpgradeKey = "984c1d9858dabc27";
## no license info
$wgRightsPage = "";
$wgRightsUrl = "";
$wgRightsText = "";
$wgRightsIcon = "";
# Alternative:
$wgEnableCreativeCommonsRdf = true;
$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright
$wgRightsUrl = "http://creativecommons.org/licenses/by-nc-nd/3.0/us/";
$wgRightsText = "Attribution-NonCommercial-NoDerivs 3.0 United States";
$wgRightsIcon = "/w/skins/charlesmartinreid/cc.png";
# $wgRightsCode = "[license_code]"; # Not yet used
#
# Path to the GNU diff3 utility. Used for conflict resolution.
$wgDiff3 = "/usr/bin/diff3";
## Default skin: you can change the default skin. Use the internal symbolic
## names, ie 'vector', 'monobook':
# Boostrap2 skin:
wfLoadSkin( 'Bootstrap2' );
require_once "$IP/skins/Bootstrap2/Bootstrap2.php";
$wgDefaultSkin = 'Bootstrap2';
$wgValidSkinNames['bootstrap2'] = 'Bootstrap2';
$wgShowExceptionDetails=false;
//$wgShowExceptionDetails = true;
//$wgShowDBErrorBacktrace = true;
//$wgShowSQLErrors = true;
$wgDiff3 = "/usr/bin/diff3";
# When you make changes to this configuration file, this will make
# sure that cached pages are cleared.
session_save_path("tmp");
$wgCacheEpoch = max( $wgCacheEpoch, gmdate( 'YmdHis', @filemtime( __FILE__ ) ) );
############################################################
############# Charles-Modified Settings ####################
# Allow external images:
$wgAllowExternalImages = true;
# to do this, simply insert the image's URL:
#http://url.for/some/image.png
# But these cannot be resized. It's better to just put your own version into the wiki
# Use ImageMagick
$wgUseImageMagic=true;
# $wgAllowDisplayTitle - Allow the magic word { { DISPLAYTITLE: } } to override the title of a page.
$wgAllowdisplayTitle=true;
# $wgPutIPinRC - Log IP addresses in the recentchanges table.
$wgPutIPinRC=true;
# Getting some weird "Error creating thumbnail: Invalid thumbnail parameters" messages w/ thumbnail
# http://www.gossamer-threads.com/lists/wiki/mediawiki/169439
$wgMaxImageArea=64000000;
$wgMaxShellMemory=0;
# Also:
# http://www.ipbwiki.com/forums/index.php?showtopic=812
$wgFavicon="$wgScriptPath/favicon.ico";
######################
# Edit permissions
# only admin can edit
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = true;
# only admin can register new accounts
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['user']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = true;
# only admin can upload
$wgGroupPermissions['*']['upload'] = false;
$wgGroupPermissions['user']['upload'] = false;
$wgGroupPermissions['sysop']['upload'] = true;
$wgGroupPermissions['*']['reupload'] = false;
$wgGroupPermissions['user']['reupload'] = false;
$wgGroupPermissions['sysop']['reupload'] = true;
###############################
## GeSHi syntax highlighting/code extension
#
# https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi.git
#
require_once("$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");
$wgSyntaxHighlightDefaultLang = "text";
##############################
# Parser functions
#
# http://www.mediawiki.org/wiki/Extension:ParserFunctions
# http://en.wikipedia.org/wiki/Template_talk:Navbox
require_once( "$IP/extensions/ParserFunctions/ParserFunctions.php" );
##############################################
# Embed videos extension
# https://github.com/HydraWiki/mediawiki-embedvideo/
#require_once("$IP/extensions/EmbedVideo/EmbedVideo.php");
wfLoadExtension( 'EmbedVideo' );
###########################################
## Math extension
#
# https://github.com/wikimedia/mediawiki-extensions-Math.git
#
require_once "$IP/extensions/Math/Math.php";
#############################################
## Fix cookies crap
session_save_path("/tmp");
##############################################
#### secure login
$wgServer = "https://";
$wgSecureLogin = true;
###################################
##### raw html
$wgRawHtml = true;
# but also keep things locked down
$wgUseRCPatrol=true;
$wgNewUserLog=true;
##############################################
## Because adding a new extension for every dumb little thing you want to do is dumb
$wgRawHtml = true;
$wgUploadPath = "$wgScriptPath/images";
$wgUploadDirectory = "$IP/images";
$wgMathPath = "$wgUploadPath/math";
$wgMathDirectory = "$wgUploadDirectory/math";
$wgTmpDirectory = "$wgUploadDirectory/tmp";
$wgLatexCommand = "/usr/bin/latex";
#$wgUploadBaseUrl = false; #not sure about why this one too...
$wgVerifyMimeType = false;
# log
$wgDebugLogFile = "/var/log/apache2/wiki.log";

452
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/Bootstrap2.php.j2

@ -0,0 +1,452 @@
<?php
/**
* Bootstrap2 MediaWiki skin
*
* @file Bootstrap2.php
*/
if( !defined( 'MEDIAWIKI' ) )
die( -1 );
/**
* Inherit main code from SkinTemplate, set the CSS and template filter.
*/
class SkinBootstrap2 extends SkinTemplate {
/** Using Bootstrap2 */
var $skinname = 'Bootstrap2',
$stylename = 'Bootstrap2',
// -------- Start ---------
// making this true, to match the Dash style
$useHeadElement = true,
//$useHeadElement = false,
// -------- End ---------
// cmr 05/08/2014
$template = 'Bootstrap2Template';
function setupSkinUserCss( OutputPage $out ) {
global $wgHandheldStyle;
parent::setupSkinUserCss( $out );
// Append to the default screen common & print styles...
$out->addStyle( 'Bootstrap2/IE50Fixes.css', 'screen', 'lt IE 5.5000' );
$out->addStyle( 'Bootstrap2/IE55Fixes.css', 'screen', 'IE 5.5000' );
$out->addStyle( 'Bootstrap2/IE60Fixes.css', 'screen', 'IE 6' );
$out->addStyle( 'Bootstrap2/IE70Fixes.css', 'screen', 'IE 7' );
$out->addStyle( 'Bootstrap2/rtl.css', 'screen', '', 'rtl' );
$out->addStyle('Bootstrap2/bootstrap.css' );
$out->addStyle('Bootstrap2/slate.css' );
$out->addStyle('Bootstrap2/main.css' );
$out->addStyle('Bootstrap2/dox.css' );
$out->addStyle('Bootstrap2/css/font-awesome.css');
//$out->addStyle('Bootstrap2/cmr-bootstrap-cyborg.css');
//$out->addStyle('Bootstrap2/cmr-bootstrap-cyborg-wiki.css');
//
//$out->addStyle('Bootstrap2/bootstrap-cyborg.css' );
//$out->addStyle('Bootstrap2/bootstrap-responsive-cyborg.css');
//$out->addStyle( 'Bootstrap2/main.css', 'screen' );
}
}
class Bootstrap2Template extends QuickTemplate {
var $skin;
/**
* Template filter callback for Bootstrap2 skin.
* Takes an associative array of data set from a SkinTemplate-based
* class, and a wrapper for MediaWiki's localization database, and
* outputs a formatted page.
*
* @access private
*/
function execute() {
global $wgRequest;
$this->skin = $skin = $this->data['skin'];
$action = $wgRequest->getText( 'action' );
// -------- Start ------------
// Adding the following line makes Geshi work
$this->html( 'headelement' );
// Left this out because the [edit] buttons were becoming right-aligned
// Got around that behavior by changing shared.css
// -------- End ------------
// cmr 01-10-2014
/////////////////////////////
// begin custom
// bootstrap content
$get_override = 'True';
$url_array = explode('/',$_SERVER['REQUEST_URI']);
array_shift($url_array); // remove first value as it's empty
$p = "wiki";
// path, inside container
include('/var/www/html/skins/Bootstrap2/navbar.php');
?>
<!-- favicon -->
<link rel="shortcut icon" href="/favicon.ico">
<div class="container">
<!-- Row: Navigation bar for wiki -->
<div class="row">
<nav class="wiki navbar navbar-default">
<div class="container-fixed">
<div class="navbar-header">
<a href="/wiki/" class="navbar-brand">
{{ pod_charlesreid1_server_name }} wiki
</a>
</div>
<div>
<ul class="wiki nav navbar-nav">
<?php
/*
// Print debug information
echo "\n";
echo "<!--";
echo "\n";
echo print_r($this->data['content_actions']);
echo "\n";
echo "~~~~~~~~~";
echo "\n";
foreach($this->data['content_actions'] as $key => $tab) {
echo $key;
echo "\n";
//echo print_r($tab);
echo $tab['href'];
echo "\n";
echo "\n";
echo "\n";
}
echo "\n";
echo "-->";
echo "\n";
*/
echo "\n";
foreach($this->data['content_actions'] as $key => $tab) {
if( in_array($key, array('nstab-main','edit','history','viewsource','delete','move'))) {
echo '<li class="wiki';
if( $tab['class'] ) {
echo ' ';
echo $tab['class'];
}
echo '" id="' . Sanitizer::escapeId( "ca-$key" ) . '">';
echo '<a href="';
echo htmlspecialchars($tab['href']);
echo '">';
echo $tab['text'];
echo "</a>";
echo "</li>";
//echo '>'.htmlspecialchars($tab['text']).'</a></li>';
echo "\n";
}
} ?>
</ul>
</div>
</div>
</nav>
</div>
<!-- Row: Page content for wiki -->
<div class="row">
<div class="span10 offset1">
<!--
=========================
Begin MediaWiki content
=========================
-->
<div class="mw_content">
<div id="content" <?php $this->html("specialpageattributes") ?>>
<!-- page title -->
<div class="page-header">
<h1 id="firstHeading" class="firstHeading">
<?php $this->html('title') ?>
</h1>
</div><!--div page-header-->
<!-- pre-article stuff -->
<div id="bodyContent">
<h3 id="siteSub"><?php $this->msg('tagline') ?></h3>
<div id="contentSub"<?php $this->html('userlangattributes') ?>><?php $this->html('subtitle') ?>
</div>
<?php
if($this->data['undelete']) { ?>
<div id="contentSub2"><?php $this->html('undelete') ?></div>
<?php
}
if($this->data['newtalk'] ) { ?>
<div class="usermessage"><?php $this->html('newtalk') ?></div>
<?php
}
?>
<!-- article -->
<!-- begin mediawiki content -->
<?php $this->html('bodytext') ?>
<?php
if($this->data['catlinks']) {
$this->html('catlinks');
} ?>
</div><!-- end bodyContent -->
</div><!--div special page attributes-->
</div><!--div mw content-->
<!--
=========================
End MediaWiki content
=========================
-->
</div><!--div span10 -->
</div><!--row-->
<!--
==========================================================
====================== Begin Wiki Footer =================
==========================================================
-->
</div>
<?php
include('/var/www/html/skins/Bootstrap2/footer.php');
?>
<?php
} // end of execute() method
/*************************************************************************************************/
function searchBox() {
global $wgUseTwoButtonsSearchForm;
?>
<div id="p-search" class="portlet">
<div id="searchBody" class="pBody">
<form class="navbar-search pull-left" action="<?php $this->text('wgScript') ?>" id="searchform">
<input type='hidden' name="title" value="<?php $this->text('searchtitle') ?>"/>
<?php
echo Html::input( 'search',
isset( $this->data['search'] ) ? $this->data['search'] : '', 'search',
array(
'id' => 'searchInput',
'class' => 'search-query',
'title' => $this->skin->titleAttrib( 'search' ),
'accesskey' => $this->skin->accesskey( 'search' )
) ); ?>
<!--
<input type='submit' name="go" class="searchButton" id="searchGoButton" value="<?php $this->msg('searcharticle') ?>"<?php echo $this->skin->tooltipAndAccesskey( 'search-go' ); ?> /><?php if ($wgUseTwoButtonsSearchForm) { ?>&nbsp;
-->
<input type='submit' name="fulltext" class="btn btn-large" id="mw-searchButton" value="<?php $this->msg('searchbutton') ?>"<?php echo $this->skin->tooltipAndAccesskey( 'search-fulltext' ); ?> /><?php } else { ?>
<div><a href="<?php $this->text('searchaction') ?>" rel="search"><?php $this->msg('powersearch-legend') ?></a></div><?php } ?>
</form>
</div>
</div>
<?php
}
/*************************************************************************************************/
function personalTools() {
?>
<ul class="nav nav-list">
<li class="nav-header"><?php $this->msg('personaltools') ?></li>
<?php
foreach($this->data['personal_urls'] as $key => $item) {
if( strcmp($key,"userpage") == 0
|| strcmp($key,"preferences") == 0
|| strcmp($key,"logout") == 0 ) { ?>
<li> <a href="<?php
echo htmlspecialchars($item['href']) ?>"<?php echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
if(!empty($item['class'])) { ?> class="<?php
echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
echo htmlspecialchars($item['text']) ?></a></li>
<?php
} else {
}
}
// put a log in button
?>
<li><a href="/wiki/Special:UserLogin">Log in</a></li>
<?php
}
/*************************************************************************************************/
function toolbox() {
?>
<!--
<div class="portlet" id="p-tb">
<div class="pBody">
-->
<ul class="nav nav-list">
<li class="nav-header"><?php $this->msg('toolbox') ?></li>
<?php
/*
if($this->data['notspecialpage']) { ?>
<li id="t-whatlinkshere"><a href="<?php
echo htmlspecialchars($this->data['nav_urls']['whatlinkshere']['href'])
?>"<?php echo $this->skin->tooltipAndAccesskey('t-whatlinkshere') ?>><?php $this->msg('whatlinkshere') ?></a></li>
<?php
if( $this->data['nav_urls']['recentchangeslinked'] ) { ?>
<li id="t-recentchangeslinked"><a href="<?php
echo htmlspecialchars($this->data['nav_urls']['recentchangeslinked']['href'])
?>"<?php echo $this->skin->tooltipAndAccesskey('t-recentchangeslinked') ?>><?php $this->msg('recentchangeslinked-toolbox') ?></a></li>
<?php }
}
if( isset( $this->data['nav_urls']['trackbacklink'] ) && $this->data['nav_urls']['trackbacklink'] ) { ?>
<li id="t-trackbacklink"><a href="<?php
echo htmlspecialchars($this->data['nav_urls']['trackbacklink']['href'])
?>"<?php echo $this->skin->tooltipAndAccesskey('t-trackbacklink') ?>><?php $this->msg('trackbacklink') ?></a></li>
<?php }
if($this->data['feeds']) { ?>
<li id="feedlinks"><?php foreach($this->data['feeds'] as $key => $feed) {
?><a id="<?php echo Sanitizer::escapeId( "feed-$key" ) ?>" href="<?php
echo htmlspecialchars($feed['href']) ?>" rel="alternate" type="application/<?php echo $key ?>+xml" class="feedlink"<?php echo $this->skin->tooltipAndAccesskey('feed-'.$key) ?>><?php echo htmlspecialchars($feed['text'])?></a>&nbsp;
<?php } ?></li><?php
}
*/
// Upload files, and list all files
if($this->data['nav_urls']['upload']) {
?><li id="t-<?php echo 'upload'; ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['upload']['href'])
?>" <?php echo $this->skin->tooltipAndAccesskey('t-upload') ?>><?php $this->msg('upload') ?></a></li>
<?php
}
// Special pages, and list all pages
if( $this->data['nav_urls']['specialpages'] ) {
?><li id="t-<?php echo 'specialpages'; ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['specialpages']['href'])
?>" <?php echo $this->skin->tooltipAndAccesskey('t-specialpages') ?>><?php $this->msg('specialpages') ?></a></li>
<?php
$element_name = 'all_pages';
$element_title = 'List All Pages';
$element_href = "/wiki/Special:AllPages";
$this->data['nav_urls'][$element_name]['href'] = $element_href;
?>
<li id="t-<?php echo $element_name; ?>"><a href="<?php echo htmlspecialchars( $this->data['nav_urls'][$element_name]['href'] )
?>" title="<?php echo $element_title ?>"><?php echo $element_title; ?></a></li>
<?php
}
/*
foreach( array('contributions', 'log', 'blockip', 'emailuser') as $special ) {
if($this->data['nav_urls'][$special]) {
?><li id="t-<?php echo $special ?>"><a href="<?php echo htmlspecialchars($this->data['nav_urls'][$special]['href'])
?>"<?php echo $this->skin->tooltipAndAccesskey('t-'.$special) ?>><?php $this->msg($special) ?></a></li>
<?php }
}
*/
/*
if(!empty($this->data['nav_urls']['print']['href'])) { ?>
<li id="t-print"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['print']['href'])
?>" rel="alternate"<?php echo $this->skin->tooltipAndAccesskey('t-print') ?>><?php $this->msg('printableversion') ?></a></li><?php
}
*/
if(!empty($this->data['nav_urls']['permalink']['href'])) { ?>
<li id="t-permalink"><a href="<?php echo htmlspecialchars($this->data['nav_urls']['permalink']['href'])
?>"<?php echo $this->skin->tooltipAndAccesskey('t-permalink') ?>><?php $this->msg('permalink') ?></a></li><?php
} elseif ($this->data['nav_urls']['permalink']['href'] === '') { ?>
<li id="t-ispermalink"<?php echo $this->skin->tooltip('t-ispermalink') ?>><?php $this->msg('permalink') ?></li><?php
}
//wfRunHooks( 'BootstrapTemplateToolboxEnd', array( &$this ) );
wfRunHooks( 'BootstrapTemplateToolboxEnd', array( &$this ) );
?>
</ul>
<!--
</div>
</div>
-->
<?php
}
/*************************************************************************************************/
function languageBox() {
if( $this->data['language_urls'] ) {
?>
<div id="p-lang" class="portlet">
<h5<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h5>
<div class="pBody">
<ul>
<?php foreach($this->data['language_urls'] as $langlink) { ?>
<li class="<?php echo htmlspecialchars($langlink['class'])?>"><?php
?><a href="<?php echo htmlspecialchars($langlink['href']) ?>"><?php echo $langlink['text'] ?></a></li>
<?php } ?>
</ul>
</div>
</div>
<?php
}
}
/*************************************************************************************************/
function customBox( $bar, $cont ) {
?>
<!--
<div class='generated-sidebar portlet' id='<?php echo Sanitizer::escapeId( "p-$bar" ) ?>'<?php echo $this->skin->tooltip('p-'.$bar) ?>>
<div class='pBody'>
-->
<?php if ( is_array( $cont ) ) { ?>
<ul class="nav nav-list">
<li class="nav-header"><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo htmlspecialchars($bar); else echo htmlspecialchars($out); ?></li>
<?php foreach($cont as $key => $val) { ?>
<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
if ( $val['active'] ) { ?> class="active" <?php }
?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo $this->skin->tooltipAndAccesskey($val['id']) ?>><?php echo htmlspecialchars($val['text']) ?></a></li>
<?php } ?>
</ul>
<?php } else {
# allow raw HTML block to be defined by extensions
print $cont;
}
?>
<!--
</div>
</div>
-->
<?php
}
} // end of class

339
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/COPYING

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

67
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE50Fixes.css

@ -0,0 +1,67 @@
/*
** IE5.0 Fix Stylesheet
*/
#column-content {
margin: 0 !important;
float: none;
}
#column-content #content {
margin-top: 3em;
height: 1%;
}
#column-one {
position: absolute;
overflow: visible;
top: 0;
left: 0;
z-index: 3;
}
#footer {
margin: 0 0 0 13.6em;
}
/* IE 5 & 5.5 interpret keyword sizes one off */
body { font-size: xx-small; }
/*
** the edit tabs
*/
#p-cactions li {
float: left;
padding-top: 0;
padding-bottom: 0 !important;
height: 0.9em;
}
#p-cactions li a {
display: block;
padding-bottom: 0.045em;
}
#p-cactions li.selected a {
padding-bottom: 0.17em;
}
#p-cactions li a:hover {
padding-bottom: 0.17em;
}
/* 5.0 doesn't like the background icon for external links and user */
.link-external,
.external {
background: none;
padding: 0;
}
#p-personal ul { float: right }
#p-personal li { float: left }
li#pt-userpage,
li#pt-anonuserpage,
li#pt-login,
li#pt-logout {
background: none;
padding-left: none;
}
.visualClear {
width: 100%;
height: 0px;
padding:0;
margin: 0;
}
.firstHeading { margin-bottom: .3em; }
/*div{ border:1px solid Red !important;}*/

88
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE55Fixes.css

@ -0,0 +1,88 @@
/* IE5.5/win- only fixes */
#column-content {
float: none;
margin-left: 0;
height: 1%;
}
#column-content #content {
position: relative;
z-index: 5;
margin-left: 12.2em;
margin-top: 3em;
height: 1%;
}
#column-one {
position: absolute;
top: 0;
left: 0;
z-index: 4;
width: 100%;
}
#footer {
margin-left: 13.6em;
border-left: 1px solid #fabd23;
}
/*#bodyContent div,
#bodyContent pre { overflow: auto; }*/
#p-personal { padding-bottom: .1em; }
body { font-size: xx-small; }
/* WERELATE
#p-cactions {
width: 76% !important;
z-index: 3 !important;
float: none;
}
#p-cactions li {
padding-bottom: 0 !important;
border: none;
background-color: transparent;
cursor: default;
float: none !important;
}
#p-cactions li a {
display: inline-block !important;
vertical-align: top;
padding-bottom: 0;
border: solid #aaa;
border-width: 1px 1px 0;
}
#p-cactions li.selected a {
border-color: #fabd23;
padding-bottom: 0.17em;
}
#p-cactions li a:hover {
padding-bottom: 0.17em;
}
*/
#p-navigation a {
display: inline-block;
width: 100%;
}
.portlet {
overflow: hidden;
}
#bodyContent a.external {
background: url(external.png) center right no-repeat;
padding-right: 13px;
}
/* show the hand */
#p-logo a,
#p-logo a:hover {
cursor: pointer;
}
.visualClear {
width: 90%;
height: 1px;
padding: 0;
margin: 0;
}
#editform {
width: 100%;
}

125
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE60Fixes.css

@ -0,0 +1,125 @@
/* 6.0 - only fixes */
/* content area */
/* workaround for various ie float bugs */
div#column-content {
float: none;
margin-left: 0;
height: 1%;
}
div#column-content .mw-body {
margin-left: 12.2em;
margin-top: 3em;
height: 1%;
}
.rtl div#column-content .mw-body {
margin-right: 12.2em;
margin-left: 0;
}
div#column-one {
position: absolute;
top: 0;
left: 0;
z-index: 4;
}
.rtl div#column-one {
left: auto;
right: 0;
}
div#footer {
margin-left: 13.6em;
border-left: 1px solid #fabd23;
}
.rtl div#footer {
margin-left: 0;
margin-right: 13.6em;
border-left: none;
border-right: 1px solid #fabd23;
}
/* float/negative margin brokenness */
* html div#footer {
margin-top: 0;
}
* html div#column-content {
display: inline;
margin-bottom: 0;
}
/* the tabs */
#p-cactions {
z-index: 3;
}
#p-cactions li {
padding-bottom: 0 !important;
border: none;
background-color: transparent;
cursor: default;
float: none !important;
}
#p-cactions li a {
display: inline-block !important;
vertical-align: top;
padding-bottom: 0;
border: solid #aaa;
border-width: 1px 1px 0;
}
#p-cactions li.selected a {
border-color: #fabd23;
padding-bottom: 0.17em;
}
#p-cactions li a:hover {
padding-bottom: 0.17em;
}
#p-navigation a {
display: inline-block;
width: 100%;
}
#portal-personaltools {
padding-bottom: 0.1em;
}
.rtl a.feedlink {
background-position: right;
padding-right: 0;
padding-left: 16px;
}
/* show the hand */
#p-logo a,
#p-logo a:hover {
cursor: pointer;
}
div.visualClear {
width: 100%;
line-height: 0;
}
textarea {
width: 96%;
}
#catlinks,
div.tright,
div.tleft {
position: relative;
}
/* bug 12846 */
body.rtl #preftoc a, body.rtl #preftoc a:active {
float: left;
}

96
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/IE70Fixes.css

@ -0,0 +1,96 @@
/* 7.0 - only fixes */
/* content area */
/* workaround for various ie float bugs */
/* This bit is needed to make links clickable... WTF */
div#column-content .mw-body {
margin-left: 12.2em;
margin-top: 3em;
height: 1%;
}
.rtl div#column-content .mw-body {
margin-right: 12.2em;
margin-left: 0;
}
.rtl div#column-one {
/* For some reason it tries to inherit the padding-top into every div,
* and I can't figure out how to get it back off.
* Margin works correctly for this use, though.
*/
padding-top: 0;
margin-top: 160px;
}
/* These elements also have padding-left: 20px; in main.css, but in RTL mode this is flipped.
* That's good in normal browsers, but in IE7 it needs to not be flipped for some daft reason.
* Also clear the right margin (originally margin-left: 1em)
*/
li#pt-userpage, li#pt-anonuserpage, li#pt-login {
padding-left: 20px;
margin-right: 0;
}
.rtl a.feedlink {
background-position: right;
padding-right: 0;
padding-left: 16px;
}
/* the tabs */
#p-cactions {
z-index: 3;
}
#p-cactions li {
padding-bottom: 0 !important;
border: none;
background-color: transparent;
cursor: default;
float: none !important;
}
#p-cactions li a {
display: inline-block !important;
vertical-align: top;
padding-bottom: 0;
border: solid #aaa;
border-width: 1px 1px 0;
}
#p-cactions li.selected a {
border-color: #fabd23;
padding-bottom: 0.17em;
}
#p-cactions li a:hover {
padding-bottom: 0.17em;
}
#p-navigation a {
display: inline-block;
width: 100%;
}
#portal-personaltools {
padding-bottom: 0.1em;
}
textarea {
width: 96%;
}
/*
#catlinks,
div.tright,
div.tleft {
position: relative;
}
*/
div#footer li {
/* Work around bug with inline <li> tags with right margins and nowrap */
margin-right: 0;
}

18
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/_footer.html

@ -0,0 +1,18 @@
<footer id="contentinfo" class="body">
<hr />
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a><br />
with help from <a href="http://d3js.org">D3.js</a>, <a href="http://angularjs.org">Angular.js</a>, and <a href="http://getpelican.com">Pelican</a>.
</p>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/jquery-1.11.2.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/jquery_load_template-1.4.5.min.js"></script>
<script type="text/javascript" src="{{ SITEURL }}/theme/js/bootstrap-3.3.4.js"></script>
</footer><!-- /#contentinfo -->

7
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-3.3.4.js

File diff suppressed because one or more lines are too long

90
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-alert.js vendored

@ -0,0 +1,90 @@
/* ==========================================================
* bootstrap-alert.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#alerts
* ==========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* ALERT CLASS DEFINITION
* ====================== */
var dismiss = '[data-dismiss="alert"]'
, Alert = function (el) {
$(el).on('click', dismiss, this.close)
}
Alert.prototype.close = function (e) {
var $this = $(this)
, selector = $this.attr('data-target')
, $parent
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = $(selector)
e && e.preventDefault()
$parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
$parent.trigger(e = $.Event('close'))
if (e.isDefaultPrevented()) return
$parent.removeClass('in')
function removeElement() {
$parent
.trigger('closed')
.remove()
}
$.support.transition && $parent.hasClass('fade') ?
$parent.on($.support.transition.end, removeElement) :
removeElement()
}
/* ALERT PLUGIN DEFINITION
* ======================= */
$.fn.alert = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('alert')
if (!data) $this.data('alert', (data = new Alert(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.alert.Constructor = Alert
/* ALERT DATA-API
* ============== */
$(function () {
$('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
})
}(window.jQuery);

96
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-button.js vendored

@ -0,0 +1,96 @@
/* ============================================================
* bootstrap-button.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#buttons
* ============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function ($) {
"use strict"; // jshint ;_;
/* BUTTON PUBLIC CLASS DEFINITION
* ============================== */
var Button = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, $.fn.button.defaults, options)
}
Button.prototype.setState = function (state) {
var d = 'disabled'
, $el = this.$element
, data = $el.data()
, val = $el.is('input') ? 'val' : 'html'
state = state + 'Text'
data.resetText || $el.data('resetText', $el[val]())
$el[val](data[state] || this.options[state])
// push to event loop to allow forms to submit
setTimeout(function () {
state == 'loadingText' ?
$el.addClass(d).attr(d, d) :
$el.removeClass(d).removeAttr(d)
}, 0)
}
Button.prototype.toggle = function () {
var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
$parent && $parent
.find('.active')
.removeClass('active')
this.$element.toggleClass('active')
}
/* BUTTON PLUGIN DEFINITION
* ======================== */
$.fn.button = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('button')
, options = typeof option == 'object' && option
if (!data) $this.data('button', (data = new Button(this, options)))
if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}
$.fn.button.defaults = {
loadingText: 'loading...'
}
$.fn.button.Constructor = Button
/* BUTTON DATA-API
* =============== */
$(function () {
$('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
$btn.button('toggle')
})
})
}(window.jQuery);

169
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-carousel.js vendored

@ -0,0 +1,169 @@
/* ==========================================================
* bootstrap-carousel.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#carousel
* ==========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* CAROUSEL CLASS DEFINITION
* ========================= */
var Carousel = function (element, options) {
this.$element = $(element)
this.options = options
this.options.slide && this.slide(this.options.slide)
this.options.pause == 'hover' && this.$element
.on('mouseenter', $.proxy(this.pause, this))
.on('mouseleave', $.proxy(this.cycle, this))
}
Carousel.prototype = {
cycle: function (e) {
if (!e) this.paused = false
this.options.interval
&& !this.paused
&& (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
return this
}
, to: function (pos) {
var $active = this.$element.find('.active')
, children = $active.parent().children()
, activePos = children.index($active)
, that = this
if (pos > (children.length - 1) || pos < 0) return
if (this.sliding) {
return this.$element.one('slid', function () {
that.to(pos)
})
}
if (activePos == pos) {
return this.pause().cycle()
}
return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
}
, pause: function (e) {
if (!e) this.paused = true
clearInterval(this.interval)
this.interval = null
return this
}
, next: function () {
if (this.sliding) return
return this.slide('next')
}
, prev: function () {
if (this.sliding) return
return this.slide('prev')
}
, slide: function (type, next) {
var $active = this.$element.find('.active')
, $next = next || $active[type]()
, isCycling = this.interval
, direction = type == 'next' ? 'left' : 'right'
, fallback = type == 'next' ? 'first' : 'last'
, that = this
, e = $.Event('slide')
this.sliding = true
isCycling && this.pause()
$next = $next.length ? $next : this.$element.find('.item')[fallback]()
if ($next.hasClass('active')) return
if ($.support.transition && this.$element.hasClass('slide')) {
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
$next.addClass(type)
$next[0].offsetWidth // force reflow
$active.addClass(direction)
$next.addClass(direction)
this.$element.one($.support.transition.end, function () {
$next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' '))
that.sliding = false
setTimeout(function () { that.$element.trigger('slid') }, 0)
})
} else {
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
$active.removeClass('active')
$next.addClass('active')
this.sliding = false
this.$element.trigger('slid')
}
isCycling && this.cycle()
return this
}
}
/* CAROUSEL PLUGIN DEFINITION
* ========================== */
$.fn.carousel = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('carousel')
, options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option)
if (!data) $this.data('carousel', (data = new Carousel(this, options)))
if (typeof option == 'number') data.to(option)
else if (typeof option == 'string' || (option = options.slide)) data[option]()
else if (options.interval) data.cycle()
})
}
$.fn.carousel.defaults = {
interval: 5000
, pause: 'hover'
}
$.fn.carousel.Constructor = Carousel
/* CAROUSEL DATA-API
* ================= */
$(function () {
$('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
var $this = $(this), href
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
, options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
$target.carousel(options)
e.preventDefault()
})
})
}(window.jQuery);

157
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-collapse.js vendored

@ -0,0 +1,157 @@
/* =============================================================
* bootstrap-collapse.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#collapse
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function ($) {
"use strict"; // jshint ;_;
/* COLLAPSE PUBLIC CLASS DEFINITION
* ================================ */
var Collapse = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, $.fn.collapse.defaults, options)
if (this.options.parent) {
this.$parent = $(this.options.parent)
}
this.options.toggle && this.toggle()
}
Collapse.prototype = {
constructor: Collapse
, dimension: function () {
var hasWidth = this.$element.hasClass('width')
return hasWidth ? 'width' : 'height'
}
, show: function () {
var dimension
, scroll
, actives
, hasData
if (this.transitioning) return
dimension = this.dimension()
scroll = $.camelCase(['scroll', dimension].join('-'))
actives = this.$parent && this.$parent.find('> .accordion-group > .in')
if (actives && actives.length) {
hasData = actives.data('collapse')
if (hasData && hasData.transitioning) return
actives.collapse('hide')
hasData || actives.data('collapse', null)
}
this.$element[dimension](0)
this.transition('addClass', $.Event('show'), 'shown')
this.$element[dimension](this.$element[0][scroll])
}
, hide: function () {
var dimension
if (this.transitioning) return
dimension = this.dimension()
this.reset(this.$element[dimension]())
this.transition('removeClass', $.Event('hide'), 'hidden')
this.$element[dimension](0)
}
, reset: function (size) {
var dimension = this.dimension()
this.$element
.removeClass('collapse')
[dimension](size || 'auto')
[0].offsetWidth
this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')
return this
}
, transition: function (method, startEvent, completeEvent) {
var that = this
, complete = function () {
if (startEvent.type == 'show') that.reset()
that.transitioning = 0
that.$element.trigger(completeEvent)
}
this.$element.trigger(startEvent)
if (startEvent.isDefaultPrevented()) return
this.transitioning = 1
this.$element[method]('in')
$.support.transition && this.$element.hasClass('collapse') ?
this.$element.one($.support.transition.end, complete) :
complete()
}
, toggle: function () {
this[this.$element.hasClass('in') ? 'hide' : 'show']()
}
}
/* COLLAPSIBLE PLUGIN DEFINITION
* ============================== */
$.fn.collapse = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('collapse')
, options = typeof option == 'object' && option
if (!data) $this.data('collapse', (data = new Collapse(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.collapse.defaults = {
toggle: true
}
$.fn.collapse.Constructor = Collapse
/* COLLAPSIBLE DATA-API
* ==================== */
$(function () {
$('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
var $this = $(this), href
, target = $this.attr('data-target')
|| e.preventDefault()
|| (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
, option = $(target).data('collapse') ? 'toggle' : $this.data()
$(target).collapse(option)
})
})
}(window.jQuery);

6981
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-cyborg.css vendored

File diff suppressed because it is too large Load Diff

100
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-dropdown.js vendored

@ -0,0 +1,100 @@
/* ============================================================
* bootstrap-dropdown.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#dropdowns
* ============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function ($) {
"use strict"; // jshint ;_;
/* DROPDOWN CLASS DEFINITION
* ========================= */
var toggle = '[data-toggle="dropdown"]'
, Dropdown = function (element) {
var $el = $(element).on('click.dropdown.data-api', this.toggle)
$('html').on('click.dropdown.data-api', function () {
$el.parent().removeClass('open')
})
}
Dropdown.prototype = {
constructor: Dropdown
, toggle: function (e) {
var $this = $(this)
, $parent
, selector
, isActive
if ($this.is('.disabled, :disabled')) return
selector = $this.attr('data-target')
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
$parent = $(selector)
$parent.length || ($parent = $this.parent())
isActive = $parent.hasClass('open')
clearMenus()
if (!isActive) $parent.toggleClass('open')
return false
}
}
function clearMenus() {
$(toggle).parent().removeClass('open')
}
/* DROPDOWN PLUGIN DEFINITION
* ========================== */
$.fn.dropdown = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this)
})
}
$.fn.dropdown.Constructor = Dropdown
/* APPLY TO STANDARD DROPDOWN ELEMENTS
* =================================== */
$(function () {
$('html').on('click.dropdown.data-api', clearMenus)
$('body')
.on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
})
}(window.jQuery);

399
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-image-gallery.js vendored

@ -0,0 +1,399 @@
/*
* Bootstrap Image Gallery 2.10
* https://github.com/blueimp/Bootstrap-Image-Gallery
*
* Copyright 2011, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://www.opensource.org/licenses/MIT
*/
/*jslint nomen: true, regexp: true */
/*global define, window, document, jQuery */
(function (factory) {
'use strict';
if (typeof define === 'function' && define.amd) {
// Register as an anonymous AMD module:
define([
'jquery',
'load-image',
'bootstrap'
], factory);
} else {
// Browser globals:
factory(
window.jQuery,
window.loadImage
);
}
}(function ($, loadImage) {
'use strict';
// Bootstrap Image Gallery is an extension to the Modal dialog of Twitter's
// Bootstrap toolkit, to ease navigation between a set of gallery images.
// It features transition effects, fullscreen mode and slideshow functionality.
$.extend($.fn.modal.defaults, {
// Delegate to search gallery links from, can be anything that
// is accepted as parameter for $():
delegate: document,
// Selector for gallery links:
selector: null,
// The filter for the selected gallery links (e.g. set to ":odd" to
// filter out label and thumbnail linking twice to the same image):
filter: '*',
// The index of the first gallery image to show:
index: 0,
// The href of the first gallery image to show (overrides index):
href: null,
// The range of images around the current one to preload:
preloadRange: 2,
// Offset of image width to viewport width:
offsetWidth: 100,
// Offset of image height to viewport height:
offsetHeight: 200,
// Set to true to display images as canvas elements:
canvas: false,
// Shows the next image after the given time in ms (0 = disabled):
slideshow: 0,
// Defines the image division for previous/next clicks:
imageClickDivision: 0.5
});
var originalShow = $.fn.modal.Constructor.prototype.show,
originalHide = $.fn.modal.Constructor.prototype.hide;
$.extend($.fn.modal.Constructor.prototype, {
initLinks: function () {
var $this = this,
options = this.options,
selector = options.selector ||
'a[data-target=' + options.target + ']';
this.$links = $(options.delegate).find(selector)
.filter(options.filter).each(function (index) {
if ($this.getUrl(this) === options.href) {
options.index = index;
}
});
if (!this.$links[options.index]) {
options.index = 0;
}
},
getUrl: function (element) {
return element.href || $(element).data('href');
},
getDownloadUrl: function (element) {
return $(element).data('download');
},
startSlideShow: function () {
var $this = this;
if (this.options.slideshow) {
this._slideShow = window.setTimeout(
function () {
$this.next();
},
this.options.slideshow
);
}
},
stopSlideShow: function () {
window.clearTimeout(this._slideShow);
},
toggleSlideShow: function () {
var node = this.$element.find('.modal-slideshow');
if (this.options.slideshow) {
this.options.slideshow = 0;
this.stopSlideShow();
} else {
this.options.slideshow = node.data('slideshow') || 5000;
this.startSlideShow();
}
node.find('i').toggleClass('icon-play icon-pause');
},
preloadImages: function () {
var options = this.options,
range = options.index + options.preloadRange + 1,
link,
i;
for (i = options.index - options.preloadRange; i < range; i += 1) {
link = this.$links[i];
if (link && i !== options.index) {
$('<img>').prop('src', this.getUrl(link));
}
}
},
loadImage: function () {
var $this = this,
modal = this.$element,
index = this.options.index,
url = this.getUrl(this.$links[index]),
download = this.getDownloadUrl(this.$links[index]),
oldImg;
this.abortLoad();
this.stopSlideShow();
modal.trigger('beforeLoad');
// The timeout prevents displaying a loading status,
// if the image has already been loaded:
this._loadingTimeout = window.setTimeout(function () {
modal.addClass('modal-loading');
}, 100);
oldImg = modal.find('.modal-image').children().removeClass('in');
// The timeout allows transition effects to finish:
window.setTimeout(function () {
oldImg.remove();
}, 3000);
modal.find('.modal-title').text(this.$links[index].title);
modal.find('.modal-download').prop(
'href',
download || url
);
this._loadingImage = loadImage(
url,
function (img) {
$this.img = img;
window.clearTimeout($this._loadingTimeout);
modal.removeClass('modal-loading');
modal.trigger('load');
$this.showImage(img);
$this.startSlideShow();
},
this._loadImageOptions
);
this.preloadImages();
},
showImage: function (img) {
var modal = this.$element,
transition = $.support.transition && modal.hasClass('fade'),
method = transition ? modal.animate : modal.css,
modalImage = modal.find('.modal-image'),
clone,
forceReflow;
modalImage.css({
width: img.width,
height: img.height
});
modal.find('.modal-title').css({ width: Math.max(img.width, 380) });
if (transition) {
clone = modal.clone().hide().appendTo(document.body);
}
if ($(window).width() > 767) {
method.call(modal.stop(), {
'margin-top': -((clone || modal).outerHeight() / 2),
'margin-left': -((clone || modal).outerWidth() / 2)
});
} else {
modal.css({
top: ($(window).height() - (clone || modal).outerHeight()) / 2
});
}
if (clone) {
clone.remove();
}
modalImage.append(img);
forceReflow = img.offsetWidth;
modal.trigger('display');
if (transition) {
if (modal.is(':visible')) {
$(img).on(
$.support.transition.end,
function (e) {
// Make sure we don't respond to other transitions events
// in the container element, e.g. from button elements:
if (e.target === img) {
$(img).off($.support.transition.end);
modal.trigger('displayed');
}
}
).addClass('in');
} else {
$(img).addClass('in');
modal.one('shown', function () {
modal.trigger('displayed');
});
}
} else {
$(img).addClass('in');
modal.trigger('displayed');
}
},
abortLoad: function () {
if (this._loadingImage) {
this._loadingImage.onload = this._loadingImage.onerror = null;
}
window.clearTimeout(this._loadingTimeout);
},
prev: function () {
var options = this.options;
options.index -= 1;
if (options.index < 0) {
options.index = this.$links.length - 1;
}
this.loadImage();
},
next: function () {
var options = this.options;
options.index += 1;
if (options.index > this.$links.length - 1) {
options.index = 0;
}
this.loadImage();
},
keyHandler: function (e) {
switch (e.which) {
case 37: // left
case 38: // up
e.preventDefault();
this.prev();
break;
case 39: // right
case 40: // down
e.preventDefault();
this.next();
break;
}
},
wheelHandler: function (e) {
e.preventDefault();
e = e.originalEvent;
this._wheelCounter = this._wheelCounter || 0;
this._wheelCounter += (e.wheelDelta || e.detail || 0);
if ((e.wheelDelta && this._wheelCounter >= 120) ||
(!e.wheelDelta && this._wheelCounter < 0)) {
this.prev();
this._wheelCounter = 0;
} else if ((e.wheelDelta && this._wheelCounter <= -120) ||
(!e.wheelDelta && this._wheelCounter > 0)) {
this.next();
this._wheelCounter = 0;
}
},
initGalleryEvents: function () {
var $this = this,
modal = this.$element;
modal.find('.modal-image').on('click.modal-gallery', function (e) {
var modalImage = $(this);
if ($this.$links.length === 1) {
$this.hide();
} else {
if ((e.pageX - modalImage.offset().left) / modalImage.width() <
$this.options.imageClickDivision) {
$this.prev(e);
} else {
$this.next(e);
}
}
});
modal.find('.modal-prev').on('click.modal-gallery', function (e) {
$this.prev(e);
});
modal.find('.modal-next').on('click.modal-gallery', function (e) {
$this.next(e);
});
modal.find('.modal-slideshow').on('click.modal-gallery', function (e) {
$this.toggleSlideShow(e);
});
$(document)
.on('keydown.modal-gallery', function (e) {
$this.keyHandler(e);
})
.on(
'mousewheel.modal-gallery, DOMMouseScroll.modal-gallery',
function (e) {
$this.wheelHandler(e);
}
);
},
destroyGalleryEvents: function () {
var modal = this.$element;
this.abortLoad();
this.stopSlideShow();
modal.find('.modal-image, .modal-prev, .modal-next, .modal-slideshow')
.off('click.modal-gallery');
$(document)
.off('keydown.modal-gallery')
.off('mousewheel.modal-gallery, DOMMouseScroll.modal-gallery');
},
show: function () {
if (!this.isShown && this.$element.hasClass('modal-gallery')) {
var modal = this.$element,
options = this.options,
windowWidth = $(window).width(),
windowHeight = $(window).height();
if (modal.hasClass('modal-fullscreen')) {
this._loadImageOptions = {
maxWidth: windowWidth,
maxHeight: windowHeight,
canvas: options.canvas
};
if (modal.hasClass('modal-fullscreen-stretch')) {
this._loadImageOptions.minWidth = windowWidth;
this._loadImageOptions.minHeight = windowHeight;
}
} else {
this._loadImageOptions = {
maxWidth: windowWidth - options.offsetWidth,
maxHeight: windowHeight - options.offsetHeight,
canvas: options.canvas
};
}
if (windowWidth > 767) {
modal.css({
'margin-top': -(modal.outerHeight() / 2),
'margin-left': -(modal.outerWidth() / 2)
});
} else {
modal.css({
top: ($(window).height() - modal.outerHeight()) / 2
});
}
this.initGalleryEvents();
this.initLinks();
if (this.$links.length) {
modal.find('.modal-slideshow, .modal-prev, .modal-next')
.toggle(this.$links.length !== 1);
modal.toggleClass(
'modal-single',
this.$links.length === 1
);
this.loadImage();
}
}
originalShow.apply(this, arguments);
},
hide: function () {
if (this.isShown && this.$element.hasClass('modal-gallery')) {
this.options.delegate = document;
this.options.href = null;
this.destroyGalleryEvents();
}
originalHide.apply(this, arguments);
}
});
$(function () {
$(document.body).on(
'click.modal-gallery.data-api',
'[data-toggle="modal-gallery"]',
function (e) {
var $this = $(this),
options = $this.data(),
modal = $(options.target),
data = modal.data('modal'),
link;
if (!data) {
options = $.extend(modal.data(), options);
}
if (!options.selector) {
options.selector = 'a[data-gallery=gallery]';
}
link = $(e.target).closest(options.selector);
if (link.length && modal.length) {
e.preventDefault();
options.href = link.prop('href') || link.data('href');
options.delegate = link[0] !== this ? this : document;
if (data) {
$.extend(data.options, options);
}
modal.modal(options);
}
}
);
});
}));

1
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-image-gallery.min.js vendored

File diff suppressed because one or more lines are too long

218
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-modal.js vendored

@ -0,0 +1,218 @@
/* =========================================================
* bootstrap-modal.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#modals
* =========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================= */
!function ($) {
"use strict"; // jshint ;_;
/* MODAL CLASS DEFINITION
* ====================== */
var Modal = function (content, options) {
this.options = options
this.$element = $(content)
.delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
}
Modal.prototype = {
constructor: Modal
, toggle: function () {
return this[!this.isShown ? 'show' : 'hide']()
}
, show: function () {
var that = this
, e = $.Event('show')
this.$element.trigger(e)
if (this.isShown || e.isDefaultPrevented()) return
$('body').addClass('modal-open')
this.isShown = true
escape.call(this)
backdrop.call(this, function () {
var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) {
that.$element.appendTo(document.body) //don't move modals dom position
}
that.$element
.show()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass('in')
transition ?
that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
that.$element.trigger('shown')
})
}
, hide: function (e) {
e && e.preventDefault()
var that = this
e = $.Event('hide')
this.$element.trigger(e)
if (!this.isShown || e.isDefaultPrevented()) return
this.isShown = false
$('body').removeClass('modal-open')
escape.call(this)
this.$element.removeClass('in')
$.support.transition && this.$element.hasClass('fade') ?
hideWithTransition.call(this) :
hideModal.call(this)
}
}
/* MODAL PRIVATE METHODS
* ===================== */
function hideWithTransition() {
var that = this
, timeout = setTimeout(function () {
that.$element.off($.support.transition.end)
hideModal.call(that)
}, 500)
this.$element.one($.support.transition.end, function () {
clearTimeout(timeout)
hideModal.call(that)
})
}
function hideModal(that) {
this.$element
.hide()
.trigger('hidden')
backdrop.call(this)
}
function backdrop(callback) {
var that = this
, animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
.appendTo(document.body)
if (this.options.backdrop != 'static') {
this.$backdrop.click($.proxy(this.hide, this))
}
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
doAnimate ?
this.$backdrop.one($.support.transition.end, callback) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
$.support.transition && this.$element.hasClass('fade')?
this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
removeBackdrop.call(this)
} else if (callback) {
callback()
}
}
function removeBackdrop() {
this.$backdrop.remove()
this.$backdrop = null
}
function escape() {
var that = this
if (this.isShown && this.options.keyboard) {
$(document).on('keyup.dismiss.modal', function ( e ) {
e.which == 27 && that.hide()
})
} else if (!this.isShown) {
$(document).off('keyup.dismiss.modal')
}
}
/* MODAL PLUGIN DEFINITION
* ======================= */
$.fn.modal = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('modal')
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option]()
else if (options.show) data.show()
})
}
$.fn.modal.defaults = {
backdrop: true
, keyboard: true
, show: true
}
$.fn.modal.Constructor = Modal
/* MODAL DATA-API
* ============== */
$(function () {
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
var $this = $(this), href
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
, option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
e.preventDefault()
$target.modal(option)
})
})
}(window.jQuery);

98
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-popover.js vendored

@ -0,0 +1,98 @@
/* ===========================================================
* bootstrap-popover.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#popovers
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* POPOVER PUBLIC CLASS DEFINITION
* =============================== */
var Popover = function ( element, options ) {
this.init('popover', element, options)
}
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
========================================== */
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
constructor: Popover
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
, content = this.getContent()
$tip.find('.popover-title')[this.isHTML(title) ? 'html' : 'text'](title)
$tip.find('.popover-content > *')[this.isHTML(content) ? 'html' : 'text'](content)
$tip.removeClass('fade top bottom left right in')
}
, hasContent: function () {
return this.getTitle() || this.getContent()
}
, getContent: function () {
var content
, $e = this.$element
, o = this.options
content = $e.attr('data-content')
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
return content
}
, tip: function () {
if (!this.$tip) {
this.$tip = $(this.options.template)
}
return this.$tip
}
})
/* POPOVER PLUGIN DEFINITION
* ======================= */
$.fn.popover = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('popover')
, options = typeof option == 'object' && option
if (!data) $this.data('popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.popover.Constructor = Popover
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
placement: 'right'
, content: ''
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
})
}(window.jQuery);

1109
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-responsive-cyborg.css vendored

File diff suppressed because it is too large Load Diff

151
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-scrollspy.js vendored

@ -0,0 +1,151 @@
/* =============================================================
* bootstrap-scrollspy.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#scrollspy
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* SCROLLSPY CLASS DEFINITION
* ========================== */
function ScrollSpy( element, options) {
var process = $.proxy(this.process, this)
, $element = $(element).is('body') ? $(window) : $(element)
, href
this.options = $.extend({}, $.fn.scrollspy.defaults, options)
this.$scrollElement = $element.on('scroll.scroll.data-api', process)
this.selector = (this.options.target
|| ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
|| '') + ' .nav li > a'
this.$body = $('body')
this.refresh()
this.process()
}
ScrollSpy.prototype = {
constructor: ScrollSpy
, refresh: function () {
var self = this
, $targets
this.offsets = $([])
this.targets = $([])
$targets = this.$body
.find(this.selector)
.map(function () {
var $el = $(this)
, href = $el.data('target') || $el.attr('href')
, $href = /^#\w/.test(href) && $(href)
return ( $href
&& href.length
&& [[ $href.position().top, href ]] ) || null
})
.sort(function (a, b) { return a[0] - b[0] })
.each(function () {
self.offsets.push(this[0])
self.targets.push(this[1])
})
}
, process: function () {
var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
, scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
, maxScroll = scrollHeight - this.$scrollElement.height()
, offsets = this.offsets
, targets = this.targets
, activeTarget = this.activeTarget
, i
if (scrollTop >= maxScroll) {
return activeTarget != (i = targets.last()[0])
&& this.activate ( i )
}
for (i = offsets.length; i--;) {
activeTarget != targets[i]
&& scrollTop >= offsets[i]
&& (!offsets[i + 1] || scrollTop <= offsets[i + 1])
&& this.activate( targets[i] )
}
}
, activate: function (target) {
var active
, selector
this.activeTarget = target
$(this.selector)
.parent('.active')
.removeClass('active')
selector = this.selector
+ '[data-target="' + target + '"],'
+ this.selector + '[href="' + target + '"]'
active = $(selector)
.parent('li')
.addClass('active')
if (active.parent('.dropdown-menu')) {
active = active.closest('li.dropdown').addClass('active')
}
active.trigger('activate')
}
}
/* SCROLLSPY PLUGIN DEFINITION
* =========================== */
$.fn.scrollspy = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('scrollspy')
, options = typeof option == 'object' && option
if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.scrollspy.Constructor = ScrollSpy
$.fn.scrollspy.defaults = {
offset: 10
}
/* SCROLLSPY DATA-API
* ================== */
$(function () {
$('[data-spy="scroll"]').each(function () {
var $spy = $(this)
$spy.scrollspy($spy.data())
})
})
}(window.jQuery);

135
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-tab.js vendored

@ -0,0 +1,135 @@
/* ========================================================
* bootstrap-tab.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#tabs
* ========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ======================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* TAB CLASS DEFINITION
* ==================== */
var Tab = function ( element ) {
this.element = $(element)
}
Tab.prototype = {
constructor: Tab
, show: function () {
var $this = this.element
, $ul = $this.closest('ul:not(.dropdown-menu)')
, selector = $this.attr('data-target')
, previous
, $target
, e
if (!selector) {
selector = $this.attr('href')
selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
}
if ( $this.parent('li').hasClass('active') ) return
previous = $ul.find('.active a').last()[0]
e = $.Event('show', {
relatedTarget: previous
})
$this.trigger(e)
if (e.isDefaultPrevented()) return
$target = $(selector)
this.activate($this.parent('li'), $ul)
this.activate($target, $target.parent(), function () {
$this.trigger({
type: 'shown'
, relatedTarget: previous
})
})
}
, activate: function ( element, container, callback) {
var $active = container.find('> .active')
, transition = callback
&& $.support.transition
&& $active.hasClass('fade')
function next() {
$active
.removeClass('active')
.find('> .dropdown-menu > .active')
.removeClass('active')
element.addClass('active')
if (transition) {
element[0].offsetWidth // reflow for transition
element.addClass('in')
} else {
element.removeClass('fade')
}
if ( element.parent('.dropdown-menu') ) {
element.closest('li.dropdown').addClass('active')
}
callback && callback()
}
transition ?
$active.one($.support.transition.end, next) :
next()
$active.removeClass('in')
}
}
/* TAB PLUGIN DEFINITION
* ===================== */
$.fn.tab = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tab')
if (!data) $this.data('tab', (data = new Tab(this)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tab.Constructor = Tab
/* TAB DATA-API
* ============ */
$(function () {
$('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
e.preventDefault()
$(this).tab('show')
})
})
}(window.jQuery);

275
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-tooltip.js vendored

@ -0,0 +1,275 @@
/* ===========================================================
* bootstrap-tooltip.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var Tooltip = function (element, options) {
this.init('tooltip', element, options)
}
Tooltip.prototype = {
constructor: Tooltip
, init: function (type, element, options) {
var eventIn
, eventOut
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.enabled = true
if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
}
this.options.selector ?
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
this.fixTitle()
}
, getOptions: function (options) {
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay
, hide: options.delay
}
}
return options
}
, enter: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (!self.options.delay || !self.options.delay.show) return self.show()
clearTimeout(this.timeout)
self.hoverState = 'in'
this.timeout = setTimeout(function() {
if (self.hoverState == 'in') self.show()
}, self.options.delay.show)
}
, leave: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (this.timeout) clearTimeout(this.timeout)
if (!self.options.delay || !self.options.delay.hide) return self.hide()
self.hoverState = 'out'
this.timeout = setTimeout(function() {
if (self.hoverState == 'out') self.hide()
}, self.options.delay.hide)
}
, show: function () {
var $tip
, inside
, pos
, actualWidth
, actualHeight
, placement
, tp
if (this.hasContent() && this.enabled) {
$tip = this.tip()
this.setContent()
if (this.options.animation) {
$tip.addClass('fade')
}
placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement
inside = /in/.test(placement)
$tip
.remove()
.css({ top: 0, left: 0, display: 'block' })
.appendTo(inside ? this.$element : document.body)
pos = this.getPosition(inside)
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
switch (inside ? placement.split(' ')[1] : placement) {
case 'bottom':
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'top':
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
break
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
break
}
$tip
.css(tp)
.addClass(placement)
.addClass('in')
}
}
, isHTML: function(text) {
// html string detection logic adapted from jQuery
return typeof text != 'string'
|| ( text.charAt(0) === "<"
&& text.charAt( text.length - 1 ) === ">"
&& text.length >= 3
) || /^(?:[^<]*<[\w\W]+>[^>]*$)/.exec(text)
}
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
$tip.find('.tooltip-inner')[this.isHTML(title) ? 'html' : 'text'](title)
$tip.removeClass('fade in top bottom left right')
}
, hide: function () {
var that = this
, $tip = this.tip()
$tip.removeClass('in')
function removeWithAnimation() {
var timeout = setTimeout(function () {
$tip.off($.support.transition.end).remove()
}, 500)
$tip.one($.support.transition.end, function () {
clearTimeout(timeout)
$tip.remove()
})
}
$.support.transition && this.$tip.hasClass('fade') ?
removeWithAnimation() :
$tip.remove()
}
, fixTitle: function () {
var $e = this.$element
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
}
}
, hasContent: function () {
return this.getTitle()
}
, getPosition: function (inside) {
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
width: this.$element[0].offsetWidth
, height: this.$element[0].offsetHeight
})
}
, getTitle: function () {
var title
, $e = this.$element
, o = this.options
title = $e.attr('data-original-title')
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
return title
}
, tip: function () {
return this.$tip = this.$tip || $(this.options.template)
}
, validate: function () {
if (!this.$element[0].parentNode) {
this.hide()
this.$element = null
this.options = null
}
}
, enable: function () {
this.enabled = true
}
, disable: function () {
this.enabled = false
}
, toggleEnabled: function () {
this.enabled = !this.enabled
}
, toggle: function () {
this[this.tip().hasClass('in') ? 'hide' : 'show']()
}
}
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
$.fn.tooltip = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tooltip')
, options = typeof option == 'object' && option
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tooltip.Constructor = Tooltip
$.fn.tooltip.defaults = {
animation: true
, placement: 'top'
, selector: false
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
, trigger: 'hover'
, title: ''
, delay: 0
}
}(window.jQuery);

61
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-transition.js vendored

@ -0,0 +1,61 @@
/* ===================================================
* bootstrap-transition.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#transitions
* ===================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
$(function () {
"use strict"; // jshint ;_;
/* CSS TRANSITION SUPPORT (http://www.modernizr.com/)
* ======================================================= */
$.support.transition = (function () {
var transitionEnd = (function () {
var el = document.createElement('bootstrap')
, transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd'
, 'MozTransition' : 'transitionend'
, 'OTransition' : 'oTransitionEnd'
, 'msTransition' : 'MSTransitionEnd'
, 'transition' : 'transitionend'
}
, name
for (name in transEndEventNames){
if (el.style[name] !== undefined) {
return transEndEventNames[name]
}
}
}())
return transitionEnd && {
end: transitionEnd
}
})()
})
}(window.jQuery);

285
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap-typeahead.js vendored

@ -0,0 +1,285 @@
/* =============================================================
* bootstrap-typeahead.js v2.0.4
* http://twitter.github.com/bootstrap/javascript.html#typeahead
* =============================================================
* Copyright 2012 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============================================================ */
!function($){
"use strict"; // jshint ;_;
/* TYPEAHEAD PUBLIC CLASS DEFINITION
* ================================= */
var Typeahead = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, $.fn.typeahead.defaults, options)
this.matcher = this.options.matcher || this.matcher
this.sorter = this.options.sorter || this.sorter
this.highlighter = this.options.highlighter || this.highlighter
this.updater = this.options.updater || this.updater
this.$menu = $(this.options.menu).appendTo('body')
this.source = this.options.source
this.shown = false
this.listen()
}
Typeahead.prototype = {
constructor: Typeahead
, select: function () {
var val = this.$menu.find('.active').attr('data-value')
this.$element
.val(this.updater(val))
.change()
return this.hide()
}
, updater: function (item) {
return item
}
, show: function () {
var pos = $.extend({}, this.$element.offset(), {
height: this.$element[0].offsetHeight
})
this.$menu.css({
top: pos.top + pos.height
, left: pos.left
})
this.$menu.show()
this.shown = true
return this
}
, hide: function () {
this.$menu.hide()
this.shown = false
return this
}
, lookup: function (event) {
var that = this
, items
, q
this.query = this.$element.val()
if (!this.query) {
return this.shown ? this.hide() : this
}
items = $.grep(this.source, function (item) {
return that.matcher(item)
})
items = this.sorter(items)
if (!items.length) {
return this.shown ? this.hide() : this
}
return this.render(items.slice(0, this.options.items)).show()
}
, matcher: function (item) {
return ~item.toLowerCase().indexOf(this.query.toLowerCase())
}
, sorter: function (items) {
var beginswith = []
, caseSensitive = []
, caseInsensitive = []
, item
while (item = items.shift()) {
if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
else if (~item.indexOf(this.query)) caseSensitive.push(item)
else caseInsensitive.push(item)
}
return beginswith.concat(caseSensitive, caseInsensitive)
}
, highlighter: function (item) {
var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
return '<strong>' + match + '</strong>'
})
}
, render: function (items) {
var that = this
items = $(items).map(function (i, item) {
i = $(that.options.item).attr('data-value', item)
i.find('a').html(that.highlighter(item))
return i[0]
})
items.first().addClass('active')
this.$menu.html(items)
return this
}
, next: function (event) {
var active = this.$menu.find('.active').removeClass('active')
, next = active.next()
if (!next.length) {
next = $(this.$menu.find('li')[0])
}
next.addClass('active')
}
, prev: function (event) {
var active = this.$menu.find('.active').removeClass('active')
, prev = active.prev()
if (!prev.length) {
prev = this.$menu.find('li').last()
}
prev.addClass('active')
}
, listen: function () {
this.$element
.on('blur', $.proxy(this.blur, this))
.on('keypress', $.proxy(this.keypress, this))
.on('keyup', $.proxy(this.keyup, this))
if ($.browser.webkit || $.browser.msie) {
this.$element.on('keydown', $.proxy(this.keypress, this))
}
this.$menu
.on('click', $.proxy(this.click, this))
.on('mouseenter', 'li', $.proxy(this.mouseenter, this))
}
, keyup: function (e) {
switch(e.keyCode) {
case 40: // down arrow
case 38: // up arrow
break
case 9: // tab
case 13: // enter
if (!this.shown) return
this.select()
break
case 27: // escape
if (!this.shown) return
this.hide()
break
default:
this.lookup()
}
e.stopPropagation()
e.preventDefault()
}
, keypress: function (e) {
if (!this.shown) return
switch(e.keyCode) {
case 9: // tab
case 13: // enter
case 27: // escape
e.preventDefault()
break
case 38: // up arrow
if (e.type != 'keydown') break
e.preventDefault()
this.prev()
break
case 40: // down arrow
if (e.type != 'keydown') break
e.preventDefault()
this.next()
break
}
e.stopPropagation()
}
, blur: function (e) {
var that = this
setTimeout(function () { that.hide() }, 150)
}
, click: function (e) {
e.stopPropagation()
e.preventDefault()
this.select()
}
, mouseenter: function (e) {
this.$menu.find('.active').removeClass('active')
$(e.currentTarget).addClass('active')
}
}
/* TYPEAHEAD PLUGIN DEFINITION
* =========================== */
$.fn.typeahead = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('typeahead')
, options = typeof option == 'object' && option
if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.typeahead.defaults = {
source: []
, items: 8
, menu: '<ul class="typeahead dropdown-menu"></ul>'
, item: '<li><a href="#"></a></li>'
}
$.fn.typeahead.Constructor = Typeahead
/* TYPEAHEAD DATA-API
* ================== */
$(function () {
$('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
var $this = $(this)
if ($this.data('typeahead')) return
e.preventDefault()
$this.typeahead($this.data())
})
})
}(window.jQuery);

5
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap.css vendored

File diff suppressed because one or more lines are too long

2027
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap.js vendored

File diff suppressed because it is too large Load Diff

6
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bootstrap.min.js vendored

File diff suppressed because one or more lines are too long

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/bullet.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 B

490
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/buttons.css

@ -0,0 +1,490 @@
/* BonBon Buttons 1.1 by simurai.com
1.1 Added unprefixed attributes, :focus style, <button> support
1.0 Released
Usage:
Default button: <a href="" class="button">Label</a>
More fancy with icon: <a href="" class="button orange glossy" data-icon="★">Label</a>
Following additional class names are supported:
Color: orange, pink, blue, green, transparent
Font: serif
Material: glossy, glass
Size: xs, xl
Shape: round, oval, brackets, skew, back, knife, shield, drop, morph
Icon only: icon
Disabled: disabled
*/
@import url(http://fonts.googleapis.com/css?family=Droid+Sans:bold+Lobster);
@import url(http://fonts.googleapis.com/css?family=Lobster);
/* -------------- THE button -------------- */
.button {
/* text */
text-decoration: none;
font: 24px/1em 'Droid Sans', sans-serif;
font-weight: bold;
text-shadow: rgba(255,255,255,.5) 0 1px 0;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
/* layout */
/*
padding: .5em .6em .4em .6em;
margin: .5em;
*/
padding: .4em .4em .4em .4em;
margin: .3em;
display: inline-block;
position: relative;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
border-radius: 8px;
/* effects */
border-top: 1px solid rgba(255,255,255,0.8);
border-bottom: 1px solid rgba(0,0,0,0.1);
background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0.7) )), url(noise.png);
background-image: -moz-radial-gradient(top, ellipse cover, rgba(255,255,255,0.7) 0%, rgba(255,255,255,0) 100%), url(noise.png);
background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0.7) )), url(noise.png);
-webkit-transition: background .4s ease-in-out;
-moz-transition: background .4s ease-in-out;
transition: background .4s ease-in-out;
/* color */
color: hsl(0, 0%, 40%) !important;
background-color: hsl(0, 0%, 75%);
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
}
/* -------------- button (tag) -------------- */
button.button {
border-left: none;
border-right: none;
}
button.button:hover {
cursor: pointer;
}
/* -------------- icon -------------- */
.button:before {
font: 1.2em/0 sans-serif;
content: attr(data-icon); /* gets the icon value from the custom data attribute and puts it infront of the button label */
margin-right: 0.4em;
}
/* icon only */
.icon {
font-weight: normal;
font-style: normal;
text-indent: -999em;
}
.icon:before {
margin-right: 0;
display: block;
height: 0;
text-indent: 0px;
line-height: .75em;
}
/* -------------- colours -------------- */
.button.orange {
color: hsl(39, 100%, 30%) !important;
background-color: hsl(39, 100%, 50%);
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(39, 100%, 40%) 0 .1em 3px, hsl(39, 100%, 30%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
}
.button.orange:hover { background-color: hsl(39, 100%, 65%); }
.button.blue {
color: hsl(208, 50%, 40%) !important;
background-color: hsl(208, 100%, 75%);
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(208, 50%, 55%) 0 .1em 3px, hsl(208, 50%, 40%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
}
.button.blue:hover { background-color: hsl(208, 100%, 83%); }
.button.green {
color: hsl(88, 70%, 30%) !important;
background-color: hsl(88, 70%, 60%);
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(88, 70%, 40%) 0 .1em 3px, hsl(88, 70%, 30%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
}
.button.green:hover { background-color: hsl(88, 70%, 75%); }
.button.pink {
color: hsl(340, 100%, 30%) !important;
background-color: hsl(340, 100%, 75%);
-webkit-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
-moz-box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
box-shadow: inset rgba(255,254,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.15) 0 -0.1em .3em, /* inner shadow */
hsl(340, 70%, 50%) 0 .1em 3px, hsl(340, 80%, 40%) 0 .3em 1px, /* color border */
rgba(0,0,0,0.2) 0 .5em 5px; /* drop shadow */
}
.button.pink:hover { background-color: hsl(340, 100%, 83%); }
.button.transparent {
color: rgba(0,0,0,0.5) !important;
}
.button.transparent, .button.transparent:hover, .button.transparent:active {
background-color: transparent;
background-image: none;
}
.button.transparent:hover {
opacity: .9;
}
/* -------------- States -------------- */
.button:hover {
background-color: hsl(0, 0%, 83%);
}
.button:active {
background-image: -webkit-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png);
background-image: -moz-gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png);
background-image: gradient(radial, 50% 0, 100, 50% 0, 0, from( rgba(255,255,255,0) ), to( rgba(255,255,255,0) )), url(noise.png);
-webkit-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */
rgba(0,0,0,0.4) 0 .1em 1px, /* border */
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */
-moz-box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */
rgba(0,0,0,0.4) 0 .1em 1px, /* border */
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */
box-shadow: inset rgba(255,255,255,0.6) 0 0.3em .3em, inset rgba(0,0,0,0.2) 0 -0.1em .3em, /* inner shadow */
rgba(0,0,0,0.4) 0 .1em 1px, /* border */
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */
-webkit-transform: translateY(.2em);
-moz-transform: translateY(.2em);
transform: translateY(.2em);
}
.button:focus {
outline: none;
color: rgba(254,255,255,0.9) !important;
text-shadow: rgba(0,0,0,0.2) 0 1px 2px;
}
.button[disabled], .button[disabled]:hover, .button.disabled, .button.disabled:hover {
opacity: .5;
cursor: default;
color: rgba(0,0,0,0.2) !important;
text-shadow: none !important;
background-color: rgba(0,0,0,0.05);
background-image: none;
border-top: none;
-webkit-box-shadow: inset rgba(255,254,255,0.4) 0 0.3em .3em, inset rgba(0,0,0,0.1) 0 -0.1em .3em, /* inner shadow */
rgba(0,0,0,0.3) 0 .1em 1px, /* border */
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */
-moz-box-shadow: inset rgba(255,254,255,0.4) 0 0.3em .3em, inset rgba(0,0,0,0.1) 0 -0.1em .3em, /* inner shadow */
rgba(0,0,0,0.3) 0 .1em 1px, /* border */
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */
box-shadow: inset rgba(255,254,255,0.4) 0 0.3em .3em, inset rgba(0,0,0,0.1) 0 -0.1em .3em, /* inner shadow */
rgba(0,0,0,0.3) 0 .1em 1px, /* border */
rgba(0,0,0,0.2) 0 .2em 6px; /* drop shadow */
-webkit-transform: translateY(5px);
-moz-transform: translateY(5px);
transform: translateY(5px);
}
/* -------------- Fonts -------------- */
.serif {
font-family: 'Lobster', serif;
font-weight: normal;
}
/* -------------- Sizes -------------- */
.xs { font-size: 16px; }
.xl { font-size: 32px; }
/* -------------- Materials -------------- */
.button.glossy:after, .button.glass:after {
content: "";
position: absolute;
width: 90%;
height: 60%;
top: 0;
left: 5%;
-webkit-border-radius: .5em .5em 1em 1em / .5em .5em 2em 2em;
-moz-border-radius: .5em .5em 1em 1em / .5em .5em 2em 2em;
border-radius: .5em .5em 1em 1em / .5em .5em 2em 2em;
background-image: -webkit-gradient(linear, 0% 0, 100% 0, from( rgba(255,255,255,.55) ), to( rgba(255,255,255,.5) ),
color-stop(.5, rgba(255,255,255,0)), color-stop(.8, rgba(255,255,255,0)) );
background-image: -moz-linear-gradient(left, rgba(255,255,255,.55), rgba(255,255,255,0) 50%, rgba(255,255,255,0) 80%, rgba(255,255,255,.5) );
background-image: gradient(linear, 0% 0, 100% 0, from( rgba(255,255,255,.55) ), to( rgba(255,255,255,.5) ),
color-stop(.5, rgba(255,255,255,0)), color-stop(.8, rgba(255,255,255,0)) );
}
.button.glossy:active:after,
.button.glass:active:after,
.button.disabled:after,
.button[disabled]:after
{ opacity: .6; }
.button.icon.glossy:after,
.button.icon.glass:after { height: 75% ; }
/* -------------- Glass + Transparent -------------- */
.button.glass {
text-shadow: rgba(255,255,255,.5) 0 -1px 0, rgba(0,0,0,0.18) 0 .18em .15em;
}
.button.glass:active {
text-shadow: rgba(255,255,255,.3) 0 1px 0, rgba(0,0,0,0.15) 0 .18em .15em;
}
/* -------------- Shapes -------------- */
/* round */
.round, .round.glossy:after, .round.glass:after {
border-top: none;
-webkit-border-radius: 1em;
-moz-border-radius: 1em;
border-radius: 1em;
}
/* oval */
.oval {
border-top: none;
padding-left: .8em;
padding-right: .8em;
-webkit-border-radius: 5em / 2em;
-moz-border-radius: 5em / 2em;
border-radius: 5em / 2em;
}
.oval.glossy:after, .oval.glass:after {
top: 5%;
-webkit-border-radius: 5em / 2em 2em 1em 1em;
-moz-border-radius: 5em / 2em 2em 1em 1em;
border-radius: 5em / 2em 2em 1em 1em;
}
.oval.icon {
padding-left: .8em;
padding-right: .8em;
-webkit-border-radius: 1.5em / 1em;
-moz-border-radius: 1.5em / 1em;
border-radius: 1.5em / 1em;
}
.oval.icon.glossy:after, .oval.icon.glass:after {
-webkit-border-radius: 1.5em / 1em;
-moz-border-radius: 1.5em / 1em;
border-radius: 1.5em / 1em;
}
/* brackets */
.brackets, .brackets.glossy:after, .brackets.glass:after {
border-top: none;
-webkit-border-radius: .5em / 1em;
-moz-border-radius: .5em / 1em;
border-radius: .5em / 1em;
}
/* skew */
.skew {
border-top: none;
padding-right: 1.2em;
padding-left: 0.8em;
-webkit-border-radius: 5em 1em / 5em 1em;
-moz-border-radius: 5em 1em / 5em 1em;
border-radius: 5em 1em / 5em 1em;
}
.skew.glossy:after, .skew.glass:after {
left: 10%;
-webkit-border-radius: 7em 1em / 5em 1em;
-moz-border-radius: 7em 1em / 5em 1em;
border-radius: 7em 1em / 5em 1em;
}
.skew.icon {
padding-right: .9em;
padding-left: .8em;
}
/* back */
.back, .back.glossy:after, .back.glass:after {
border-top-color: rgba(255,255,255,0.5);
-webkit-border-radius: 1.6em 1.6em 1em 1em / 4em 4em 1em 1em;
-moz-border-radius: 1.6em 1.6em 1em 1em / 4em 4em 1em 1em;
border-radius: 1.6em 1.6em 1em 1em / 4em 4em 1em 1em;
}
.back.glossy:after, .back.glass:after {
left: 6%;
width: 88%;
}
/* knife */
.knife {
padding-left: 1.5em;
-webkit-border-radius: .2em .5em .5em 8em / .2em .5em .5em 5em;
-moz-border-radius: .2em .5em .5em 8em / .2em .5em .5em 5em;
border-radius: .2em .5em .5em 8em / .2em .5em .5em 5em;
}
.knife.glossy:after, .knife.glass:after {
left: 3%;
width: 97%;
-webkit-border-radius: .1em .5em .5em 8em / .1em .5em .5em 2em;
-moz-border-radius: .1em .5em .5em 8em / .1em .5em .5em 2em;
border-radius: .1em .5em .5em 8em / .1em .5em .5em 2em;
}
.knife.glossy.icon:after, .knife.glass.icon:after {
left: 5%;
width: 95%;
-webkit-border-radius: .5em .5em 1em 6em / .5em .5em 1em 4em;
-moz-border-radius: .5em .5em 1em 6em / .5em .5em 1em 4em;
border-radius: .5em .5em 1em 6em / .5em .5em 1em 4em;
}
/* shield */
.shield, .shield.glossy:after, .shield.glass:after {
-webkit-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em;
-moz-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em;
border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em;
}
.shield {
padding-left: .8em;
padding-right: .8em;
}
.shield.icon {
padding-left: .6em;
padding-right: .6em;
}
/* drop */
.drop {
border-top: none;
-webkit-border-radius: 2em 5em 2em .6em / 2em 4em 2em .6em;
-moz-border-radius: 2em 5em 2em .6em / 2em 4em 2em .6em;
border-radius: 2em 5em 2em .6em / 2em 4em 2em .6em;
}
.drop.glossy:after, .drop.glass:after {
left: 4%;
-webkit-border-radius: 2em 6em 2em 1em / 2em 4em 2em 2em;
-moz-border-radius: 2em 6em 2em 1em / 2em 4em 2em 2em;
border-radius: 2em 6em 2em 1em / 2em 4em 2em 2em;
}
.drop.icon {
padding-right: .6em;
}
/* morph */
.morph {
border-top: none;
-webkit-border-radius: 5em / 2em;
-moz-border-radius: 5em / 2em;
border-radius: 5em / 2em;
-webkit-transition: -webkit-border-radius .3s ease-in-out;
-moz-transition: -moz-border-radius .3s ease-in-out;
transition: -moz-border-radius .3s ease-in-out;
}
.morph:hover {
-webkit-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em;
-moz-border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em;
border-radius: .4em .4em 2em 2em / .4em .4em 3em 3em;
}
.morph:active {
-webkit-border-radius: .3em;
-moz-border-radius: .3em;
border-radius: .3em;
}
.morph:after {
display: none;
}
/* Some ugly hacks for FF.
Thanks to David Hund for some help - http://valuedstandards.com/static/test/buttons/ */
@-moz-document url-prefix() {
.button { text-align: center; }
.icon { padding: .5em 1em; }
.icon:before { margin-left: -.42em; float: left; }
.social.icon:before { margin-left: -.22em; }
.drop.icon { padding-right: 1.1em; }
.shield.icon { padding-left: 1.1em; padding-right: 1.1em; }
.skew.icon { padding-right: 1.4em; padding-left: 1.3em; }
.oval.icon { padding-left: 1.3em; padding-right: 1.3em; }
.knife { padding-left: 2em; }
}
/* Damn, this became a fat baby.. */

24
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/cleannavbar.php

@ -0,0 +1,24 @@
<div class="navbar-wrapper">
<div class="container">
<div class="navbar navbar-default navbar-static-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="./index.html">ossoc</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<button id="loginbutton" type="button" class="btn btn-primary narbar-btn"><i class="glyphicon glyphicon-log-in"></i>Login</button>
<button type="button" class="btn btn-success navbar-btn"><i class="glyphicon glyphicon-link"></i><a href="./register.jsp">Create account</a></button>
</ul>
</div>
</div>
</div>
</div>
</div>

124
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/cmr-bootstrap-cyborg-wiki.css vendored

@ -0,0 +1,124 @@
blockquote#quote {
margin-top: 30px;
margin-bottom: 30px;
}
@font-face
{
font-family: 'GenBasI';
src: url('/css/font/GenBasI.ttf');
}
blockquote#quote p {
/*
font-family: "HelveticaNeue Light","Helvetica Neue Light","Helvetica Neue","Helvetica";
*/
font-family: 'GenBasI';
font-weight: 100;
font-size: 20px;
line-height: 150%;
}
img {
/*background-color: #fff;*/
padding: 5px;
}
img.tex {
background-color: #ddd;
}
body.mediawiki {
padding-top: 0px;
}
@media (min-width: 981px) {
/*
body.mediawiki {
padding-top: 100px;
}
*/
}
div.wikilink_btn a {
color: #fff;
font-weight: bold;
font-size: 20px;
}
.wikitable th,.wikitable td {
border-top:1px solid #222; background: transparent;
}
.wikitable th,.wikitable td{border-top:1px solid #222;}
.wikitable tbody tr:hover th,.wikitable tbody tr:hover td{background-color:#444;}
.wikitable tbody tr:hover td,.table tbody tr:hover th{background-color:#444;}
.wikitable,.well,.prettyprint,input,textarea,select{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;}
.wikitable{width:100%;margin-bottom:18px;}.wikitable th,.wikitable td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
.wikitable th{font-weight:bold;}
.wikitable thead th{vertical-align:bottom;}
.wikitable caption+thead tr:first-child th,.wikitable caption+thead tr:first-child td,.wikitable colgroup+thead tr:first-child th,.wikitable colgroup+thead tr:first-child td,.wikitable thead:first-child tr:first-child th,.wikitable thead:first-child tr:first-child td{border-top:0;}
.wikitable tbody+tbody{border-top:2px solid #dddddd;}
.wikitable tbody tr:hover th,.wikitable tbody tr:hover td{background-color:#333;}
.wikitable{width:100%;margin-bottom:18px;}.wikitable th,.wikitable td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
.wikitable th{font-weight:bold;}
.wikitable thead th{vertical-align:bottom;}
.wikitable caption+thead tr:first-child th,.wikitable caption+thead tr:first-child td,.wikitable colgroup+thead tr:first-child th,.wikitable colgroup+thead tr:first-child td,.wikitable thead:first-child tr:first-child th,.wikitable thead:first-child tr:first-child td{border-top:0;}
.wikitable tbody+tbody{border-top:2px solid #dddddd;}
table.wikitable, table.wikitable th {
background: none repeat scroll 0 0 #222;
}
/*
ul, div {
font-size: 18px;
}
*/
div#mw-normal-catlinks {
font-size: 14px;
margin-top: 20px;
margin-bottom: 20px;
}
table, table.navbox,
table ul li, table.navbox ul li,
table ul, table.navbox ul,
table p, table.navbox p,
table a, table.navbox a {
font-size: 14px;
}
h1, h2, h3, h4, h5 {
padding-top: 20px;
}
div.mw-geshi {
font-size: 14px;
}
pre {
font-size: 14px;
}
div.mainarticle {
font-size: 18px;
}
a:visited {
/*
unvisited link color:
color: #33b5e5;
*/
/*
visited link color:
http://www.w3schools.com/tags/ref_colorpicker.asp
*/
color: #2E8AE6;
}
#toc, .toc,
#catlinks, .catlinks {
background-color: #333;
}

81
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/cmr-bootstrap-cyborg.css vendored

@ -0,0 +1,81 @@
h1.hero {
padding: 0px 45px;
color: white;
font: bold 24px/45pxHelvetica,Sans-Serif;
letter-spacing:-1px;
/*
background: rgb(0,0,0);
background: rgba(0,0,0,0.7);
*/
padding:10px;
}
a.nav_well_title {
font-variant: small-caps;
}
.label-big{
font-size:14px;
line-height: 18px;
}
h4.widgettitle {
font-size: 18px;
padding-top: 25px;
}
/*
//////////////////////////////////
make a hero unit that actually looks good with cyborg skin
*/
h1.superhero {
margin: 10px 0;
font-family: inherit;
font-weight: bold;
color: #000;
text-rendering: optimizelegibility;
font-size: 60px;
margin-bottom: 0;
line-height: 1;
letter-spacing: -1px;
}
p.hero-unit {
font-size: 18px;
font-weight: 200;
line-height: 30px;
color: #333;
}
.superhero td {
padding: 30px;
}
.hero-unit-no-padding {
padding-top: 0px;
padding-bottom: 0px;
}
/*
* use the nicest helvetica you can
*/
body, p {
/*
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, "Lucida Grande", sans-serif;
*/
font-weight: 300;
line-height: 150%;
}
/* give the navbar on the right more padding */
#sidebar1{
margin-left:20px;
}

4
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/css/font-awesome.css vendored

File diff suppressed because one or more lines are too long

85
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/dox.css

@ -0,0 +1,85 @@
/******** line-dot subway **********************/
div#subway {
text-align: center;
}
html, body {
/*height: 100%;*/
}
path {
stroke: #2780e3;
stroke-width: 8px;
}
svg .data-point {
stroke: black;
stroke-width: 4px;
fill: white;
}
/******************************/
.vcenter {
}
.col-centered{
float: none;
margin: 0 auto;
}
.splash-img {
width: 300px;
height: 300px;
}
h1.jumbo {
font-size: 64px;
}
h1.jumbojumbo {
font-size: 78px;
}
a.index-btn {
width: 300px;
margin-top: 10px;
margin-bottom: 10px;
margin-left: 15px;
margin-right: 15px;
}
.navbar-default {
background-color: #000;
border-color: #000;
}
div.v300 {
height: 300px;
}
div.v200 {
height: 200px;
}
div.v150 {
height: 150px;
}
div.v50 {
height: 50px;
}
hr {
text-align: center;
width: 100px;
}

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/FontAwesome.otf

Binary file not shown.

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.eot

Binary file not shown.

2671
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.svg

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.ttf

Binary file not shown.

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.woff

Binary file not shown.

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/fonts/fontawesome-webfont.woff2

Binary file not shown.

53
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/footer.php

@ -0,0 +1,53 @@
<br />
<br />
<center>
<hr />
</center>
<footer id="contentinfo" class="body">
<p style="text-align: center">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x" style="color:#000;"></i>
<i class="fa fa-terminal fa-stack-1x fa-inverse"></i>
</span>
Made from the command line with vim by
<a href="http://charlesreid1.com">charlesreid1</a><br />
with help from <a href="https://getbootstrap.com/">Bootstrap</a> and <a href="http://mediawiki.org">MediaWiki</a>.
</p>
<p style="text-align: center">
<a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/">
<span class="fa-stack fa-lg">
<i class="fa fa-square fa-stack-2x" style="color:#000;"></i>
<i class="fa fa-creative-commons fa-stack-1x fa-inverse"></i>
</span>
</a>
<br />
Licensed under the <a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/">Creative Commons Attribution-NonCommercial 4.0 License</a>.
</p>
<script type="text/javascript">
var sc_project=11477000;
var sc_invisible=1;
var sc_security="d49adba3";
var scJsHost = (("https:" == document.location.protocol) ?
"https://secure." : "http://www.");
document.write("<sc"+"ript type='text/javascript' src='" +
scJsHost+
"statcounter.com/counter/counter.js'></"+"script>");
</script>
<noscript><div class="statcounter"><a title="Web Analytics"
href="http://statcounter.com/" target="_blank"><img
class="statcounter"
src="//c.statcounter.com/11477000/0/d49adba3/1/" alt="Web
Analytics"></a></div></noscript>
<!-- End of StatCounter Code for Default Guide -->
<script type="text/javascript" src="/w/skins/Bootstrap2/jquery-1.11.2.js"></script>
<script type="text/javascript" src="/w/skins/Bootstrap2/bootstrap-3.3.4.js"></script>
</footer><!-- /#contentinfo -->
</body>
</html>

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/headbg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

19
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/header.php

@ -0,0 +1,19 @@
<!DOCTYPE html>
<!--
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
-->
<html lang="en">
<head>
<meta charset="utf-8">
<title>charlesreid1 - <?php echo $this->html('title'); ?></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
</head>
<body>

8
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/hooks.txt

@ -0,0 +1,8 @@
Hooks provided by the MonoBook skin.
'MonoBookTemplateToolboxEnd': DEPRECATED. Called by Monobook skin after toolbox
links have been rendered (useful for adding more). Note: this is only run for
the Monobook skin. To add items to the toolbox you should use the
SkinTemplateToolboxEnd hook instead, which works for all "SkinTemplate"-type
skins.
$tools: array of tools

9
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/i18n/en.json

@ -0,0 +1,9 @@
{
"@metadata": {
"authors": []
},
"skinname-monobook": "MonoBook",
"monobook-desc": "The classic MediaWiki skin since 2004, named after the black-and-white photo of a book in the page background",
"monobook.css": "/* CSS placed here will affect users of the MonoBook skin */",
"monobook.js": "/* Any JavaScript here will be loaded for users using the MonoBook skin */"
}

105
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/icebrrg.css

@ -0,0 +1,105 @@
.text-heading {
font-family: "Lucida Console";
font-size: 24px;
font-style: normal;
font-weight: bold;
text-transform: none;
letter-spacing: 4px;
text-indent: 10px;
vertical-align: middle;
color: #0066CC;
}
.text {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
padding-left: 10px;
padding-right: 10px;
color: #666666;
text-align: justify;
}
.footer {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #666666;
text-align: center;
border: 1px none #6699CC;
background-color: #0099CC;
}
.table2 {
border: 1px dotted #000066;
}
.company {
font-family: "Lucida Console";
font-size: 30px;
color: #0066CC;
text-align: left;
vertical-align: middle;
letter-spacing: 8px;
font-weight: normal;
}
.punchline {
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
color: #003366;
letter-spacing: 4px;
}
.menu {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
color: #0066CC;
text-align: center;
vertical-align: middle;
border: 1px solid #000000;
background-color: #C7D3F1;
}
.submenu {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: lighter;
color: #0066CC;
text-align: center;
vertical-align: middle;
background-color: #E1E8F8;
border-top: 1px solid #000000;
border-right: 1px none #000000;
border-bottom: 1px solid #000000;
border-left: 1px none #000000;
}
.headtable {
border: 1px dotted #0066CC;
}
.header {
background-image: url(../images/bk.jpg);
border: 1px dotted #003399;
}
a {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #14388B;
text-decoration: none;
font-weight: bold;
}
a:hover {
font-family: Verdana, Arial, Helvetica, sans-serif;
color: #333399;
text-decoration: none;
font-weight: bold;
}
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 18px;
color: #339;
color: #a00;
text-decoration: none;
background-color: #ddd;
}
p {
font-size: 14px;
}

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/images/email_black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

4
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/jquery-1.11.2.js vendored

File diff suppressed because one or more lines are too long

5
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/jquery-1.11.3.min.js vendored

File diff suppressed because one or more lines are too long

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/link_icon.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/magnify-clip.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

1296
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main.css

File diff suppressed because it is too large Load Diff

1178
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main.css.backup

File diff suppressed because it is too large Load Diff

747
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main_cmr.css

@ -0,0 +1,747 @@
/*
MediaWiki stuff
*/
@import url("../common.css");
/* disabled for now
blockquote {
font-family: Times, "Times New Roman", serif;
font-style: italic;
}*/
/*
code {
background-color: #f9f9f9;
}
*/
img {
text-decoration: none;
border: none;
}
p img {
margin: 0;
}
#navtable table {
border: solid 1px darkblue;
}
#navtable{
font-family:"Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size:12px;width:480px;
text-align:left;
/*
border-collapse:collapse;
border:1px solid #69c;
*/
margin:20px;
}
#navtable a{
font-family:"Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size:12px;
}
#navtable th {
font-weight:normal;
font-size:14px;
color:#039;
border-bottom:1px dashed #69c;
padding:12px 17px;
}
#navtable td{
color:#669;
padding:7px 17px;
}
#navtable tbody {
border: darkblue;
color:#339;
background:#d0dafd;
}
#navtable tbody tr:hover td{
color:#339;
background:#d0dafd;
}
pre {
width: auto;
overflow: auto;
padding: 1em;
border: 1px dashed #2f6fab;
color: black;
background-color: #f9f9f9;
line-height: 1.1em;
/* "overflow: auto" prevent ugly horizontal page expansion... */
/* from http://www.gossamer-threads.com/lists/wiki/mediawiki/124345 */
}
/* "Zebra" table, with alternating row colors
* to use:
* {| class="wikitable zebra"
* */
.wikitable.zebra
{
width: auto;
}
.wikitable.zebra caption
{
/* table title */
text-align: center;
background: #ffffff;
margin: 2em 2em 2em 2em;
}
.wikitable.zebra tr:nth-child(even)
{
/* 2nd row... dark */
background-color: #ddf;
}
.wikitable.zebra tr:nth-child(odd)
{
/* 3rd row... light */
background-color: #eef;
}
.wikitable.zebra td
{
/*
padding: 2em;
* */
}
/* "Pretty" table, with alternating row colors
* to use:
* {| class="prettytable"
* {| class="wikitable"
* */
table.wikitable,
table.prettytable {
margin: 1em 1em 1em 0;
background: #f9f9f9;
border: 1px #aaa solid;
border-collapse: collapse;
}
.wikitable th, .wikitable td,
.prettytable th, .prettytable td {
border: 1px #aaa solid;
padding: 0.2em;
}
.wikitable th,
.prettytable th {
background: #f1f1f1;
text-align: center;
}
.wikitable tr:nth-child(odd),
.prettytable tr:nth-child(odd) { /* The striping is handled by the :nth-child pseudo-class, with the odd row adjusted. */
background: #f5f5f5;
}
.wikitable caption,
.prettytable caption {
font-weight: bold;
}
/* Links for article's categories */
.catlinks {
border: 1px solid #aaa;
background-color: #f9f9f9;
padding: 5px;
margin-top: 4em;
clear: both;
}
#siteSub {
display: none;
}
#jump-to-nav {
display: none;
}
/* Table of Contents */
#toc,
.toc,
.mw-warning {
border: 1px solid #aaa;
background-color: #f9f9f9;
padding: 5px;
font-size: 95%;
}
#toc h2,
.toc h2 {
display: inline;
border: none;
padding: 0;
font-size: 100%;
font-weight: bold;
}
#toc #toctitle,
.toc #toctitle,
#toc .toctitle,
.toc .toctitle {
text-align: center;
}
#toc ul,
.toc ul {
list-style-type: none;
list-style-image: none;
margin-left: 0;
padding-left: 0;
text-align: left;
}
#toc ul ul,
.toc ul ul {
margin: 0 0 0 2em;
}
#toc .toctoggle,
.toc .toctoggle {
font-size: 94%;
}
.mw-warning {
margin-left: 50px;
margin-right: 50px;
text-align: center;
}
#column-content {
/*
width: 100%;
margin: 0 0 .6em -12.2em;
*/
float: right;
padding: 0;
}
#firstHeading {
margin-bottom: .1em;
/* These two rules hack around bug 2013 (fix for more limited bug 11325).
When bug 2013 is fixed properly, they should be removed. */
line-height: 1.2em;
padding-bottom: 0;
}
/* Don't display "retrieved from" text at the bottom */
.printfooter {
display: none;
}
#contentSub, #contentSub2 {
font-size: 84%;
line-height: 1.2em;
margin: 0 0 1.4em 1em;
color: #7d7d7d;
width: auto;
}
.previewnote {
color: #c00;
margin-bottom: 1em;
}
/* user notification thing */
.usermessage {
background-color: #ffce7b;
border: 1px solid #ffa500;
color: black;
font-weight: bold;
margin: 2em 0 1em;
padding: .5em 1em;
vertical-align: middle;
}
#column-one {
padding-top: 0px;
}
#p-cactions {
/*
position: absolute;
top: 1.3em;
left: 11.5em;
margin: 0;
line-height: 12px;
line-height: 1.1em;
padding-left: 1em;
*/
white-space: nowrap;
width: 76%;
overflow: visible;
background: none;
border-collapse: collapse;
list-style: none;
font-size: 95%;
}
#p-cactions li.selected a {
z-index: 3;
border: 1px solid white;
}
#p-cactions .pBody {
font-size: 1em;
border-collapse: inherit;
border: 0;
padding: 0;
}
#p-cactions .hiddenStructure {
display: none;
}
#p-cactions li a:hover {
z-index: 3;
text-decoration: underline;
}
#p-cactions ul {
list-style: none;
}
#p-cactions li {
display: inline;
/*
border: 1px solid #aaa;
border-bottom: none;
*/
padding: 0 0 .1em 0;
margin: 0 .3em 0 0;
overflow: visible;
}
#p-cactions li.selected {
border-color: #fabd23;
padding: 0 0 .2em 0;
font-weight: bold;
}
#p-cactions li a {
text-transform: lowercase;
/*color: #002bb8;*/
color: white;
text-decoration: none;
border: none;
padding: 0 .8em .3em;
position: relative;
z-index: 0;
margin: 0;
}
#p-cactions h5 {
display: none;
}
#p-cactions li.istalk {
margin-right: 0;
}
#p-cactions li.istalk a {
padding-right: .5em;
}
#p-cactions #ca-addsection a {
padding-left: .4em;
padding-right: .4em;
}
/* offsets to distinguish the tab groups */
li#ca-talk {
margin-right: 1.6em;
}
li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print {
margin-left: 1.6em;
}
#p-lang {
position: relative;
z-index: 3;
}
/* Override text-transform on languages where capitalization is significant */
.capitalize-all-nouns .portlet h5,
.capitalize-all-nouns .portlet h6,
.capitalize-all-nouns #p-personal ul,
.capitalize-all-nouns #p-cactions ul li a {
text-transform: none;
}
h1 {
font-size: 188%;
}
h1 .editsection {
font-size: 53%;
}
h2 {
font-size: 150%;
}
h2 .editsection {
font-size: 67%;
}
h3, h4, h5, h6 {
border-bottom: none;
font-weight: bold;
}
h3 {
font-size: 110%;
font-style: italic;
}
h3 .editsection {
font-size: 76%;
font-weight: normal;
}
h4 {
font-size: 116%;
}
h4 .editsection {
font-size: 86%;
font-weight: normal;
}
h5 {
font-size: 100%;
display: none;
}
h5 .editsection {
font-weight: normal;
}
h6 {
font-size: 80%;
}
h6 .editsection {
font-size: 125%;
font-weight: normal;
}
.editsection a {
text-decoration: none;
/*
color: #a00;
*/
}
#bodyContent a.external {
background: url(external.png) center right no-repeat;
padding: 0px 14px;
}
#bodyContent h1 {
border-bottom: thin dotted
}
/* thumbnails */
div.thumb {
margin-bottom: .5em;
border-style: transparent;
/*
border-color: white;
*/
width: auto;
}
div.thumbinner {
border: 1px solid #ccc;
/*
padding: 3px !important;
*/
background-color: #f9f9f9;
font-size: 94%;
text-align: center;
overflow: hidden;
}
html .thumbimage {
border: 1px solid #f9f9f9;
border-width: 0.5em 1.5em 0.5em 0.5em;
}
html .thumbcaption {
border: none;
text-align: left;
line-height: 1.4em;
padding: 3px !important;
font-size: 94%;
}
div.magnify {
float: right;
border: none !important;
background: none !important;
}
div.magnify a, div.magnify img {
display: block;
border: none !important;
background: none !important;
}
div.tright {
clear: right;
float: right;
border-width: .5em 0 .8em 1.4em;
}
div.tleft {
float: left;
clear: left;
margin-right: .5em;
border-width: .5em 1.4em .8em 0;
}
img.thumbborder {
border: 1px solid #dddddd;
}
.hiddenStructure {
display: none;
}
/*
Icebrrg stuff
*/
div.mw-geshi {
overflow: auto;
padding: 1em;
border: 1px dashed #2f6fab;
color: black;
background-color: #f9f9f9;
line-height: 1.1em;
/* "overflow: auto" prevent ugly horizontal page expansion... */
/* from http://www.gossamer-threads.com/lists/wiki/mediawiki/124345 */
}
.text-heading {
font-family: "Lucida Console";
/*
font-size: 24px;
*/
font-style: normal;
font-weight: bold;
text-transform: none;
letter-spacing: 4px;
text-indent: 10px;
vertical-align: middle;
color: #0066CC;
}
.text {
font-family: Verdana, Arial, Helvetica, sans-serif;
/*
font-size: 11px;
padding-left: 10px;
padding-right: 10px;
color: #666666;
*/
text-align: justify;
}
#footer {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
color: #666666;
text-align: center;
/*
border: 1px none #6699CC;
background-color: #0099CC;
*/
}
#footer a {
font-size: 10px;
color: #14388B;
}
.table2 {
border: 1px dotted #000066;
}
.company {
font-family: "Lucida Console";
/* font-size: 30px;
*/
color: #0066CC;
text-align: left;
vertical-align: middle;
letter-spacing: 8px;
font-weight: normal;
}
.punchline {
font-family: Arial, Helvetica, sans-serif;
/*font-size: 11px;
*/
color: #003366;
letter-spacing: 4px;
}
.menu {
font-family: Verdana, Arial, Helvetica, sans-serif;
/*
font-size: 11px;
*/
color: #0066CC;
text-align: center;
vertical-align: middle;
border: 1px solid #000000;
background-color: #C7D3F1;
}
.submenu {
font-family: Verdana, Arial, Helvetica, sans-serif;
/*font-size: 11px;
*/
font-weight: lighter;
color: #0066CC;
text-align: center;
vertical-align: middle;
background-color: #E1E8F8;
border-top: 1px solid #000000;
border-right: 1px none #000000;
border-bottom: 1px solid #000000;
border-left: 1px none #000000;
}
.headtable {
border: 1px dotted #0066CC;
}
.header {
background-image: url(../images/bk.jpg);
border: 1px dotted #003399;
}
a.new, a.new:visited {
color: #14388B;
}
/*
#p-cactions .new a {
color: #14388B;
}
#p-personal a.new {
color: #14388B;
}
*/
#content a.new {
color: #0BD;
}
a {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #14388B;
text-decoration: none;
font-weight: bold;
}
a:visited {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
color: #14388B;
text-decoration: none;
font-weight: bold;
}
a:hover {
font-family: Verdana, Arial, Helvetica, sans-serif;
color: #333399;
text-decoration: none;
font-weight: bold;
}
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
color: #a00;
text-decoration: none;
background-color: #ddd;
/* make sure 100% width really means 100% width */
margin:0;
padding:0;
}
.blackbg {
position: absolute;
top: 0px;
width: 100%;
background-color: #000;
}
/* Style for header background image */
.bannerimg {
position: relative;
width: 100%;/* for ie6 */
}
.bannerimg img {
position: absolute;
}
/* Style for header banner (charlesmartinreid.com) */
.bannerimg h2 {
position: absolute;
left: 0;
width: 100%;
}
.bannerimg h2 span {
color: white;
font-face: bold;
font-size: 38px;
font-family:"Helvetica","Sans-Serif","Georgia";
letter-spacing:-1px;
background: rgb(0,0,0);/* fallback color */
background: rgba(0,0,0,0.7);
}
/* Navigation bar (top right) */
.topright{
display:block;
/* arrangement/spacing */
position: absolute;
top:0;
right:0;
width: auto;
/*give it some color */
color: white;
font-face: bold;
font-size: 16px;
font-family:"Helvetica","Sans-Serif","Georgia";
background: rgb(0,0,0);/* fallback color */
background: rgba(0,0,0,0.7);
}
.topright table, td, tr {
margin: 10px;
}
.topright a {
color:white;
text-decoration: none;
}
/* Mediawiki navigation tabs */
.mw_navtabs {
display: block;
position: absolute;
/* spacing */
left: 100px;
vertical-align: middle;
color: white;
font-size: 16px;
background: rgb(0,0,0);/* fallback color */
background: rgba(0,0,0,0.7);
}
/* Mediawiki content */
.mw_content {
display: block;
/*position: absolute; */
position: relative;
/* spacing */
width: 100%;
}
.mw_content table#mainbody {
width: 100%;
height: 100%;
border-collapse: collapse;
table-layout:fixed;
border: 0px invisible;
}
.mw_content table#mainbody td#margin {
width: 8%;
color: #a00;
background-color: #ddd;
text-decoration: none;
font-family: "Verdana","Arial","Helvetica","Sans-Serif";
}
.mw_content table#mainbody td#center {
color: #a00;
background-color: #ddd;
text-decoration: none;
font-family: "Verdana","Arial","Helvetica","Sans-Serif";
}

1231
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main_dark.css

File diff suppressed because it is too large Load Diff

1165
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/main_old.css

File diff suppressed because it is too large Load Diff

24
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/navbar.php.j2

@ -0,0 +1,24 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/" class="navbar-brand">{{ pod_charlesreid1_server_name }}</a>
</div>
<div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li>
<a href="https://{{ pod_charlesreid1_server_name }}/wiki">Wiki</a>
</li>
</ul>
</div>
</div>
</div>
</nav>

36
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/oldnavbar.html

@ -0,0 +1,36 @@
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<!--
http://www.w3schools.com/bootstrap/bootstrap_case_navigation.asp
-->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/" class="navbar-brand">charlesreid1.com</a>
</div>
<div>
<div class="collapse navbar-collapse" id="myNavbar">
<ul class="nav navbar-nav">
<li>
<a href="{{ SITEURL }}/projects">Projects</a>
</li>
<li>
<a href="{{ SITEURL }}/about">About Me</a>
</li>
<li>
<a href="{{ SITEURL }}/consulting">Consulting</a>
</li>
<li>
<a href="{{ SITEURL }}/writing">Writing</a>
</li>
</ul>
</div>
</div>
</div>
</nav>

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/required.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 B

33
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/skin.json

@ -0,0 +1,33 @@
{
"name": "Bootstrap2",
"author": [
"Charles Reid",
"..."
],
"url": "",
"descriptionmsg": "Bootstrap2-desc",
"namemsg": "skinname-Bootstrap2",
"license-name": "GPL-2.0+",
"type": "skin",
"ValidSkinNames": {
"Bootstrap2": "Bootstrap2"
},
"MessagesDirs": {
"Bootstrap2": [
"i18n"
]
},
"ResourceModules": {
"skins.Bootstrap2.styles": {
"styles": {
"main.css": {
"media": "screen"
}
}
}
},
"ResourceFileModulePaths": {
"localBasePath": "",
"remoteSkinPath": "Bootstrap2"
}
}

7301
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/slate.css

File diff suppressed because it is too large Load Diff

120
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/stock_skin.json

@ -0,0 +1,120 @@
{
"link" : "https://raw.githubusercontent.com/jneug/Linus/master/skin.json",
"name": "Linus",
"author": [
"Jonas Neugebauer"
],
"url": "https://github.com/jneug/Linus",
"descriptionmsg": "linus-desc",
"namemsg": "skinname-linus",
"license-name": "GPL-2.0+",
"version": "2.0.0",
"type": "skin",
"ConfigRegistry": {
"vector": "GlobalVarConfig::newInstance"
},
"ValidSkinNames": {
"linus": "Linus"
},
"MessagesDirs": {
"Linus": [
"i18n"
]
},
"AutoloadClasses": {
"SkinLinus": "SkinLinus.php",
"LinusParser": "LinusParser.php",
"LinusTemplate": "LinusTemplate.php",
"LinusHooks": "LinusHooks.php",
"ResponsiveCategory": "LinusSMW.php"
},
"ExtensionMessagesFiles": {
"LinusMagic": "LinusMagic.php"
},
"callback": "LinusHooks::onExtensionLoad",
"ExtensionFunctions": [
"LinusHooks::setupSMWExtensions"
],
"Hooks": {
"ParserFirstCallInit": [
"LinusHooks::NavSetup",
"LinusHooks::ButtonsSetup"
],
"ParserBeforeTidy": [
"LinusHooks::parseMagicWords"
],
"OutputPageParserOutput": [
"LinusHooks::countSections"
],
"EditPageBeforeEditButtons": [
"LinusHooks::styleEditButtons"
],
"ArticleFromTitle": [
"LinusHooks::onArticleFromTitle"
]
},
"ResourceModules": {
"skins.linus.styles": {
"position": "top",
"styles": {
"css/bootstrap.min.css": {
"media": "all"
},
"less/linus.less": {
"media": "all"
},
"less/custom.less": {
"media": "all"
}
}
},
"skins.linus.scripts": {
"position": "top",
"scripts": [
"js/bootstrap.min.js",
"js/linus.js",
"js/custom.js"
]
},
"skins.linus.fontawesome": {
"position": "top",
"styles": {
"css/font-awesome.min.css": {
"media": "all"
}
}
}
},
"ResourceFileModulePaths": {
"localBasePath": "",
"remoteSkinPath": "Linus"
},
"ResourceModuleSkinStyles": {
"Linus": {
}
},
"config": {
"LinusUseSidebar": false,
"LinusTOCInSidebar": false,
"LinusEnableSmoothScroll": true,
"LinusNavbarInverted": false,
"LinusNavbarFixed": true,
"Sitenameshort": null,
"LinusUseFontAwesome": false,
"LinusShowFooterLinks": false,
"LinusUseFooterIcons": true,
"LinusHideActionsForAnon": true,
"LinusEnableNavTag": true,
"LinusEnableButtonsTag": true,
"LinusResponsiveCategories": true,
"LinusTitlebarPage": "MediaWiki:Linus/Titlebar",
"LinusFooterPage": "MediaWiki:Linus/Footer",
"LinusSidebarPage": "MediaWiki:Linus/Sidebar",
"LinusCopyrightPage": "MediaWiki:Linus/Copyright",
"LinusHideHeader": [
"Mainpage",
"Hauptseite"
]
},
"manifest_version": 1
}

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/user.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/wiki-indexed.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
d-mediawiki/charlesreid1-config/mediawiki/skins/Bootstrap2/wiki.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

3
d-mediawiki/php/php.ini

@ -0,0 +1,3 @@
post_max_size = 128M
memory_limit = 128M
upload_max_filesize = 100M

1
d-mysql

@ -1 +0,0 @@
Subproject commit 3f8949139e8827bbc61d3cf6ecd4001a6bd6edd2

11
d-mysql/Dockerfile

@ -0,0 +1,11 @@
FROM mysql:5.7
MAINTAINER charles@charlesreid1.com
# make mysql data a volume
VOLUME ["/var/lib/mysql"]
# put password in a password file
RUN printf "[client]\nuser=root\npassword=$MYSQL_ROOT_PASSWORD" > /root/.mysql.rootpw.cnf
RUN chmod 0600 /root/.mysql.rootpw.cnf
RUN chown mysql:mysql /var/lib/mysql

11
d-mysql/README.md

@ -0,0 +1,11 @@
# d-mysql
This is the MySQL docker container used to run MySQL on charlesreid1.com.
See [pod-charlesreid1](https://git.charlesreid1.com/docker/pod-charlesreid1).
## Dockerfile
The Dockerfile is necessary to copy the MySQL root password into a file inside
the container. This file is used in automated scripts when we would have problems
getting the password via environment variables.

4
d-mysql/erase_mysql_volume.sh

@ -0,0 +1,4 @@
#!/bin/bash
docker container prune -f
docker volume rm stormy_mysql_data

4
d-mysql/make_mysql_volume.sh

@ -0,0 +1,4 @@
#!/bin/bash
docker container prune -f
docker volume create stormy_mysql_data

1
d-nginx-charlesreid1

@ -1 +0,0 @@
Subproject commit ddd33967f5366c6c4be45c6892fb053760e755aa

6
d-nginx-charlesreid1/conf.d/_.conf

@ -0,0 +1,6 @@
# https://serverfault.com/a/525011
server {
server_name _;
listen *:80 default_server deferred;
return 444;
}

1
d-nginx-charlesreid1/conf.d/csp.conf

@ -0,0 +1 @@
add_header Content-Security-Policy-Report-Only "default-src 'self' 'unsafe-inline' 'unsafe-eval';";

1
d-nginx-charlesreid1/conf.d/giteacsp.conf

@ -0,0 +1 @@
add_header Content-Security-Policy-Report-Only "default-src 'self' 'unsafe-inline' 'unsafe-eval';";

29
d-nginx-charlesreid1/conf.d/http.DOMAIN.conf.j2

@ -0,0 +1,29 @@
####################
#
# {{ pod_charlesreid1_server_name }}
# http/{{ port_default }}
#
# basically, just redirects to https
#
####################
server {
listen 80;
listen [::]:80;
server_name {{ pod_charlesreid1_server_name }};
return 301 https://{{ pod_charlesreid1_server_name }}$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name www.{{ pod_charlesreid1_server_name }};
return 301 https://www.{{ pod_charlesreid1_server_name }}$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name git.{{ pod_charlesreid1_server_name }};
return 301 https://git.{{ pod_charlesreid1_server_name }}$request_uri;
}

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

Loading…
Cancel
Save