From ad6f55a4b931a44f70cdddd9e8588fd2ecb38758 Mon Sep 17 00:00:00 2001 From: Mark Herman Date: Wed, 27 Feb 2019 15:35:11 -0500 Subject: [PATCH] Added newer version of pod_doc_tools -- it still needs modifications to run on a different machine --- pod_doc_tools/HTMLDocs.pm | 401 +++++++++++ pod_doc_tools/pod2htmd.tmp | 798 ++++++++++++++++++++++ pod_doc_tools/pod2htmi.tmp | 2 + pod_doc_tools/pod_doc_instructions.md | 44 ++ pod_doc_tools/ww-make-docs | 401 +++++++++++ pod_doc_tools/ww-make-docs-from-github.pl | 261 +++++++ pod_doc_tools/ww-make-docs-from-svn | 259 +++++++ pod_doc_tools/ww-make-docs.pl | 407 +++++++++++ pod_doc_tools/ww-make-docs.pm | 401 +++++++++++ 9 files changed, 2974 insertions(+) create mode 100644 pod_doc_tools/HTMLDocs.pm create mode 100644 pod_doc_tools/pod2htmd.tmp create mode 100644 pod_doc_tools/pod2htmi.tmp create mode 100644 pod_doc_tools/pod_doc_instructions.md create mode 100755 pod_doc_tools/ww-make-docs create mode 100755 pod_doc_tools/ww-make-docs-from-github.pl create mode 100644 pod_doc_tools/ww-make-docs-from-svn create mode 100755 pod_doc_tools/ww-make-docs.pl create mode 100644 pod_doc_tools/ww-make-docs.pm diff --git a/pod_doc_tools/HTMLDocs.pm b/pod_doc_tools/HTMLDocs.pm new file mode 100644 index 0000000..65a1c99 --- /dev/null +++ b/pod_doc_tools/HTMLDocs.pm @@ -0,0 +1,401 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +package WeBWorK::Utils::HTMLDocs; + +use File::Find; +use File::Temp qw(tempfile); +use IO::File; +use Pod::Find qw(pod_find simplify_name contains_pod); +use Pod::Html; +#use Pod::PP; +use POSIX qw(strftime); +use Data::Dumper; + +our @sections = ( + '/' => "(root)", + bin => "Scripts", + conf => "Config Files", + doc => "Documentation", + lib => "Libraries", + macros => "Macros", + clients => "Clients", +); + +sub new { + my ($invocant, %o) = @_; + my $class = ref $invocant || $invocant; + + my @section_list = exists $o{sections} ? @{$o{sections}} : @sections; + my $section_hash = {@section_list}; + my $section_order = [ map { $section_list[2*$_] } 0..$#section_list/2 ]; + delete $o{sections}; + + my $self = { + %o, + idx => {}, + section_hash => $section_hash, + section_order => $section_order, + }; + return bless $self, $class; +} + +sub convert_pods { + my $self = shift; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $subdirs = do { + my $dh; + opendir $dh, $source_root; + join ':', + grep { not (/^\./ or /^(CVS|.svn)$/) and -d "$source_root/$_" } + readdir $dh; + }; + $self->{subdirs} = $subdirs; + + find({wanted => $self->gen_pod_wanted, no_chdir => 1}, $source_root); + $self->write_index("$dest_root/index.html"); +} + +sub gen_pod_wanted { + my $self = shift; + return sub { + my $path = $File::Find::name; + my $dir = $File::Find::dir; + my ($name) = $path =~ m|^$dir(?:/(.*))?$|; + $name = '' unless defined $name; + + if ($name =~ /^\./) { + $File::Find::prune = 1; + return; + } + unless (-f $path or -d $path) { + $File::Find::prune = 1; + return; + } + if (-d _ and $name =~ /^(CVS|RCS|.svn)$/) { + $File::Find::prune = 1; + return; + } + + return if -d _; + return unless contains_pod($path); + $self->process_pod($path); + }; +} + +sub process_pod { + my ($self, $pod_path) = @_; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $dest_url = $self->{dest_url}; + my $subdirs = $self->{subdirs}; + + my $pod_name; + + my ($subdir, $filename) = $pod_path =~ m|^$source_root/(?:(.*)/)?(.*)$|; + my ($subdir_first, $subdir_rest); + print "subdir_first: $subdir_first\n"; + print "subdir_rest: $subdir_rest\n"; + if (defined $subdir) { + if ($subdir =~ m|/|) { + ($subdir_first, $subdir_rest) = $subdir =~ m|^([^/]*)/(.*)|; + } else { + $subdir_first = $subdir; + } + } + $pod_name = (defined $subdir_rest ? "$subdir_rest/" : "") . $filename; + if ($filename =~ /\.(plx?|pg)$/ or $filename !~ /\./) { + $filename .= '.html'; + } elsif ($filename =~ /\.pod$/) { + $pod_name =~ s/\.pod$//; + $filename =~ s/\.pod$/.html/; + } elsif ($filename =~ /\.pm$/) { + $pod_name =~ s/\.pm$//; + $pod_name =~ s|/+|::|g; + $filename =~ s/\.pm$/.html/; + } + my $html_dir = defined $subdir ? "$dest_root/$subdir" : $dest_root; + my $html_path = "$html_dir/$filename"; + my $html_rel_path = defined $subdir ? "$subdir/$filename" : $filename; + + # deal with potential + if (not defined $subdir) { + my $source_root_last = $source_root; + $source_root_last =~ s|^.*/||; + if ($source_root_last =~ /^(.+)_(.+?)(?:--(.*))?$/) { + my ($module, $version, $extra) = ($1, $2, $3); + $subdir = $extra; # the subdir is appended to the dir name + } else { + $subdir = '/'; # fake subdir for "things in the root" + } + } + $self->update_index($subdir, $html_rel_path, $pod_name); + #my $podpp_path = do_podpp($pod_path); + do_mkdir($html_dir); + do_pod2html( + subdirs => $subdirs, + source_root => $source_root, + dest_root => $dest_root, + dest_url => $dest_url, + pod_path => $pod_path, + html_path => $html_path, + ); + #unlink $podpp_path; + # postprocess HTML to add SSI tags for header and footer + $self->postprocess_pod($html_path); +} + +sub postprocess_pod { + my ($self, $file) = @_; + my $fh = new IO::File($file, 'r+') + or die "Failed to open file '$file' for reading/writing: $!\n"; + my $title; + my $text = ""; + my $in_body = 0; + while (my $line = <$fh>) { + if ($in_body) { + if ($line =~ /^\s*<\/body>\s*$/) { + $in_body = 0; + next; + } + if ($line =~ /^\s*
\s*$/) { + next; + } + $text .= $line; + } else { + if ($line =~ /^\s*\s*$/) { + $in_body = 1; + next; + } + if ($line =~ /\s*(.*)<\/title>.*$/) { + $title = $1; + } + elsif ($file =~ /\/(w+)\.html$/) { + $title = $1; + } + } + } + seek $fh, 0, 0; + truncate $fh, 0; + #print $fh "<!--#set var=\"title\" value=\"$title\" -->", "\n" if defined $title; + write_header($fh,$title); + #print $fh '<!--#include virtual="/doc/cvs/header.html" -->' . "\n"; + print $fh $text; + #print $fh '<!--#include virtual="/doc/cvs/footer.html" -->' . "\n"; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub update_index { + my ($self, $subdir, $html_rel_path, $pod_name) = @_; + $subdir =~ s|/.*$||; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + if (exists $sections->{$subdir}) { + push @{$idx->{$subdir}}, [ $html_rel_path, $pod_name ]; + } else { + warn "no section for subdir '$subdir'\n"; + } +} + +sub write_index { + my ($self, $out_path) = @_; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + my $section_order = $self->{section_order}; + my $source_root = $self->{source_root}; + $source_root =~ s|^.*/||; + my $dest_url = $self->{dest_url}; + + #print Dumper($idx); + + #my $header = "<html><head><title>Index $source_root\n"; + #my $content_start = "

Index for $source_root

\n"; + my $date = strftime "%a %b %e %H:%M:%S %Z %Y", localtime; + my $content_end = "

Generated $date

\n"; + #my $footer = "\n"; + #my $content_end = ""; + #my $footer = '' . "\n"; + + my $fh = new IO::File($out_path, 'w') or die "Failed to open index '$out_path' for writing: $!\n"; + write_header($fh,$title); + #print $fh $header, $content_start, $content, $content_end, $footer; + print $fh $content_start, $content, $content_end; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub do_podpp { + my $in_path = shift; + my $pp = make Pod::PP(-incpath=>[],-symbols=>{}); + #my ($out_fh, $out_path) = tempfile('ww-make-docs-podpp.XXXXXX'); + #local *STDOUT = $out_fh; + my $out_path = "$in_path.podpp"; + local *STDOUT; + open STDOUT, '>', $out_path or die "can't redirect STDOUT to $out_path: $!"; + $pp->parse_from_file($in_path); + return $out_path; +} + +sub do_mkdir { + my $dir = shift; + system '/bin/mkdir', '-p', $dir; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "/bin/mkdir -p $dir failed (exit=$exit signal=$signal core=$core)\n"; + } +} + +sub do_pod2html { + my %o = @_; + my @args = ( + defined $o{subdirs} && length $o{subdirs} ? "--podpath=$o{subdirs}" : (), + "--podroot=$o{source_root}", + "--htmldir=$o{dest_root}", + defined $o{dest_url} && length $o{dest_url} ? "--htmlroot=$o{dest_url}" : (), + "--infile=$o{pod_path}", + "--outfile=$o{html_path}", + '--recurse', + '--noheader', + ); + #print join(" ", 'pod2html', @args), "\n"; + pod2html(@args); +} + +sub write_header { + my $fh = shift; + my $title = shift; + print $fh qq{ + + + + + + + $title + + + + + + + + + + +
+
+
+ +

$title

+
+

From WeBWorK

+
+
Jump to: navigation
+ + + } +} + +sub write_footer { + my $fh = shift; + print $fh <<'EOF'; + + +
+
+
+
+
+ + +
+
Navigation
+ +
+EOF + #for my $module (sort keys %index) { + #print $fh "
\n"; + #print $fh "
$module
\n"; + #print $fh "
\n"; + #print $fh "
    \n"; + #for my $version (reverse sort keys %{$index{$module}}) { + #if (ref $index{$module}{$version}) { + #print $fh "
  • $version
      \n"; + #for my $extra (sort keys %{$index{$module}{$version}}) { + #print $fh "
    • $extra
    • \n"; + #} + #print $fh "
  • \n"; + #} else { + #print $fh "
  • $version
  • \n"; + #} + #} + #print $fh "
\n"; + #print $fh "
\n"; + #} + print $fh <<'EOF'; +
+
+ +
+ + + +EOF +} + +package main; + +unless (caller) { + unless (@ARGV >= 2) { + print "usage: $0 source_root dest_root [ dest_url ]\n"; + exit 1; + } + my $htmldocs = new WeBWorK::Utils::HTMLDocs( + source_root => $ARGV[0], + dest_root => $ARGV[1], + dest_url => $ARGV[2], + ); + $htmldocs->convert_pods; +} + +1; + diff --git a/pod_doc_tools/pod2htmd.tmp b/pod_doc_tools/pod2htmd.tmp new file mode 100644 index 0000000..0844977 --- /dev/null +++ b/pod_doc_tools/pod2htmd.tmp @@ -0,0 +1,798 @@ +bin:logs:DATA:conf:tmp:courses.dist:lib:t:doc:clients:htdocs +/home/mgage/webwork_masters/ww_source_files/webwork2 +mapConfigRelative htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigRelative.pod: +mapConfigStarAdapterBuilt htdocs/js/vendor/requirejs/tests/mapConfig/built/mapConfigStarAdapterBuilt.pod: +prob4 courses.dist/modelCourse/templates/set0/prob4: +Config lib/WeBWorK/ContentGenerator/Instructor/Config.pm: +water_fountain_alt htdocs/applets/Image_and_Cursor_All/water_fountain_alt.pod: +email courses.dist/modelCourse/templates/email: +errorContinueLocal htdocs/js/vendor/requirejs/tests/error/errorContinueLocal.pod: +unsigned htdocs/applets/geogebra_stable/unsigned: +scripts htdocs/js/vendor/requirejs/tests/jquery/scripts:htdocs/js/vendor/requirejs/tests/packages/bar/0.4/scripts:htdocs/js/vendor/requirejs/tests/packages/pkgs/beta/0.2/scripts: +NonVersioned lib/WeBWorK/DB/Schema/NewSQL/NonVersioned.pm: +docs doc/parser/docs:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs:htdocs/js/vendor/requirejs/docs:htdocs/js/vendor/underscore/docs:htdocs/js/vendor/backbone/docs:htdocs/js/legacy/backbone/docs:htdocs/js/apps/LibraryBrowser/docs: +InstructorProblemSetList htdocs/helpFiles/InstructorProblemSetList.pod: +remove_stale_images bin/remove_stale_images.pod: +sql_single lib/WeBWorK/Utils/CourseManagement/sql_single.pm: +snap-to htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/snap-to.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/snap-to.pod: +teacher_Problem.js htdocs/js/legacy/webwork_js_master/out/files/teacher_Problem.js.pod: +WeBWorK lib/WeBWorK:lib/WeBWorK.pm:lib/Apache/WeBWorK.pm:htdocs/js/legacy/webwork_js_master/out/modules/WeBWorK.pod: +Localize lib/WeBWorK/Localize.pm:lib/WeBWorK/Localize: +relativeModuleId htdocs/js/vendor/requirejs/tests/paths/relativeModuleId.pod: +ComboBox lib/WeBWorK/HTML/ComboBox.pm: +scriptload htdocs/js/vendor/requirejs/tests/browsertests/scriptload: +Problems htdocs/helpFiles/Problems.pod: +AttemptsTable lib/WeBWorK/Utils/AttemptsTable.pm: +node htdocs/js/vendor/requirejs/docs/node.pod: +pg htdocs/codemirror2/mode/pg: +cursor-style htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/cursor-style.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/cursor-style.pod: +EmailCellValidator htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/EmailCellValidator.pod: +display-grid htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/selectable/display-grid.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/display-grid.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/selectable/display-grid.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/display-grid.pod: +LocationAddresses lib/WeBWorK/DB/Record/LocationAddresses.pm: +SetMaker3 lib/WeBWorK/ContentGenerator/Instructor/SetMaker3.pm: +pathArrayFail htdocs/js/vendor/requirejs/tests/pathArray/pathArrayFail.pod: +nestedRelativeRequire htdocs/js/vendor/requirejs/tests/nestedRelativeRequire:htdocs/js/vendor/requirejs/tests/nestedRelativeRequire/nestedRelativeRequire.pod: +unsupported-themes htdocs/unsupported-themes: +TextCellEditor htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/TextCellEditor.pod: +moduleConfig htdocs/js/vendor/requirejs/tests/moduleConfig:htdocs/js/vendor/requirejs/tests/moduleConfig/moduleConfig.pod: +puff-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/puff-effect.pod: +ProblemSetDetail2 lib/WeBWorK/ContentGenerator/Instructor/ProblemSetDetail2.pm:htdocs/js/apps/ProblemSetDetail2: +datasource htdocs/js/vendor/editablegrid-2.0.1/examples/full/datasource: +commonjs htdocs/js/vendor/requirejs/tests/commonjs:htdocs/js/vendor/requirejs/docs/commonjs.pod: +InstructorIndex htdocs/helpFiles/InstructorIndex.pod: +helpFiles htdocs/helpFiles: +a htdocs/js/vendor/requirejs/tests/relative/outsideBaseUrl/a:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/nested/a: +img htdocs/js/vendor/bootstrap/img:htdocs/js/legacy/webwork_js_master/out/assets/img:htdocs/themes/math3/bootstrap/img: +UserSetLocations lib/WeBWorK/DB/Record/UserSetLocations.pm: +anonSimple htdocs/js/vendor/requirejs/tests/anon/anonSimple.pod: +Entering-Fractions htdocs/helpFiles/Entering-Fractions.pod: +Login lib/WeBWorK/ContentGenerator/Login.pm: +modal-confirmation htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/modal-confirmation.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/modal-confirmation.pod: +Constants lib/WeBWorK/Constants.pm: +teacher htdocs/js/legacy/webwork_js_master/teacher:htdocs/js/legacy/webwork/teacher:htdocs/js/legacy/webwork_js_develop/teacher: +sample htdocs/js/vendor/requirejs/tests/text/resources/sample.pod: +PermissionLevel lib/WeBWorK/DB/Record/PermissionLevel.pm: +File lib/WeBWorK/File: +pluginMap htdocs/js/vendor/requirejs/tests/plugins/pluginMap:htdocs/js/vendor/requirejs/tests/plugins/pluginMap/pluginMap.pod: +CHANGES htdocs/js/legacy/webwork_js_master/out/assets/vendor/prettify/CHANGES.pod: +pathArray htdocs/js/vendor/requirejs/tests/pathArray:htdocs/js/vendor/requirejs/tests/pathArray/pathArray.pod: +trontastic htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/trontastic: +determinism htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/determinism: +InstructorPGProblemEditor htdocs/helpFiles/InstructorPGProblemEditor.pod: +LaTeXMathML htdocs/LaTeXMathML: +jquery htdocs/js/vendor/jquery:htdocs/js/vendor/requirejs/tests/jquery:htdocs/js/vendor/requirejs/tests/jquery/jquery.pod:htdocs/js/vendor/requirejs/docs/jquery.pod:htdocs/js/vendor/editablegrid-2.0.1/extensions/jquery: +MathView htdocs/js/apps/MathView: +jsdoc htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc: +runner htdocs/js/vendor/requirejs/tests/doh/runner.pod: +Entering-Vectors htdocs/helpFiles/Entering-Vectors.pod: +nameOnly htdocs/js/vendor/requirejs/tests/plugins/nameOnly.pod: +jszip htdocs/js/vendor/jszip: +achievements courses.dist/modelCourse/html/achievements:courses.dist/modelCourse/templates/achievements: +MathTranslators lib/WebworkWebservice/MathTranslators.pm: +errorContinue htdocs/js/vendor/requirejs/tests/error/errorContinue.pod: +AchievementEditor lib/WeBWorK/ContentGenerator/Instructor/AchievementEditor.pm:htdocs/js/apps/AchievementEditor: +Basic_TheLastOption lib/WeBWorK/Authen/Basic_TheLastOption.pm: +definedSpecified htdocs/js/vendor/requirejs/tests/definedSpecified:htdocs/js/vendor/requirejs/tests/definedSpecified/definedSpecified.pod: +NumberCellEditor htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/NumberCellEditor.pod: +drop-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/drop-effect.pod: +HTML lib/WeBWorK/HTML: +Markdown.pl htdocs/js/vendor/requirejs/dist/Markdown.pl.pod: +flags htdocs/js/vendor/editablegrid-2.0.1/examples/full/images/flags: +requirements htdocs/js/vendor/requirejs/docs/requirements.pod: +jqueryDynamic2 htdocs/js/vendor/requirejs/tests/jquery/jqueryDynamic2.pod: +component htdocs/js/vendor/requirejs/tests/plugins/pluginLast/component.pod: +ProblemSetDetail lib/WeBWorK/ContentGenerator/Instructor/ProblemSetDetail.pm: +jquery-ui-themes-1.10.3 htdocs/css/vendor/jquery-ui-themes-1.10.3: +instructor_links htdocs/helpFiles/instructor_links.pod: +ASCIIMathML htdocs/ASCIIMathML: +Cookie lib/WeBWorK/Cookie.pm: +blind-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/blind-effect.pod: +set0 courses.dist/modelCourse/templates/set0: +first.js htdocs/js/vendor/requirejs/tests/paths/first.js: +NAMESPACE htdocs/js/vendor/requirejs/tests/NAMESPACE.pod: +mode htdocs/codemirror2/mode: +InstructorFileManager htdocs/helpFiles/InstructorFileManager.pod: +library-browser htdocs/html-templates/library-browser.pod: +Set lib/WeBWorK/DB/Record/Set.pm: +formats htdocs/dragmathedit/dragmath/formats: +setfilepermissions bin/setfilepermissions.pod: +legacy htdocs/js/legacy: +Logout lib/WeBWorK/ContentGenerator/Logout.pm: +devel doc/devel: +FakeRequest lib/WeBWorK/FakeRequest.pm: +SetMaker2 lib/WeBWorK/ContentGenerator/Instructor/SetMaker2.pm: +hardcopyThemes conf/snippets/hardcopyThemes: +base htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/base:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/base: +SetMaker lib/WeBWorK/ContentGenerator/Instructor/SetMaker.pm:htdocs/js/apps/SetMaker: +lang htdocs/dragmathedit/dragmath/lang: +sortable htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/sortable.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/sortable.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/sortable.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/sortable.pod: +Xgraph htdocs/applets/Xgraph: +handle htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/handle.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/handle.pod: +snap-to-grid htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/snap-to-grid.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/snap-to-grid.pod: +Entering-Formulas htdocs/helpFiles/Entering-Formulas.pod: +water_fountain htdocs/applets/Image_and_Cursor_All/water_fountain.pod: +source htdocs/applets/source: +scroll htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/scroll.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/scroll.pod: +InfoBox lib/WeBWorK/HTML/InfoBox.pm: +errors htdocs/js/vendor/requirejs/docs/errors.pod: +scriptloadinteractive htdocs/js/vendor/requirejs/tests/browsertests/scriptloadinteractive: +WeBWorK.js htdocs/js/legacy/webwork_js_master/out/files/WeBWorK.js.pod: +PGProblemEditor3 lib/WeBWorK/ContentGenerator/Instructor/PGProblemEditor3.pm:htdocs/js/apps/PGProblemEditor3: +local htdocs/js/vendor/requirejs/tests/text/resources/local.pod: +paths htdocs/js/vendor/requirejs/tests/paths:htdocs/js/vendor/requirejs/tests/paths/paths.pod: +requirejs htdocs/js/vendor/requirejs: +error htdocs/js/vendor/requirejs/tests/error: +EditableGrid htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/EditableGrid.pod: +Levels htdocs/helpFiles/Levels.pod: +Stats_old lib/WeBWorK/ContentGenerator/Instructor/Stats_old.pm: +python htdocs/codemirror2/mode/python: +pulsate-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/pulsate-effect.pod: +setOrientation courses.dist/modelCourse/templates/setOrientation: +CheckboxCellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/CheckboxCellRenderer.pod: +RenderProblem lib/WebworkWebservice/RenderProblem.pm: +1.0 htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0: +empty-lists htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/empty-lists.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/empty-lists.pod: +subwidget2 htdocs/js/vendor/requirejs/tests/text/subwidget2.pod: +delayedDefine htdocs/js/vendor/requirejs/tests/delayedDefine:htdocs/js/vendor/requirejs/tests/delayedDefine/delayedDefine.pod: +universal htdocs/js/vendor/requirejs/tests/universal:htdocs/js/vendor/requirejs/tests/universal/universal.pod: +fromText htdocs/js/vendor/requirejs/tests/plugins/fromText:htdocs/js/vendor/requirejs/tests/plugins/fromText/fromText.pod: +test htdocs/js/vendor/requirejs/tests/browsertests/appendbeforeload/test.pod:htdocs/js/vendor/underscore/test:htdocs/js/vendor/backbone/test:htdocs/js/vendor/backbone/test/test.pod:htdocs/js/legacy/backbone/test:htdocs/js/legacy/backbone/test/test.pod:htdocs/codemirror2/test: +PT-Sans htdocs/js/vendor/requirejs/dist/fonts/PT-Sans: +htmllinksexample courses.dist/modelCourse/templates/setMAAtutorial/htmllinksexample: +Entering-Exponents htdocs/helpFiles/Entering-Exponents.pod: +32x32 htdocs/applets/geogebra_stable/icons/hicolor/32x32: +pluginMapDynamic htdocs/js/vendor/requirejs/tests/plugins/pluginMap/dynamic/pluginMapDynamic.pod: +curve_template htdocs/applets/Image_and_Cursor_All/curve_template.pod: +helper htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/helper.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/helper.pod: +modal-form htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/modal-form.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/modal-form.pod: +undefEnforceShim htdocs/js/vendor/requirejs/tests/undef/undefEnforceShim.pod: +FormatRecords lib/WeBWorK/Utils/FormatRecords.pm: +shopping-cart htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/shopping-cart.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/shopping-cart.pod: +models htdocs/js/legacy/webwork/models:htdocs/js/legacy/webwork_js_develop/models: +UserList2 lib/WeBWorK/ContentGenerator/Instructor/UserList2.pm: +webwork htdocs/js/legacy/webwork:htdocs/js/legacy/webwork_js_master/out/classes/webwork.pod: +subwidget htdocs/js/vendor/requirejs/tests/text/subwidget.pod: +48x48 htdocs/applets/geogebra_stable/icons/hicolor/48x48: +textBuilt htdocs/js/vendor/requirejs/tests/text/textBuilt.pod: +tires htdocs/js/vendor/requirejs/tests/packages/optimizing/packages/tires: +OptionList lib/WeBWorK/HTML/OptionList.pm: +modules htdocs/js/vendor/jquery/modules:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules:htdocs/js/vendor/backbone/modules:htdocs/js/legacy/webwork_js_master/out/modules: +CourseAdmin lib/WeBWorK/ContentGenerator/CourseAdmin.pm: +mathview htdocs/images/mathview: +GlobalUserAchievement lib/WeBWorK/DB/Record/GlobalUserAchievement.pm: +TestWW clients/t/TestWW.pod: +foo htdocs/js/vendor/requirejs/tests/relative/foo:htdocs/js/vendor/requirejs/tests/packages/foo: +shim htdocs/js/vendor/requirejs/tests/shim: +connect-lists htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/connect-lists.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/connect-lists.pod: +StudentProgress lib/WeBWorK/ContentGenerator/Instructor/StudentProgress.pm: +defineErrorLocal htdocs/js/vendor/requirejs/tests/error/defineErrorLocal.pod: +DropdownList lib/WeBWorK/HTML/DropdownList.pm: +transfer-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/transfer-effect.pod: +prob05 courses.dist/modelCourse/templates/setOrientation/prob05: +Debug lib/WeBWorK/Debug.pm: +NumberCellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/NumberCellRenderer.pod: +urlfetch htdocs/js/vendor/requirejs/tests/urlfetch:htdocs/js/vendor/requirejs/tests/urlfetch/urlfetch.pod: +Entering-Equations htdocs/helpFiles/Entering-Equations.pod: +fromTextNoDefine htdocs/js/vendor/requirejs/tests/plugins/fromTextNoDefine:htdocs/js/vendor/requirejs/tests/plugins/fromTextNoDefine/fromTextNoDefine.pod: +ScoringDownload lib/WeBWorK/ContentGenerator/Instructor/ScoringDownload.pm: +plugin htdocs/js/vendor/requirejs/tests/plugins/pluginMapSameName/plugin: +Display htdocs/dragmathedit/dragmath/Display: +SortHeaderRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/SortHeaderRenderer.pod: +accepted-elements htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/accepted-elements.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/accepted-elements.pod: +InstructorUserList htdocs/helpFiles/InstructorUserList.pod: +test_two_images_localhost clients/t/test_two_images_localhost.pod: +using_examples htdocs/applets/xFunctions/using_examples.pod: +ListingDB lib/WeBWorK/Utils/ListingDB.pm: +vader htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/vader: +64x64 htdocs/applets/geogebra_stable/icons/hicolor/64x64: +Entering-Limits htdocs/helpFiles/Entering-Limits.pod: +Second_semester_calculus_topics clients/t/Second_semester_calculus_topics.pod: +wwdb_addgw bin/old_scripts/wwdb_addgw.pod: +Moodle lib/WeBWorK/Authen/Moodle.pm: +prob14-hint courses.dist/modelCourse/templates/setOrientation/prob14/prob14-hint.pod: +internals htdocs/codemirror2/internals.pod: +pg-find-tags bin/pg-find-tags.pod: +htmlmixed htdocs/codemirror2/mode/htmlmixed: +UserAchievement lib/WeBWorK/DB/Record/UserAchievement.pm: +draggable htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/draggable.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/draggable.pod: +vendor htdocs/js/vendor:htdocs/js/vendor/underscore/test/vendor:htdocs/js/vendor/backbone/test/vendor:htdocs/js/legacy/vendor:htdocs/js/legacy/webwork_js_master/out/assets/vendor:htdocs/js/legacy/backbone/test/vendor:htdocs/css/vendor: +absolute htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/absolute: +SetVersion lib/WeBWorK/DB/Record/SetVersion.pm: +outsideBaseUrl htdocs/js/vendor/requirejs/tests/relative/outsideBaseUrl:htdocs/js/vendor/requirejs/tests/relative/outsideBaseUrl/a/outsideBaseUrl.pod: +test-zepto htdocs/js/vendor/backbone/test/test-zepto.pod:htdocs/js/legacy/backbone/test/test-zepto.pod: +bar htdocs/js/vendor/requirejs/tests/relative/foo/bar:htdocs/js/vendor/requirejs/tests/packages/bar:htdocs/js/vendor/requirejs/tests/paths/relativeNormalize/bar: +images_fr htdocs/images/images_fr: +EmailCellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/EmailCellRenderer.pod: +less htdocs/js/vendor/datepicker/less: +configRequirejs htdocs/js/vendor/requirejs/tests/configRequirejs.pod: +LiveGraphics htdocs/js/apps/LiveGraphics: +Local_Usage_Data htdocs/helpFiles/Local_Usage_Data.pod: +Assigner lib/WeBWorK/ContentGenerator/Instructor/Assigner.pm: +teacher_Library.js htdocs/js/legacy/webwork_js_master/out/files/teacher_Library.js.pod: +Key lib/WebworkSOAP/Classes/Key.pm:lib/WeBWorK/DB/Record/Key.pm: +ProblemUtil lib/WeBWorK/ContentGenerator/ProblemUtil:lib/WeBWorK/ContentGenerator/ProblemUtil/ProblemUtil.pm: +LibraryActions lib/WebworkWebservice/LibraryActions.pm: +undef htdocs/js/vendor/requirejs/tests/undef:htdocs/js/vendor/requirejs/tests/undef/undef.pod: +shake-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/shake-effect.pod: +Permission lib/WebworkSOAP/Classes/Permission.pm: +pg-append-textbook-tags bin/pg-append-textbook-tags.pod: +math2 htdocs/unsupported-themes/math2: +SelectCellEditor htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/SelectCellEditor.pod: +Tags lib/WeBWorK/Utils/Tags.pm: +InstructorUsersAssignedToSet htdocs/helpFiles/InstructorUsersAssignedToSet.pod: +WebworkWebservice lib/WebworkWebservice:lib/WebworkWebservice.pm: +download htdocs/js/vendor/requirejs/docs/download.pod: +domReady htdocs/js/vendor/requirejs/tests/domReady:htdocs/js/vendor/requirejs/tests/domReady/domReady.pod: +AchievementItems lib/WeBWorK/AchievementItems.pm: +Grades lib/WeBWorK/Utils/Grades.pm:lib/WeBWorK/ContentGenerator/Grades.pm:htdocs/helpFiles/Grades.pod: +database.conf.dist conf/database.conf.dist.pod: +south-street htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/south-street: +WWSafe lib/WWSafe.pm: +dragmathedit htdocs/dragmathedit: +uploads DATA/uploads: +afghanistan_borders_alt htdocs/applets/Image_and_Cursor_All/afghanistan_borders_alt.pod: +mapConfig htdocs/js/vendor/requirejs/tests/mapConfig:htdocs/js/vendor/requirejs/tests/mapConfig/mapConfig.pod: +overcast htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/overcast: +Request lib/WeBWorK/Request.pm:lib/WeBWorK/RPC/Request.pm: +hicolor htdocs/applets/geogebra_stable/icons/hicolor: +Entering-Intervals htdocs/helpFiles/Entering-Intervals.pod: +black-tie htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/black-tie: +index htdocs/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/effect/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/selectable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/position/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/widget/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/selectable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/position/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/widget/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/progressbar/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/index.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/index.pod:htdocs/js/vendor/requirejs/index.pod:htdocs/js/vendor/requirejs/tests/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/vardefine/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/docwritenested/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/scriptload/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/onerror/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/scriptloadinteractiveattach/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/noload/index.pod:htdocs/js/vendor/requirejs/tests/browsertests/scriptloadinteractive/index.pod:htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/simple/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/attach/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/jsdata/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/minimal/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/json/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/mixed/index.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/full/index.pod:htdocs/js/vendor/underscore/index.pod:htdocs/js/vendor/underscore/test/index.pod:htdocs/js/vendor/backbone/index.pod:htdocs/js/vendor/backbone/examples/todos/index.pod:htdocs/js/legacy/webwork_js_master/out/index.pod:htdocs/js/legacy/webwork_js_master/out/assets/index.pod:htdocs/js/legacy/webwork_js_master/out/modules/index.pod:htdocs/js/legacy/webwork_js_master/out/files/index.pod:htdocs/js/legacy/webwork_js_master/out/classes/index.pod:htdocs/js/legacy/backbone/index.pod:htdocs/js/legacy/backbone/examples/todos/index.pod:htdocs/applets/index.pod:htdocs/applets/xFunctions/index.pod:htdocs/codemirror2/index.pod:htdocs/codemirror2/test/index.pod:htdocs/codemirror2/mode/xml/index.pod:htdocs/codemirror2/mode/javascript/index.pod:htdocs/codemirror2/mode/haskell/index.pod:htdocs/codemirror2/mode/diff/index.pod:htdocs/codemirror2/mode/pg/index.pod:htdocs/codemirror2/mode/rst/index.pod:htdocs/codemirror2/mode/python/index.pod:htdocs/codemirror2/mode/stex/index.pod:htdocs/codemirror2/mode/clike/index.pod:htdocs/codemirror2/mode/smalltalk/index.pod:htdocs/codemirror2/mode/css/index.pod:htdocs/codemirror2/mode/php/index.pod:htdocs/codemirror2/mode/htmlmixed/index.pod:htdocs/codemirror2/mode/math/index.pod: +dojox htdocs/js/vendor/requirejs/tests/packages/dojox:htdocs/js/vendor/requirejs/tests/packages/pkgs/dojox: +Syntax htdocs/helpFiles/Syntax.pod: +widget htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/widget:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/widget:htdocs/js/vendor/requirejs/tests/text/widget.pod: +Feedback lib/WeBWorK/ContentGenerator/Feedback.pm: +activeline htdocs/codemirror2/demo/activeline.pod: +Apache lib/Apache: +UserProblem lib/WebworkSOAP/Classes/UserProblem.pm:lib/WeBWorK/DB/Record/UserProblem.pm: +Schema lib/WeBWorK/DB/Schema:lib/WeBWorK/DB/Schema.pm: +WSDL lib/WebworkSOAP/WSDL.pm: +GatewayQuiz lib/WeBWorK/ContentGenerator/GatewayQuiz.pm:htdocs/js/apps/GatewayQuiz: +async htdocs/js/vendor/requirejs/tests/browsertests/async: +pluginErrorContinue htdocs/js/vendor/requirejs/tests/error/pluginErrorContinue.pod: +Home lib/WeBWorK/ContentGenerator/Home.pm: +icons htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/icons.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/icons.pod:htdocs/applets/geogebra_stable/icons: +jsonp htdocs/js/vendor/requirejs/tests/jsonp:htdocs/js/vendor/requirejs/tests/jsonp/jsonp.pod: +fr htdocs/js/vendor/requirejs/tests/i18n/nls/fr: +RPC lib/WeBWorK/RPC:lib/WeBWorK/RPC.pm: +doc htdocs/js/vendor/editablegrid-2.0.1/doc: +undefLocal htdocs/js/vendor/requirejs/tests/undef/undefLocal.pod: +Units htdocs/helpFiles/Units.pod: +Authen lib/WeBWorK/Authen:lib/WeBWorK/Authen.pm: +_global_ htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/_global_.pod: +ubc htdocs/unsupported-themes/ubc: +hasOwnProperty htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/hasOwnProperty: +faq-optimization htdocs/js/vendor/requirejs/docs/faq-optimization.pod: +c htdocs/js/vendor/requirejs/tests/mapConfig/c:htdocs/js/vendor/requirejs/tests/mapConfig/another/c:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/nested/a/b/c: +PDE-notation htdocs/helpFiles/PDE-notation.pod: +uniques htdocs/js/vendor/requirejs/tests/uniques:htdocs/js/vendor/requirejs/tests/uniques/uniques.pod: +Driver lib/WeBWorK/DB/Driver:lib/WeBWorK/DB/Driver.pm: +CellEditor htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/CellEditor.pod: +redmond htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/redmond: +optimization htdocs/js/vendor/requirejs/docs/optimization.pod: +position htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/position:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/position.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/position:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/position.pod: +openflashchart htdocs/js/vendor/editablegrid-2.0.1/extensions/openflashchart: +nestedRequireConfig htdocs/js/vendor/requirejs/tests/nestedRequireConfig:htdocs/js/vendor/requirejs/tests/nestedRequireConfig/nestedRequireConfig.pod: +CourseEnvironment lib/WeBWorK/CourseEnvironment.pm: +Second_semester_calculus_topics2 clients/t/Second_semester_calculus_topics2.pod: +webwork-popup htdocs/dragmathedit/webwork-popup.pod: +textOnError htdocs/js/vendor/requirejs/tests/text/textOnError.pod: +trailingComma htdocs/js/vendor/requirejs/tests/trailingComma:htdocs/js/vendor/requirejs/tests/trailingComma/trailingComma.pod: +InputColor htdocs/js/apps/InputColor: +SortRecords lib/WeBWorK/Utils/SortRecords.pm: +Compare lib/WeBWorK/ContentGenerator/Instructor/Compare.pm: +afterload htdocs/js/vendor/requirejs/tests/afterload.pod: +SQL lib/WeBWorK/DB/Driver/SQL.pm: +UserDetail lib/WeBWorK/ContentGenerator/Instructor/UserDetail.pm: +development-bundle htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle: +codemirror htdocs/js/vendor/codemirror: +le-frog htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/le-frog: +revert htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/revert.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/revert.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/revert.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/revert.pod: +button htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/button.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/button.pod: +wwdb_check bin/old_scripts/wwdb_check.pod: +resizable htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/resizable.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/resizable.pod: +InstructorAddUsers htdocs/helpFiles/InstructorAddUsers.pod: +Entering-Logarithms htdocs/helpFiles/Entering-Logarithms.pod: +table htdocs/js/vendor/requirejs/tests/packages/pkgs/dojox/table: +isBrowser htdocs/js/vendor/requirejs/tests/isBrowser:htdocs/js/vendor/requirejs/tests/isBrowser/isBrowser.pod: +noload htdocs/js/vendor/requirejs/tests/browsertests/noload: +256x256 htdocs/applets/geogebra_stable/icons/hicolor/256x256: +72x72 htdocs/applets/geogebra_stable/icons/hicolor/72x72: +wwaddindexing bin/old_scripts/wwaddindexing.pod: +sql_moodle lib/WeBWorK/Utils/CourseManagement/sql_moodle.pm: +jQuery.widget htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/jQuery.widget.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/jQuery.widget.pod: +b htdocs/js/vendor/requirejs/tests/relative/outsideBaseUrl/b:htdocs/js/vendor/requirejs/tests/moduleConfig/b:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/nested/a/b: +414 htdocs/js/vendor/requirejs/tests/circular/414:htdocs/js/vendor/requirejs/tests/circular/414/414.pod: +html-templates htdocs/html-templates: +specialDeps htdocs/js/vendor/requirejs/tests/specialDeps:htdocs/js/vendor/requirejs/tests/specialDeps/specialDeps.pod: +size-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/size-effect.pod: +oldrelease htdocs/codemirror2/oldrelease.pod: +ProctoredGatewayQuiz lib/WeBWorK/ContentGenerator/ProctoredGatewayQuiz.pm: +webwork_js_develop htdocs/js/legacy/webwork_js_develop: +requirePluginLoad htdocs/js/vendor/requirejs/tests/requirePluginLoad:htdocs/js/vendor/requirejs/tests/requirePluginLoad/requirePluginLoad.pod: +pkgs htdocs/js/vendor/requirejs/tests/packages/pkgs: +xFunctions htdocs/applets/xFunctions:htdocs/applets/xFunctions/xFunctions.pod: +version1 htdocs/js/vendor/requirejs/tests/version1: +applets htdocs/applets: +exports htdocs/js/vendor/requirejs/tests/exports:htdocs/js/vendor/requirejs/tests/exports/exports.pod: +x3dom htdocs/js/vendor/x3dom: +codemirror2 htdocs/codemirror2: +alpha htdocs/js/vendor/requirejs/tests/packages/pkgs/alpha: +geogebra_webstart htdocs/applets/geogebra_stable/geogebra_webstart.pod: +text htdocs/js/vendor/requirejs/tests/text:htdocs/js/vendor/requirejs/tests/text/text.pod: +Test lib/WeBWorK/ContentGenerator/Test.pm: +AchievementUserEditor lib/WeBWorK/ContentGenerator/Instructor/AchievementUserEditor.pm: +photo-manager htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/photo-manager.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/photo-manager.pod: +Depths lib/WeBWorK/DB/Record/Depths.pm: +SliderGraph htdocs/applets/Xgraph/SliderGraph.pod: +SetsAssignedToUser lib/WeBWorK/ContentGenerator/Instructor/SetsAssignedToUser.pm: +radio htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/radio.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/radio.pod: +math4-ar htdocs/themes/math4-ar: +plug htdocs/js/vendor/requirejs/tests/mapConfig/plug: +Hardcopy lib/WeBWorK/ContentGenerator/Hardcopy.pm: +stex htdocs/codemirror2/mode/stex: +anon htdocs/js/vendor/requirejs/tests/anon: +old_scripts bin/old_scripts: +textarea htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/textarea.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/textarea.pod: +constrain-movement htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/constrain-movement.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/constrain-movement.pod: +Global_Average_Attempts_Data htdocs/helpFiles/Global_Average_Attempts_Data.pod: +Authz lib/WeBWorK/Authz.pm: +constrain-area htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/constrain-area.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/constrain-area.pod: +c2 htdocs/js/vendor/requirejs/tests/mapConfig/c2: +viewport htdocs/js/vendor/requirejs/tests/circular/complexPlugin/viewport.pod: +dojo htdocs/js/vendor/requirejs/docs/dojo.pod: +onerror htdocs/js/vendor/requirejs/tests/browsertests/onerror:htdocs/js/vendor/requirejs/tests/plugins/onerror:htdocs/js/vendor/requirejs/tests/plugins/onerror/onerror.pod: +Tasks lib/WeBWorK/Utils/Tasks.pm: +built htdocs/js/vendor/requirejs/tests/shim/built:htdocs/js/vendor/requirejs/tests/mapConfig/built: +dataMain htdocs/js/vendor/requirejs/tests/dataMain:htdocs/js/vendor/requirejs/tests/dataMain/dataMain.pod: +DetermineProblemLangAndDirection lib/WeBWorK/Utils/DetermineProblemLangAndDirection.pm: +themes htdocs/themes:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes: +codeshard htdocs/codemirror2/codeshard.pod:htdocs/codemirror2/demo/codeshard.pod: +autocomplete_variant_1 htdocs/js/vendor/editablegrid-2.0.1/extensions/autocomplete_variant_1: +InstructorStats htdocs/helpFiles/InstructorStats.pod: +Merge lib/WeBWorK/DB/Schema/NewSQL/Merge.pm: +resize htdocs/codemirror2/demo/resize.pod: +engine htdocs/js/vendor/requirejs/tests/packages/optimizing/packages/engine: +InstructorAssigner htdocs/helpFiles/InstructorAssigner.pod: +impl htdocs/js/vendor/requirejs/tests/paths/impl: +label htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/progressbar/label.pod: +Problem lib/WeBWorK/DB/Record/Problem.pm:lib/WeBWorK/ContentGenerator/Problem.pm:htdocs/js/apps/Problem: +WebsiteCellValidator htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/WebsiteCellValidator.pod: +templates courses.dist/modelCourse/templates: +SendMail lib/WeBWorK/ContentGenerator/Instructor/SendMail.pm: +window htdocs/js/vendor/requirejs/tests/packages/dojox/window: +missing htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/missing: +no_help htdocs/helpFiles/no_help.pod: +VersionedMerge lib/WeBWorK/DB/Schema/NewSQL/VersionedMerge.pm: +serialize htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/selectable/serialize.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/selectable/serialize.pod: +fonts htdocs/js/vendor/requirejs/dist/fonts: +afghanistan_distances_alt htdocs/applets/Image_and_Cursor_All/afghanistan_distances_alt.pod: +sendXMLRPC.pl clients/sendXMLRPC.pl.pod: +mapConfigPluginBuilt htdocs/js/vendor/requirejs/tests/mapConfig/built/mapConfigPluginBuilt.pod: +onResourceLoad htdocs/js/vendor/requirejs/tests/onResourceLoad: +Preflight lib/WeBWorK/ContentGenerator/Instructor/Preflight.pm: +mapConfigStar htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigStar.pod: +Global_Average_Status_Data htdocs/helpFiles/Global_Average_Status_Data.pod: +transpiler htdocs/js/vendor/requirejs/tests/circular/transpiler:htdocs/js/vendor/requirejs/tests/circular/transpiler/transpiler.pod: +clike htdocs/codemirror2/mode/clike: +DateCellValidator htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/DateCellValidator.pod: +InstructorPreflight htdocs/helpFiles/InstructorPreflight.pod: +packages htdocs/js/vendor/requirejs/tests/packages:htdocs/js/vendor/requirejs/tests/packages/packages.pod:htdocs/js/vendor/requirejs/tests/packages/optimizing/packages: +MultiPointGraph htdocs/applets/PointGraph/MultiPointGraph.pod: +minimal htdocs/js/vendor/editablegrid-2.0.1/examples/minimal: +resources htdocs/js/vendor/requirejs/tests/text/resources: +Local_Average_Status_Data htdocs/helpFiles/Local_Average_Status_Data.pod: +0.2 htdocs/js/vendor/requirejs/tests/packages/pkgs/beta/0.2: +AuthenWeBWorK lib/Apache/AuthenWeBWorK.pm: +CourseIntegrityCheck lib/WeBWorK/Utils/CourseIntegrityCheck.pm: +tmp htdocs/tmp: +splitbutton htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/splitbutton.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/splitbutton.pod: +program htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/determinism/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/monkeys/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/cyclic/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/relative/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/absolute/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/method/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/nested/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/hasOwnProperty/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/missing/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/exactExports/program.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/transitive/program.pod: +dialog htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/dialog.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/dialog.pod: +Password lib/WebworkSOAP/Classes/Password.pm:lib/WeBWorK/DB/Record/Password.pm: +UsesMathObjects htdocs/helpFiles/UsesMathObjects.pod: +max-min htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/max-min.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/max-min.pod: +prettify htdocs/js/legacy/webwork_js_master/out/assets/vendor/prettify: +renderViaXMLRPC lib/WeBWorK/ContentGenerator/renderViaXMLRPC.pm: +autocomplete_variant_2 htdocs/js/vendor/editablegrid-2.0.1/extensions/autocomplete_variant_2: +history htdocs/js/vendor/requirejs/docs/history.pod: +Setting lib/WeBWorK/DB/Record/Setting.pm: +ProblemRenderer lib/WeBWorK/ContentGenerator/ProblemRenderer.pm: +UsersAssignedToSet lib/WeBWorK/ContentGenerator/Instructor/UsersAssignedToSet.pm: +afghanistan_distances htdocs/applets/Image_and_Cursor_All/afghanistan_distances.pod: +FilterRecords lib/WeBWorK/Utils/FilterRecords.pm: +_sounds htdocs/js/vendor/requirejs/tests/doh/_sounds: +undefNoRequire htdocs/js/vendor/requirejs/tests/undef/undefNoRequire.pod: +Upload lib/WeBWorK/Upload.pm: +PointGraph htdocs/applets/PointGraph: +Achievement lib/WeBWorK/DB/Record/Achievement.pm: +User lib/WebworkSOAP/Classes/User.pm:lib/WeBWorK/DB/Record/User.pm: +rst htdocs/codemirror2/mode/rst: +all htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/all.pod: +geogebra htdocs/applets/geogebra_stable/geogebra.pod:htdocs/applets/geogebra_stable/geogebra: +Entering-Numbers htdocs/helpFiles/Entering-Numbers.pod: +flick htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/flick: +universal-built htdocs/js/vendor/requirejs/tests/universal/universal-built.pod: +RestrictedMailer lib/WeBWorK/Utils/RestrictedMailer.pm: +scale-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/scale-effect.pod: +nestedDefine2 htdocs/js/vendor/requirejs/tests/nestedDefine/nestedDefine2.pod: +attach htdocs/js/vendor/editablegrid-2.0.1/examples/attach: +DATA htdocs/DATA: +relativeBaseUrl htdocs/js/vendor/requirejs/tests/relative/relativeBaseUrl.pod: +placeholder htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/placeholder.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/placeholder.pod: +a1 htdocs/js/vendor/requirejs/tests/mapConfig/a1: +EnumCellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/EnumCellRenderer.pod: +delcourse bin/delcourse.pod: +Form lib/WeBWorK/Form.pm: +ContentGenerator lib/WeBWorK/ContentGenerator.pm:lib/WeBWorK/ContentGenerator: +dgage htdocs/images/dgage: +calc courses.dist/modelCourse/templates/setDemo/calc.pod: +cupertino htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/cupertino: +cyclic htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/cyclic: +AchievementList lib/WeBWorK/ContentGenerator/Instructor/AchievementList.pm: +common htdocs/js/vendor/requirejs/tests/i18n/common.pod: +minified htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/base/minified:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/ui-lightness/minified:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/ui/minified:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/base/minified:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/ui-lightness/minified:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/ui/minified: +SketchGraph htdocs/js/legacy/sketchgraphhtml5b/SketchGraph.pod:htdocs/applets/Xgraph/SketchGraph.pod: +humanity htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/humanity: +Entering-Decimals htdocs/helpFiles/Entering-Decimals.pod: +SetMakernojs lib/WeBWorK/ContentGenerator/Instructor/SetMakernojs.pm: +hello_world_apps clients/hello_world_apps: +WebworkSOAP lib/WebworkSOAP:lib/WebworkSOAP.pm: +Classes lib/WebworkSOAP/Classes: +specificCollection htdocs/js/vendor/requirejs/tests/plugins/pluginLast/specificCollection.pod: +c1 htdocs/js/vendor/requirejs/tests/mapConfig/c1: +fuel htdocs/js/vendor/requirejs/tests/packages/optimizing/packages/fuel: +MySOAP lib/MySOAP.pm: +chair htdocs/js/vendor/requirejs/tests/packages/pkgs/dojox/chair: +ProblemGrader lib/WeBWorK/ContentGenerator/Instructor/ProblemGrader.pm:htdocs/js/apps/ProblemGrader: +webwork_xmlrpc_client.pl clients/hello_world_apps/webwork_xmlrpc_client.pl.pod: +delay-start htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/delay-start.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/delay-start.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/delay-start.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/delay-start.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/delay-start.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/delay-start.pod: +liveJar htdocs/applets/liveJar:htdocs/applets/liveJar/liveJar.pod: +visual-feedback htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/visual-feedback.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/visual-feedback.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/visual-feedback.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/visual-feedback.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/visual-feedback.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/visual-feedback.pod: +remoteUrls htdocs/js/vendor/requirejs/tests/remoteUrls:htdocs/js/vendor/requirejs/tests/remoteUrls/remoteUrls.pod: +ProblemSetList2 lib/WeBWorK/ContentGenerator/Instructor/ProblemSetList2.pm: +GlobalSet lib/WebworkSOAP/Classes/GlobalSet.pm: +dataMainBaseUrl htdocs/js/vendor/requirejs/tests/dataMain/baseUrl/dataMainBaseUrl.pod: +js htdocs/js:htdocs/js/vendor/datepicker/js:htdocs/js/vendor/iframe-resizer/js:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/js:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/js:htdocs/js/vendor/bootstrap/js:htdocs/js/vendor/editablegrid-2.0.1/extensions/openflashchart/js:htdocs/js/legacy/webwork_js_master/out/assets/js:htdocs/themes/math3/bootstrap/js: +diff htdocs/codemirror2/mode/diff: +progressbar htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/progressbar:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/progressbar.pod: +portlets htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/portlets.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/portlets.pod: +fade-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/fade-effect.pod: +smalltalk htdocs/codemirror2/mode/smalltalk: +faq-advanced htdocs/js/vendor/requirejs/docs/faq-advanced.pod: +twitter htdocs/js/vendor/requirejs/tests/jsonp/twitter.pod: +simple-badbase htdocs/js/vendor/requirejs/tests/simple-badbase.pod: +math4 htdocs/themes/math4: +bigCollection htdocs/js/vendor/requirejs/tests/plugins/pluginLast/bigCollection.pod: +indeterminate htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/progressbar/indeterminate.pod: +index-php htdocs/js/vendor/requirejs/tests/browsertests/scriptloadinteractiveattach/index-php.pod:htdocs/js/vendor/requirejs/tests/browsertests/scriptloadinteractive/index-php.pod: +mapConfigBuilt htdocs/js/vendor/requirejs/tests/mapConfig/built/mapConfigBuilt.pod: +Entering-Inequalities htdocs/helpFiles/Entering-Inequalities.pod: +doh htdocs/js/vendor/requirejs/tests/doh: +dragmath htdocs/dragmathedit/dragmath: +OPLUtils bin/OPLUtils.pm: +TagWidget htdocs/js/apps/TagWidget: +Versioned lib/WeBWorK/DB/Schema/NewSQL/Versioned.pm: +GlobalProblem lib/WebworkSOAP/Classes/GlobalProblem.pm: +webwork_js_master htdocs/js/legacy/webwork_js_master: +nestedRequire htdocs/js/vendor/requirejs/tests/nestedRequire:htdocs/js/vendor/requirejs/tests/nestedRequire/nestedRequire.pod:htdocs/js/vendor/requirejs/tests/onResourceLoad/nestedRequire.pod: +why htdocs/js/vendor/requirejs/docs/why.pod: +complete htdocs/codemirror2/demo/complete.pod: +LoginProctor lib/WeBWorK/ContentGenerator/LoginProctor.pm: +modal htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/modal.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/modal.pod: +basic-built htdocs/js/vendor/requirejs/tests/shim/built/basic-built.pod: +DatePicker htdocs/js/apps/DatePicker: +manual htdocs/codemirror2/manual.pod: +newpassword bin/newpassword.pod: +wwdb bin/wwdb.pod: +mustache htdocs/codemirror2/demo/mustache.pod: +submodule htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/determinism/submodule:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/relative/submodule:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/absolute/submodule: +font-awesome htdocs/css/vendor/font-awesome: +sketchgraphhtml5b htdocs/js/legacy/sketchgraphhtml5b: +SetActions lib/WebworkWebservice/SetActions.pm: +geogebra_stable htdocs/applets/geogebra_stable: +FormatRenderedProblem lib/FormatRenderedProblem.pm: +exactExports htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/exactExports: +problems doc/parser/problems: +out htdocs/js/legacy/webwork_js_master/out: +animated htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/animated.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/animated.pod: +GummyGraph htdocs/applets/Xgraph/GummyGraph.pod: +UserSet lib/WebworkSOAP/Classes/UserSet.pm:lib/WeBWorK/DB/Record/UserSet.pm: +ProblemSet lib/WeBWorK/ContentGenerator/ProblemSet.pm: +Base64 htdocs/js/apps/Base64: +Entering-Formulas10 htdocs/helpFiles/Entering-Formulas10.pod: +twoColumn conf/snippets/hardcopyThemes/twoColumn: +mapConfigStarAdapter htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigStarAdapter.pod: +teacher_Set.js htdocs/js/legacy/webwork_js_master/out/files/teacher_Set.js.pod: +AddOnLoad htdocs/js/apps/AddOnLoad: +setMAAtutorial courses.dist/modelCourse/templates/setMAAtutorial: +json htdocs/js/vendor/editablegrid-2.0.1/extensions/openflashchart/js/json:htdocs/js/vendor/editablegrid-2.0.1/examples/json: +CourseActions lib/WebworkWebservice/CourseActions.pm: +staticgraphicsexample courses.dist/modelCourse/templates/setMAAtutorial/staticgraphicsexample: +design htdocs/js/vendor/requirejs/docs/design: +DatePickerScripts lib/WeBWorK/Utils/DatePickerScripts.pm: +html courses.dist/modelCourse/html: +DateCellEditor htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/DateCellEditor.pod: +ww_purge_old_nonces bin/ww_purge_old_nonces.pod: +faq htdocs/js/vendor/requirejs/docs/faq.pod: +LTIBasic lib/WeBWorK/Authen/LTIBasic.pm: +math htdocs/codemirror2/mode/math: +images_es htdocs/images/images_es: +vardefine htdocs/js/vendor/requirejs/tests/browsertests/vardefine: +PGProblemEditor2 lib/WeBWorK/ContentGenerator/Instructor/PGProblemEditor2.pm:htdocs/js/apps/PGProblemEditor2: +editablegrid-2.0.1 htdocs/js/vendor/editablegrid-2.0.1: +RestrictedClosureClass lib/WeBWorK/Utils/RestrictedClosureClass.pm: +jquery-ui-1.10.0.custom htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom: +modal-message htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/modal-message.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/modal-message.pod: +Options lib/WeBWorK/ContentGenerator/Options.pm:htdocs/helpFiles/Options.pod: +checkbox htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/checkbox.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/checkbox.pod: +Entering-Units htdocs/helpFiles/Entering-Units.pod: +font htdocs/js/vendor/FontAwesome/font:htdocs/css/vendor/font-awesome/font: +CGI lib/WeBWorK/CGI.pm: +Instructor lib/WeBWorK/ContentGenerator/Instructor:lib/WeBWorK/ContentGenerator/Instructor.pm: +php htdocs/js/vendor/editablegrid-2.0.1/php:htdocs/codemirror2/mode/php: +scalable htdocs/applets/geogebra_stable/icons/hicolor/scalable: +droppable htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/droppable.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/droppable.pod: +dark-hive htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/dark-hive: +blitzer htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/blitzer: +haskell htdocs/codemirror2/mode/haskell: +browsertests htdocs/js/vendor/requirejs/tests/browsertests: +t clients/t: +layers htdocs/js/vendor/requirejs/tests/layers:htdocs/js/vendor/requirejs/tests/layers/layers.pod: +moduleAndExports htdocs/js/vendor/requirejs/tests/exports/moduleAndExports.pod: +images htdocs/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/css/ui-lightness/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/base/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/base/minified/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/ui-lightness/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/ui-lightness/minified/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/position/images:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/css/ui-lightness/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/base/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/base/minified/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/ui-lightness/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/ui-lightness/minified/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/position/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/progressbar/images:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/images:htdocs/js/vendor/editablegrid-2.0.1/images:htdocs/js/vendor/editablegrid-2.0.1/extensions/jquery/images:htdocs/js/vendor/editablegrid-2.0.1/examples/full/images:htdocs/js/vendor/underscore/docs/images:htdocs/js/vendor/backbone/docs/images:htdocs/js/legacy/backbone/docs/images:htdocs/unsupported-themes/ubc/images:htdocs/css/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/pepper-grinder/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/redmond/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/le-frog/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/black-tie/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/swanky-purse/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/humanity/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/vader/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/trontastic/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/smoothness/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/blitzer/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/sunny/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/start/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/hot-sneaks/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/dark-hive/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/excite-bike/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/dot-luv/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/cupertino/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/overcast/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/flick/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/eggplant/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/ui-darkness/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/mint-choc/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/ui-lightness/images:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/south-street/images:htdocs/css/ui-lightness/images: +src htdocs/js/vendor/requirejs/tests/dataMain/baseUrl/src:htdocs/js/vendor/editablegrid-2.0.1/src: +pluginErrorContinueLocal htdocs/js/vendor/requirejs/tests/error/pluginErrorContinueLocal.pod: +DBImportExport lib/WeBWorK/Utils/DBImportExport.pm: +default htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/effect/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/selectable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/position/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/widget/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/dialog/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/selectable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/position/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/widget/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/progressbar/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/dialog/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/default.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/default.pod: +16x16 htdocs/applets/geogebra_stable/icons/hicolor/16x16: +scriptloadinteractiveattach htdocs/js/vendor/requirejs/tests/browsertests/scriptloadinteractiveattach: +other htdocs/js/vendor/other: +ui htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/ui:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/ui: +textOnXhr htdocs/js/vendor/requirejs/tests/text/textOnXhr.pod: +excite-bike htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/excite-bike: +LDAP lib/WeBWorK/Authen/LDAP.pm: +whyamd htdocs/js/vendor/requirejs/docs/whyamd.pod: +pluginLast htdocs/js/vendor/requirejs/tests/plugins/pluginLast:htdocs/js/vendor/requirejs/tests/plugins/pluginLast/pluginLast.pod: +connect-lists-through-tabs htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/connect-lists-through-tabs.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/connect-lists-through-tabs.pod: +backbone-localstorage htdocs/js/vendor/backbone/docs/backbone-localstorage.pod:htdocs/js/legacy/backbone/docs/backbone-localstorage.pod: +oneColumn conf/snippets/hardcopyThemes/oneColumn: +Skeleton lib/WeBWorK/ContentGenerator/Skeleton.pm: +cjsDotRequire htdocs/js/vendor/requirejs/tests/cjsSpace/cjsDotRequire.pod: +24x24 htdocs/applets/geogebra_stable/icons/hicolor/24x24: +ProblemSets lib/WeBWorK/ContentGenerator/ProblemSets.pm:htdocs/helpFiles/ProblemSets.pod: +backbone htdocs/js/vendor/backbone:htdocs/js/vendor/backbone/docs/backbone.pod:htdocs/js/legacy/backbone:htdocs/js/legacy/backbone/docs/backbone.pod: +transitive htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/transitive: +PGtoTexRenderer lib/WeBWorK/ContentGenerator/PGtoTexRenderer.pm: +images_tr htdocs/images/images_tr: +popup htdocs/js/apps/WirisEditor/popup.pod: +lib htdocs/js/vendor/requirejs/tests/packages/baz/lib:htdocs/js/vendor/requirejs/tests/packages/foo/lib:htdocs/js/vendor/requirejs/tests/packages/funky/lib:htdocs/dragmathedit/dragmath/lib:htdocs/codemirror2/lib: +math3 htdocs/themes/math3: +Stats lib/WeBWorK/ContentGenerator/Instructor/Stats.pm: +curve_template_alt htdocs/applets/Image_and_Cursor_All/curve_template_alt.pod: +classes htdocs/js/legacy/webwork_js_master/out/classes: +Index lib/WeBWorK/ContentGenerator/Instructor/Index.pm: +ShowHide htdocs/js/apps/ShowHide: +EquationDisplay lib/WeBWorK/ContentGenerator/EquationDisplay.pm: +highlight-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/highlight-effect.pod: +SubmitGrade lib/WeBWorK/Authen/LTIAdvanced/SubmitGrade.pm: +Null lib/WeBWorK/DB/Driver/Null.pm: +tests htdocs/js/vendor/requirejs/tests:htdocs/js/vendor/requirejs/tests/commonjs/tests: +symbols htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols: +UsingParser doc/parser/docs/UsingParser.pod: +config htdocs/js/vendor/requirejs/tests/config.pod: +pepper-grinder htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/pepper-grinder: +128x128 htdocs/applets/geogebra_stable/icons/hicolor/128x128: +items htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/sortable/items.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/sortable/items.pod: +CellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/CellRenderer.pod: +files htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/files.pod:htdocs/js/legacy/webwork_js_master/out/files: +UserList lib/WeBWorK/ContentGenerator/Instructor/UserList.pm: +Entering-Syntax htdocs/helpFiles/Entering-Syntax.pod: +another htdocs/js/vendor/requirejs/tests/mapConfig/another: +PG lib/WeBWorK/PG:lib/WeBWorK/PG.pm: +WeBWorKAppletTest htdocs/applets/WeBWorKAppletTest.pod: +Classlist lib/WeBWorK/File/Classlist.pm: +NumberCellValidator htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/NumberCellValidator.pod: +wwsh bin/wwsh.pod: +prime htdocs/js/vendor/requirejs/tests/plugins/prime: +RQP lib/RQP.pm: +Scoring lib/WeBWorK/File/Scoring.pm:lib/WeBWorK/ContentGenerator/Instructor/Scoring.pm: +easing htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/effect/easing.pod: +examples htdocs/js/vendor/editablegrid-2.0.1/examples:htdocs/js/vendor/backbone/examples:htdocs/js/legacy/backbone/examples: +relative htdocs/js/vendor/requirejs/tests/relative:htdocs/js/vendor/requirejs/tests/relative/relative.pod:htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/relative: +autocomplete htdocs/js/vendor/editablegrid-2.0.1/extensions/autocomplete: +LTIAdvanced lib/WeBWorK/Authen/LTIAdvanced:lib/WeBWorK/Authen/LTIAdvanced.pm: +dynamic htdocs/js/vendor/requirejs/tests/plugins/pluginMap/dynamic: +properties htdocs/applets/geogebra_stable/geogebra/properties: +grab_course_environment.pl t/grab_course_environment.pl.pod: +circularPlugin htdocs/js/vendor/requirejs/tests/circular/circularPlugin.pod: +macros doc/parser/macros: +ShowAnswers lib/WeBWorK/ContentGenerator/Instructor/ShowAnswers.pm: +baseUrl htdocs/js/vendor/requirejs/tests/baseUrl.pod:htdocs/js/vendor/requirejs/tests/dataMain/baseUrl: +start htdocs/js/vendor/requirejs/docs/start.pod:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/start: +AddUsers lib/WeBWorK/ContentGenerator/Instructor/AddUsers.pm: +Column htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/Column.pod: +css htdocs/css:htdocs/js/vendor/datepicker/css:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/css:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/css:htdocs/js/vendor/bootstrap/css:htdocs/js/vendor/editablegrid-2.0.1/examples/full/css:htdocs/js/vendor/FontAwesome/css:htdocs/js/legacy/webwork_js_master/out/assets/css:htdocs/themes/math3/bootstrap/css:htdocs/css/vendor/font-awesome/css:htdocs/codemirror2/css:htdocs/codemirror2/mode/css: +Locations lib/WeBWorK/DB/Record/Locations.pm: +setDemo courses.dist/modelCourse/templates/setDemo: +snippets conf/snippets: +prob14 courses.dist/modelCourse/templates/setOrientation/prob14: +NewSQL lib/WeBWorK/DB/Schema/NewSQL:lib/WeBWorK/DB/Schema/NewSQL.pm: +extensions doc/parser/extensions:htdocs/js/vendor/editablegrid-2.0.1/extensions: +afghanistan_borders htdocs/applets/Image_and_Cursor_All/afghanistan_borders.pod: +views htdocs/js/legacy/webwork/views:htdocs/js/legacy/webwork_js_develop/views: +addcourse bin/addcourse.pod: +SaveTargetSetProblems lib/WeBWorK/ContentGenerator/Instructor/SaveTargetSetProblems.pm: +version2 htdocs/js/vendor/requirejs/tests/version2: +XMLRPC lib/WeBWorK/Authen/XMLRPC.pm: +library_browser htdocs/js/apps/LibraryBrowser/docs/library_browser.pod: +Cosign lib/WeBWorK/Authen/Cosign.pm: +js-ofc-library htdocs/js/vendor/editablegrid-2.0.1/extensions/openflashchart/js-ofc-library: +sync htdocs/js/vendor/requirejs/tests/plugins/sync.pod: +assets htdocs/js/legacy/webwork_js_master/out/assets: +FontAwesome htdocs/js/vendor/FontAwesome: +events htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/draggable/events.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/draggable/events.pod: +selectable htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/selectable:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/selectable.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/selectable:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/selectable.pod: +README htdocs/js/legacy/webwork_js_master/out/assets/vendor/prettify/README.pod: +mixed htdocs/js/vendor/editablegrid-2.0.1/examples/mixed: +InstructorUserDetail htdocs/helpFiles/InstructorUserDetail.pod: +Global_Usage_Data htdocs/helpFiles/Global_Usage_Data.pod: +synchronous-resize htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/synchronous-resize.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/synchronous-resize.pod: +post htdocs/js/vendor/requirejs/dist/post.pod: +InstructorSetMaker htdocs/helpFiles/InstructorSetMaker.pod: +dot-luv htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/dot-luv: +pluginShim htdocs/js/vendor/requirejs/tests/plugins/pluginShim:htdocs/js/vendor/requirejs/tests/plugins/pluginShim/pluginShim.pod: +InstructorConfig htdocs/helpFiles/InstructorConfig.pod: +animate htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/animate.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/animate.pod: +mouse htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/mouse.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/docs/mouse.pod: +mapConfigStarBuilt htdocs/js/vendor/requirejs/tests/mapConfig/built/mapConfigStarBuilt.pod: +EmbeddedWWProblems t/EmbeddedWWProblems.pod: +WirisEditor htdocs/js/apps/WirisEditor: +DB lib/WeBWorK/DB:lib/WeBWorK/DB.pm: +IntervalNotation htdocs/helpFiles/IntervalNotation.pod: +dist htdocs/js/vendor/requirejs/dist: +full htdocs/js/vendor/editablegrid-2.0.1/examples/full: +URLPath lib/WeBWorK/URLPath.pm: +cjsSpace htdocs/js/vendor/requirejs/tests/cjsSpace:htdocs/js/vendor/requirejs/tests/cjsSpace/cjsSpace.pod: +simple-nohead htdocs/js/vendor/requirejs/tests/simple-nohead.pod: +Local lib/WeBWorK/PG/Local.pm: +hot-sneaks htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/hot-sneaks: +fold-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/fold-effect.pod: +plugins htdocs/js/vendor/requirejs/tests/plugins:htdocs/js/vendor/requirejs/docs/plugins.pod: +Entering-Logarithms10 htdocs/helpFiles/Entering-Logarithms10.pod: +nestedDefine htdocs/js/vendor/requirejs/tests/nestedDefine:htdocs/js/vendor/requirejs/tests/nestedDefine/nestedDefine.pod: +complexPlugin htdocs/js/vendor/requirejs/tests/circular/complexPlugin:htdocs/js/vendor/requirejs/tests/circular/complexPlugin/complexPlugin.pod: +InstructorProblemSetDetail2 htdocs/helpFiles/InstructorProblemSetDetail2.pod: +keys htdocs/js/legacy/vendor/keys: +CourseManagement lib/WeBWorK/Utils/CourseManagement:lib/WeBWorK/Utils/CourseManagement.pm: +NPL lib/WeBWorK/NPL.pm: +underscore htdocs/js/vendor/underscore:htdocs/js/vendor/underscore/docs/underscore.pod: +nls htdocs/js/vendor/requirejs/tests/i18n/nls: +depoverlap htdocs/js/vendor/requirejs/tests/depoverlap.pod: +iframe-resizer htdocs/js/vendor/iframe-resizer: +mapConfigSpecificity htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigSpecificity.pod: +AppletSupport htdocs/js/apps/AppletSupport: +InstructorSendMail htdocs/helpFiles/InstructorSendMail.pod: +demo htdocs/codemirror2/demo: +Shibboleth lib/WeBWorK/Authen/Shibboleth.pm: +i18n htdocs/js/vendor/requirejs/tests/i18n:htdocs/js/vendor/requirejs/tests/i18n/i18n.pod: +test-ender htdocs/js/vendor/backbone/test/test-ender.pod:htdocs/js/legacy/backbone/test/test-ender.pod: +InstructorScoring htdocs/helpFiles/InstructorScoring.pod: +36x36 htdocs/applets/geogebra_stable/icons/hicolor/36x36: +testing courses.dist/modelCourse/templates/set0/prob4/testing.pod: +apps htdocs/js/apps:htdocs/applets/geogebra_stable/icons/hicolor/96x96/apps:htdocs/applets/geogebra_stable/icons/hicolor/22x22/apps:htdocs/applets/geogebra_stable/icons/hicolor/24x24/apps:htdocs/applets/geogebra_stable/icons/hicolor/256x256/apps:htdocs/applets/geogebra_stable/icons/hicolor/192x192/apps:htdocs/applets/geogebra_stable/icons/hicolor/48x48/apps:htdocs/applets/geogebra_stable/icons/hicolor/128x128/apps:htdocs/applets/geogebra_stable/icons/hicolor/72x72/apps:htdocs/applets/geogebra_stable/icons/hicolor/16x16/apps:htdocs/applets/geogebra_stable/icons/hicolor/scalable/apps:htdocs/applets/geogebra_stable/icons/hicolor/36x36/apps:htdocs/applets/geogebra_stable/icons/hicolor/64x64/apps:htdocs/applets/geogebra_stable/icons/hicolor/32x32/apps: +ui-darkness htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/ui-darkness: +javascript htdocs/js/vendor/editablegrid-2.0.1/examples/full/javascript:htdocs/codemirror2/mode/javascript: +EnumProvider htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/EnumProvider.pod: +double htdocs/js/vendor/requirejs/tests/plugins/double.pod: +Utils lib/WeBWorK/Utils:lib/WeBWorK/Utils.pm:lib/WeBWorK/DB/Utils:lib/WeBWorK/DB/Utils.pm: +PGProblemEditor lib/WeBWorK/ContentGenerator/Instructor/PGProblemEditor.pm: +CellValidator htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/CellValidator.pod: +96x96 htdocs/applets/geogebra_stable/icons/hicolor/96x96: +FileManager lib/WeBWorK/ContentGenerator/Instructor/FileManager.pm: +relativeNormalize htdocs/js/vendor/requirejs/tests/paths/relativeNormalize:htdocs/js/vendor/requirejs/tests/paths/relativeNormalize/relativeNormalize.pod: +todos htdocs/js/vendor/backbone/examples/todos:htdocs/js/vendor/backbone/docs/todos.pod:htdocs/js/legacy/backbone/examples/todos:htdocs/js/legacy/backbone/docs/todos.pod: +mapConfigPlugin htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigPlugin.pod: +sunny htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/sunny: +Entering-Angles htdocs/helpFiles/Entering-Angles.pod: +queryPath htdocs/js/vendor/requirejs/tests/queryPath.pod: +domReadyExtraConfig htdocs/js/vendor/requirejs/tests/domReady/domReadyExtraConfig.pod: +toolbar htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/button/toolbar.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/button/toolbar.pod:htdocs/js/vendor/requirejs/tests/circular/complexPlugin/toolbar.pod: +en-us-surfer htdocs/js/vendor/requirejs/tests/i18n/nls/en-us-surfer: +modelCourse courses.dist/modelCourse: +contributing htdocs/js/vendor/requirejs/docs/contributing.pod: +explode-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/explode-effect.pod: +greek htdocs/js/vendor/requirejs/tests/relative/greek: +math4-green htdocs/themes/math4-green: +ShowMeAnother lib/WeBWorK/ContentGenerator/ShowMeAnother.pm: +SQLAbstractIdentTrans lib/WeBWorK/DB/Utils/SQLAbstractIdentTrans.pm: +WebworkClient lib/WebworkClient.pm:lib/WebworkClient: +jqueryDynamic htdocs/js/vendor/requirejs/tests/jquery/jqueryDynamic.pod: +simple htdocs/js/vendor/requirejs/tests/simple.pod:htdocs/js/vendor/editablegrid-2.0.1/examples/simple: +aspect-ratio htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/resizable/aspect-ratio.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/resizable/aspect-ratio.pod: +pluginMapSameName htdocs/js/vendor/requirejs/tests/plugins/pluginMapSameName:htdocs/js/vendor/requirejs/tests/plugins/pluginMapSameName/pluginMapSameName.pod: +slide-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/slide-effect.pod: +LibraryBrowser htdocs/js/apps/LibraryBrowser: +docwritenested htdocs/js/vendor/requirejs/tests/browsertests/docwritenested: +Entering-Points htdocs/helpFiles/Entering-Points.pod: +circular htdocs/js/vendor/requirejs/tests/circular:htdocs/js/vendor/requirejs/tests/circular.pod: +cycler htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/position/cycler.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/position/cycler.pod: +Proctor lib/WeBWorK/Authen/Proctor.pm: +multiversion htdocs/js/vendor/requirejs/tests/multiversion.pod: +GetTargetSetProblems lib/WeBWorK/ContentGenerator/Instructor/GetTargetSetProblems.pm: +bootstrap htdocs/js/vendor/bootstrap:htdocs/themes/math3/bootstrap: +optimizing-built htdocs/js/vendor/requirejs/tests/packages/optimizing/optimizing-built.pod: +InstructorProblemSetDetail htdocs/helpFiles/InstructorProblemSetDetail.pod: +propagation htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/droppable/propagation.pod:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos/droppable/propagation.pod: +codeshard2 htdocs/codemirror2/demo/codeshard2.pod: +LocalStorage htdocs/js/apps/LocalStorage: +method htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/method: +bounce-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/bounce-effect.pod: +Local_Average_Attempts_Data htdocs/helpFiles/Local_Average_Attempts_Data.pod: +datepicker htdocs/js/vendor/datepicker: +live_map_instructions htdocs/applets/live_map_instructions.pod: +CAS lib/WeBWorK/Authen/CAS.pm: +eggplant htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/eggplant: +effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos/effect: +DateCellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/DateCellRenderer.pod: +beta htdocs/js/vendor/requirejs/tests/packages/pkgs/beta: +external htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/external:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/external: +instructorXMLHandler lib/WeBWorK/ContentGenerator/instructorXMLHandler.pm: +frontpage htdocs/html-templates/frontpage.pod: +swanky-purse htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/swanky-purse: +InstructorFileTransfer htdocs/helpFiles/InstructorFileTransfer.pod: +Std lib/WeBWorK/DB/Schema/NewSQL/Std.pm: +search htdocs/codemirror2/demo/search.pod: +SetLocations lib/WeBWorK/DB/Record/SetLocations.pm: +WebsiteCellRenderer htdocs/js/vendor/editablegrid-2.0.1/doc/jsdoc/symbols/WebsiteCellRenderer.pod: +workers htdocs/js/vendor/requirejs/tests/workers.pod: +mint-choc htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/mint-choc: +mimetypes htdocs/applets/geogebra_stable/icons/hicolor/96x96/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/22x22/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/24x24/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/256x256/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/192x192/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/48x48/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/128x128/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/72x72/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/16x16/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/scalable/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/36x36/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/64x64/mimetypes:htdocs/applets/geogebra_stable/icons/hicolor/32x32/mimetypes: +funky htdocs/js/vendor/requirejs/tests/packages/funky: +DBUpgrade lib/WeBWorK/Utils/DBUpgrade.pm: +ui-lightness htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/css/ui-lightness:htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/themes/ui-lightness:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/css/ui-lightness:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/themes/ui-lightness:htdocs/css/ui-lightness:htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/ui-lightness: +ProblemVersion lib/WeBWorK/DB/Record/ProblemVersion.pm: +xml htdocs/codemirror2/mode/xml: +0.4 htdocs/js/vendor/requirejs/tests/packages/bar/0.4: +ProblemSetList lib/WeBWorK/ContentGenerator/Instructor/ProblemSetList.pm: +jsdata htdocs/js/vendor/editablegrid-2.0.1/examples/jsdata: +textOnly htdocs/js/vendor/requirejs/tests/text/textOnly.pod: +ScrollingRecordList lib/WeBWorK/HTML/ScrollingRecordList.pm: +smoothness htdocs/css/vendor/jquery-ui-themes-1.10.3/themes/smoothness: +Course lib/WebworkSOAP/Classes/Course.pm: +optimizing htdocs/js/vendor/requirejs/tests/packages/optimizing:htdocs/js/vendor/requirejs/tests/packages/optimizing/optimizing.pod: +issue379 htdocs/js/vendor/requirejs/tests/issue379:htdocs/js/vendor/requirejs/tests/issue379/issue379.pod: +mapConfigDelayed htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigDelayed.pod: +adapter htdocs/js/vendor/requirejs/tests/mapConfig/adapter: +compress htdocs/codemirror2/compress.pod: +22x22 htdocs/applets/geogebra_stable/icons/hicolor/22x22: +basic htdocs/js/vendor/requirejs/tests/shim/basic.pod: +Record lib/WeBWorK/DB/Record.pm:lib/WeBWorK/DB/Record: +math4-red htdocs/themes/math4-red: +parser doc/parser: +pre htdocs/js/vendor/requirejs/dist/pre.pod: +GetLibrarySetProblems lib/WeBWorK/ContentGenerator/Instructor/GetLibrarySetProblems.pm: +api htdocs/js/vendor/requirejs/docs/api.pod: +marker htdocs/codemirror2/demo/marker.pod: +Achievements lib/WeBWorK/ContentGenerator/Achievements.pm: +AchievementEvaluator lib/WeBWorK/AchievementEvaluator.pm: +PastAnswer lib/WeBWorK/DB/Record/PastAnswer.pm: +demos htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/demos:htdocs/js/vendor/jquery/jquery-ui-1.10.0.custom/development-bundle/demos: +ParserAnswerCheckers doc/parser/docs/ParserAnswerCheckers.pod: +dataMainIndex htdocs/js/vendor/requirejs/tests/dataMain/dataMainIndex:htdocs/js/vendor/requirejs/tests/dataMain/dataMainIndex/dataMainIndex.pod: +Remote lib/WeBWorK/PG/Remote.pm: +baz htdocs/js/vendor/requirejs/tests/packages/baz: +jquery-ui-1.9.2.custom htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom: +Template lib/WeBWorK/Template.pm: +nested htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/nested: +clip-effect htdocs/js/vendor/jquery/jquery-ui-1.9.2.custom/development-bundle/docs/clip-effect.pod: +mapConfigMulti htdocs/js/vendor/requirejs/tests/mapConfig/mapConfigMulti.pod: +192x192 htdocs/applets/geogebra_stable/icons/hicolor/192x192: +appendbeforeload htdocs/js/vendor/requirejs/tests/browsertests/appendbeforeload: +Image_and_Cursor_All htdocs/applets/Image_and_Cursor_All:htdocs/applets/Image_and_Cursor_All/Image_and_Cursor_All.pod: +LibraryStats lib/WeBWorK/Utils/LibraryStats.pm: +sub htdocs/js/vendor/requirejs/tests/mapConfig/a1/sub:htdocs/js/vendor/requirejs/tests/nestedRelativeRequire/sub:htdocs/js/vendor/requirejs/tests/anon/sub: +DelayedMailer lib/WeBWorK/Utils/DelayedMailer.pm: +functionToString htdocs/js/vendor/requirejs/tests/browsertests/functionToString.pod: +monkeys htdocs/js/vendor/requirejs/tests/commonjs/tests/modules/1.0/monkeys: +textDepend htdocs/js/vendor/requirejs/tests/plugins/textDepend:htdocs/js/vendor/requirejs/tests/plugins/textDepend/textDepend.pod: diff --git a/pod_doc_tools/pod2htmi.tmp b/pod_doc_tools/pod2htmi.tmp new file mode 100644 index 0000000..b3dea60 --- /dev/null +++ b/pod_doc_tools/pod2htmi.tmp @@ -0,0 +1,2 @@ +bin:logs:DATA:conf:tmp:courses.dist:lib:t:doc:clients:htdocs +/home/mgage/webwork_masters/ww_source_files/webwork2 diff --git a/pod_doc_tools/pod_doc_instructions.md b/pod_doc_tools/pod_doc_instructions.md new file mode 100644 index 0000000..d6490b5 --- /dev/null +++ b/pod_doc_tools/pod_doc_instructions.md @@ -0,0 +1,44 @@ +## instructions for pod documents with jason + +/home/jaubrey/webwork: + +* ww-make-docs-from-svn + * + +* ww-make-docs + * updates local copy and writes web pages + +* source files +* /home/jaubrey/webwork/webwork2_TRUNK +* /home/jaubrey/webwork/pg_TRUNK ... + +* update these directories `ls m` +* manually using `git` +* then run `ww-make-docs-from-svn` + + +Need to rewrite script so that it updates +the git repository automatically. + + + +## media wiki search daemon +/usr/local/search/ls2/ generates the search file +for mediawiki + +.lsearchd (daemon) +/etc/init/d/lsearchd + +/usr/share/mediawiki contents of media wiki +/var/lib/mediawiki +``` +mgage@ws4doc:/home/jaubrey$ sudo crontab -l -u root +ls # m h dom mon dow command +00 00 * * * cd /usr/local/search/ls2/ && ./build > /home/jaubrey/cronlogs/lucene_search.log +00 * * * * /usr/bin/python /var/www/planet/planet.py /var/www/planet/webwork/config.ini +``` +/var/www/w has some mediawiki stuff + +cd /usr/local/search/ls2 +sudo ./configure /var/lib/mediawiki +sudo ./build lsearch.con \ No newline at end of file diff --git a/pod_doc_tools/ww-make-docs b/pod_doc_tools/ww-make-docs new file mode 100755 index 0000000..65a1c99 --- /dev/null +++ b/pod_doc_tools/ww-make-docs @@ -0,0 +1,401 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +package WeBWorK::Utils::HTMLDocs; + +use File::Find; +use File::Temp qw(tempfile); +use IO::File; +use Pod::Find qw(pod_find simplify_name contains_pod); +use Pod::Html; +#use Pod::PP; +use POSIX qw(strftime); +use Data::Dumper; + +our @sections = ( + '/' => "(root)", + bin => "Scripts", + conf => "Config Files", + doc => "Documentation", + lib => "Libraries", + macros => "Macros", + clients => "Clients", +); + +sub new { + my ($invocant, %o) = @_; + my $class = ref $invocant || $invocant; + + my @section_list = exists $o{sections} ? @{$o{sections}} : @sections; + my $section_hash = {@section_list}; + my $section_order = [ map { $section_list[2*$_] } 0..$#section_list/2 ]; + delete $o{sections}; + + my $self = { + %o, + idx => {}, + section_hash => $section_hash, + section_order => $section_order, + }; + return bless $self, $class; +} + +sub convert_pods { + my $self = shift; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $subdirs = do { + my $dh; + opendir $dh, $source_root; + join ':', + grep { not (/^\./ or /^(CVS|.svn)$/) and -d "$source_root/$_" } + readdir $dh; + }; + $self->{subdirs} = $subdirs; + + find({wanted => $self->gen_pod_wanted, no_chdir => 1}, $source_root); + $self->write_index("$dest_root/index.html"); +} + +sub gen_pod_wanted { + my $self = shift; + return sub { + my $path = $File::Find::name; + my $dir = $File::Find::dir; + my ($name) = $path =~ m|^$dir(?:/(.*))?$|; + $name = '' unless defined $name; + + if ($name =~ /^\./) { + $File::Find::prune = 1; + return; + } + unless (-f $path or -d $path) { + $File::Find::prune = 1; + return; + } + if (-d _ and $name =~ /^(CVS|RCS|.svn)$/) { + $File::Find::prune = 1; + return; + } + + return if -d _; + return unless contains_pod($path); + $self->process_pod($path); + }; +} + +sub process_pod { + my ($self, $pod_path) = @_; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $dest_url = $self->{dest_url}; + my $subdirs = $self->{subdirs}; + + my $pod_name; + + my ($subdir, $filename) = $pod_path =~ m|^$source_root/(?:(.*)/)?(.*)$|; + my ($subdir_first, $subdir_rest); + print "subdir_first: $subdir_first\n"; + print "subdir_rest: $subdir_rest\n"; + if (defined $subdir) { + if ($subdir =~ m|/|) { + ($subdir_first, $subdir_rest) = $subdir =~ m|^([^/]*)/(.*)|; + } else { + $subdir_first = $subdir; + } + } + $pod_name = (defined $subdir_rest ? "$subdir_rest/" : "") . $filename; + if ($filename =~ /\.(plx?|pg)$/ or $filename !~ /\./) { + $filename .= '.html'; + } elsif ($filename =~ /\.pod$/) { + $pod_name =~ s/\.pod$//; + $filename =~ s/\.pod$/.html/; + } elsif ($filename =~ /\.pm$/) { + $pod_name =~ s/\.pm$//; + $pod_name =~ s|/+|::|g; + $filename =~ s/\.pm$/.html/; + } + my $html_dir = defined $subdir ? "$dest_root/$subdir" : $dest_root; + my $html_path = "$html_dir/$filename"; + my $html_rel_path = defined $subdir ? "$subdir/$filename" : $filename; + + # deal with potential + if (not defined $subdir) { + my $source_root_last = $source_root; + $source_root_last =~ s|^.*/||; + if ($source_root_last =~ /^(.+)_(.+?)(?:--(.*))?$/) { + my ($module, $version, $extra) = ($1, $2, $3); + $subdir = $extra; # the subdir is appended to the dir name + } else { + $subdir = '/'; # fake subdir for "things in the root" + } + } + $self->update_index($subdir, $html_rel_path, $pod_name); + #my $podpp_path = do_podpp($pod_path); + do_mkdir($html_dir); + do_pod2html( + subdirs => $subdirs, + source_root => $source_root, + dest_root => $dest_root, + dest_url => $dest_url, + pod_path => $pod_path, + html_path => $html_path, + ); + #unlink $podpp_path; + # postprocess HTML to add SSI tags for header and footer + $self->postprocess_pod($html_path); +} + +sub postprocess_pod { + my ($self, $file) = @_; + my $fh = new IO::File($file, 'r+') + or die "Failed to open file '$file' for reading/writing: $!\n"; + my $title; + my $text = ""; + my $in_body = 0; + while (my $line = <$fh>) { + if ($in_body) { + if ($line =~ /^\s*<\/body>\s*$/) { + $in_body = 0; + next; + } + if ($line =~ /^\s*
\s*$/) { + next; + } + $text .= $line; + } else { + if ($line =~ /^\s*\s*$/) { + $in_body = 1; + next; + } + if ($line =~ /\s*(.*)<\/title>.*$/) { + $title = $1; + } + elsif ($file =~ /\/(w+)\.html$/) { + $title = $1; + } + } + } + seek $fh, 0, 0; + truncate $fh, 0; + #print $fh "<!--#set var=\"title\" value=\"$title\" -->", "\n" if defined $title; + write_header($fh,$title); + #print $fh '<!--#include virtual="/doc/cvs/header.html" -->' . "\n"; + print $fh $text; + #print $fh '<!--#include virtual="/doc/cvs/footer.html" -->' . "\n"; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub update_index { + my ($self, $subdir, $html_rel_path, $pod_name) = @_; + $subdir =~ s|/.*$||; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + if (exists $sections->{$subdir}) { + push @{$idx->{$subdir}}, [ $html_rel_path, $pod_name ]; + } else { + warn "no section for subdir '$subdir'\n"; + } +} + +sub write_index { + my ($self, $out_path) = @_; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + my $section_order = $self->{section_order}; + my $source_root = $self->{source_root}; + $source_root =~ s|^.*/||; + my $dest_url = $self->{dest_url}; + + #print Dumper($idx); + + #my $header = "<html><head><title>Index $source_root\n"; + #my $content_start = "

Index for $source_root

    \n"; + + #my $header = qq|| . "\n" + # . '' . "\n"; + my $title = "Index for $source_root"; + my $content_start = "
      "; + my $content = ""; + + foreach my $section (@$section_order) { + next unless defined $idx->{$section}; + my $section_name = $sections->{$section}; + $content_start .= "
    • $section_name
    • \n"; + my @files = sort @{$idx->{$section}}; + $content .= "\n"; + $content .= "

      $section_name

        \n"; + foreach my $file (sort { $a->[1] cmp $b->[1] } @files) { + my ($path, $name) = @$file; + $content .= "
      • $name
      • \n"; + } + #$content .= "

      \n"; + $content .= "
    \n"; + } + + $content_start .= "
\n"; + my $date = strftime "%a %b %e %H:%M:%S %Z %Y", localtime; + my $content_end = "

Generated $date

\n"; + #my $footer = "\n"; + #my $content_end = ""; + #my $footer = '' . "\n"; + + my $fh = new IO::File($out_path, 'w') or die "Failed to open index '$out_path' for writing: $!\n"; + write_header($fh,$title); + #print $fh $header, $content_start, $content, $content_end, $footer; + print $fh $content_start, $content, $content_end; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub do_podpp { + my $in_path = shift; + my $pp = make Pod::PP(-incpath=>[],-symbols=>{}); + #my ($out_fh, $out_path) = tempfile('ww-make-docs-podpp.XXXXXX'); + #local *STDOUT = $out_fh; + my $out_path = "$in_path.podpp"; + local *STDOUT; + open STDOUT, '>', $out_path or die "can't redirect STDOUT to $out_path: $!"; + $pp->parse_from_file($in_path); + return $out_path; +} + +sub do_mkdir { + my $dir = shift; + system '/bin/mkdir', '-p', $dir; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "/bin/mkdir -p $dir failed (exit=$exit signal=$signal core=$core)\n"; + } +} + +sub do_pod2html { + my %o = @_; + my @args = ( + defined $o{subdirs} && length $o{subdirs} ? "--podpath=$o{subdirs}" : (), + "--podroot=$o{source_root}", + "--htmldir=$o{dest_root}", + defined $o{dest_url} && length $o{dest_url} ? "--htmlroot=$o{dest_url}" : (), + "--infile=$o{pod_path}", + "--outfile=$o{html_path}", + '--recurse', + '--noheader', + ); + #print join(" ", 'pod2html', @args), "\n"; + pod2html(@args); +} + +sub write_header { + my $fh = shift; + my $title = shift; + print $fh qq{ + + + + + + + $title + + + + + + + + + + +
+
+
+ +

$title

+
+

From WeBWorK

+
+
Jump to: navigation
+ + + } +} + +sub write_footer { + my $fh = shift; + print $fh <<'EOF'; + + +
+
+
+
+
+ + +
+
Navigation
+ +
+EOF + #for my $module (sort keys %index) { + #print $fh "
\n"; + #print $fh "
$module
\n"; + #print $fh "
\n"; + #print $fh "
    \n"; + #for my $version (reverse sort keys %{$index{$module}}) { + #if (ref $index{$module}{$version}) { + #print $fh "
  • $version
      \n"; + #for my $extra (sort keys %{$index{$module}{$version}}) { + #print $fh "
    • $extra
    • \n"; + #} + #print $fh "
  • \n"; + #} else { + #print $fh "
  • $version
  • \n"; + #} + #} + #print $fh "
\n"; + #print $fh "
\n"; + #} + print $fh <<'EOF'; +
+
+ +
+ + + +EOF +} + +package main; + +unless (caller) { + unless (@ARGV >= 2) { + print "usage: $0 source_root dest_root [ dest_url ]\n"; + exit 1; + } + my $htmldocs = new WeBWorK::Utils::HTMLDocs( + source_root => $ARGV[0], + dest_root => $ARGV[1], + dest_url => $ARGV[2], + ); + $htmldocs->convert_pods; +} + +1; + diff --git a/pod_doc_tools/ww-make-docs-from-github.pl b/pod_doc_tools/ww-make-docs-from-github.pl new file mode 100755 index 0000000..0ed197f --- /dev/null +++ b/pod_doc_tools/ww-make-docs-from-github.pl @@ -0,0 +1,261 @@ +#!/usr/bin/perl -sT +################################################################################ +# WeBWorK Online Homework Delivery System +# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ +# $CVSHeader: admintools/ww-make-docs-from-cvs,v 1.5 2007/10/02 20:27:44 sh002i Exp $ +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of either: (a) the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version, or (b) the "Artistic License" which comes with this package. +# +# 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 either the GNU General Public License or the +# Artistic License for more details. +################################################################################ + +=head1 NAME + +ww-make-docs-from-cvs - make WeBWorK documentation from github viewable over the web + +=cut + +use 5.10.0; +use strict; +use warnings; +use IO::File; + +$ENV{PATH} = ""; +$ENV{ENV} = ""; + +our $CHECKOUT_DIR = '/home/mgage/webwork_masters/ww_source_files'; +our $DOC_DIR = '/home/mgage/htdocs/wwdocs'; + +our $GIT = "/usr/bin/git"; +our $MKDIR = "/bin/mkdir"; +our $RM = "/bin/rm"; +our $WW_MAKE_DOCS = '/home/mgage/webwork_masters/pod_doc_tools/ww-make-docs.pl'; + +our $BASE_URL = 'https://demo.webwork.rochester.edu/wwdocs'; + +our $v; # for verbose switch + +my @dirs; +my %index; + +if (@ARGV) { + @dirs = map "$CHECKOUT_DIR/$_", @ARGV; +} else { + @dirs = glob("$CHECKOUT_DIR/*"); +} +say "directories to update from ". join("\n\t ", @dirs); +foreach my $dir (@dirs) { + next unless -d $dir; + say "reading $dir"; + if ($dir =~ m/^([^\!\$\^\&\*\(\)\~\[\]\|\{\}\'\"\;\<\>\?]+)$/) { + print "\n-----> $dir <-----\n\n" if $v; + # update_git($1); + process_dir($1); + update_index($1); + } else { + warn "'$dir' insecure.\n"; + } +} + +{ + my $fh = new IO::File("$DOC_DIR/index.html", 'w') + or die "failed to open '$DOC_DIR/index.html' for writing: $!\n"; + write_index_new($fh); + #write_index($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub update_git { + my ($dir) = @_; + + system "cd \"$dir\" && $GIT pull" and die "git failed: $!\n"; +} + +sub process_dir { + my ($source_dir) = @_; + my $dest_dir = $source_dir; + $dest_dir =~ s/^$CHECKOUT_DIR/$DOC_DIR/; + + system $RM, '-rf', $dest_dir; + system $MKDIR, '-p', $dest_dir; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "/bin/mkdir -p $dest_dir failed (exit=$exit signal=$signal core=$core)\n"; + } + + system $WW_MAKE_DOCS, $source_dir, $dest_dir;#, $BASE_URL; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "$WW_MAKE_DOCS $source_dir $dest_dir failed (exit=$exit signal=$signal core=$core)\n"; + } +} + +sub update_index { + my $dir = shift; + $dir =~ s/^.*\///; + if ($dir =~ /^(.+)_(.+?)(?:--(.*))?$/) { + my ($module, $version, $extra) = ($1, $2, $3); + if ($version =~ /^rel-(\d+)-(\d+)(?:-(\d+))?$/) { + my ($major, $minor, $patch) = ($1, $2, $3); + if (defined $patch) { + $version = "$major.$minor.$patch"; + } else { + $version = "$major.$minor.0"; + } + } elsif ($version =~ /^rel-(\d+)-(\d)-(?:patches|dev)$/) { + my ($major, $minor) = ($1, $2); + $version = "$major.$minor.x (bugfixes)"; + } elsif ($version eq "develop") { + $version = 'develop'; + } else { + warn "unfamiliar version string '$version' for dir '$dir' -- not adding to index.\n"; + return; + } + $module =~ s/^pg$/PG/; + $module =~ s/^webwork2$/WeBWorK/; + $module =~ s/^OpenProblemLibrary/OPL/; + if (defined $extra) { + $index{$module}{$version}{$extra} = $dir; + } else { + $index{$module}{$version} = $dir; + } + } else { + warn "unfamiliar dir format '$dir' -- not adding to index.\n"; + } +} + +sub write_index { + my $fh = shift; + print $fh "WeBWorK Documentation from Git\n"; + print $fh "

WeBWorK Documentation from Git

\n"; + print $fh "
    \n"; + print $fh map { "
  • $_
  • \n" } sort keys %index; + print $fh "
\n"; + for my $module (sort keys %index) { + print $fh "
\n"; + print $fh "

$module

\n"; + print $fh "
    \n"; + for my $version (sort keys %{$index{$module}}) { + if (ref $index{$module}{$version}) { + print $fh "
  • $version
      \n"; + for my $extra (sort keys %{$index{$module}{$version}}) { + print $fh "
    • $extra
    • \n"; + } + print $fh "
  • \n"; + } else { + print $fh "
  • $version
  • \n"; + } + } + print $fh "
\n"; + print $fh "\n"; + } +} + +sub write_index_new { + my $fh = shift; + write_header($fh, 'WeBWorK Documentation from Git'); + print $fh "

Main Menu

\n"; + print $fh '

Chose a product and version from the menu to the left.

'; + write_footer($fh); +} + +sub write_header { + my $fh = shift; + my $title = shift; + print $fh qq{ + + + + + + + $title + + + + + + + + + + +
+
+
+ +

$title

+
+

From WeBWorK

+
+
Jump to: navigation
+ + + } +} + +sub write_footer { + my $fh = shift; + print $fh <<'EOF'; + + +
+
+
+
+
+ + +
+
Navigation
+
+ +
+
+EOF + for my $module (sort keys %index) { + print $fh "
\n"; + print $fh "
$module
\n"; + print $fh "
\n"; + print $fh "
    \n"; + for my $version (reverse sort keys %{$index{$module}}) { + if (ref $index{$module}{$version}) { + print $fh "
  • $version
      \n"; + for my $extra (sort keys %{$index{$module}{$version}}) { + print $fh "
    • $extra
    • \n"; + } + print $fh "
  • \n"; + } else { + print $fh "
  • $version
  • \n"; + } + } + print $fh "
\n"; + print $fh "
\n"; + } + print $fh <<'EOF'; +
+
+ +
+ + + +EOF +} diff --git a/pod_doc_tools/ww-make-docs-from-svn b/pod_doc_tools/ww-make-docs-from-svn new file mode 100644 index 0000000..e948fd4 --- /dev/null +++ b/pod_doc_tools/ww-make-docs-from-svn @@ -0,0 +1,259 @@ +#!/usr/bin/perl -sT +################################################################################ +# WeBWorK Online Homework Delivery System +# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ +# $CVSHeader: admintools/ww-make-docs-from-cvs,v 1.5 2007/10/02 20:27:44 sh002i Exp $ +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of either: (a) the GNU General Public License as published by the +# Free Software Foundation; either version 2, or (at your option) any later +# version, or (b) the "Artistic License" which comes with this package. +# +# 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 either the GNU General Public License or the +# Artistic License for more details. +################################################################################ + +=head1 NAME + +ww-make-docs-from-cvs - make WeBWorK documentation from SVN viewable over the web + +=cut + +use strict; +use warnings; +use IO::File; + +$ENV{PATH} = ""; +$ENV{ENV} = ""; + +our $CHECKOUT_DIR = '/Volumes/webwork-2015-08owc/maaorg/pod documentation stuff from maa server/source_files'; +our $DOC_DIR = '/Volumes/webwork-2015-08owc/maaorg/pod documentation stuff from maa server/wwdocs'; + +our $SVN = "/usr/bin/git"; +our $MKDIR = "/bin/mkdir"; +our $RM = "/bin/rm"; +our $WW_MAKE_DOCS = '/Volumes/webwork-2015-08owc/maaorg/pod documentation stuff from maa server/pod_doc_tools'; + +our $BASE_URL = 'https://demo.webwork.rochester.edu/pod'; + +our $v; # for verbose switch + +my @dirs; +my %index; + +if (@ARGV) { + @dirs = map "$CHECKOUT_DIR/$_", @ARGV; +} else { + @dirs = glob("$CHECKOUT_DIR/*"); +} + +foreach my $dir (@dirs) { + next unless -d $dir; + if ($dir =~ m/^([^\!\$\^\&\*\(\)\~\[\]\|\{\}\'\"\;\<\>\?]+)$/) { + print "\n-----> $dir <-----\n\n" if $v; + update_svn($1); + process_dir($1); + update_index($1); + } else { + warn "'$dir' insecure.\n"; + } +} + +{ + my $fh = new IO::File("$DOC_DIR/index.html", 'w') + or die "failed to open '$DOC_DIR/index.html' for writing: $!\n"; + write_index_new($fh); + #write_index($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub update_svn { + my ($dir) = @_; + + system "cd \"$dir\" && $SVN up" and die "git failed: $!\n"; +} + +sub process_dir { + my ($source_dir) = @_; + my $dest_dir = $source_dir; + $dest_dir =~ s/^$CHECKOUT_DIR/$DOC_DIR/; + + system $RM, '-rf', $dest_dir; + system $MKDIR, '-p', $dest_dir; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "/bin/mkdir -p $dest_dir failed (exit=$exit signal=$signal core=$core)\n"; + } + + system $WW_MAKE_DOCS, $source_dir, $dest_dir;#, $BASE_URL; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "$WW_MAKE_DOCS $source_dir $dest_dir failed (exit=$exit signal=$signal core=$core)\n"; + } +} + +sub update_index { + my $dir = shift; + $dir =~ s/^.*\///; + if ($dir =~ /^(.+)_(.+?)(?:--(.*))?$/) { + my ($module, $version, $extra) = ($1, $2, $3); + if ($version =~ /^rel-(\d+)-(\d+)(?:-(\d+))?$/) { + my ($major, $minor, $patch) = ($1, $2, $3); + if (defined $patch) { + $version = "$major.$minor.$patch"; + } else { + $version = "$major.$minor.0"; + } + } elsif ($version =~ /^rel-(\d+)-(\d)-(?:patches|dev)$/) { + my ($major, $minor) = ($1, $2); + $version = "$major.$minor.x (bugfixes)"; + } elsif ($version eq "TRUNK") { + $version = 'trunk'; + } else { + warn "unfamiliar version string '$version' for dir '$dir' -- not adding to index.\n"; + return; + } + $module =~ s/^pg$/PG/; + $module =~ s/^webwork2$/WeBWorK/; + $module =~ s/^NationalProblemLibrary/NPL/; + if (defined $extra) { + $index{$module}{$version}{$extra} = $dir; + } else { + $index{$module}{$version} = $dir; + } + } else { + warn "unfamiliar dir format '$dir' -- not adding to index.\n"; + } +} + +sub write_index { + my $fh = shift; + print $fh "WeBWorK Documentation from SVN\n"; + print $fh "

WeBWorK Documentation from SVN

\n"; + print $fh "
    \n"; + print $fh map { "
  • $_
  • \n" } sort keys %index; + print $fh "
\n"; + for my $module (sort keys %index) { + print $fh "
\n"; + print $fh "

$module

\n"; + print $fh "
    \n"; + for my $version (sort keys %{$index{$module}}) { + if (ref $index{$module}{$version}) { + print $fh "
  • $version
      \n"; + for my $extra (sort keys %{$index{$module}{$version}}) { + print $fh "
    • $extra
    • \n"; + } + print $fh "
  • \n"; + } else { + print $fh "
  • $version
  • \n"; + } + } + print $fh "
\n"; + print $fh "\n"; + } +} + +sub write_index_new { + my $fh = shift; + write_header($fh, 'WeBWorK Documentation from SVN'); + print $fh "

Main Menu

\n"; + print $fh '

Chose a product and version from the menu to the left.

'; + write_footer($fh); +} + +sub write_header { + my $fh = shift; + my $title = shift; + print $fh qq{ + + + + + + + $title + + + + + + + + + + +
+
+
+ +

$title

+
+

From WeBWorK

+
+
Jump to: navigation
+ + + } +} + +sub write_footer { + my $fh = shift; + print $fh <<'EOF'; + + +
+
+
+
+
+ + +
+
Navigation
+ +
+EOF + for my $module (sort keys %index) { + print $fh "
\n"; + print $fh "
$module
\n"; + print $fh "
\n"; + print $fh "
    \n"; + for my $version (reverse sort keys %{$index{$module}}) { + if (ref $index{$module}{$version}) { + print $fh "
  • $version
      \n"; + for my $extra (sort keys %{$index{$module}{$version}}) { + print $fh "
    • $extra
    • \n"; + } + print $fh "
  • \n"; + } else { + print $fh "
  • $version
  • \n"; + } + } + print $fh "
\n"; + print $fh "
\n"; + } + print $fh <<'EOF'; +
+
+ +
+ + + +EOF +} diff --git a/pod_doc_tools/ww-make-docs.pl b/pod_doc_tools/ww-make-docs.pl new file mode 100755 index 0000000..153e326 --- /dev/null +++ b/pod_doc_tools/ww-make-docs.pl @@ -0,0 +1,407 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use 5.10.0; + +package WeBWorK::Utils::HTMLDocs; + +use File::Find; +use File::Temp qw(tempfile); +use IO::File; +use Pod::Find qw(pod_find simplify_name contains_pod); +use Pod::Html; +#use Pod::PP; +use POSIX qw(strftime); +use Data::Dumper; + +our @sections = ( + '/' => "(root)", + bin => "Scripts", + conf => "Config Files", + doc => "Documentation", + lib => "Libraries", + macros => "Macros", + clients => "Clients", + t => "test modules", + htdocs => "web accessible docs", +); + +sub new { + my ($invocant, %o) = @_; + my $class = ref $invocant || $invocant; + + my @section_list = exists $o{sections} ? @{$o{sections}} : @sections; + my $section_hash = {@section_list}; + my $section_order = [ map { $section_list[2*$_] } 0..$#section_list/2 ]; + delete $o{sections}; + + my $self = { + %o, + idx => {}, + section_hash => $section_hash, + section_order => $section_order, + }; + return bless $self, $class; +} + +sub convert_pods { + my $self = shift; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $subdirs = do { + my $dh; + opendir $dh, $source_root; + join ':', + grep { not (/^\./ or /^(CVS|.svn)$/) and -d "$source_root/$_" } + readdir $dh; + }; + $self->{subdirs} = $subdirs; + + find({wanted => $self->gen_pod_wanted, no_chdir => 1}, $source_root); + $self->write_index("$dest_root/index.html"); +} + +sub gen_pod_wanted { + my $self = shift; + return sub { + my $path = $File::Find::name; + my $dir = $File::Find::dir; + my ($name) = $path =~ m|^$dir(?:/(.*))?$|; + $name = '' unless defined $name; + + if ($name =~ /^\./) { + $File::Find::prune = 1; + return; + } + unless (-f $path or -d $path) { + $File::Find::prune = 1; + return; + } + if (-d _ and $name =~ /^(CVS|RCS|.svn)$/) { + $File::Find::prune = 1; + return; + } + + return if -d _; + return unless contains_pod($path); + $self->process_pod($path); + }; +} + +sub process_pod { + my ($self, $pod_path) = @_; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $dest_url = $self->{dest_url}; + my $subdirs = $self->{subdirs}; + + my $pod_name; + + my ($subdir, $filename) = $pod_path =~ m|^$source_root/(?:(.*)/)?(.*)$|; + my ($subdir_first, $subdir_rest)=('',''); + say "subdir $subdir"; + if (defined $subdir) { + if ($subdir =~ m|/|) { + ($subdir_first, $subdir_rest) = $subdir =~ m|^([^/]*)/(.*)|; + } else { + $subdir_first = $subdir; + } + } + say "subdir_first: ", $subdir_first//''; + say "subdir_rest: ", $subdir_rest//''; + say ''; + + $pod_name = (defined $subdir_rest ? "$subdir_rest/" : "") . $filename; + if ($filename =~ /\.(plx?|pg)$/ or $filename !~ /\./) { + $filename .= '.html'; + } elsif ($filename =~ /\.pod$/) { + $pod_name =~ s/\.pod$//; + $filename =~ s/\.pod$/.html/; + } elsif ($filename =~ /\.pm$/) { + $pod_name =~ s/\.pm$//; + $pod_name =~ s|/+|::|g; + $filename =~ s/\.pm$/.html/; + } + my $html_dir = defined $subdir ? "$dest_root/$subdir" : $dest_root; + my $html_path = "$html_dir/$filename"; + my $html_rel_path = defined $subdir ? "$subdir/$filename" : $filename; + + # deal with potential failure + if (not defined $subdir) { + my $source_root_last = $source_root; + $source_root_last =~ s|^.*/||; + if ($source_root_last =~ /^(.+)_(.+?)(?:--(.*))?$/) { + my ($module, $version, $extra) = ($1, $2, $3); + $subdir = $extra; # the subdir is appended to the dir name + } else { + $subdir = '/'; # fake subdir for "things in the root" + } + } + $self->update_index($subdir, $html_rel_path, $pod_name); + #my $podpp_path = do_podpp($pod_path); + do_mkdir($html_dir); + do_pod2html( + subdirs => $subdirs, + source_root => $source_root, + dest_root => $dest_root, + dest_url => $dest_url, + pod_path => $pod_path, + html_path => $html_path, + ); + #unlink $podpp_path; + # postprocess HTML to add SSI tags for header and footer + $self->postprocess_pod($html_path); +} + +sub postprocess_pod { + my ($self, $file) = @_; + my $fh = new IO::File($file, 'r+') + or die "Failed to open file '$file' for reading/writing: $!\n"; + my $title; + my $text = ""; + my $in_body = 0; + while (my $line = <$fh>) { + if ($in_body) { + if ($line =~ /^\s*<\/body>\s*$/) { + $in_body = 0; + next; + } + if ($line =~ /^\s*
\s*$/) { + next; + } + $text .= $line; + } else { + if ($line =~ /^\s*\s*$/) { + $in_body = 1; + next; + } + if ($line =~ /\s*(.*)<\/title>.*$/) { + $title = $1; + } + elsif ($file =~ /\/(w+)\.html$/) { + $title = $1; + } + } + } + seek $fh, 0, 0; + truncate $fh, 0; + #print $fh "<!--#set var=\"title\" value=\"$title\" -->", "\n" if defined $title; + write_header($fh,$title); + #print $fh '<!--#include virtual="/doc/cvs/header.html" -->' . "\n"; + print $fh $text; + #print $fh '<!--#include virtual="/doc/cvs/footer.html" -->' . "\n"; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub update_index { + my ($self, $subdir, $html_rel_path, $pod_name) = @_; + $subdir =~ s|/.*$||; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + if (exists $sections->{$subdir}) { + push @{$idx->{$subdir}}, [ $html_rel_path, $pod_name ]; + } else { + warn "no section for subdir '$subdir'\n"; + } +} + +sub write_index { + my ($self, $out_path) = @_; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + my $section_order = $self->{section_order}; + my $source_root = $self->{source_root}; + $source_root =~ s|^.*/||; + my $dest_url = $self->{dest_url}; + + #print Dumper($idx); + + #my $header = "<html><head><title>Index $source_root\n"; + #my $content_start = "

Index for $source_root

    \n"; + + #my $header = qq|| . "\n" + # . '' . "\n"; + my $title = "Index for $source_root"; + my $content_start = "
      "; + my $content = ""; + + foreach my $section (@$section_order) { + next unless defined $idx->{$section}; + my $section_name = $sections->{$section}; + $content_start .= "
    • $section_name
    • \n"; + my @files = sort @{$idx->{$section}}; + $content .= "\n"; + $content .= "

      $section_name

        \n"; + foreach my $file (sort { $a->[1] cmp $b->[1] } @files) { + my ($path, $name) = @$file; + $content .= "
      • $name
      • \n"; + } + #$content .= "

      \n"; + $content .= "
    \n"; + } + + $content_start .= "
\n"; + my $date = strftime "%a %b %e %H:%M:%S %Z %Y", localtime; + my $content_end = "

Generated $date

\n"; + #my $footer = "\n"; + #my $content_end = ""; + #my $footer = '' . "\n"; + + my $fh = new IO::File($out_path, 'w') or die "Failed to open index '$out_path' for writing: $!\n"; + write_header($fh,$title); + #print $fh $header, $content_start, $content, $content_end, $footer; + print $fh $content_start, $content, $content_end; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub do_podpp { + my $in_path = shift; + my $pp = make Pod::PP(-incpath=>[],-symbols=>{}); + #my ($out_fh, $out_path) = tempfile('ww-make-docs-podpp.XXXXXX'); + #local *STDOUT = $out_fh; + my $out_path = "$in_path.podpp"; + local *STDOUT; + open STDOUT, '>', $out_path or die "can't redirect STDOUT to $out_path: $!"; + $pp->parse_from_file($in_path); + return $out_path; +} + +sub do_mkdir { + my $dir = shift; + system '/bin/mkdir', '-p', $dir; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "/bin/mkdir -p $dir failed (exit=$exit signal=$signal core=$core)\n"; + } +} + +sub do_pod2html { + my %o = @_; + my @args = ( + defined $o{subdirs} && length $o{subdirs} ? "--podpath=$o{subdirs}" : (), + "--podroot=$o{source_root}", + "--htmldir=$o{dest_root}", + defined $o{dest_url} && length $o{dest_url} ? "--htmlroot=$o{dest_url}" : (), + "--infile=$o{pod_path}", + "--outfile=$o{html_path}", + '--recurse', + '--noheader', + ); + #print join(" ", 'pod2html', @args), "\n"; + pod2html(@args); +} + +sub write_header { + my $fh = shift; + my $title = shift; + print $fh qq{ + + + + + + + $title + + + + + + + + + + +
+
+
+ +

$title

+
+

From WeBWorK

+
+
Jump to: navigation
+ + + } +} + +sub write_footer { + my $fh = shift; + print $fh <<'EOF'; + + +
+
+
+
+
+ + +
+
Navigation
+ +
+EOF + #for my $module (sort keys %index) { + #print $fh "
\n"; + #print $fh "
$module
\n"; + #print $fh "
\n"; + #print $fh "
    \n"; + #for my $version (reverse sort keys %{$index{$module}}) { + #if (ref $index{$module}{$version}) { + #print $fh "
  • $version
      \n"; + #for my $extra (sort keys %{$index{$module}{$version}}) { + #print $fh "
    • $extra
    • \n"; + #} + #print $fh "
  • \n"; + #} else { + #print $fh "
  • $version
  • \n"; + #} + #} + #print $fh "
\n"; + #print $fh "
\n"; + #} + print $fh <<'EOF'; +
+
+ +
+ + + +EOF +} + +package main; + +unless (caller) { + unless (@ARGV >= 2) { + print "usage: $0 source_root dest_root [ dest_url ]\n"; + exit 1; + } + my $htmldocs = new WeBWorK::Utils::HTMLDocs( + source_root => $ARGV[0], + dest_root => $ARGV[1], + dest_url => $ARGV[2], + ); + $htmldocs->convert_pods; +} + +1; + diff --git a/pod_doc_tools/ww-make-docs.pm b/pod_doc_tools/ww-make-docs.pm new file mode 100644 index 0000000..65a1c99 --- /dev/null +++ b/pod_doc_tools/ww-make-docs.pm @@ -0,0 +1,401 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +package WeBWorK::Utils::HTMLDocs; + +use File::Find; +use File::Temp qw(tempfile); +use IO::File; +use Pod::Find qw(pod_find simplify_name contains_pod); +use Pod::Html; +#use Pod::PP; +use POSIX qw(strftime); +use Data::Dumper; + +our @sections = ( + '/' => "(root)", + bin => "Scripts", + conf => "Config Files", + doc => "Documentation", + lib => "Libraries", + macros => "Macros", + clients => "Clients", +); + +sub new { + my ($invocant, %o) = @_; + my $class = ref $invocant || $invocant; + + my @section_list = exists $o{sections} ? @{$o{sections}} : @sections; + my $section_hash = {@section_list}; + my $section_order = [ map { $section_list[2*$_] } 0..$#section_list/2 ]; + delete $o{sections}; + + my $self = { + %o, + idx => {}, + section_hash => $section_hash, + section_order => $section_order, + }; + return bless $self, $class; +} + +sub convert_pods { + my $self = shift; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $subdirs = do { + my $dh; + opendir $dh, $source_root; + join ':', + grep { not (/^\./ or /^(CVS|.svn)$/) and -d "$source_root/$_" } + readdir $dh; + }; + $self->{subdirs} = $subdirs; + + find({wanted => $self->gen_pod_wanted, no_chdir => 1}, $source_root); + $self->write_index("$dest_root/index.html"); +} + +sub gen_pod_wanted { + my $self = shift; + return sub { + my $path = $File::Find::name; + my $dir = $File::Find::dir; + my ($name) = $path =~ m|^$dir(?:/(.*))?$|; + $name = '' unless defined $name; + + if ($name =~ /^\./) { + $File::Find::prune = 1; + return; + } + unless (-f $path or -d $path) { + $File::Find::prune = 1; + return; + } + if (-d _ and $name =~ /^(CVS|RCS|.svn)$/) { + $File::Find::prune = 1; + return; + } + + return if -d _; + return unless contains_pod($path); + $self->process_pod($path); + }; +} + +sub process_pod { + my ($self, $pod_path) = @_; + my $source_root = $self->{source_root}; + my $dest_root = $self->{dest_root}; + my $dest_url = $self->{dest_url}; + my $subdirs = $self->{subdirs}; + + my $pod_name; + + my ($subdir, $filename) = $pod_path =~ m|^$source_root/(?:(.*)/)?(.*)$|; + my ($subdir_first, $subdir_rest); + print "subdir_first: $subdir_first\n"; + print "subdir_rest: $subdir_rest\n"; + if (defined $subdir) { + if ($subdir =~ m|/|) { + ($subdir_first, $subdir_rest) = $subdir =~ m|^([^/]*)/(.*)|; + } else { + $subdir_first = $subdir; + } + } + $pod_name = (defined $subdir_rest ? "$subdir_rest/" : "") . $filename; + if ($filename =~ /\.(plx?|pg)$/ or $filename !~ /\./) { + $filename .= '.html'; + } elsif ($filename =~ /\.pod$/) { + $pod_name =~ s/\.pod$//; + $filename =~ s/\.pod$/.html/; + } elsif ($filename =~ /\.pm$/) { + $pod_name =~ s/\.pm$//; + $pod_name =~ s|/+|::|g; + $filename =~ s/\.pm$/.html/; + } + my $html_dir = defined $subdir ? "$dest_root/$subdir" : $dest_root; + my $html_path = "$html_dir/$filename"; + my $html_rel_path = defined $subdir ? "$subdir/$filename" : $filename; + + # deal with potential + if (not defined $subdir) { + my $source_root_last = $source_root; + $source_root_last =~ s|^.*/||; + if ($source_root_last =~ /^(.+)_(.+?)(?:--(.*))?$/) { + my ($module, $version, $extra) = ($1, $2, $3); + $subdir = $extra; # the subdir is appended to the dir name + } else { + $subdir = '/'; # fake subdir for "things in the root" + } + } + $self->update_index($subdir, $html_rel_path, $pod_name); + #my $podpp_path = do_podpp($pod_path); + do_mkdir($html_dir); + do_pod2html( + subdirs => $subdirs, + source_root => $source_root, + dest_root => $dest_root, + dest_url => $dest_url, + pod_path => $pod_path, + html_path => $html_path, + ); + #unlink $podpp_path; + # postprocess HTML to add SSI tags for header and footer + $self->postprocess_pod($html_path); +} + +sub postprocess_pod { + my ($self, $file) = @_; + my $fh = new IO::File($file, 'r+') + or die "Failed to open file '$file' for reading/writing: $!\n"; + my $title; + my $text = ""; + my $in_body = 0; + while (my $line = <$fh>) { + if ($in_body) { + if ($line =~ /^\s*<\/body>\s*$/) { + $in_body = 0; + next; + } + if ($line =~ /^\s*
\s*$/) { + next; + } + $text .= $line; + } else { + if ($line =~ /^\s*\s*$/) { + $in_body = 1; + next; + } + if ($line =~ /\s*(.*)<\/title>.*$/) { + $title = $1; + } + elsif ($file =~ /\/(w+)\.html$/) { + $title = $1; + } + } + } + seek $fh, 0, 0; + truncate $fh, 0; + #print $fh "<!--#set var=\"title\" value=\"$title\" -->", "\n" if defined $title; + write_header($fh,$title); + #print $fh '<!--#include virtual="/doc/cvs/header.html" -->' . "\n"; + print $fh $text; + #print $fh '<!--#include virtual="/doc/cvs/footer.html" -->' . "\n"; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub update_index { + my ($self, $subdir, $html_rel_path, $pod_name) = @_; + $subdir =~ s|/.*$||; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + if (exists $sections->{$subdir}) { + push @{$idx->{$subdir}}, [ $html_rel_path, $pod_name ]; + } else { + warn "no section for subdir '$subdir'\n"; + } +} + +sub write_index { + my ($self, $out_path) = @_; + my $idx = $self->{idx}; + my $sections = $self->{section_hash}; + my $section_order = $self->{section_order}; + my $source_root = $self->{source_root}; + $source_root =~ s|^.*/||; + my $dest_url = $self->{dest_url}; + + #print Dumper($idx); + + #my $header = "<html><head><title>Index $source_root\n"; + #my $content_start = "

Index for $source_root

    \n"; + + #my $header = qq|| . "\n" + # . '' . "\n"; + my $title = "Index for $source_root"; + my $content_start = "
      "; + my $content = ""; + + foreach my $section (@$section_order) { + next unless defined $idx->{$section}; + my $section_name = $sections->{$section}; + $content_start .= "
    • $section_name
    • \n"; + my @files = sort @{$idx->{$section}}; + $content .= "\n"; + $content .= "

      $section_name

        \n"; + foreach my $file (sort { $a->[1] cmp $b->[1] } @files) { + my ($path, $name) = @$file; + $content .= "
      • $name
      • \n"; + } + #$content .= "

      \n"; + $content .= "
    \n"; + } + + $content_start .= "
\n"; + my $date = strftime "%a %b %e %H:%M:%S %Z %Y", localtime; + my $content_end = "

Generated $date

\n"; + #my $footer = "\n"; + #my $content_end = ""; + #my $footer = '' . "\n"; + + my $fh = new IO::File($out_path, 'w') or die "Failed to open index '$out_path' for writing: $!\n"; + write_header($fh,$title); + #print $fh $header, $content_start, $content, $content_end, $footer; + print $fh $content_start, $content, $content_end; + write_footer($fh); + my $mode = (stat $fh)[2] & 0777 | 0111; + chmod $mode, $fh; +} + +sub do_podpp { + my $in_path = shift; + my $pp = make Pod::PP(-incpath=>[],-symbols=>{}); + #my ($out_fh, $out_path) = tempfile('ww-make-docs-podpp.XXXXXX'); + #local *STDOUT = $out_fh; + my $out_path = "$in_path.podpp"; + local *STDOUT; + open STDOUT, '>', $out_path or die "can't redirect STDOUT to $out_path: $!"; + $pp->parse_from_file($in_path); + return $out_path; +} + +sub do_mkdir { + my $dir = shift; + system '/bin/mkdir', '-p', $dir; + if ($?) { + my $exit = $? >> 8; + my $signal = $? & 127; + my $core = $? & 128; + die "/bin/mkdir -p $dir failed (exit=$exit signal=$signal core=$core)\n"; + } +} + +sub do_pod2html { + my %o = @_; + my @args = ( + defined $o{subdirs} && length $o{subdirs} ? "--podpath=$o{subdirs}" : (), + "--podroot=$o{source_root}", + "--htmldir=$o{dest_root}", + defined $o{dest_url} && length $o{dest_url} ? "--htmlroot=$o{dest_url}" : (), + "--infile=$o{pod_path}", + "--outfile=$o{html_path}", + '--recurse', + '--noheader', + ); + #print join(" ", 'pod2html', @args), "\n"; + pod2html(@args); +} + +sub write_header { + my $fh = shift; + my $title = shift; + print $fh qq{ + + + + + + + $title + + + + + + + + + + +
+
+
+ +

$title

+
+

From WeBWorK

+
+
Jump to: navigation
+ + + } +} + +sub write_footer { + my $fh = shift; + print $fh <<'EOF'; + + +
+
+
+
+
+ + +
+
Navigation
+ +
+EOF + #for my $module (sort keys %index) { + #print $fh "
\n"; + #print $fh "
$module
\n"; + #print $fh "
\n"; + #print $fh "
    \n"; + #for my $version (reverse sort keys %{$index{$module}}) { + #if (ref $index{$module}{$version}) { + #print $fh "
  • $version
      \n"; + #for my $extra (sort keys %{$index{$module}{$version}}) { + #print $fh "
    • $extra
    • \n"; + #} + #print $fh "
  • \n"; + #} else { + #print $fh "
  • $version
  • \n"; + #} + #} + #print $fh "
\n"; + #print $fh "
\n"; + #} + print $fh <<'EOF'; +
+
+ +
+ + + +EOF +} + +package main; + +unless (caller) { + unless (@ARGV >= 2) { + print "usage: $0 source_root dest_root [ dest_url ]\n"; + exit 1; + } + my $htmldocs = new WeBWorK::Utils::HTMLDocs( + source_root => $ARGV[0], + dest_root => $ARGV[1], + dest_url => $ARGV[2], + ); + $htmldocs->convert_pods; +} + +1; +