summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Magorsch <arzano@gentoo.org>2020-04-18 02:38:35 +0200
committerMax Magorsch <arzano@gentoo.org>2020-04-18 02:50:54 +0200
commit35a41e63ebd5f6cf9d17419c150eb53a005d2e87 (patch)
treee0bcc21bbb1e7e200857cfbd52acb82b008a3a6d
parentDisplay version and last update in the footer (diff)
downloadglsamaker-35a41e63ebd5f6cf9d17419c150eb53a005d2e87.tar.gz
glsamaker-35a41e63ebd5f6cf9d17419c150eb53a005d2e87.tar.bz2
glsamaker-35a41e63ebd5f6cf9d17419c150eb53a005d2e87.zip
Add the initial version of the rewritten glsamaker
The glsamaker has been completly rewritten in go. It is using postgres instead of mysql now. The look and feel is based on tyrian. Signed-off-by: Max Magorsch <arzano@gentoo.org>
-rw-r--r--.gitignore26
-rw-r--r--.gitlab-ci.yml32
-rw-r--r--.rubocop.yml27
-rw-r--r--.rubocop_todo.yml1369
-rw-r--r--.travis.yml29
-rw-r--r--Capfile4
-rw-r--r--Dockerfile26
-rw-r--r--Dockerfile.dev10
-rw-r--r--Gemfile60
-rw-r--r--Gemfile.lock206
-rw-r--r--LICENSE661
-rw-r--r--README243
-rw-r--r--Rakefile12
-rw-r--r--app/assets/images/biglogo.pngbin23122 -> 0 bytes
-rw-r--r--app/assets/images/cvetool-logo.pngbin5036 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/access.pngbin729 -> 0 bytes
-rw-r--r--app/assets/images/icons/admin.pngbin584 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/affected.pngbin768 -> 0 bytes
-rw-r--r--app/assets/images/icons/approval.pngbin754 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/approved.pngbin724 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/arch.pngbin740 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/atom.pngbin760 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/auto.pngbin652 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/background-go.pngbin558 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/background.pngbin371 -> 0 bytes
-rw-r--r--app/assets/images/icons/bug-grey.pngbin1444 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/bug.pngbin704 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/bug_add.pngbin773 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/bug_new.pngbin817 -> 0 bytes
-rw-r--r--app/assets/images/icons/calendar-select-month.pngbin627 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/checkboxes.pngbin512 -> 0 bytes
-rw-r--r--app/assets/images/icons/close.pngbin321 -> 0 bytes
-rw-r--r--app/assets/images/icons/comment.pngbin413 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/commented.pngbin744 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/confidential.pngbin778 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/delete.pngbin663 -> 0 bytes
-rw-r--r--app/assets/images/icons/diff.pngbin616 -> 0 bytes
-rw-r--r--app/assets/images/icons/dock-right.pngbin622 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/document-go.pngbin613 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/document.pngbin485 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/draft.pngbin805 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/edit-small.pngbin384 -> 0 bytes
-rw-r--r--app/assets/images/icons/edit.pngbin450 -> 0 bytes
-rw-r--r--app/assets/images/icons/error.pngbin874 -> 0 bytes
-rw-r--r--app/assets/images/icons/flag-green.pngbin777 -> 0 bytes
-rw-r--r--app/assets/images/icons/flag.pngbin728 -> 0 bytes
-rw-r--r--app/assets/images/icons/glsa.pngbin649 -> 0 bytes
-rw-r--r--app/assets/images/icons/glsa_draft.pngbin762 -> 0 bytes
-rw-r--r--app/assets/images/icons/glsa_new.pngbin714 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/glsa_ready.pngbin812 -> 0 bytes
-rw-r--r--app/assets/images/icons/glsa_request.pngbin756 -> 0 bytes
-rw-r--r--app/assets/images/icons/glsa_sent.pngbin760 -> 0 bytes
-rw-r--r--app/assets/images/icons/impact.pngbin742 -> 0 bytes
-rw-r--r--app/assets/images/icons/info.pngbin723 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/keyword.pngbin730 -> 0 bytes
-rw-r--r--app/assets/images/icons/larr.pngbin539 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/less_width.pngbin391 -> 0 bytes
-rw-r--r--app/assets/images/icons/logout.pngbin688 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/metadata.pngbin470 -> 0 bytes
-rw-r--r--app/assets/images/icons/minus-small.pngbin908 -> 0 bytes
-rw-r--r--app/assets/images/icons/minus.pngbin259 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/more_width.pngbin440 -> 0 bytes
-rw-r--r--app/assets/images/icons/next.pngbin658 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/not-approved.pngbin729 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/note.pngbin435 -> 0 bytes
-rw-r--r--app/assets/images/icons/ok.pngbin744 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/package-add.pngbin634 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/package-go.pngbin656 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/package-remove.pngbin554 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/package.pngbin524 -> 0 bytes
-rw-r--r--app/assets/images/icons/paste.pngbin605 -> 0 bytes
-rw-r--r--app/assets/images/icons/pending.pngbin748 -> 0 bytes
-rw-r--r--app/assets/images/icons/permission.pngbin612 -> 0 bytes
-rw-r--r--app/assets/images/icons/plus-small.pngbin992 -> 0 bytes
-rw-r--r--app/assets/images/icons/plus.pngbin476 -> 0 bytes
-rw-r--r--app/assets/images/icons/profile.pngbin533 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/public.pngbin687 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/reference-add.pngbin630 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/reference-remove.pngbin585 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/reference.pngbin537 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/refresh.pngbin835 -> 0 bytes
-rw-r--r--app/assets/images/icons/rejection.pngbin866 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/request.pngbin703 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/resolution-go.pngbin845 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/resolution.pngbin687 -> 0 bytes
-rw-r--r--app/assets/images/icons/restricted.pngbin501 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/sent.pngbin640 -> 0 bytes
-rw-r--r--app/assets/images/icons/severity.pngbin621 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/stamp.pngbin621 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/status-green.pngbin433 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/status-grey.pngbin448 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/status-red.pngbin439 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/status-yellow.pngbin457 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/switch.pngbin541 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/synopsis.pngbin522 -> 0 bytes
-rw-r--r--app/assets/images/icons/template.pngbin630 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/time.pngbin854 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/title.pngbin534 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/toolbox.pngbin501 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/txt.pngbin592 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/unaffected.pngbin801 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/user.pngbin511 -> 0 bytes
-rw-r--r--app/assets/images/icons/user_add.pngbin746 -> 0 bytes
-rw-r--r--app/assets/images/icons/warning.pngbin666 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/workaround-no.pngbin789 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/workaround.pngbin778 -> 0 bytes
-rw-r--r--app/assets/images/icons/xml.pngbin630 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/zoom_100.pngbin772 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/zoom_in.pngbin765 -> 0 bytes
-rwxr-xr-xapp/assets/images/icons/zoom_out.pngbin742 -> 0 bytes
-rw-r--r--app/assets/images/intel-editor.pngbin1316 -> 0 bytes
-rw-r--r--app/assets/images/line.pngbin42782 -> 0 bytes
-rw-r--r--app/assets/images/login-bg.pngbin32753 -> 0 bytes
-rw-r--r--app/assets/images/logo.pngbin10091 -> 0 bytes
-rw-r--r--app/assets/images/menu-left.pngbin1314 -> 0 bytes
-rw-r--r--app/assets/images/menu-right.pngbin1398 -> 0 bytes
-rw-r--r--app/assets/images/menubg.pngbin1412 -> 0 bytes
-rw-r--r--app/assets/images/rails.pngbin6646 -> 0 bytes
-rw-r--r--app/assets/images/separator.pngbin212 -> 0 bytes
-rw-r--r--app/assets/images/spinner.gifbin7823 -> 0 bytes
-rw-r--r--app/assets/javascripts/application.js14
-rw-r--r--app/assets/javascripts/glsamaker.js.erb151
-rw-r--r--app/assets/javascripts/glsamaker_edit.js181
-rw-r--r--app/assets/javascripts/glsamaker_misc.js102
-rw-r--r--app/assets/javascripts/jsui.js8
-rw-r--r--app/assets/javascripts/modalbox.js593
-rw-r--r--app/assets/javascripts/searchable.js71
-rw-r--r--app/assets/javascripts/uki-more.js827
-rw-r--r--app/assets/javascripts/uki.js8022
-rw-r--r--app/assets/stylesheets/admin.css54
-rw-r--r--app/assets/stylesheets/application.css10
-rw-r--r--app/assets/stylesheets/cve.css23
-rw-r--r--app/assets/stylesheets/login.css91
-rw-r--r--app/assets/stylesheets/modalbox.css122
-rw-r--r--app/assets/stylesheets/screen.css.erb662
-rw-r--r--app/controllers/admin/index_controller.rb6
-rw-r--r--app/controllers/admin/templates_controller.rb85
-rw-r--r--app/controllers/admin/users_controller.rb71
-rw-r--r--app/controllers/application_controller.rb32
-rw-r--r--app/controllers/bug_controller.rb39
-rw-r--r--app/controllers/bugs_controller.rb59
-rw-r--r--app/controllers/comments_controller.rb76
-rw-r--r--app/controllers/cve_controller.rb323
-rw-r--r--app/controllers/glsa_controller.rb562
-rw-r--r--app/controllers/index_controller.rb65
-rw-r--r--app/controllers/search_controller.rb37
-rw-r--r--app/controllers/tools_controller.rb86
-rw-r--r--app/helpers/admin/index_helper.rb2
-rw-r--r--app/helpers/admin/templates_helper.rb6
-rw-r--r--app/helpers/admin/users_helper.rb18
-rw-r--r--app/helpers/application_helper.rb168
-rw-r--r--app/helpers/bug_helper.rb8
-rw-r--r--app/helpers/bugs_helper.rb2
-rw-r--r--app/helpers/comments_helper.rb2
-rw-r--r--app/helpers/cve_helper.rb14
-rw-r--r--app/helpers/glsa_helper.rb200
-rw-r--r--app/helpers/index_helper.rb14
-rw-r--r--app/helpers/search_helper.rb2
-rw-r--r--app/helpers/tools_helper.rb14
-rw-r--r--app/indices/indices.rb34
-rw-r--r--app/mailers/glsa_mailer.rb45
-rw-r--r--app/models/bug.rb46
-rw-r--r--app/models/comment.rb44
-rw-r--r--app/models/cpe.rb29
-rw-r--r--app/models/cve.rb177
-rw-r--r--app/models/cve_assignment.rb3
-rw-r--r--app/models/cve_change.rb4
-rw-r--r--app/models/cve_comment.rb4
-rw-r--r--app/models/cve_reference.rb3
-rw-r--r--app/models/glsa.rb311
-rw-r--r--app/models/package.rb48
-rw-r--r--app/models/reference.rb15
-rw-r--r--app/models/revision.rb103
-rw-r--r--app/models/template.rb2
-rw-r--r--app/models/user.rb65
-rw-r--r--app/views/admin/index/index.html.erb6
-rw-r--r--app/views/admin/templates/_form.html.erb35
-rw-r--r--app/views/admin/templates/edit.html.erb8
-rw-r--r--app/views/admin/templates/index.html.erb23
-rw-r--r--app/views/admin/templates/new.html.erb7
-rw-r--r--app/views/admin/templates/show.html.erb26
-rw-r--r--app/views/admin/users/_user.html.erb9
-rw-r--r--app/views/admin/users/create.html.erb2
-rw-r--r--app/views/admin/users/destroy.html.erb2
-rw-r--r--app/views/admin/users/edit.html.erb50
-rw-r--r--app/views/admin/users/index.html.erb19
-rw-r--r--app/views/admin/users/new.html.erb47
-rw-r--r--app/views/admin/users/show.html.erb34
-rw-r--r--app/views/admin/users/update.html.erb2
-rw-r--r--app/views/bug/bug.html.erb58
-rw-r--r--app/views/bug/history.html.erb43
-rw-r--r--app/views/bugs/create.html.erb2
-rw-r--r--app/views/bugs/create.js.erb6
-rw-r--r--app/views/bugs/destroy.html.erb2
-rw-r--r--app/views/bugs/new.html.erb34
-rw-r--r--app/views/bugs/show.html.erb2
-rw-r--r--app/views/comments/create.js.erb10
-rw-r--r--app/views/comments/destroy.html.erb2
-rw-r--r--app/views/comments/new.html.erb25
-rw-r--r--app/views/comments/show.html.erb2
-rw-r--r--app/views/cve/_assigning.js.erb94
-rw-r--r--app/views/cve/_filing.js.erb170
-rw-r--r--app/views/cve/_invalidate.js.erb71
-rw-r--r--app/views/cve/_key_events.js.erb71
-rw-r--r--app/views/cve/_later.js.erb65
-rw-r--r--app/views/cve/_new.js.erb75
-rw-r--r--app/views/cve/_nfu.js.erb65
-rw-r--r--app/views/cve/_toolbar.js.erb54
-rw-r--r--app/views/cve/_ui_misc.js.erb115
-rw-r--r--app/views/cve/actions.html.erb5
-rw-r--r--app/views/cve/assign_preview.html.erb17
-rw-r--r--app/views/cve/bug_preview.html.erb81
-rw-r--r--app/views/cve/changes.html.erb10
-rw-r--r--app/views/cve/comments.html.erb10
-rw-r--r--app/views/cve/general_info.html.erb11
-rw-r--r--app/views/cve/index.html.erb0
-rw-r--r--app/views/cve/info.html.erb140
-rw-r--r--app/views/cve/info.json.jbuilder5
-rw-r--r--app/views/cve/list.html.erb135
-rw-r--r--app/views/cve/new_preview.html.erb7
-rw-r--r--app/views/cve/packages.html.erb22
-rw-r--r--app/views/cve/references.html.erb10
-rw-r--r--app/views/glsa/_approval_row.erb5
-rw-r--r--app/views/glsa/_close_msg.txt.erb3
-rw-r--r--app/views/glsa/_comment.html.erb27
-rw-r--r--app/views/glsa/_comments.html.erb11
-rw-r--r--app/views/glsa/_edit_bug_row.html.erb13
-rw-r--r--app/views/glsa/_email_headers.txt.erb3
-rw-r--r--app/views/glsa/_glsa.xml.builder74
-rw-r--r--app/views/glsa/_glsa_row.html.erb31
-rw-r--r--app/views/glsa/_package.html.erb16
-rw-r--r--app/views/glsa/_reference.html.erb10
-rw-r--r--app/views/glsa/_show_bug_row.html.erb7
-rw-r--r--app/views/glsa/_show_package_row.txt.erb49
-rw-r--r--app/views/glsa/_show_reference.txt.erb2
-rw-r--r--app/views/glsa/_status_legend.html.erb38
-rw-r--r--app/views/glsa/_template_popups.html.erb8
-rw-r--r--app/views/glsa/archive.html.erb26
-rw-r--r--app/views/glsa/archive.js.erb2
-rw-r--r--app/views/glsa/comment.html.erb2
-rw-r--r--app/views/glsa/create.html.erb2
-rw-r--r--app/views/glsa/destroy.html.erb2
-rw-r--r--app/views/glsa/diff.html.erb19
-rw-r--r--app/views/glsa/drafts.html.erb16
-rw-r--r--app/views/glsa/edit.html.erb177
-rw-r--r--app/views/glsa/finalize_release.html.erb29
-rw-r--r--app/views/glsa/import_references.html.erb16
-rw-r--r--app/views/glsa/new-draft.html.erb1
-rw-r--r--app/views/glsa/new-request.html.erb60
-rw-r--r--app/views/glsa/new.html.erb11
-rw-r--r--app/views/glsa/prepare_release.html.erb112
-rw-r--r--app/views/glsa/release.html.erb31
-rw-r--r--app/views/glsa/requests.html.erb16
-rw-r--r--app/views/glsa/show.html.erb158
-rw-r--r--app/views/glsa/show.txt.erb116
-rw-r--r--app/views/glsa/show.xml.erb1
-rw-r--r--app/views/glsa/update.html.erb2
-rw-r--r--app/views/glsa_mailer/approval.text.erb23
-rw-r--r--app/views/glsa_mailer/comment.text.erb8
-rw-r--r--app/views/glsa_mailer/edit.text.erb8
-rw-r--r--app/views/glsa_mailer/new_request.text.erb13
-rw-r--r--app/views/glsa_mailer/text.text.erb4
-rw-r--r--app/views/index/about.html.erb29
-rw-r--r--app/views/index/error-access.html.erb7
-rw-r--r--app/views/index/error-disabled.html.erb5
-rw-r--r--app/views/index/error-system.html.erb8
-rw-r--r--app/views/index/error-user.html.erb7
-rw-r--r--app/views/index/index.html.erb18
-rw-r--r--app/views/index/profile.html.erb34
-rw-r--r--app/views/layouts/application.html.erb96
-rw-r--r--app/views/layouts/cve.html.erb16
-rw-r--r--app/views/layouts/none.html.erb1
-rw-r--r--app/views/layouts/notice.html.erb24
-rw-r--r--app/views/search/_cve_row.html.erb6
-rw-r--r--app/views/search/_cves.html.erb13
-rw-r--r--app/views/search/_glsas.html.erb14
-rw-r--r--app/views/search/results.html.erb19
-rw-r--r--app/views/tools/_cve.html.erb4
-rw-r--r--app/views/tools/ajaxbugs.html.erb10
-rw-r--r--app/views/tools/ajaxdescr.html.erb3
-rw-r--r--app/views/tools/background.html.erb3
-rw-r--r--app/views/tools/template.js.erb7
-rw-r--r--assets/.keep (renamed from app/mailers/.gitkeep)0
-rw-r--r--bin/.keep (renamed from app/models/.gitkeep)0
-rwxr-xr-xbin/bundle3
-rwxr-xr-xbin/rails4
-rwxr-xr-xbin/rake4
-rwxr-xr-xbin/setup29
-rw-r--r--config.ru4
-rw-r--r--config/application.rb38
-rw-r--r--config/boot.rb3
-rw-r--r--config/database.yml.mysql42
-rw-r--r--config/deploy.rb37
-rw-r--r--config/environment.rb9
-rw-r--r--config/environments/development.rb41
-rw-r--r--config/environments/production.rb83
-rw-r--r--config/environments/test.rb42
-rw-r--r--config/initializers/assets.rb11
-rw-r--r--config/initializers/backtrace_silencers.rb7
-rw-r--r--config/initializers/cookies_serializer.rb3
-rw-r--r--config/initializers/filter_parameter_logging.rb4
-rw-r--r--config/initializers/glsamaker-global.rb2
-rw-r--r--config/initializers/glsamaker.rb.sample48
-rw-r--r--config/initializers/glsamaker_constants.rb1
-rw-r--r--config/initializers/inflections.rb20
-rw-r--r--config/initializers/mime_types.rb7
-rw-r--r--config/initializers/session_store.rb3
-rw-r--r--config/initializers/time_formats.rb1
-rw-r--r--config/initializers/wrap_parameters.rb14
-rw-r--r--config/locales/en.yml23
-rw-r--r--config/routes.rb96
-rw-r--r--config/secrets.yml22
-rw-r--r--config/thinking_sphinx.yml9
-rw-r--r--db/migrate/20090314092539_create_users.rb21
-rw-r--r--db/migrate/20090314191650_create_glsas.rb22
-rw-r--r--db/migrate/20090314194257_add_glsa_user_constraints.rb13
-rw-r--r--db/migrate/20090314194659_create_revisions.rb32
-rw-r--r--db/migrate/20090314230516_create_references.rb18
-rw-r--r--db/migrate/20090315105049_create_bugs.rb19
-rw-r--r--db/migrate/20090315105326_add_references_revisions_constraint.rb9
-rw-r--r--db/migrate/20090315110025_create_comments.rb18
-rw-r--r--db/migrate/20090315110119_add_comment_constraints.rb11
-rw-r--r--db/migrate/20090410212514_add_user_id_to_revisions.rb9
-rw-r--r--db/migrate/20090410212600_add_revisions_user_id_constraint.rb9
-rw-r--r--db/migrate/20090419140216_create_sessions.rb16
-rw-r--r--db/migrate/20090501114107_add_status_cache_to_bugs.rb11
-rw-r--r--db/migrate/20100511192546_change_comment_type_to_rating.rb9
-rw-r--r--db/migrate/20100513183324_create_packages.rb21
-rw-r--r--db/migrate/20100813183543_create_cves.rb19
-rw-r--r--db/migrate/20100814103856_create_cve_references.rb19
-rw-r--r--db/migrate/20100814105152_create_cve_comments.rb21
-rw-r--r--db/migrate/20100814105345_create_cve_changes.rb20
-rw-r--r--db/migrate/20100814142647_create_cpes.rb27
-rw-r--r--db/migrate/20100902093457_create_cve_assignments.rb23
-rw-r--r--db/migrate/20100918223549_add_system_user.rb12
-rw-r--r--db/migrate/20110226204724_add_release_flag_to_revisions.rb11
-rw-r--r--db/migrate/20110827143514_create_templates.rb12
-rw-r--r--db/migrate/20110829174909_add_first_release_date_to_glsa.rb5
-rw-r--r--db/migrate/20170418102638_add_slots_to_packages.rb11
-rw-r--r--db/schema.rb239
-rw-r--r--db/seeds.rb7
-rw-r--r--doc/README_FOR_APP29
-rw-r--r--doc/app/Admin.html278
-rw-r--r--doc/app/Admin/IndexController.html317
-rw-r--r--doc/app/Admin/IndexHelper.html261
-rw-r--r--doc/app/Admin/TemplatesController.html569
-rw-r--r--doc/app/Admin/TemplatesHelper.html310
-rw-r--r--doc/app/Admin/UsersController.html568
-rw-r--r--doc/app/Admin/UsersHelper.html354
-rw-r--r--doc/app/ApplicationController.html344
-rw-r--r--doc/app/ApplicationHelper.html661
-rw-r--r--doc/app/Authentication.html464
-rw-r--r--doc/app/Authorization.html435
-rw-r--r--doc/app/Bug.html423
-rw-r--r--doc/app/BugController.html383
-rw-r--r--doc/app/BugHelper.html311
-rw-r--r--doc/app/BugsController.html449
-rw-r--r--doc/app/BugsHelper.html261
-rw-r--r--doc/app/Bugzilla.html619
-rw-r--r--doc/app/Bugzilla/Bug.html859
-rw-r--r--doc/app/Bugzilla/Bugzilla.html268
-rw-r--r--doc/app/Bugzilla/Bugzilla/Bugzilla.html268
-rw-r--r--doc/app/Bugzilla/Bugzilla/Bugzilla/Change.html461
-rw-r--r--doc/app/Bugzilla/Comment.html372
-rw-r--r--doc/app/Bugzilla/History.html470
-rw-r--r--doc/app/Comment.html293
-rw-r--r--doc/app/Comment/CommentValidator.html328
-rw-r--r--doc/app/CommentsController.html459
-rw-r--r--doc/app/CommentsHelper.html261
-rw-r--r--doc/app/Cpe.html434
-rw-r--r--doc/app/Cve.html821
-rw-r--r--doc/app/CveAssignment.html269
-rw-r--r--doc/app/CveChange.html269
-rw-r--r--doc/app/CveComment.html269
-rw-r--r--doc/app/CveController.html1175
-rw-r--r--doc/app/CveHelper.html318
-rw-r--r--doc/app/CveReference.html269
-rw-r--r--doc/app/GLSAReleaseError.html269
-rw-r--r--doc/app/Glsa.html1086
-rw-r--r--doc/app/GlsaController.html1231
-rw-r--r--doc/app/GlsaHelper.html876
-rw-r--r--doc/app/GlsaMailer.html440
-rw-r--r--doc/app/Glsamaker.html388
-rw-r--r--doc/app/Glsamaker/Bugs.html279
-rw-r--r--doc/app/Glsamaker/Bugs/ArchesMixin.html310
-rw-r--r--doc/app/Glsamaker/Bugs/Bug.html376
-rw-r--r--doc/app/Glsamaker/Bugs/BugReadyMixin.html317
-rw-r--r--doc/app/Glsamaker/Bugs/Status.html580
-rw-r--r--doc/app/Glsamaker/Bugs/StatusMixin.html320
-rw-r--r--doc/app/Glsamaker/Diff.html338
-rw-r--r--doc/app/Glsamaker/HTTP.html323
-rw-r--r--doc/app/Glsamaker/Helper.html285
-rw-r--r--doc/app/Glsamaker/Mail.html498
-rw-r--r--doc/app/Glsamaker/Portage.html567
-rw-r--r--doc/app/Glsamaker/Portage/Description.html436
-rw-r--r--doc/app/Glsamaker/XML.html323
-rw-r--r--doc/app/IndexController.html487
-rw-r--r--doc/app/IndexHelper.html263
-rw-r--r--doc/app/Package.html332
-rw-r--r--doc/app/Reference.html271
-rw-r--r--doc/app/Revision.html524
-rw-r--r--doc/app/SearchController.html378
-rw-r--r--doc/app/SearchHelper.html261
-rw-r--r--doc/app/String.html435
-rw-r--r--doc/app/Template.html269
-rw-r--r--doc/app/ToolsController.html448
-rw-r--r--doc/app/ToolsHelper.html263
-rw-r--r--doc/app/User.html444
-rw-r--r--doc/app/app/controllers/admin/index_controller_rb.html52
-rw-r--r--doc/app/app/controllers/admin/templates_controller_rb.html52
-rw-r--r--doc/app/app/controllers/admin/users_controller_rb.html52
-rw-r--r--doc/app/app/controllers/application_controller_rb.html64
-rw-r--r--doc/app/app/controllers/bug_controller_rb.html64
-rw-r--r--doc/app/app/controllers/bugs_controller_rb.html63
-rw-r--r--doc/app/app/controllers/comments_controller_rb.html63
-rw-r--r--doc/app/app/controllers/cve_controller_rb.html52
-rw-r--r--doc/app/app/controllers/glsa_controller_rb.html64
-rw-r--r--doc/app/app/controllers/index_controller_rb.html64
-rw-r--r--doc/app/app/controllers/search_controller_rb.html52
-rw-r--r--doc/app/app/controllers/tools_controller_rb.html64
-rw-r--r--doc/app/app/helpers/admin/index_helper_rb.html52
-rw-r--r--doc/app/app/helpers/admin/templates_helper_rb.html52
-rw-r--r--doc/app/app/helpers/admin/users_helper_rb.html52
-rw-r--r--doc/app/app/helpers/application_helper_rb.html65
-rw-r--r--doc/app/app/helpers/bug_helper_rb.html52
-rw-r--r--doc/app/app/helpers/bugs_helper_rb.html52
-rw-r--r--doc/app/app/helpers/comments_helper_rb.html52
-rw-r--r--doc/app/app/helpers/cve_helper_rb.html52
-rw-r--r--doc/app/app/helpers/glsa_helper_rb.html64
-rw-r--r--doc/app/app/helpers/index_helper_rb.html64
-rw-r--r--doc/app/app/helpers/search_helper_rb.html52
-rw-r--r--doc/app/app/helpers/tools_helper_rb.html64
-rw-r--r--doc/app/app/mailers/glsa_mailer_rb.html52
-rw-r--r--doc/app/app/models/bug_rb.html64
-rw-r--r--doc/app/app/models/comment_rb.html64
-rw-r--r--doc/app/app/models/cpe_rb.html63
-rw-r--r--doc/app/app/models/cve_assignment_rb.html52
-rw-r--r--doc/app/app/models/cve_change_rb.html52
-rw-r--r--doc/app/app/models/cve_comment_rb.html52
-rw-r--r--doc/app/app/models/cve_rb.html65
-rw-r--r--doc/app/app/models/cve_reference_rb.html52
-rw-r--r--doc/app/app/models/glsa_rb.html64
-rw-r--r--doc/app/app/models/package_rb.html64
-rw-r--r--doc/app/app/models/reference_rb.html64
-rw-r--r--doc/app/app/models/revision_rb.html66
-rw-r--r--doc/app/app/models/template_rb.html52
-rw-r--r--doc/app/app/models/user_rb.html64
-rw-r--r--doc/app/created.rid56
-rw-r--r--doc/app/doc/README_FOR_APP.html260
-rw-r--r--doc/app/images/brick.pngbin452 -> 0 bytes
-rw-r--r--doc/app/images/brick_link.pngbin764 -> 0 bytes
-rw-r--r--doc/app/images/bug.pngbin774 -> 0 bytes
-rw-r--r--doc/app/images/bullet_black.pngbin211 -> 0 bytes
-rw-r--r--doc/app/images/bullet_toggle_minus.pngbin207 -> 0 bytes
-rw-r--r--doc/app/images/bullet_toggle_plus.pngbin209 -> 0 bytes
-rw-r--r--doc/app/images/date.pngbin626 -> 0 bytes
-rw-r--r--doc/app/images/find.pngbin659 -> 0 bytes
-rw-r--r--doc/app/images/loadingAnimation.gifbin5886 -> 0 bytes
-rw-r--r--doc/app/images/macFFBgHack.pngbin207 -> 0 bytes
-rw-r--r--doc/app/images/package.pngbin853 -> 0 bytes
-rw-r--r--doc/app/images/page_green.pngbin621 -> 0 bytes
-rw-r--r--doc/app/images/page_white_text.pngbin342 -> 0 bytes
-rw-r--r--doc/app/images/page_white_width.pngbin309 -> 0 bytes
-rw-r--r--doc/app/images/plugin.pngbin591 -> 0 bytes
-rw-r--r--doc/app/images/ruby.pngbin592 -> 0 bytes
-rw-r--r--doc/app/images/tag_green.pngbin613 -> 0 bytes
-rw-r--r--doc/app/images/wrench.pngbin610 -> 0 bytes
-rw-r--r--doc/app/images/wrench_orange.pngbin584 -> 0 bytes
-rw-r--r--doc/app/images/zoom.pngbin692 -> 0 bytes
-rw-r--r--doc/app/index.html612
-rw-r--r--doc/app/js/darkfish.js116
-rw-r--r--doc/app/js/jquery.js32
-rw-r--r--doc/app/js/quicksearch.js114
-rw-r--r--doc/app/js/thickbox-compressed.js10
-rw-r--r--doc/app/lib/authentication_rb.html64
-rw-r--r--doc/app/lib/authorization_rb.html63
-rw-r--r--doc/app/lib/bugzilla/bug_rb.html63
-rw-r--r--doc/app/lib/bugzilla/comment_rb.html63
-rw-r--r--doc/app/lib/bugzilla/history_rb.html54
-rw-r--r--doc/app/lib/bugzilla_rb.html72
-rw-r--r--doc/app/lib/glsamaker/bugs_rb.html66
-rw-r--r--doc/app/lib/glsamaker/diff_rb.html69
-rw-r--r--doc/app/lib/glsamaker/helpers_rb.html63
-rw-r--r--doc/app/lib/glsamaker/http_rb.html68
-rw-r--r--doc/app/lib/glsamaker/mail_rb.html63
-rw-r--r--doc/app/lib/glsamaker/portage_rb.html66
-rw-r--r--doc/app/lib/glsamaker/xml_rb.html63
-rw-r--r--doc/app/lib/glsamaker_rb.html76
-rw-r--r--doc/app/lib/tasks/utils_rb.html64
-rw-r--r--doc/app/rdoc.css763
-rw-r--r--doc/diagrams/models.dot18
-rw-r--r--doc/diagrams/models.pngbin112432 -> 0 bytes
-rw-r--r--docker-compose.override.yml60
-rw-r--r--docker-compose.yml55
-rw-r--r--glsamaker.go60
-rw-r--r--go.mod13
-rw-r--r--go.sum739
-rw-r--r--lib/assets/.gitkeep0
-rw-r--r--lib/authentication.rb111
-rw-r--r--lib/authorization.rb49
-rw-r--r--lib/bugzilla.rb195
-rw-r--r--lib/bugzilla/bug.rb143
-rw-r--r--lib/bugzilla/comment.rb22
-rw-r--r--lib/bugzilla/history.rb104
-rw-r--r--lib/glsamaker.rb23
-rw-r--r--lib/glsamaker/bugs.rb182
-rw-r--r--lib/glsamaker/diff.rb53
-rw-r--r--lib/glsamaker/helpers.rb21
-rw-r--r--lib/glsamaker/http.rb37
-rw-r--r--lib/glsamaker/mail.rb106
-rw-r--r--lib/glsamaker/portage.rb194
-rw-r--r--lib/glsamaker/spelling.rb48
-rw-r--r--lib/glsamaker/xml.rb31
-rw-r--r--lib/kramdown_ext.rb20
-rw-r--r--lib/tasks/.gitkeep0
-rw-r--r--lib/tasks/cve.rake366
-rw-r--r--lib/tasks/import.rake256
-rw-r--r--lib/tasks/rcov.rake81
-rw-r--r--lib/tasks/utils.rb35
-rw-r--r--package-lock.json8682
-rw-r--r--package.json41
-rw-r--r--pkg/app/handler/about/index.go28
-rw-r--r--pkg/app/handler/about/utils.go58
-rw-r--r--pkg/app/handler/account/password.go109
-rw-r--r--pkg/app/handler/account/twofactor.go200
-rw-r--r--pkg/app/handler/admin/edit.go293
-rw-r--r--pkg/app/handler/admin/index.go27
-rw-r--r--pkg/app/handler/admin/passwordreset.go73
-rw-r--r--pkg/app/handler/admin/utils.go112
-rw-r--r--pkg/app/handler/all/index.go40
-rw-r--r--pkg/app/handler/all/utils.go36
-rw-r--r--pkg/app/handler/archive/index.go44
-rw-r--r--pkg/app/handler/archive/utils.go36
-rw-r--r--pkg/app/handler/authentication/accessDenied.go10
-rw-r--r--pkg/app/handler/authentication/auth_session/authsession.go177
-rw-r--r--pkg/app/handler/authentication/login.go100
-rw-r--r--pkg/app/handler/authentication/logout.go29
-rw-r--r--pkg/app/handler/authentication/templates/admin.go36
-rw-r--r--pkg/app/handler/authentication/templates/login.go32
-rw-r--r--pkg/app/handler/authentication/templates/totp.go23
-rw-r--r--pkg/app/handler/authentication/templates/webauthn.go23
-rw-r--r--pkg/app/handler/authentication/totp/totp.go60
-rw-r--r--pkg/app/handler/authentication/utils/utils.go81
-rw-r--r--pkg/app/handler/authentication/webauthn/login.go118
-rw-r--r--pkg/app/handler/authentication/webauthn/register.go111
-rw-r--r--pkg/app/handler/cvetool/bug.go85
-rw-r--r--pkg/app/handler/cvetool/comments.go74
-rw-r--r--pkg/app/handler/cvetool/index.go169
-rw-r--r--pkg/app/handler/cvetool/state.go75
-rw-r--r--pkg/app/handler/cvetool/update.go23
-rw-r--r--pkg/app/handler/cvetool/utils.go47
-rw-r--r--pkg/app/handler/dashboard/index.go58
-rw-r--r--pkg/app/handler/dashboard/utils.go44
-rw-r--r--pkg/app/handler/drafts/index.go44
-rw-r--r--pkg/app/handler/drafts/utils.go37
-rw-r--r--pkg/app/handler/glsa/bugs.go63
-rw-r--r--pkg/app/handler/glsa/comments.go110
-rw-r--r--pkg/app/handler/glsa/delete.go42
-rw-r--r--pkg/app/handler/glsa/edit.go185
-rw-r--r--pkg/app/handler/glsa/release.go70
-rw-r--r--pkg/app/handler/glsa/utils.go79
-rw-r--r--pkg/app/handler/glsa/view.go48
-rw-r--r--pkg/app/handler/home/index.go16
-rw-r--r--pkg/app/handler/home/utils.go34
-rw-r--r--pkg/app/handler/newRequest/index.go186
-rw-r--r--pkg/app/handler/newRequest/utils.go36
-rw-r--r--pkg/app/handler/requests/index.go44
-rw-r--r--pkg/app/handler/requests/utils.go36
-rw-r--r--pkg/app/handler/search/index.go126
-rw-r--r--pkg/app/handler/search/utils.go38
-rw-r--r--pkg/app/handler/statistics/index.go42
-rw-r--r--pkg/app/handler/statistics/utils.go48
-rw-r--r--pkg/app/serve.go214
-rw-r--r--pkg/app/utils.go89
-rw-r--r--pkg/config/config.go63
-rw-r--r--pkg/cveimport/update.go96
-rw-r--r--pkg/database/connection/connection.go42
-rw-r--r--pkg/database/init.go23
-rw-r--r--pkg/database/schema/create.go36
-rw-r--r--pkg/logger/loggers.go39
-rw-r--r--pkg/models/application.go69
-rw-r--r--pkg/models/bugzilla/bugs.go156
-rw-r--r--pkg/models/cve/cve.go86
-rw-r--r--pkg/models/cve/cvss.go62
-rw-r--r--pkg/models/cve/feed.go116
-rw-r--r--pkg/models/glsa.go115
-rw-r--r--pkg/models/gpackage/package.go11
-rw-r--r--pkg/models/session.go15
-rw-r--r--pkg/models/users/user.go214
-rw-r--r--public/404.html30
-rw-r--r--public/422.html26
-rw-r--r--public/500.html29
-rw-r--r--public/error-404.pngbin18691 -> 0 bytes
-rw-r--r--public/error-500.pngbin7810 -> 0 bytes
-rw-r--r--public/favicon.ico0
-rw-r--r--public/robots.txt5
-rw-r--r--public/xsl/ads.xsl103
-rw-r--r--public/xsl/content.xsl35
-rw-r--r--public/xsl/devmap.xsl86
-rw-r--r--public/xsl/doc-struct.xsl185
-rw-r--r--public/xsl/glsa.xsl412
-rw-r--r--public/xsl/guide.xsl2015
-rw-r--r--public/xsl/handbook.xsl323
-rw-r--r--public/xsl/inserts.xsl401
-rw-r--r--public/xsl/mail.xsl183
-rw-r--r--public/xsl/menu.xsl57
-rw-r--r--public/xsl/util.xsl62
-rwxr-xr-xscript/config_init44
-rwxr-xr-xscript/db-backup29
-rwxr-xr-xscript/rails6
-rwxr-xr-xscript/update-portage-cache14
-rw-r--r--test/fixtures/.gitkeep0
-rw-r--r--test/fixtures/bugs.yml11
-rw-r--r--test/fixtures/comments.yml13
-rw-r--r--test/fixtures/cpes.yml7
-rw-r--r--test/fixtures/cve_assignments.yml9
-rw-r--r--test/fixtures/cve_changes.yml7
-rw-r--r--test/fixtures/cve_comments.yml7
-rw-r--r--test/fixtures/cve_references.yml7
-rw-r--r--test/fixtures/cves.yml13
-rw-r--r--test/fixtures/glsa_mailer/approval3
-rw-r--r--test/fixtures/glsa_mailer/comment3
-rw-r--r--test/fixtures/glsa_mailer/edit3
-rw-r--r--test/fixtures/glsa_mailer/request3
-rw-r--r--test/fixtures/glsa_mailer/sent3
-rw-r--r--test/fixtures/glsas.yml24
-rw-r--r--test/fixtures/packages.yml19
-rw-r--r--test/fixtures/references.yml11
-rw-r--r--test/fixtures/revisions.yml58
-rw-r--r--test/fixtures/templates.yml13
-rw-r--r--test/fixtures/users.yml49
-rw-r--r--test/functional/.gitkeep0
-rw-r--r--test/functional/admin/index_controller_test.rb15
-rw-r--r--test/functional/admin/templates_controller_test.rb56
-rw-r--r--test/functional/admin/users_controller_test.rb15
-rw-r--r--test/functional/bug_controller_test.rb8
-rw-r--r--test/functional/bugs_controller_test.rb4
-rw-r--r--test/functional/comments_controller_test.rb4
-rw-r--r--test/functional/cve_controller_test.rb8
-rw-r--r--test/functional/glsa_controller_test.rb83
-rw-r--r--test/functional/glsa_mailer_test.rb7
-rw-r--r--test/functional/index_controller_test.rb8
-rw-r--r--test/functional/search_controller_test.rb7
-rw-r--r--test/functional/tools_controller_test.rb8
-rw-r--r--test/integration/.gitkeep0
-rw-r--r--test/integration/authentication_test.rb20
-rw-r--r--test/test_helper.rb48
-rw-r--r--test/unit/.gitkeep0
-rw-r--r--test/unit/bug_test.rb8
-rw-r--r--test/unit/comment_test.rb54
-rw-r--r--test/unit/cpe_test.rb8
-rw-r--r--test/unit/cve_assignment_test.rb8
-rw-r--r--test/unit/cve_change_test.rb8
-rw-r--r--test/unit/cve_comment_test.rb8
-rw-r--r--test/unit/cve_reference_test.rb8
-rw-r--r--test/unit/cve_test.rb92
-rw-r--r--test/unit/glsa_mailer_test.rb4
-rw-r--r--test/unit/glsa_test.rb55
-rw-r--r--test/unit/helpers/bug_helper_test.rb4
-rw-r--r--test/unit/helpers/bugs_helper_test.rb4
-rw-r--r--test/unit/helpers/comments_helper_test.rb4
-rw-r--r--test/unit/helpers/cve_helper_test.rb4
-rw-r--r--test/unit/helpers/glsa_helper_test.rb4
-rw-r--r--test/unit/helpers/index_helper_test.rb4
-rw-r--r--test/unit/helpers/search_helper_test.rb4
-rw-r--r--test/unit/helpers/templates_helper_test.rb4
-rw-r--r--test/unit/helpers/tools_helper_test.rb4
-rw-r--r--test/unit/helpers/user_helper_test.rb4
-rw-r--r--test/unit/package_test.rb8
-rw-r--r--test/unit/reference_test.rb8
-rw-r--r--test/unit/revision_test.rb47
-rw-r--r--test/unit/template_test.rb7
-rw-r--r--test/unit/user_test.rb47
-rw-r--r--tmp/cache/.gitignore0
-rw-r--r--tmp/pids/.gitignore0
-rw-r--r--tmp/sessions/.gitignore0
-rw-r--r--tmp/sockets/.gitignore0
-rw-r--r--vendor/assets/stylesheets/.gitkeep0
-rw-r--r--vendor/dictionaries/README_en_US.txt278
-rw-r--r--vendor/dictionaries/en_US.aff3107
-rw-r--r--vendor/dictionaries/en_US.dic52895
-rw-r--r--vendor/plugins/.gitignore0
-rw-r--r--vendor/plugins/.gitkeep0
-rw-r--r--web/packs/account.js81
-rw-r--r--web/packs/admin.js60
-rw-r--r--web/packs/application.js69
-rw-r--r--web/packs/edit.js235
-rw-r--r--web/packs/glsa.js114
-rw-r--r--web/packs/newglsa.js58
-rw-r--r--web/packs/src/javascript/all.js37
-rw-r--r--web/packs/src/javascript/archive.js42
-rw-r--r--web/packs/src/javascript/cvetool.js535
-rw-r--r--web/packs/src/javascript/drafts.js38
-rw-r--r--web/packs/src/javascript/requests.js37
-rw-r--r--web/packs/src/stylesheets/application.scss11
-rw-r--r--web/packs/src/stylesheets/index.scss27
-rw-r--r--web/packs/statistics.js15
-rw-r--r--web/packs/stylesheets.js1
-rw-r--r--web/templates/about/about.tmpl31
-rw-r--r--web/templates/about/aboutCLI.tmpl30
-rw-r--r--web/templates/about/aboutSearch.tmpl71
-rw-r--r--web/templates/account/2fa.tmpl186
-rw-r--r--web/templates/account/password/forcedchange.tmpl98
-rw-r--r--web/templates/account/password/normalchange.tmpl45
-rw-r--r--web/templates/account/password/password.tmpl5
-rw-r--r--web/templates/admin/components/global.tmpl45
-rw-r--r--web/templates/admin/components/permissions.tmpl424
-rw-r--r--web/templates/admin/components/templates.tmpl10
-rw-r--r--web/templates/admin/components/users.tmpl226
-rw-r--r--web/templates/admin/edit/permissions.tmpl36
-rw-r--r--web/templates/admin/edit/users.tmpl37
-rw-r--r--web/templates/admin/passwordreset.tmpl35
-rw-r--r--web/templates/admin/view.tmpl41
-rw-r--r--web/templates/all/all.tmpl86
-rw-r--r--web/templates/archive/archive.tmpl75
-rw-r--r--web/templates/authentication/accessDenied.tmpl26
-rw-r--r--web/templates/authentication/login.tmpl113
-rw-r--r--web/templates/authentication/totp.tmpl94
-rw-r--r--web/templates/authentication/webauthn.tmpl204
-rw-r--r--web/templates/dashboard/dashboard.tmpl158
-rw-r--r--web/templates/drafts/drafts.tmpl84
-rw-r--r--web/templates/glsa/edit.tmpl768
-rw-r--r--web/templates/glsa/show.tmpl495
-rw-r--r--web/templates/home/home.tmpl166
-rw-r--r--web/templates/index/show.tmpl85
-rw-r--r--web/templates/index/showFullscreen.tmpl80
-rw-r--r--web/templates/layout/footer.tmpl50
-rw-r--r--web/templates/layout/head.tmpl12
-rw-r--r--web/templates/layout/header.tmpl6
-rw-r--r--web/templates/layout/sitetitle.tmpl37
-rw-r--r--web/templates/layout/tyriannav.tmpl72
-rw-r--r--web/templates/new/new.tmpl282
-rw-r--r--web/templates/requests/requests.tmpl84
-rw-r--r--web/templates/search/search.tmpl84
-rw-r--r--web/templates/statistics/statistics.tmpl89
-rw-r--r--webpack.config.js90
736 files changed, 20803 insertions, 117936 deletions
diff --git a/.gitignore b/.gitignore
index 66aa48d..07a09c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,5 @@
-*.swp
-.DS_Store
-log/*
-tmp/*
-db/*.sqlite*
-config/database.yml
-config/*private*
-config/initializers/glsamaker.rb
-config/initializers/secret_token.rb
-public/stylesheets/all.css
-public/javascripts/all.js
-/.loadpath
-/MYTODO
-coverage
+node_modules/
+assets/
.idea
-.rvmrc
-*.tmproj
-*.sphinx.conf
-db/sphinx
-.bundle
-vendor
-Gemfile.lock
-doc/app/.cache/*
+
+.bin/glsamaker
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..d739110
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,32 @@
+stages:
+ - build
+ - test
+
+info:
+ stage: .pre
+ script:
+ - docker info
+
+build:
+ stage: build
+ variables:
+ IMAGE_TAG: $CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$CI_COMMIT_SHA
+ LATEST_IMAGE_TAG: $CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:latest
+ script:
+ - echo $IMAGE_TAG
+ - echo $LATEST_IMAGE_TAG
+ - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin
+ - docker pull $LATEST_IMAGE_TAG || true
+ - docker build --cache-from $LATEST_IMAGE_TAG -t $IMAGE_TAG -t $LATEST_IMAGE_TAG .
+ - docker push $LATEST_IMAGE_TAG
+ - docker push $IMAGE_TAG
+
+include:
+ - template: Dependency-Scanning.gitlab-ci.yml
+ - template: Container-Scanning.gitlab-ci.yml
+ - template: SAST.gitlab-ci.yml
+
+variables:
+ DS_DISABLE_DIND: "true"
+ SAST_DISABLE_DIND: "true"
+
diff --git a/.rubocop.yml b/.rubocop.yml
deleted file mode 100644
index d379a78..0000000
--- a/.rubocop.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-inherit_from: .rubocop_todo.yml
-
-require:
- - rubocop-performance
- - rubocop-rails
-
-AllCops:
- TargetRubyVersion: 2.4
- TargetRailsVersion: 4.2
-
-Rails:
- Enabled: true
-
-Style/AsciiComments:
- Enabled: false
-
-Style/FormatString:
- Enabled: false
-
-Style/Documentation:
- Enabled: false
-
-Style/PerlBackrefs:
- Enabled: false
-
-Metrics/ModuleLength:
- Max: 200
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
deleted file mode 100644
index e265d63..0000000
--- a/.rubocop_todo.yml
+++ /dev/null
@@ -1,1369 +0,0 @@
-# This configuration was generated by
-# `rubocop --auto-gen-config`
-# on 2019-07-23 23:27:07 +0200 using RuboCop version 0.73.0.
-# The point is for the user to remove these configuration records
-# one by one as the offenses are removed from the code base.
-# Note that changes in the inspected code, or installation of new
-# versions of RuboCop, may require this file to be generated again.
-
-# Offense count: 7
-# Cop supports --auto-correct.
-# Configuration parameters: TreatCommentsAsGroupSeparators, Include.
-# Include: **/*.gemfile, **/Gemfile, **/gems.rb
-Bundler/OrderedGems:
- Exclude:
- - 'Gemfile'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentationWidth.
-# SupportedStyles: outdent, indent
-Layout/AccessModifierIndentation:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Layout/AlignArray:
- Exclude:
- - 'lib/glsamaker/bugs.rb'
-
-# Offense count: 22
-# Cop supports --auto-correct.
-# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
-# SupportedHashRocketStyles: key, separator, table
-# SupportedColonStyles: key, separator, table
-# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
-Layout/AlignHash:
- Exclude:
- - 'app/mailers/glsa_mailer.rb'
- - 'app/models/package.rb'
- - 'app/views/glsa/_glsa.xml.builder'
- - 'lib/glsamaker/portage.rb'
- - 'lib/tasks/cve.rake'
- - 'test/unit/user_test.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/BlockEndNewline:
- Exclude:
- - 'app/controllers/cve_controller.rb'
-
-# Offense count: 11
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentOneStep, IndentationWidth.
-# SupportedStyles: case, end
-Layout/CaseIndentation:
- Exclude:
- - 'lib/tasks/rcov.rake'
- - 'test/test_helper.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Layout/ClosingParenthesisIndentation:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/application_helper.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/CommentIndentation:
- Exclude:
- - 'Gemfile'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: leading, trailing
-Layout/DotPosition:
- Exclude:
- - 'app/helpers/application_helper.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/ElseAlignment:
- Exclude:
- - 'app/views/glsa/_glsa.xml.builder'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: AllowBorderComment, AllowMarginComment.
-Layout/EmptyComment:
- Exclude:
- - 'config/routes.rb'
-
-# Offense count: 16
-# Cop supports --auto-correct.
-Layout/EmptyLineAfterGuardClause:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/models/glsa.rb'
- - 'lib/glsamaker/portage.rb'
- - 'test/test_helper.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/EmptyLineAfterMagicComment:
- Exclude:
- - 'db/schema.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: AllowAdjacentOneLineDefs, NumberOfEmptyLines.
-Layout/EmptyLineBetweenDefs:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/EmptyLines:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
-
-# Offense count: 14
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: around, only_before
-Layout/EmptyLinesAroundAccessModifier:
- Exclude:
- - 'app/controllers/application_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/glsa_helper.rb'
- - 'lib/authentication.rb'
- - 'lib/bugzilla.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/glsamaker/helpers.rb'
- - 'lib/glsamaker/mail.rb'
- - 'lib/glsamaker/portage.rb'
- - 'lib/glsamaker/xml.rb'
- - 'lib/tasks/utils.rb'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: empty_lines, no_empty_lines
-Layout/EmptyLinesAroundBlockBody:
- Exclude:
- - 'config/environments/production.rb'
- - 'config/routes.rb'
- - 'db/schema.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
-Layout/EmptyLinesAroundClassBody:
- Exclude:
- - 'app/controllers/bug_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/models/glsa.rb'
- - 'lib/glsamaker/bugs.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Layout/EmptyLinesAroundMethodBody:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'lib/bugzilla.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines
-Layout/EmptyLinesAroundModuleBody:
- Exclude:
- - 'lib/glsamaker/diff.rb'
- - 'lib/glsamaker/mail.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyleAlignWith, AutoCorrect, Severity.
-# SupportedStylesAlignWith: keyword, variable, start_of_line
-Layout/EndAlignment:
- Exclude:
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 18
-# Cop supports --auto-correct.
-# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
-Layout/ExtraSpacing:
- Exclude:
- - 'app/controllers/comments_controller.rb'
- - 'app/helpers/glsa_helper.rb'
- - 'app/views/cve/info.json.jbuilder'
- - 'bin/setup'
- - 'config.ru'
- - 'db/schema.rb'
- - 'script/db-backup'
- - 'script/rails'
-
-# Offense count: 4
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentationWidth.
-# SupportedStyles: consistent, consistent_relative_to_receiver, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
-Layout/IndentFirstArgument:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/application_helper.rb'
- - 'app/helpers/glsa_helper.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: IndentationWidth.
-# SupportedStyles: special_inside_parentheses, consistent, align_brackets
-Layout/IndentFirstArrayElement:
- EnforcedStyle: consistent
-
-# Offense count: 7
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentationWidth.
-# SupportedStyles: special_inside_parentheses, consistent, align_braces
-Layout/IndentFirstHashElement:
- Exclude:
- - 'app/models/package.rb'
- - 'lib/bugzilla.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: normal, indented_internal_methods
-Layout/IndentationConsistency:
- Exclude:
- - 'app/models/glsa.rb'
- - 'lib/authentication.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 25
-# Cop supports --auto-correct.
-# Configuration parameters: Width, IgnoredPatterns.
-Layout/IndentationWidth:
- Exclude:
- - 'app/views/glsa/_glsa.xml.builder'
- - 'db/migrate/20100814103856_create_cve_references.rb'
- - 'lib/authentication.rb'
- - 'lib/glsamaker/spelling.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 31
-# Cop supports --auto-correct.
-# Configuration parameters: AllowDoxygenCommentStyle.
-Layout/LeadingCommentSpace:
- Exclude:
- - 'Gemfile'
- - 'app/controllers/application_controller.rb'
- - 'lib/bugzilla.rb'
- - 'lib/glsamaker.rb'
- - 'lib/tasks/import.rake'
- - 'script/db-backup'
- - 'test/unit/revision_test.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: symmetrical, new_line, same_line
-Layout/MultilineMethodCallBraceLayout:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentationWidth.
-# SupportedStyles: aligned, indented, indented_relative_to_receiver
-Layout/MultilineMethodCallIndentation:
- Exclude:
- - 'app/helpers/application_helper.rb'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentationWidth.
-# SupportedStyles: aligned, indented
-Layout/MultilineOperationIndentation:
- Exclude:
- - 'db/migrate/20100918223549_add_system_user.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/RescueEnsureAlignment:
- Exclude:
- - 'app/controllers/cve_controller.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-Layout/SpaceAfterComma:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
- - 'config/deploy.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyleInsidePipes.
-# SupportedStylesInsidePipes: space, no_space
-Layout/SpaceAroundBlockParameters:
- Exclude:
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 11
-# Cop supports --auto-correct.
-# Configuration parameters: AllowForAlignment.
-Layout/SpaceAroundOperators:
- Exclude:
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/cve.rb'
- - 'app/models/package.rb'
- - 'script/db-backup'
-
-# Offense count: 22
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
-# SupportedStyles: space, no_space
-# SupportedStylesForEmptyBraces: space, no_space
-Layout/SpaceBeforeBlockBraces:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/helpers/admin/templates_helper.rb'
- - 'app/helpers/admin/users_helper.rb'
- - 'lib/tasks/rcov.rake'
- - 'test/unit/glsa_test.rb'
- - 'test/unit/revision_test.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Layout/SpaceBeforeComma:
- Exclude:
- - 'config/routes.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-Layout/SpaceBeforeSemicolon:
- Exclude:
- - 'config/deploy.rb'
- - 'lib/bugzilla.rb'
-
-# Offense count: 72
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
-# SupportedStyles: space, no_space
-# SupportedStylesForEmptyBraces: space, no_space
-Layout/SpaceInsideBlockBraces:
- Enabled: false
-
-# Offense count: 67
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
-# SupportedStyles: space, no_space, compact
-# SupportedStylesForEmptyBraces: space, no_space
-Layout/SpaceInsideHashLiteralBraces:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/index_controller.rb'
- - 'app/controllers/tools_controller.rb'
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/comment.rb'
- - 'app/models/glsa.rb'
- - 'app/views/glsa/_glsa.xml.builder'
- - 'config/deploy.rb'
- - 'lib/bugzilla.rb'
- - 'lib/glsamaker/http.rb'
- - 'lib/glsamaker/xml.rb'
- - 'test/test_helper.rb'
- - 'test/unit/glsa_test.rb'
-
-# Offense count: 8
-# Cop supports --auto-correct.
-Layout/SpaceInsidePercentLiteralDelimiters:
- Exclude:
- - 'config/application.rb'
- - 'config/initializers/glsamaker-global.rb'
- - 'lib/bugzilla.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 7
-# Cop supports --auto-correct.
-# Configuration parameters: IndentationWidth.
-Layout/Tab:
- Exclude:
- - 'app/views/glsa/_glsa.xml.builder'
-
-# Offense count: 286
-# Cop supports --auto-correct.
-# Configuration parameters: AllowInHeredoc.
-Layout/TrailingWhitespace:
- Enabled: false
-
-# Offense count: 1
-Lint/AmbiguousBlockAssociation:
- Exclude:
- - 'app/views/cve/info.json.jbuilder'
-
-# Offense count: 1
-Lint/DuplicateMethods:
- Exclude:
- - 'lib/bugzilla/bug.rb'
-
-# Offense count: 2
-# Configuration parameters: AllowComments.
-Lint/HandleExceptions:
- Exclude:
- - 'Rakefile'
- - 'app/controllers/bugs_controller.rb'
-
-# Offense count: 1
-Lint/IneffectiveAccessModifier:
- Exclude:
- - 'lib/authentication.rb'
-
-# Offense count: 2
-Lint/NestedMethodDefinition:
- Exclude:
- - 'app/models/cve.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 3
-Lint/NonLocalExitFromIterator:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
-
-# Offense count: 38
-Lint/RescueException:
- Exclude:
- - 'app/controllers/bugs_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/tools_controller.rb'
- - 'app/models/bug.rb'
- - 'app/models/glsa.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/bugzilla/history.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/tasks/rcov.rake'
- - 'script/config_init'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Lint/ScriptPermission:
- Exclude:
- - 'Rakefile'
-
-# Offense count: 7
-# Cop supports --auto-correct.
-Lint/StringConversionInInterpolation:
- Exclude:
- - 'lib/bugzilla/history.rb'
- - 'test/functional/glsa_controller_test.rb'
-
-# Offense count: 2
-# Configuration parameters: AllowKeywordBlockArguments.
-Lint/UnderscorePrefixedVariableName:
- Exclude:
- - 'lib/glsamaker/bugs.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 2
-Lint/UnreachableCode:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
-Lint/UnusedBlockArgument:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/glsa.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 4
-# Cop supports --auto-correct.
-# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
-Lint/UnusedMethodArgument:
- Exclude:
- - 'app/models/glsa.rb'
- - 'lib/glsamaker/portage.rb'
- - 'lib/kramdown_ext.rb'
-
-# Offense count: 16
-Lint/UselessAssignment:
- Exclude:
- - 'app/controllers/bug_controller.rb'
- - 'app/controllers/bugs_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/search_controller.rb'
- - 'app/models/cve.rb'
- - 'lib/bugzilla.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/bugzilla/history.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/tasks/cve.rake'
- - 'lib/tasks/import.rake'
-
-# Offense count: 6
-Metrics/AbcSize:
- Max: 172
-
-# Offense count: 14
-# Configuration parameters: CountComments, ExcludedMethods.
-# ExcludedMethods: refine
-Metrics/BlockLength:
- Max: 192
-
-# Offense count: 3
-# Configuration parameters: CountBlocks.
-Metrics/BlockNesting:
- Max: 4
-
-# Offense count: 5
-# Configuration parameters: CountComments.
-Metrics/ClassLength:
- Max: 441
-
-# Offense count: 18
-Metrics/CyclomaticComplexity:
- Max: 24
-
-# Offense count: 24
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
-# URISchemes: http, https
-Metrics/LineLength:
- Max: 312
-
-# Offense count: 26
-# Configuration parameters: CountComments, ExcludedMethods.
-Metrics/MethodLength:
- Max: 105
-
-# Offense count: 1
-# Configuration parameters: CountKeywordArgs.
-Metrics/ParameterLists:
- Max: 6
-
-# Offense count: 14
-Metrics/PerceivedComplexity:
- Max: 19
-
-# Offense count: 1
-Naming/AccessorMethodName:
- Exclude:
- - 'app/models/revision.rb'
-
-# Offense count: 1
-# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
-# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
-Naming/FileName:
- Exclude:
- - 'config/initializers/glsamaker-global.rb'
-
-# Offense count: 1
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: snake_case, camelCase
-Naming/MethodName:
- Exclude:
- - 'lib/bugzilla/bug.rb'
-
-# Offense count: 7
-# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
-# NamePrefix: is_, has_, have_
-# NamePrefixBlacklist: is_, has_, have_
-# NameWhitelist: is_a?
-# MethodDefinitionMacros: define_method, define_singleton_method
-Naming/PredicateName:
- Exclude:
- - 'spec/**/*'
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/glsa.rb'
- - 'app/models/user.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 8
-# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
-# AllowedNames: io, id, to, by, on, in, at, ip, db
-Naming/UncommunicativeMethodParamName:
- Exclude:
- - 'app/helpers/application_helper.rb'
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/cve.rb'
- - 'lib/glsamaker/portage.rb'
- - 'lib/kramdown_ext.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 18
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: snake_case, camelCase
-Naming/VariableName:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/index_controller.rb'
-
-# Offense count: 1
-Performance/Caller:
- Exclude:
- - 'app/controllers/application_controller.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Performance/CompareWithBlock:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Performance/RedundantBlockCall:
- Exclude:
- - 'app/helpers/application_helper.rb'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-Performance/RegexpMatch:
- Exclude:
- - 'lib/glsamaker/spelling.rb'
- - 'lib/tasks/cve.rake'
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Performance/StringReplacement:
- Exclude:
- - 'lib/glsamaker/xml.rb'
-
-# Offense count: 1
-Performance/UnfreezeString:
- Exclude:
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 6
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, Include.
-# SupportedStyles: action, filter
-# Include: app/controllers/**/*.rb
-Rails/ActionFilter:
- Exclude:
- - 'app/controllers/admin/index_controller.rb'
- - 'app/controllers/admin/templates_controller.rb'
- - 'app/controllers/admin/users_controller.rb'
- - 'app/controllers/application_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/index_controller.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-Rails/ActiveRecordAliases:
- Exclude:
- - 'app/controllers/admin/templates_controller.rb'
- - 'app/controllers/admin/users_controller.rb'
- - 'app/models/bug.rb'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: Include.
-# Include: **/test/**/*
-Rails/AssertNot:
- Exclude:
- - 'test/unit/glsa_test.rb'
- - 'test/unit/user_test.rb'
-
-# Offense count: 3
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: strict, flexible
-Rails/Date:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: Whitelist.
-# Whitelist: find_by_sql
-Rails/DynamicFindBy:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'lib/authentication.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 4
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: slashes, arguments
-Rails/FilePath:
- Exclude:
- - 'lib/bugzilla.rb'
- - 'lib/glsamaker/spelling.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/FindEach:
- Exclude:
- - 'app/models/revision.rb'
-
-# Offense count: 2
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/HasAndBelongsToMany:
- Exclude:
- - 'app/models/cpe.rb'
- - 'app/models/cve.rb'
-
-# Offense count: 9
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/HasManyOrHasOneDependent:
- Exclude:
- - 'app/models/cve.rb'
- - 'app/models/user.rb'
-
-# Offense count: 1
-# Configuration parameters: Include.
-# Include: app/helpers/**/*.rb
-Rails/HelperInstanceVariable:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
-
-# Offense count: 21
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: numeric, symbolic
-Rails/HttpStatus:
- Exclude:
- - 'app/controllers/bugs_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/tools_controller.rb'
-
-# Offense count: 15
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/InverseOf:
- Exclude:
- - 'app/models/comment.rb'
- - 'app/models/cve.rb'
- - 'app/models/cve_change.rb'
- - 'app/models/cve_comment.rb'
- - 'app/models/glsa.rb'
- - 'app/models/revision.rb'
- - 'app/models/user.rb'
-
-# Offense count: 4
-Rails/OutputSafety:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/application_helper.rb'
- - 'lib/glsamaker/spelling.rb'
-
-# Offense count: 1
-# Configuration parameters: Blacklist, Whitelist.
-# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
-Rails/SkipsModelValidations:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
-
-# Offense count: 11
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: strict, flexible
-Rails/TimeZone:
- Exclude:
- - 'app/models/glsa.rb'
- - 'lib/authorization.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/bugzilla/comment.rb'
- - 'lib/bugzilla/history.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/Validation:
- Exclude:
- - 'app/models/glsa.rb'
- - 'app/models/revision.rb'
- - 'app/models/user.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Security/YAMLLoad:
- Exclude:
- - 'script/config_init'
-
-# Offense count: 1
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: inline, group
-Style/AccessModifierDeclarations:
- Exclude:
- - 'lib/glsamaker/http.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: prefer_alias, prefer_alias_method
-Style/Alias:
- Exclude:
- - 'lib/bugzilla/bug.rb'
-
-# Offense count: 28
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: always, conditionals
-Style/AndOr:
- Exclude:
- - 'app/controllers/application_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/application_helper.rb'
- - 'app/models/cve.rb'
- - 'app/models/glsa.rb'
- - 'app/models/user.rb'
- - 'lib/authentication.rb'
- - 'lib/bugzilla.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/glsamaker/diff.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/BlockComments:
- Exclude:
- - 'app/models/revision.rb'
-
-# Offense count: 13
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, AllowBracesOnProceduralOneLiners.
-# SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces
-# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
-# FunctionalMethods: let, let!, subject, watch
-# IgnoredMethods: lambda, proc, it
-Style/BlockDelimiters:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'config/deploy.rb'
- - 'lib/glsamaker/http.rb'
- - 'test/unit/cve_test.rb'
-
-# Offense count: 13
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: braces, no_braces, context_dependent
-Style/BracesAroundHashParameters:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/views/glsa/_glsa.xml.builder'
- - 'config/deploy.rb'
- - 'lib/bugzilla.rb'
- - 'lib/glsamaker/http.rb'
- - 'test/integration/authentication_test.rb'
-
-# Offense count: 11
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect, EnforcedStyle.
-# SupportedStyles: nested, compact
-Style/ClassAndModuleChildren:
- Exclude:
- - 'app/controllers/admin/index_controller.rb'
- - 'app/controllers/admin/templates_controller.rb'
- - 'app/controllers/admin/users_controller.rb'
- - 'app/helpers/admin/index_helper.rb'
- - 'app/helpers/admin/templates_helper.rb'
- - 'app/helpers/admin/users_helper.rb'
- - 'lib/bugzilla/history.rb'
- - 'test/functional/admin/index_controller_test.rb'
- - 'test/functional/admin/templates_controller_test.rb'
- - 'test/functional/admin/users_controller_test.rb'
- - 'test/test_helper.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/ColonMethodCall:
- Exclude:
- - 'app/models/cve.rb'
-
-# Offense count: 13
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
-# SupportedStyles: assign_to_condition, assign_inside_condition
-Style/ConditionalAssignment:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/application_helper.rb'
- - 'app/models/cve.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/glsamaker/portage.rb'
- - 'lib/glsamaker/spelling.rb'
- - 'lib/tasks/import.rake'
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/DefWithParentheses:
- Exclude:
- - 'lib/bugzilla/bug.rb'
-
-# Offense count: 4
-# Cop supports --auto-correct.
-Style/EmptyLiteral:
- Exclude:
- - 'lib/tasks/import.rake'
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 6
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: compact, expanded
-Style/EmptyMethod:
- Exclude:
- - 'app/controllers/admin/index_controller.rb'
- - 'app/controllers/bugs_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'app/controllers/search_controller.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/Encoding:
- Exclude:
- - 'db/schema.rb'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-Style/ExpandPathArguments:
- Exclude:
- - 'Rakefile'
- - 'bin/bundle'
- - 'bin/rails'
- - 'bin/setup'
- - 'config/application.rb'
- - 'config/boot.rb'
- - 'config/environment.rb'
- - 'script/rails'
- - 'test/test_helper.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: each, for
-Style/For:
- Exclude:
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 13
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: annotated, template, unannotated
-Style/FormatStringToken:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/helpers/application_helper.rb'
- - 'app/models/cve.rb'
-
-# Offense count: 159
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: always, never
-Style/FrozenStringLiteralComment:
- Enabled: false
-
-# Offense count: 17
-# Configuration parameters: MinBodyLength.
-Style/GuardClause:
- Exclude:
- - 'app/controllers/admin/users_controller.rb'
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/models/comment.rb'
- - 'app/models/glsa.rb'
- - 'lib/authentication.rb'
- - 'lib/bugzilla.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/glsamaker/mail.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 550
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
-# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
-Style/HashSyntax:
- Enabled: false
-
-# Offense count: 5
-# Configuration parameters: AllowIfModifier.
-Style/IfInsideElse:
- Exclude:
- - 'app/helpers/application_helper.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 40
-# Cop supports --auto-correct.
-Style/IfUnlessModifier:
- Enabled: false
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: InverseMethods, InverseBlocks.
-Style/InverseMethods:
- Exclude:
- - 'app/views/glsa/_glsa.xml.builder'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/LineEndConcatenation:
- Exclude:
- - 'db/migrate/20100918223549_add_system_user.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: IgnoredMethods.
-Style/MethodCallWithoutArgsParentheses:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Style/MultilineIfThen:
- Exclude:
- - 'lib/authentication.rb'
- - 'script/db-backup'
-
-# Offense count: 18
-# Cop supports --auto-correct.
-Style/MultilineWhenThen:
- Exclude:
- - 'lib/bugzilla/bug.rb'
-
-# Offense count: 14
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: literals, strict
-Style/MutableConstant:
- Exclude:
- - 'config/environment.rb'
- - 'config/initializers/glsamaker-global.rb'
- - 'config/initializers/glsamaker.rb'
- - 'lib/kramdown_ext.rb'
- - 'lib/tasks/cve.rake'
- - 'lib/tasks/import.rake'
- - 'script/db-backup'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: both, prefix, postfix
-Style/NegatedIf:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/models/glsa.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 4
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, MinBodyLength.
-# SupportedStyles: skip_modifier_ifs, always
-Style/Next:
- Exclude:
- - 'app/controllers/tools_controller.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 18
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: predicate, comparison
-Style/NilComparison:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/index_controller.rb'
- - 'app/controllers/tools_controller.rb'
- - 'app/models/user.rb'
- - 'lib/authentication.rb'
- - 'lib/bugzilla/history.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: IncludeSemanticChanges.
-Style/NonNilCheck:
- Exclude:
- - 'lib/glsamaker/bugs.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-Style/Not:
- Exclude:
- - 'app/controllers/search_controller.rb'
- - 'app/models/glsa.rb'
- - 'app/models/user.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedOctalStyle.
-# SupportedOctalStyles: zero_with_o, zero_only
-Style/NumericLiteralPrefix:
- Exclude:
- - 'lib/bugzilla.rb'
- - 'script/config_init'
-
-# Offense count: 24
-# Cop supports --auto-correct.
-# Configuration parameters: Strict.
-Style/NumericLiterals:
- MinDigits: 15
-
-# Offense count: 28
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
-# SupportedStyles: predicate, comparison
-Style/NumericPredicate:
- Exclude:
- - 'spec/**/*'
- - 'app/controllers/admin/users_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/tools_controller.rb'
- - 'app/models/glsa.rb'
- - 'app/models/user.rb'
- - 'app/views/glsa/_glsa.xml.builder'
- - 'lib/authorization.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/glsamaker/bugs.rb'
- - 'lib/glsamaker/diff.rb'
- - 'lib/tasks/cve.rake'
- - 'lib/tasks/import.rake'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: PreferredDelimiters.
-Style/PercentLiteralDelimiters:
- Exclude:
- - 'app/models/package.rb'
- - 'config/application.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 38
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: short, verbose
-Style/PreferredHashMethods:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/helpers/application_helper.rb'
- - 'lib/bugzilla.rb'
- - 'lib/bugzilla/history.rb'
- - 'lib/glsamaker/xml.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/Proc:
- Exclude:
- - 'app/models/comment.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Style/RedundantBegin:
- Exclude:
- - 'app/controllers/bugs_controller.rb'
- - 'app/controllers/comments_controller.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/RedundantException:
- Exclude:
- - 'lib/authentication.rb'
-
-# Offense count: 8
-# Cop supports --auto-correct.
-# Configuration parameters: AllowMultipleReturnValues.
-Style/RedundantReturn:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/models/glsa.rb'
- - 'app/models/revision.rb'
- - 'lib/authentication.rb'
- - 'lib/glsamaker/bugs.rb'
-
-# Offense count: 38
-# Cop supports --auto-correct.
-Style/RedundantSelf:
- Exclude:
- - 'app/models/bug.rb'
- - 'app/models/cpe.rb'
- - 'app/models/cve.rb'
- - 'app/models/glsa.rb'
- - 'app/models/package.rb'
- - 'app/models/revision.rb'
- - 'app/models/user.rb'
- - 'lib/bugzilla/bug.rb'
- - 'lib/glsamaker/bugs.rb'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
-# SupportedStyles: slashes, percent_r, mixed
-Style/RegexpLiteral:
- Exclude:
- - 'app/controllers/tools_controller.rb'
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/glsa.rb'
- - 'app/models/package.rb'
- - 'lib/glsamaker/portage.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: implicit, explicit
-Style/RescueStandardError:
- Exclude:
- - 'app/helpers/application_helper.rb'
- - 'lib/tasks/import.rake'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/SelfAssignment:
- Exclude:
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: only_raise, only_fail, semantic
-Style/SignalException:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'lib/tasks/cve.rake'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: .
-# SupportedStyles: use_perl_names, use_english_names
-Style/SpecialGlobalVars:
- EnforcedStyle: use_perl_names
-
-# Offense count: 4
-# Cop supports --auto-correct.
-Style/StderrPuts:
- Exclude:
- - 'lib/tasks/cve.rake'
- - 'lib/tasks/rcov.rake'
- - 'script/config_init'
-
-# Offense count: 809
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
-# SupportedStyles: single_quotes, double_quotes
-Style/StringLiterals:
- Enabled: false
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: single_quotes, double_quotes
-Style/StringLiteralsInInterpolation:
- Exclude:
- - 'app/helpers/glsa_helper.rb'
- - 'app/models/cve.rb'
- - 'app/models/glsa.rb'
-
-# Offense count: 11
-# Cop supports --auto-correct.
-# Configuration parameters: MinSize.
-# SupportedStyles: percent, brackets
-Style/SymbolArray:
- EnforcedStyle: brackets
-
-# Offense count: 17
-# Cop supports --auto-correct.
-# Configuration parameters: IgnoredMethods.
-# IgnoredMethods: respond_to, define_method
-Style/SymbolProc:
- Exclude:
- - 'app/controllers/cve_controller.rb'
- - 'app/controllers/glsa_controller.rb'
- - 'app/models/cve.rb'
- - 'app/models/glsa.rb'
- - 'app/models/revision.rb'
- - 'app/views/cve/info.json.jbuilder'
- - 'lib/glsamaker/diff.rb'
- - 'lib/tasks/rcov.rake'
- - 'test/unit/glsa_test.rb'
- - 'test/unit/revision_test.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, AllowSafeAssignment.
-# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
-Style/TernaryParentheses:
- Exclude:
- - 'app/views/glsa/_glsa.xml.builder'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyleForMultiline.
-# SupportedStylesForMultiline: comma, consistent_comma, no_comma
-Style/TrailingCommaInHashLiteral:
- Exclude:
- - 'lib/bugzilla.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
-# Whitelist: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
-Style/TrivialAccessors:
- Exclude:
- - 'lib/glsamaker/bugs.rb'
-
-# Offense count: 3
-# Cop supports --auto-correct.
-Style/UnlessElse:
- Exclude:
- - 'app/controllers/bugs_controller.rb'
- - 'app/controllers/comments_controller.rb'
- - 'lib/bugzilla/history.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Style/UnneededInterpolation:
- Exclude:
- - 'app/views/glsa/_glsa.xml.builder'
- - 'lib/tasks/rcov.rake'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/UnpackFirst:
- Exclude:
- - 'lib/authentication.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: WordRegex.
-# SupportedStyles: percent, brackets
-Style/WordArray:
- EnforcedStyle: percent
- MinSize: 6
-
-# Offense count: 11
-# Cop supports --auto-correct.
-Style/ZeroLengthPredicate:
- Exclude:
- - 'app/controllers/glsa_controller.rb'
- - 'app/controllers/tools_controller.rb'
- - 'app/models/glsa.rb'
- - 'app/views/glsa/_glsa.xml.builder'
- - 'lib/bugzilla/bug.rb'
- - 'lib/tasks/cve.rake'
- - 'lib/tasks/import.rake'
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index d69e055..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-language: ruby
-cache: bundler
-rvm:
- - 2.4
- - 2.5
-
-gemfiles:
- - Gemfile
-
-branches:
- only:
- - master
-
-addons:
- mariadb: '10.2'
-
-before_install:
- - gem uninstall -v '>= 2' -i $(rvm gemdir)@global -ax bundler || true
- - gem install bundler -v '< 2'
-
-
-before_script:
- - sed 's/i_forgot_to_set_this/"test-secret"/' < config/initializers/glsamaker.rb.sample > config/initializers/glsamaker.rb
- - cp config/database.yml.mysql config/database.yml
- - mysql -e 'CREATE DATABASE glsamaker_test;'
-
-script:
- - bundle exec rubocop
- - bundle exec rake test RAILS_ENV=test
diff --git a/Capfile b/Capfile
deleted file mode 100644
index 1a98f3c..0000000
--- a/Capfile
+++ /dev/null
@@ -1,4 +0,0 @@
-load 'deploy' if respond_to?(:namespace) # cap2 differentiator
-Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) }
-
-load 'config/deploy' # remove this line to skip loading any of the default tasks
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..9a13fa3
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,26 @@
+FROM golang:1.14.0 AS builder
+WORKDIR /go/src/glsamaker
+COPY . /go/src/glsamaker
+RUN go get github.com/go-pg/pg/v9
+RUN go get github.com/google/uuid
+RUN go get github.com/skip2/go-qrcode
+RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o bin .
+
+FROM node:13 AS assetsbuilder
+WORKDIR /go/src/glsamaker
+COPY . /go/src/glsamaker
+RUN npm install && cd node_modules/@gentoo/tyrian && npm install && npm run dist && cd /go/src/glsamaker
+RUN npx webpack
+
+FROM alpine:latest as certs
+RUN apk --update add ca-certificates
+
+FROM scratch
+WORKDIR /go/src/glsamaker
+COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
+COPY --from=assetsbuilder /go/src/glsamaker/assets /go/src/glsamaker/assets
+COPY --from=builder /go/src/glsamaker/bin /go/src/glsamaker/bin
+COPY --from=builder /go/src/glsamaker/pkg /go/src/glsamaker/pkg
+COPY --from=builder /go/src/glsamaker/web /go/src/glsamaker/web
+
+CMD ["/go/src/glsamaker/bin/glsamaker"]
diff --git a/Dockerfile.dev b/Dockerfile.dev
new file mode 100644
index 0000000..902fd47
--- /dev/null
+++ b/Dockerfile.dev
@@ -0,0 +1,10 @@
+FROM golang:1.14.0
+RUN apt update && apt install -y ca-certificates ntp ntpdate
+WORKDIR /go/src/glsamaker
+COPY . /go/src/glsamaker
+RUN go get github.com/go-pg/pg/v9
+RUN go get github.com/google/uuid
+RUN go get github.com/skip2/go-qrcode
+RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o bin .
+
+CMD ["/go/src/glsamaker/bin/glsamaker"]
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index ea8c8dc..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,60 +0,0 @@
-source 'https://rubygems.org'
-
-gem 'rails', '~> 4.2'
-gem 'xmlrpc'
-gem 'rake'
-
-gem 'mysql2', '~> 0.4.10'
-
-gem 'json', '~> 2.0'
-gem 'jbuilder', '~> 2.0'
-
-# Gems used only for assets and not required
-# in production environments by default.
-#group :assets do
-# gem 'sass-rails', "~> 3.2.0"
-# gem 'coffee-rails', "~> 3.2.0"
-# gem 'uglifier'
-#end
-
-gem 'prototype-rails', github: 'rails/prototype-rails', branch: '4.2'
-
-# Use unicorn as the web server
-#gem 'unicorn'
-gem 'thin'
-
-# Deploy with Capistrano
-gem 'capistrano'
-
-# gem 'exception_notification'
-
-group :development do
-# No debugger at the moment because of the stupid build system of a dependency of ruby-debug19
-# gem 'ruby-debug', :platforms => :ruby_18
-# gem 'ruby-debug19', :platforms => :ruby_19
-# gem 'require_relative'
-end
-
-gem 'diff-lcs', require: 'diff/lcs'
-gem 'nokogiri'
-gem 'text-format-revised', require: 'text/format'
-gem 'kramdown'
-
-gem 'thinking-sphinx', '~> 3.1.4'
-
-#FIXME: runspell 0.0.1 is dead since 2011, we may need
-#to create a new spelling module
-
-#gem 'runspell'
-
-# gem "rdoc"
-
-group :test do
- gem 'simplecov'
- gem 'ci_reporter'
- gem 'minitest-reporters'
-
- gem 'rubocop'
- gem 'rubocop-performance'
- gem 'rubocop-rails'
-end
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index 48a2d90..0000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,206 +0,0 @@
-GIT
- remote: git://github.com/rails/prototype-rails.git
- revision: 0fed929ff48c10c3b978edd3baa983a81f404dbf
- branch: 4.2
- specs:
- prototype-rails (4.0.0)
- rails (~> 4.0)
-
-GEM
- remote: https://rubygems.org/
- specs:
- actionmailer (4.2.11.1)
- actionpack (= 4.2.11.1)
- actionview (= 4.2.11.1)
- activejob (= 4.2.11.1)
- mail (~> 2.5, >= 2.5.4)
- rails-dom-testing (~> 1.0, >= 1.0.5)
- actionpack (4.2.11.1)
- actionview (= 4.2.11.1)
- activesupport (= 4.2.11.1)
- rack (~> 1.6)
- rack-test (~> 0.6.2)
- rails-dom-testing (~> 1.0, >= 1.0.5)
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
- actionview (4.2.11.1)
- activesupport (= 4.2.11.1)
- builder (~> 3.1)
- erubis (~> 2.7.0)
- rails-dom-testing (~> 1.0, >= 1.0.5)
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
- activejob (4.2.11.1)
- activesupport (= 4.2.11.1)
- globalid (>= 0.3.0)
- activemodel (4.2.11.1)
- activesupport (= 4.2.11.1)
- builder (~> 3.1)
- activerecord (4.2.11.1)
- activemodel (= 4.2.11.1)
- activesupport (= 4.2.11.1)
- arel (~> 6.0)
- activesupport (4.2.11.1)
- i18n (~> 0.7)
- minitest (~> 5.1)
- thread_safe (~> 0.3, >= 0.3.4)
- tzinfo (~> 1.1)
- airbrussh (1.3.2)
- sshkit (>= 1.6.1, != 1.7.0)
- ansi (1.5.0)
- arel (6.0.4)
- ast (2.4.0)
- builder (3.2.3)
- capistrano (3.11.0)
- airbrussh (>= 1.0.0)
- i18n
- rake (>= 10.0.0)
- sshkit (>= 1.9.0)
- ci_reporter (2.0.0)
- builder (>= 2.1.2)
- concurrent-ruby (1.1.5)
- crass (1.0.4)
- daemons (1.3.1)
- diff-lcs (1.3)
- docile (1.3.2)
- erubis (2.7.0)
- eventmachine (1.2.7)
- globalid (0.4.2)
- activesupport (>= 4.2.0)
- i18n (0.9.5)
- concurrent-ruby (~> 1.0)
- innertube (1.1.0)
- jaro_winkler (1.5.3)
- jbuilder (2.9.1)
- activesupport (>= 4.2.0)
- joiner (0.3.4)
- activerecord (>= 4.1.0)
- json (2.2.0)
- kramdown (2.1.0)
- loofah (2.2.3)
- crass (~> 1.0.2)
- nokogiri (>= 1.5.9)
- mail (2.7.1)
- mini_mime (>= 0.1.1)
- middleware (0.1.0)
- mini_mime (1.0.2)
- mini_portile2 (2.4.0)
- minitest (5.11.3)
- minitest-reporters (1.3.6)
- ansi
- builder
- minitest (>= 5.0)
- ruby-progressbar
- mysql2 (0.4.10)
- net-scp (2.0.0)
- net-ssh (>= 2.6.5, < 6.0.0)
- net-ssh (5.2.0)
- nokogiri (1.10.3)
- mini_portile2 (~> 2.4.0)
- parallel (1.17.0)
- parser (2.6.3.0)
- ast (~> 2.4.0)
- rack (1.6.11)
- rack-test (0.6.3)
- rack (>= 1.0)
- rails (4.2.11.1)
- actionmailer (= 4.2.11.1)
- actionpack (= 4.2.11.1)
- actionview (= 4.2.11.1)
- activejob (= 4.2.11.1)
- activemodel (= 4.2.11.1)
- activerecord (= 4.2.11.1)
- activesupport (= 4.2.11.1)
- bundler (>= 1.3.0, < 2.0)
- railties (= 4.2.11.1)
- sprockets-rails
- rails-deprecated_sanitizer (1.0.3)
- activesupport (>= 4.2.0.alpha)
- rails-dom-testing (1.0.9)
- activesupport (>= 4.2.0, < 5.0)
- nokogiri (~> 1.6)
- rails-deprecated_sanitizer (>= 1.0.1)
- rails-html-sanitizer (1.0.4)
- loofah (~> 2.2, >= 2.2.2)
- railties (4.2.11.1)
- actionpack (= 4.2.11.1)
- activesupport (= 4.2.11.1)
- rake (>= 0.8.7)
- thor (>= 0.18.1, < 2.0)
- rainbow (3.0.0)
- rake (12.3.3)
- riddle (2.3.2)
- rubocop (0.73.0)
- jaro_winkler (~> 1.5.1)
- parallel (~> 1.10)
- parser (>= 2.6)
- rainbow (>= 2.2.2, < 4.0)
- ruby-progressbar (~> 1.7)
- unicode-display_width (>= 1.4.0, < 1.7)
- rubocop-performance (1.4.0)
- rubocop (>= 0.71.0)
- rubocop-rails (2.2.1)
- rack (>= 1.1)
- rubocop (>= 0.72.0)
- ruby-progressbar (1.10.1)
- simplecov (0.17.0)
- docile (~> 1.1)
- json (>= 1.8, < 3)
- simplecov-html (~> 0.10.0)
- simplecov-html (0.10.2)
- sprockets (3.7.2)
- concurrent-ruby (~> 1.0)
- rack (> 1, < 3)
- sprockets-rails (3.2.1)
- actionpack (>= 4.0)
- activesupport (>= 4.0)
- sprockets (>= 3.0.0)
- sshkit (1.19.1)
- net-scp (>= 1.1.2)
- net-ssh (>= 2.8.0)
- text-format-revised (1.1.0)
- text-hyphen (~> 1.2.0)
- text-hyphen (1.2)
- thin (1.7.2)
- daemons (~> 1.0, >= 1.0.9)
- eventmachine (~> 1.0, >= 1.0.4)
- rack (>= 1, < 3)
- thinking-sphinx (3.1.4)
- activerecord (>= 3.1.0)
- builder (>= 2.1.2)
- innertube (>= 1.0.2)
- joiner (>= 0.2.0)
- middleware (>= 0.1.0)
- riddle (>= 1.5.11)
- thor (0.20.3)
- thread_safe (0.3.6)
- tzinfo (1.2.5)
- thread_safe (~> 0.1)
- unicode-display_width (1.6.0)
- xmlrpc (0.3.0)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- capistrano
- ci_reporter
- diff-lcs
- jbuilder (~> 2.0)
- json (~> 2.0)
- kramdown
- minitest-reporters
- mysql2 (~> 0.4.10)
- nokogiri
- prototype-rails!
- rails (~> 4.2)
- rake
- rubocop
- rubocop-performance
- rubocop-rails
- simplecov
- text-format-revised
- thin
- thinking-sphinx (~> 3.1.4)
- xmlrpc
-
-BUNDLED WITH
- 1.17.3
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 2def0e8..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,661 +0,0 @@
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-our General Public Licenses are intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
- A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate. Many developers of free software are heartened and
-encouraged by the resulting cooperation. However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
- The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community. It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server. Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
- An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals. This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU Affero General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Remote Network Interaction; Use with the GNU General Public License.
-
- Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software. This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero General Public License from time to time. Such new versions
-will be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU Affero General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU Affero General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU Affero General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
- If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source. For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code. There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU AGPL, see
-<http://www.gnu.org/licenses/>. \ No newline at end of file
diff --git a/README b/README
deleted file mode 100644
index 37ec8ea..0000000
--- a/README
+++ /dev/null
@@ -1,243 +0,0 @@
-== Welcome to Rails
-
-Rails is a web-application framework that includes everything needed to create
-database-backed web applications according to the Model-View-Control pattern.
-
-This pattern splits the view (also called the presentation) into "dumb" templates
-that are primarily responsible for inserting pre-built data in between HTML tags.
-The model contains the "smart" domain objects (such as Account, Product, Person,
-Post) that holds all the business logic and knows how to persist themselves to
-a database. The controller handles the incoming requests (such as Save New Account,
-Update Product, Show Post) by manipulating the model and directing data to the view.
-
-In Rails, the model is handled by what's called an object-relational mapping
-layer entitled Active Record. This layer allows you to present the data from
-database rows as objects and embellish these data objects with business logic
-methods. You can read more about Active Record in
-link:files/vendor/rails/activerecord/README.html.
-
-The controller and view are handled by the Action Pack, which handles both
-layers by its two parts: Action View and Action Controller. These two layers
-are bundled in a single package due to their heavy interdependence. This is
-unlike the relationship between the Active Record and Action Pack that is much
-more separate. Each of these packages can be used independently outside of
-Rails. You can read more about Action Pack in
-link:files/vendor/rails/actionpack/README.html.
-
-
-== Getting Started
-
-1. At the command prompt, start a new Rails application using the <tt>rails</tt> command
- and your application name. Ex: rails myapp
-2. Change directory into myapp and start the web server: <tt>script/server</tt> (run with --help for options)
-3. Go to http://localhost:3000/ and get "Welcome aboard: You're riding the Rails!"
-4. Follow the guidelines to start developing your application
-
-
-== Web Servers
-
-By default, Rails will try to use Mongrel if it's are installed when started with script/server, otherwise Rails will use WEBrick, the webserver that ships with Ruby. But you can also use Rails
-with a variety of other web servers.
-
-Mongrel is a Ruby-based webserver with a C component (which requires compilation) that is
-suitable for development and deployment of Rails applications. If you have Ruby Gems installed,
-getting up and running with mongrel is as easy as: <tt>gem install mongrel</tt>.
-More info at: http://mongrel.rubyforge.org
-
-Say other Ruby web servers like Thin and Ebb or regular web servers like Apache or LiteSpeed or
-Lighttpd or IIS. The Ruby web servers are run through Rack and the latter can either be setup to use
-FCGI or proxy to a pack of Mongrels/Thin/Ebb servers.
-
-== Apache .htaccess example for FCGI/CGI
-
-# General Apache options
-AddHandler fastcgi-script .fcgi
-AddHandler cgi-script .cgi
-Options +FollowSymLinks +ExecCGI
-
-# If you don't want Rails to look in certain directories,
-# use the following rewrite rules so that Apache won't rewrite certain requests
-#
-# Example:
-# RewriteCond %{REQUEST_URI} ^/notrails.*
-# RewriteRule .* - [L]
-
-# Redirect all requests not available on the filesystem to Rails
-# By default the cgi dispatcher is used which is very slow
-#
-# For better performance replace the dispatcher with the fastcgi one
-#
-# Example:
-# RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
-RewriteEngine On
-
-# If your Rails application is accessed via an Alias directive,
-# then you MUST also set the RewriteBase in this htaccess file.
-#
-# Example:
-# Alias /myrailsapp /path/to/myrailsapp/public
-# RewriteBase /myrailsapp
-
-RewriteRule ^$ index.html [QSA]
-RewriteRule ^([^.]+)$ $1.html [QSA]
-RewriteCond %{REQUEST_FILENAME} !-f
-RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
-
-# In case Rails experiences terminal errors
-# Instead of displaying this message you can supply a file here which will be rendered instead
-#
-# Example:
-# ErrorDocument 500 /500.html
-
-ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"
-
-
-== Debugging Rails
-
-Sometimes your application goes wrong. Fortunately there are a lot of tools that
-will help you debug it and get it back on the rails.
-
-First area to check is the application log files. Have "tail -f" commands running
-on the server.log and development.log. Rails will automatically display debugging
-and runtime information to these files. Debugging info will also be shown in the
-browser on requests from 127.0.0.1.
-
-You can also log your own messages directly into the log file from your code using
-the Ruby logger class from inside your controllers. Example:
-
- class WeblogController < ActionController::Base
- def destroy
- @weblog = Weblog.find(params[:id])
- @weblog.destroy
- logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
- end
- end
-
-The result will be a message in your log file along the lines of:
-
- Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1
-
-More information on how to use the logger is at http://www.ruby-doc.org/core/
-
-Also, Ruby documentation can be found at http://www.ruby-lang.org/ including:
-
-* The Learning Ruby (Pickaxe) Book: http://www.ruby-doc.org/docs/ProgrammingRuby/
-* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
-
-These two online (and free) books will bring you up to speed on the Ruby language
-and also on programming in general.
-
-
-== Debugger
-
-Debugger support is available through the debugger command when you start your Mongrel or
-Webrick server with --debugger. This means that you can break out of execution at any point
-in the code, investigate and change the model, AND then resume execution!
-You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'
-Example:
-
- class WeblogController < ActionController::Base
- def index
- @posts = Post.find(:all)
- debugger
- end
- end
-
-So the controller will accept the action, run the first line, then present you
-with a IRB prompt in the server window. Here you can do things like:
-
- >> @posts.inspect
- => "[#<Post:0x14a6be8 @attributes={\"title\"=>nil, \"body\"=>nil, \"id\"=>\"1\"}>,
- #<Post:0x14a6620 @attributes={\"title\"=>\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]"
- >> @posts.first.title = "hello from a debugger"
- => "hello from a debugger"
-
-...and even better is that you can examine how your runtime objects actually work:
-
- >> f = @posts.first
- => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
- >> f.
- Display all 152 possibilities? (y or n)
-
-Finally, when you're ready to resume execution, you enter "cont"
-
-
-== Console
-
-You can interact with the domain model by starting the console through <tt>script/console</tt>.
-Here you'll have all parts of the application configured, just like it is when the
-application is running. You can inspect domain models, change values, and save to the
-database. Starting the script without arguments will launch it in the development environment.
-Passing an argument will specify a different environment, like <tt>script/console production</tt>.
-
-To reload your controllers and models after launching the console run <tt>reload!</tt>
-
-== dbconsole
-
-You can go to the command line of your database directly through <tt>script/dbconsole</tt>.
-You would be connected to the database with the credentials defined in database.yml.
-Starting the script without arguments will connect you to the development database. Passing an
-argument will connect you to a different database, like <tt>script/dbconsole production</tt>.
-Currently works for mysql, postgresql and sqlite.
-
-== Description of Contents
-
-app
- Holds all the code that's specific to this particular application.
-
-app/controllers
- Holds controllers that should be named like weblogs_controller.rb for
- automated URL mapping. All controllers should descend from ApplicationController
- which itself descends from ActionController::Base.
-
-app/models
- Holds models that should be named like post.rb.
- Most models will descend from ActiveRecord::Base.
-
-app/views
- Holds the template files for the view that should be named like
- weblogs/index.html.erb for the WeblogsController#index action. All views use eRuby
- syntax.
-
-app/views/layouts
- Holds the template files for layouts to be used with views. This models the common
- header/footer method of wrapping views. In your views, define a layout using the
- <tt>layout :default</tt> and create a file named default.html.erb. Inside default.html.erb,
- call <% yield %> to render the view using this layout.
-
-app/helpers
- Holds view helpers that should be named like weblogs_helper.rb. These are generated
- for you automatically when using script/generate for controllers. Helpers can be used to
- wrap functionality for your views into methods.
-
-config
- Configuration files for the Rails environment, the routing map, the database, and other dependencies.
-
-db
- Contains the database schema in schema.rb. db/migrate contains all
- the sequence of Migrations for your schema.
-
-doc
- This directory is where your application documentation will be stored when generated
- using <tt>rake doc:app</tt>
-
-lib
- Application specific libraries. Basically, any kind of custom code that doesn't
- belong under controllers, models, or helpers. This directory is in the load path.
-
-public
- The directory available for the web server. Contains subdirectories for images, stylesheets,
- and javascripts. Also contains the dispatchers and the default HTML files. This should be
- set as the DOCUMENT_ROOT of your web server.
-
-script
- Helper scripts for automation and generation.
-
-test
- Unit and functional tests along with fixtures. When using the script/generate scripts, template
- test files will be generated for you and placed in this directory.
-
-vendor
- External libraries that the application depends on. Also includes the plugins subdirectory.
- If the app has frozen rails, those gems also go here, under vendor/rails/.
- This directory is in the load path.
diff --git a/Rakefile b/Rakefile
deleted file mode 100644
index 463f2f4..0000000
--- a/Rakefile
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env rake
-# Add your own tasks in files placed in lib/tasks ending in .rake,
-# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
-
-require File.expand_path('../config/application', __FILE__)
-
-Glsamaker::Application.load_tasks
-
-begin
- require 'ci/reporter/rake/test_unit'
-rescue LoadError
-end
diff --git a/app/assets/images/biglogo.png b/app/assets/images/biglogo.png
deleted file mode 100644
index 58fc589..0000000
--- a/app/assets/images/biglogo.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/cvetool-logo.png b/app/assets/images/cvetool-logo.png
deleted file mode 100644
index 2546cc7..0000000
--- a/app/assets/images/cvetool-logo.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/access.png b/app/assets/images/icons/access.png
deleted file mode 100755
index a9e1d4a..0000000
--- a/app/assets/images/icons/access.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/admin.png b/app/assets/images/icons/admin.png
deleted file mode 100644
index 565a933..0000000
--- a/app/assets/images/icons/admin.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/affected.png b/app/assets/images/icons/affected.png
deleted file mode 100755
index 25ea793..0000000
--- a/app/assets/images/icons/affected.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/approval.png b/app/assets/images/icons/approval.png
deleted file mode 100644
index a12a1d0..0000000
--- a/app/assets/images/icons/approval.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/approved.png b/app/assets/images/icons/approved.png
deleted file mode 100755
index 210b1a6..0000000
--- a/app/assets/images/icons/approved.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/arch.png b/app/assets/images/icons/arch.png
deleted file mode 100755
index 9db64b5..0000000
--- a/app/assets/images/icons/arch.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/atom.png b/app/assets/images/icons/atom.png
deleted file mode 100755
index 200a5fd..0000000
--- a/app/assets/images/icons/atom.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/auto.png b/app/assets/images/icons/auto.png
deleted file mode 100755
index 19dfc93..0000000
--- a/app/assets/images/icons/auto.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/background-go.png b/app/assets/images/icons/background-go.png
deleted file mode 100755
index acaea0f..0000000
--- a/app/assets/images/icons/background-go.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/background.png b/app/assets/images/icons/background.png
deleted file mode 100755
index be7001f..0000000
--- a/app/assets/images/icons/background.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/bug-grey.png b/app/assets/images/icons/bug-grey.png
deleted file mode 100644
index a6f8396..0000000
--- a/app/assets/images/icons/bug-grey.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/bug.png b/app/assets/images/icons/bug.png
deleted file mode 100755
index 242d539..0000000
--- a/app/assets/images/icons/bug.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/bug_add.png b/app/assets/images/icons/bug_add.png
deleted file mode 100755
index fe12b19..0000000
--- a/app/assets/images/icons/bug_add.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/bug_new.png b/app/assets/images/icons/bug_new.png
deleted file mode 100755
index 9076cc5..0000000
--- a/app/assets/images/icons/bug_new.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/calendar-select-month.png b/app/assets/images/icons/calendar-select-month.png
deleted file mode 100644
index 4f5ed55..0000000
--- a/app/assets/images/icons/calendar-select-month.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/checkboxes.png b/app/assets/images/icons/checkboxes.png
deleted file mode 100755
index 05eed23..0000000
--- a/app/assets/images/icons/checkboxes.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/close.png b/app/assets/images/icons/close.png
deleted file mode 100644
index 237ae2a..0000000
--- a/app/assets/images/icons/close.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/comment.png b/app/assets/images/icons/comment.png
deleted file mode 100644
index 7bc9233..0000000
--- a/app/assets/images/icons/comment.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/commented.png b/app/assets/images/icons/commented.png
deleted file mode 100755
index 9926e5d..0000000
--- a/app/assets/images/icons/commented.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/confidential.png b/app/assets/images/icons/confidential.png
deleted file mode 100755
index ec71aec..0000000
--- a/app/assets/images/icons/confidential.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/delete.png b/app/assets/images/icons/delete.png
deleted file mode 100755
index 70b59dc..0000000
--- a/app/assets/images/icons/delete.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/diff.png b/app/assets/images/icons/diff.png
deleted file mode 100644
index d4d1b56..0000000
--- a/app/assets/images/icons/diff.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/dock-right.png b/app/assets/images/icons/dock-right.png
deleted file mode 100644
index 0e51904..0000000
--- a/app/assets/images/icons/dock-right.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/document-go.png b/app/assets/images/icons/document-go.png
deleted file mode 100755
index f3e265d..0000000
--- a/app/assets/images/icons/document-go.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/document.png b/app/assets/images/icons/document.png
deleted file mode 100755
index 75f92b0..0000000
--- a/app/assets/images/icons/document.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/draft.png b/app/assets/images/icons/draft.png
deleted file mode 100755
index 0e2b42d..0000000
--- a/app/assets/images/icons/draft.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/edit-small.png b/app/assets/images/icons/edit-small.png
deleted file mode 100755
index 3d81c2f..0000000
--- a/app/assets/images/icons/edit-small.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/edit.png b/app/assets/images/icons/edit.png
deleted file mode 100644
index 0bfecd5..0000000
--- a/app/assets/images/icons/edit.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/error.png b/app/assets/images/icons/error.png
deleted file mode 100644
index 0496522..0000000
--- a/app/assets/images/icons/error.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/flag-green.png b/app/assets/images/icons/flag-green.png
deleted file mode 100644
index 6747730..0000000
--- a/app/assets/images/icons/flag-green.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/flag.png b/app/assets/images/icons/flag.png
deleted file mode 100644
index 5c008b0..0000000
--- a/app/assets/images/icons/flag.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/glsa.png b/app/assets/images/icons/glsa.png
deleted file mode 100644
index 779ad58..0000000
--- a/app/assets/images/icons/glsa.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/glsa_draft.png b/app/assets/images/icons/glsa_draft.png
deleted file mode 100644
index c61a6d8..0000000
--- a/app/assets/images/icons/glsa_draft.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/glsa_new.png b/app/assets/images/icons/glsa_new.png
deleted file mode 100644
index d5eac9b..0000000
--- a/app/assets/images/icons/glsa_new.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/glsa_ready.png b/app/assets/images/icons/glsa_ready.png
deleted file mode 100755
index c17bb7d..0000000
--- a/app/assets/images/icons/glsa_ready.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/glsa_request.png b/app/assets/images/icons/glsa_request.png
deleted file mode 100644
index f35a979..0000000
--- a/app/assets/images/icons/glsa_request.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/glsa_sent.png b/app/assets/images/icons/glsa_sent.png
deleted file mode 100644
index 1c856cd..0000000
--- a/app/assets/images/icons/glsa_sent.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/impact.png b/app/assets/images/icons/impact.png
deleted file mode 100644
index fa96cdd..0000000
--- a/app/assets/images/icons/impact.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/info.png b/app/assets/images/icons/info.png
deleted file mode 100644
index bd9fd94..0000000
--- a/app/assets/images/icons/info.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/keyword.png b/app/assets/images/icons/keyword.png
deleted file mode 100755
index ab11ce2..0000000
--- a/app/assets/images/icons/keyword.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/larr.png b/app/assets/images/icons/larr.png
deleted file mode 100644
index cdf1fb0..0000000
--- a/app/assets/images/icons/larr.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/less_width.png b/app/assets/images/icons/less_width.png
deleted file mode 100755
index 868cd87..0000000
--- a/app/assets/images/icons/less_width.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/logout.png b/app/assets/images/icons/logout.png
deleted file mode 100644
index 2541d2b..0000000
--- a/app/assets/images/icons/logout.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/metadata.png b/app/assets/images/icons/metadata.png
deleted file mode 100755
index 83f17cc..0000000
--- a/app/assets/images/icons/metadata.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/minus-small.png b/app/assets/images/icons/minus-small.png
deleted file mode 100644
index 46c4c0d..0000000
--- a/app/assets/images/icons/minus-small.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/minus.png b/app/assets/images/icons/minus.png
deleted file mode 100644
index f953427..0000000
--- a/app/assets/images/icons/minus.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/more_width.png b/app/assets/images/icons/more_width.png
deleted file mode 100755
index 2af50ef..0000000
--- a/app/assets/images/icons/more_width.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/next.png b/app/assets/images/icons/next.png
deleted file mode 100644
index 5102071..0000000
--- a/app/assets/images/icons/next.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/not-approved.png b/app/assets/images/icons/not-approved.png
deleted file mode 100755
index 20d6f5e..0000000
--- a/app/assets/images/icons/not-approved.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/note.png b/app/assets/images/icons/note.png
deleted file mode 100755
index adaf4f0..0000000
--- a/app/assets/images/icons/note.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/ok.png b/app/assets/images/icons/ok.png
deleted file mode 100644
index dff03da..0000000
--- a/app/assets/images/icons/ok.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/package-add.png b/app/assets/images/icons/package-add.png
deleted file mode 100755
index 9cea3b8..0000000
--- a/app/assets/images/icons/package-add.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/package-go.png b/app/assets/images/icons/package-go.png
deleted file mode 100755
index 4b8d163..0000000
--- a/app/assets/images/icons/package-go.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/package-remove.png b/app/assets/images/icons/package-remove.png
deleted file mode 100755
index 16c299f..0000000
--- a/app/assets/images/icons/package-remove.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/package.png b/app/assets/images/icons/package.png
deleted file mode 100755
index 78578c0..0000000
--- a/app/assets/images/icons/package.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/paste.png b/app/assets/images/icons/paste.png
deleted file mode 100644
index c0490eb..0000000
--- a/app/assets/images/icons/paste.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/pending.png b/app/assets/images/icons/pending.png
deleted file mode 100644
index c28a746..0000000
--- a/app/assets/images/icons/pending.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/permission.png b/app/assets/images/icons/permission.png
deleted file mode 100644
index 4ec1a92..0000000
--- a/app/assets/images/icons/permission.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/plus-small.png b/app/assets/images/icons/plus-small.png
deleted file mode 100644
index 33cf9af..0000000
--- a/app/assets/images/icons/plus-small.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/plus.png b/app/assets/images/icons/plus.png
deleted file mode 100644
index 3f2e8f7..0000000
--- a/app/assets/images/icons/plus.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/profile.png b/app/assets/images/icons/profile.png
deleted file mode 100644
index c02f315..0000000
--- a/app/assets/images/icons/profile.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/public.png b/app/assets/images/icons/public.png
deleted file mode 100755
index 1fff57c..0000000
--- a/app/assets/images/icons/public.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/reference-add.png b/app/assets/images/icons/reference-add.png
deleted file mode 100755
index 689c34c..0000000
--- a/app/assets/images/icons/reference-add.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/reference-remove.png b/app/assets/images/icons/reference-remove.png
deleted file mode 100755
index 8565b4d..0000000
--- a/app/assets/images/icons/reference-remove.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/reference.png b/app/assets/images/icons/reference.png
deleted file mode 100755
index 449037c..0000000
--- a/app/assets/images/icons/reference.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/refresh.png b/app/assets/images/icons/refresh.png
deleted file mode 100755
index 6d68b75..0000000
--- a/app/assets/images/icons/refresh.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/rejection.png b/app/assets/images/icons/rejection.png
deleted file mode 100644
index 558b7d0..0000000
--- a/app/assets/images/icons/rejection.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/request.png b/app/assets/images/icons/request.png
deleted file mode 100755
index 1e55e3f..0000000
--- a/app/assets/images/icons/request.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/resolution-go.png b/app/assets/images/icons/resolution-go.png
deleted file mode 100755
index bfbe022..0000000
--- a/app/assets/images/icons/resolution-go.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/resolution.png b/app/assets/images/icons/resolution.png
deleted file mode 100755
index f2af438..0000000
--- a/app/assets/images/icons/resolution.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/restricted.png b/app/assets/images/icons/restricted.png
deleted file mode 100644
index 282c64a..0000000
--- a/app/assets/images/icons/restricted.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/sent.png b/app/assets/images/icons/sent.png
deleted file mode 100755
index 95b0da4..0000000
--- a/app/assets/images/icons/sent.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/severity.png b/app/assets/images/icons/severity.png
deleted file mode 100644
index f250029..0000000
--- a/app/assets/images/icons/severity.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/stamp.png b/app/assets/images/icons/stamp.png
deleted file mode 100755
index 9d556de..0000000
--- a/app/assets/images/icons/stamp.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/status-green.png b/app/assets/images/icons/status-green.png
deleted file mode 100755
index 680bb8a..0000000
--- a/app/assets/images/icons/status-green.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/status-grey.png b/app/assets/images/icons/status-grey.png
deleted file mode 100755
index f148af4..0000000
--- a/app/assets/images/icons/status-grey.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/status-red.png b/app/assets/images/icons/status-red.png
deleted file mode 100755
index a9d5f4d..0000000
--- a/app/assets/images/icons/status-red.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/status-yellow.png b/app/assets/images/icons/status-yellow.png
deleted file mode 100755
index c7be0ab..0000000
--- a/app/assets/images/icons/status-yellow.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/switch.png b/app/assets/images/icons/switch.png
deleted file mode 100755
index 04bb1e0..0000000
--- a/app/assets/images/icons/switch.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/synopsis.png b/app/assets/images/icons/synopsis.png
deleted file mode 100755
index 363394b..0000000
--- a/app/assets/images/icons/synopsis.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/template.png b/app/assets/images/icons/template.png
deleted file mode 100644
index ed7ec0e..0000000
--- a/app/assets/images/icons/template.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/time.png b/app/assets/images/icons/time.png
deleted file mode 100755
index e4535fa..0000000
--- a/app/assets/images/icons/time.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/title.png b/app/assets/images/icons/title.png
deleted file mode 100755
index d0d2843..0000000
--- a/app/assets/images/icons/title.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/toolbox.png b/app/assets/images/icons/toolbox.png
deleted file mode 100755
index b581d77..0000000
--- a/app/assets/images/icons/toolbox.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/txt.png b/app/assets/images/icons/txt.png
deleted file mode 100755
index ed841a0..0000000
--- a/app/assets/images/icons/txt.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/unaffected.png b/app/assets/images/icons/unaffected.png
deleted file mode 100755
index 8889996..0000000
--- a/app/assets/images/icons/unaffected.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/user.png b/app/assets/images/icons/user.png
deleted file mode 100755
index f6e4dc8..0000000
--- a/app/assets/images/icons/user.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/user_add.png b/app/assets/images/icons/user_add.png
deleted file mode 100644
index deae99b..0000000
--- a/app/assets/images/icons/user_add.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/warning.png b/app/assets/images/icons/warning.png
deleted file mode 100644
index 628cf2d..0000000
--- a/app/assets/images/icons/warning.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/workaround-no.png b/app/assets/images/icons/workaround-no.png
deleted file mode 100755
index c08fc6e..0000000
--- a/app/assets/images/icons/workaround-no.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/workaround.png b/app/assets/images/icons/workaround.png
deleted file mode 100755
index dafa648..0000000
--- a/app/assets/images/icons/workaround.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/xml.png b/app/assets/images/icons/xml.png
deleted file mode 100644
index b5769e6..0000000
--- a/app/assets/images/icons/xml.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/zoom_100.png b/app/assets/images/icons/zoom_100.png
deleted file mode 100755
index a445ea6..0000000
--- a/app/assets/images/icons/zoom_100.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/zoom_in.png b/app/assets/images/icons/zoom_in.png
deleted file mode 100755
index a46dcc8..0000000
--- a/app/assets/images/icons/zoom_in.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/icons/zoom_out.png b/app/assets/images/icons/zoom_out.png
deleted file mode 100755
index 49bb8f2..0000000
--- a/app/assets/images/icons/zoom_out.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/intel-editor.png b/app/assets/images/intel-editor.png
deleted file mode 100644
index 7db46a6..0000000
--- a/app/assets/images/intel-editor.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/line.png b/app/assets/images/line.png
deleted file mode 100644
index 1a8469c..0000000
--- a/app/assets/images/line.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/login-bg.png b/app/assets/images/login-bg.png
deleted file mode 100644
index d2876a9..0000000
--- a/app/assets/images/login-bg.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png
deleted file mode 100644
index 9bc7bd5..0000000
--- a/app/assets/images/logo.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/menu-left.png b/app/assets/images/menu-left.png
deleted file mode 100644
index d741c7e..0000000
--- a/app/assets/images/menu-left.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/menu-right.png b/app/assets/images/menu-right.png
deleted file mode 100644
index cf42427..0000000
--- a/app/assets/images/menu-right.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/menubg.png b/app/assets/images/menubg.png
deleted file mode 100644
index 19aba57..0000000
--- a/app/assets/images/menubg.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/rails.png b/app/assets/images/rails.png
deleted file mode 100644
index d5edc04..0000000
--- a/app/assets/images/rails.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/separator.png b/app/assets/images/separator.png
deleted file mode 100644
index 5a009e5..0000000
--- a/app/assets/images/separator.png
+++ /dev/null
Binary files differ
diff --git a/app/assets/images/spinner.gif b/app/assets/images/spinner.gif
deleted file mode 100644
index 39615c8..0000000
--- a/app/assets/images/spinner.gif
+++ /dev/null
Binary files differ
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
deleted file mode 100644
index d6f4b40..0000000
--- a/app/assets/javascripts/application.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// This is a manifest file that'll be compiled into including all the files listed below.
-// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
-// be included in the compiled file accessible from http://example.com/assets/application.js
-// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
-// the compiled file.
-//
-//= require prototype
-//= require prototype_ujs
-//= require effects
-//= require glsamaker
-//= require glsamaker_misc
-//= require glsamaker_edit
-//= require modalbox
-//= require_self \ No newline at end of file
diff --git a/app/assets/javascripts/glsamaker.js.erb b/app/assets/javascripts/glsamaker.js.erb
deleted file mode 100644
index 92bc6ab..0000000
--- a/app/assets/javascripts/glsamaker.js.erb
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- Sets the count of lines if more than 5 or less than 50.
-*/
-function lines(id, amount) {
-// if ($(id).rows > 0 && $(id).rows <= 50) {
- $(id).rows += amount;
-// }
-}
-
-/**
- Toggles extra-wide input fields
-**/
-function toggleWide(id) {
- if ($(id).style.width == "140%") {
- $(id).style.width = "";
- $(id + "-widebtn").childNodes[1].src = "/images/icons/more_width.png";
- $(id + "-widebtn").title = "More columns";
- } else {
- $(id).style.width = "140%";
- $(id + "-widebtn").childNodes[1].src = "/images/icons/less_width.png";
- $(id + "-widebtn").title = "Fewer columns";
- }
-}
-
-function addBugDialog(glsaid) {
- alert('deprecated. use GLSAMaker.editing.bugs.add_dialog() instead.');
-}
-
-function addCommentDialog(glsaid) {
- Modalbox.show("/glsas/"+glsaid+"/comments/new", {title: "Add comment", width: 600});
-}
-
-function backgroundDialog() {
- Modalbox.show("/tools/background/?id=dev-lang/ruby", {title: "Get background", width: 600});
-}
-
-
-function getClientWidth() {
- return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
-}
-
-function buginfo(bugid) {
- Modalbox.show("/bug/" + bugid, {title: "Bug " + bugid, width: 800});
-}
-
-function generateResolution() {
- $('resolution').value = "";
- var resolution = "";
- var unaffected_atoms = new Array();
- var name, atom, comp, version;
-
- // First find and list all upgrade paths...
- for (i = 0; i < $('packages_table_unaffected').select('.entry').length; i++) {
- if ($('packages_table_unaffected').down(".entry", i).select('input[type=hidden][value=ignore]').length > 0)
- continue;
-
- atom = $('packages_table_unaffected').down(".entry", i).down("#glsa_package__atom").value;
- name = atom.split("/")[1];
- if (name == undefined)
- name = "UNDEFINED";
- comp = $('packages_table_unaffected').down(".entry", i).down("#glsa_package__comp").value.replace('*', '');
- version = $('packages_table_unaffected').down(".entry", i).down("#glsa_package__version").value;
-
- resolution += "All " + name + " users should upgrade to the latest version:\n\n\
-<code>\n\
-# emerge --sync\n\
-# emerge --ask --oneshot --verbose \"" + comp + atom + "-" + version + "\"</code>\n\n";
-
- unaffected_atoms.push(atom);
- }
-
- // Check if there are any packages that only have vulnerable entries.
- // These need to be unmerged.
- for (i = 0; i < $('packages_table_vulnerable').select('.entry').length; i++) {
- if ($('packages_table_vulnerable').down(".entry", i).select('input[type=hidden][value=ignore]').length > 0)
- continue;
-
- atom = $('packages_table_vulnerable').down(".entry", i).down("#glsa_package__atom").value;
- if (unaffected_atoms.indexOf(atom) == -1) {
- name = atom.split("/")[1];
- if (name == undefined)
- name = "UNDEFINED";
-
- resolution += "We recommend that users unmerge " + name + ":\n\n\
-<code>\n\
-# emerge --unmerge \"" + atom + "\"</code>";
- }
- }
-
- $('resolution').value = resolution;
-}
-
-function generateDescription() {
- // This code is pretty ugly. You have been warned.
- // cnt is the number of 'entry's
- // act_cnt is cnt minus the number of to be ignored 'entry's
- // i is used to walk down into the i'th entry element
- // act_i is used to keep track of how many packages have been / will be added
-
- var name = "";
- var cnt = $('packages_table_vulnerable').select('.entry').length;
- var act_cnt = cnt - $('packages_table_vulnerable').select('.entry input[type=hidden][value=ignore]').length;
-
- var act_i = 0;
- for (var i = 0; i < cnt; i++) {
- if ($('packages_table_vulnerable').down(".entry", i).select('input[type=hidden][value=ignore]').length > 0)
- continue;
-
- var atom = $('packages_table_vulnerable').down(".entry", i).down("#glsa_package__atom").value;
-
- if (act_cnt > 1 && act_i == act_cnt - 1) {
- name += ", and ";
- } else if (act_cnt > 1 && act_i != 0) {
- name += ", ";
- }
- act_i++;
- name += atom.split("/")[1];
- }
-
- if (name == "undefined")
- name = "UNDEFINED";
-
- $('description').value = "Multiple vulnerabilities have been discovered in " + name + ". Please review the CVE identifiers referenced below for details.";
-}
-
-function toggleCommentRead(comment) {
- if ($('commentread-' + comment).value == "true") {
- $('commentread-' + comment).value = "false";
- $('commentflag-' + comment).update('<img src="<%= asset_path 'icons/flag.png' %>" alt="Todo" />');
- }
- else {
- $('commentread-' + comment).value = "true";
- $('commentflag-' + comment).update('<img src="<%= asset_path 'icons/flag-green.png' %>" alt="Done." />');
- }
-}
-
-function cveinfo(cveid) {
- Modalbox.show("/cve/info/" + cveid, {title: cveid, width: 800});
-}
-
-function cvepopup(cveid) {
- window.open("/cve/info/" + escapeHTML(cveid), "cvepopup-" + cveid, "width=500, height=600,status=no,menubar=no,toolbar=no,resizable=no");
-}
-
-function escapeHTML(str) {
- return str.replace(/(<([^>]+)>)/ig,"");
-}
-
-//document.observe('dom:loaded', function() {
-
-//});
diff --git a/app/assets/javascripts/glsamaker_edit.js b/app/assets/javascripts/glsamaker_edit.js
deleted file mode 100644
index cc77621..0000000
--- a/app/assets/javascripts/glsamaker_edit.js
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * GLSAMaker 2
- * Draft editing JS
- */
-
-if (typeof GLSAMaker == "undefined" || !GLSAMaker) {
- var GLSAMaker = {};
-}
-
-if (typeof GLSAMaker.editing == "undefined" || !GLSAMaker.editing) {
- GLSAMaker.editing = function() {
- return {};
- }();
-}
-
-GLSAMaker.editing.bugs = function() {
- return {
- /**
- * Removes a bug from a draft being edited
- */
- del : function(bug_id) {
- // no such bug, or already removed
- if (!$('bug-' + bug_id)) {
- return;
- }
-
- Effect.Fade('bug-' + bug_id, {
- duration: .75,
- afterFinish: function(e) {
- $('bug-' + bug_id).remove();
- }
- });
- },
- /**
- * Opens a dialog to add bugs
- */
- add_dialog : function(glsa_id) {
- Modalbox.show("/glsas/" + glsa_id + "/bugs/new", {title: "Add bugs", width: 600});
- }
- };
-}();
-
-GLSAMaker.editing.references = function() {
- return {
- /**
- * Removes a reference from a draft being edited
- */
- del : function(ref) {
- // no such reference, or already removed
- if (!ref) {
- return;
- }
-
- var td = ref.up(".entry")
-
- Effect.Fade(td, {
- duration: .75,
- afterFinish: function(e) {
- td.remove();
- }
- });
- },
- /**
- * Opens a dialog to import references from external data
- */
- import_dialog : function(glsa_id) {
- Modalbox.show("/glsa/import_references/" + glsa_id, {title: "Import references", width: 800});
- }
- };
-}();
-
-GLSAMaker.editing.packages = function() {
- return {
- /**
- * Removes a reference from a draft being edited
- */
- del : function(ref) {
- // no such reference, or already removed
- if (!ref) {
- return;
- }
-
- var td = ref.up(".entry");
-
- Effect.Fade(td, {
- duration: .75,
- afterFinish: function(e) {
- td.remove();
- }
- });
- }
- };
-}();
-
-GLSAMaker.editing.templates = function() {
- return {
- /**
- * Displays a drop down menu to select a template to append
- */
- dropdown : function(button, target) {
- var div = $('templates-' + target);
-
- if (!div) {
- return;
- }
-
- // Close the popup if it's already open
- if (div.getStyle('display') != 'none') {
- GLSAMaker.editing.templates.close(div);
- return;
- }
-
- var btn_layout = button.getLayout();
-
- div.setStyle({
- position: 'absolute',
- right: btn_layout.get('right') + "px",
- top: btn_layout.get('top') + btn_layout.get('height') + 5 + "px"
- });
-
- Effect.SlideDown(div, {
- duration: .15
- });
- },
- /**
- * Closes a popup
- *
- * @param target The popup to close
- */
- close : function(target) {
- Effect.SlideUp(target, {
- duration: .2
- });
- },
- /**
- * Observes a field for clicks into template fields and sets the
- * @param elem
- */
- observeClick : function(elem) {
- elem.observe('click', function(event) {
- var before = '[';
- var after = ']';
-
- var selection_info = GLSAMaker.misc.getInputSelection(this);
- var text = this.getValue();
-
- // If the user clicked and did not select
- if (selection_info.start == selection_info.end) {
- var text_before = text.substring(0, selection_info.start);
- var text_after = text.substring(selection_info.end, text.length - 1);
-
- // check if there is any template before this
- var pos_prev = text_before.search(GLSAMaker.misc.escapeRegExp(after));
- var pos_comp = 0;
-
- while (pos_prev > 0) {
- pos_comp += pos_prev;
- text_before = text_before.slice(pos_prev);
- pos_prev = text_before.search(GLSAMaker.misc.escapeRegExp(after));
- }
-
- var pos_before = text_before.search(GLSAMaker.misc.escapeRegExp(before));
- if (pos_before == -1) {
- return;
- }
-
- // pos_before is our selection start.
- var pos_after = text_after.search(GLSAMaker.misc.escapeRegExp(after));
- if (pos_after == -1) {
- return;
- }
-
- pos_before += pos_comp;
- pos_after += selection_info.end + 1;
-
- GLSAMaker.misc.setInputSelection(this, {start: pos_before, end: pos_after});
- }
- })
- }
- };
-}(); \ No newline at end of file
diff --git a/app/assets/javascripts/glsamaker_misc.js b/app/assets/javascripts/glsamaker_misc.js
deleted file mode 100644
index fb04be3..0000000
--- a/app/assets/javascripts/glsamaker_misc.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
- * GLSAMaker 2
- * Draft editing JS
- */
-
-if (typeof GLSAMaker == "undefined" || !GLSAMaker) {
- var GLSAMaker = {};
-}
-
-if (typeof GLSAMaker.misc == "undefined" || !GLSAMaker.misc) {
- GLSAMaker.misc = function() {
- return {
- /**
- * Find out the selection position in a text field
- * via: http://stackoverflow.com/questions/4928586/get-caret-position-in-html-input
- *
- * @param el
- */
- getInputSelection : function(el) {
- var start = 0, end = 0, normalizedValue, range,
- textInputRange, len, endRange;
-
- if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
- start = el.selectionStart;
- end = el.selectionEnd;
- } else {
- range = document.selection.createRange();
-
- if (range && range.parentElement() == el) {
- len = el.value.length;
- normalizedValue = el.value.replace(/\r\n/g, "\n");
-
- // Create a working TextRange that lives only in the input
- textInputRange = el.createTextRange();
- textInputRange.moveToBookmark(range.getBookmark());
-
- // Check if the start and end of the selection are at the very end
- // of the input, since moveStart/moveEnd doesn't return what we want
- // in those cases
- endRange = el.createTextRange();
- endRange.collapse(false);
-
- if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
- start = end = len;
- } else {
- start = -textInputRange.moveStart("character", -len);
- start += normalizedValue.slice(0, start).split("\n").length - 1;
-
- if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
- end = len;
- } else {
- end = -textInputRange.moveEnd("character", -len);
- end += normalizedValue.slice(0, end).split("\n").length - 1;
- }
- }
- }
- }
-
- return {
- start: start,
- end: end
- };
- },
- /**
- * Sets the caret position of a control
- * @param ctrl
- * @param pos
- */
- setInputSelection: function (ctrl, data) {
- if (ctrl.setSelectionRange) {
- ctrl.focus();
- ctrl.setSelectionRange(data.start, data.end);
- }
- else if (ctrl.createTextRange) {
- var range = ctrl.createTextRange();
- range.collapse(true);
- range.moveEnd('character', data.end);
- range.moveStart('character', data.start);
- range.select();
- }
- },
- escapeRegExp : function(text) {
- return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
- }
- };
- }();
-}
-
-GLSAMaker.misc.ui = function() {
- return {
- /**
- * Docks an element to the right
- */
- dock : function(elem) {
- if (!elem) {
- return;
- }
-
- elem.toggleClassName('docked-right');
- }
- };
-}();
diff --git a/app/assets/javascripts/jsui.js b/app/assets/javascripts/jsui.js
deleted file mode 100644
index 039f727..0000000
--- a/app/assets/javascripts/jsui.js
+++ /dev/null
@@ -1,8 +0,0 @@
-//= require prototype
-//= require prototype_ujs
-//= require effects
-//= require uki
-//= require uki-more
-//= require searchable
-//= require glsamaker
-//= require glsamaker_misc \ No newline at end of file
diff --git a/app/assets/javascripts/modalbox.js b/app/assets/javascripts/modalbox.js
deleted file mode 100644
index 611c226..0000000
--- a/app/assets/javascripts/modalbox.js
+++ /dev/null
@@ -1,593 +0,0 @@
-//
-// ModalBox - The pop-up window thingie with AJAX, based on Prototype JS framework.
-//
-// Created by Andrew Okonetchnikov
-// Copyright 2006-2010 okonet.ru. All rights reserved.
-//
-// Licensed under MIT license.
-//
-
-if (Object.isUndefined(Prototype.Browser.IE6)) {
- Prototype.Browser.IE6 = (navigator.appName.indexOf("Microsoft Internet Explorer") != -1 && navigator.appVersion.indexOf("MSIE 6.0") != -1 && !window.XMLHttpRequest);
-}
-
-if (!window.Modalbox)
- var Modalbox = {};
-
-Modalbox.Methods = {
- overrideAlert: false, // Override standard browser alert message with ModalBox
- focusableElements: [],
- currFocused: 0,
- initialized: false, // Modalbox is visible
- active: true, // Modalbox is visible and active
- options: {
- title: "ModalBox Window", // Title of the ModalBox window
- overlayClose: true, // Close modal box by clicking on overlay
- width: 500, // Default width in px
- height: 90, // Default height in px
- overlayOpacity: 0.65, // Default overlay opacity
- overlayDuration: 0.25, // Default overlay fade in/out duration in seconds
- slideDownDuration: 0.5, // Default Modalbox appear slide down effect in seconds
- slideUpDuration: 0.5, // Default Modalbox hiding slide up effect in seconds
- resizeDuration: 0.25, // Default resize duration seconds
- inactiveFade: true, // Fades MB window on inactive state
- transitions: true, // Toggles transition effects. Transitions are enabled by default
- loadingString: "Please wait. Loading...", // Default loading string message
- closeString: "Close window", // Default title attribute for close window link
- closeValue: "&times;", // Default string for close link in the header
- params: {},
- method: 'get', // Default Ajax request method
- autoFocusing: true, // Toggles auto-focusing for form elements. Disable for long text pages.
- aspnet: false, // Should be true when using with ASP.NET controls. When true Modalbox window will be injected into the first form element.
- resizeCSSID: ''
- },
- _options: {},
-
- setOptions: function(options) {
- Object.extend(this.options, options || {});
- },
-
- _init: function(options) {
- // Setting up original options with default options
- Object.extend(this._options, this.options);
- this.setOptions(options);
-
- // Creating the overlay
- this.MBoverlay = new Element("div", {id: "MB_overlay", style: "opacity: 0"});
-
- // Creating the modal window
- this.MBwindowwrapper = new Element("div", {id: "MB_windowwrapper"}).update(
- this.MBwindow = new Element("div", {id: "MB_window", style: "display: none"}).update(
- this.MBframe = new Element("div", {id: "MB_frame"}).update(
- this.MBheader = new Element("div", {id: "MB_header"}).update(
- this.MBcaption = new Element("div", {id: "MB_caption"})
- )
- )
- )
- );
-
- this.MBclose = new Element("a", {id: "MB_close", title: this.options.closeString, href: "#"}).update("<span>" + this.options.closeValue + "</span>");
- this.MBheader.insert({'bottom':this.MBclose});
-
- this.MBcontent = new Element("div", {id: "MB_content"}).update(
- this.MBloading = new Element("div", {id: "MB_loading"}).update(this.options.loadingString)
- );
- this.MBframe.insert({'bottom':this.MBcontent});
-
- // Inserting into DOM. If parameter set and form element have been found will inject into it. Otherwise will inject into body as topmost element.
- // Be sure to set padding and marging to null via CSS for both body and (in case of asp.net) form elements.
- var injectToEl = this.options.aspnet ? $(document.body).down('form') : $(document.body);
- injectToEl.insert({'top':this.MBwindowwrapper});
- injectToEl.insert({'top':this.MBoverlay});
-
- var scrollOffsets = document.viewport.getScrollOffsets();
- if (scrollOffsets[1] > 0) {
- $('MB_window').setStyle({top:scrollOffsets[1] + 'px'});
- }
-
- Event.observe(window, 'scroll', function() {
- scrollOffsets = document.viewport.getScrollOffsets();
- $('MB_window').setStyle({top:scrollOffsets[1] + 'px'});
- });
-
- // Initial scrolling position of the window. To be used for remove scrolling effect during ModalBox appearing
- this.initScrollX = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
- this.initScrollY = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
-
- //Adding event observers
- this.hideObserver = this._hide.bindAsEventListener(this);
- this.kbdObserver = this._kbdHandler.bindAsEventListener(this);
- this.resizeObserver = this._setWidthAndPosition.bindAsEventListener(this);
- this._initObservers();
-
- this.initialized = true; // Mark as initialized
- },
-
- show: function(content, options) {
- if (!this.initialized) this._init(options); // Check if MB is already initialized
-
- this._cleanUpContentIDs();
-
- this.content = content;
- this.setOptions(options);
-
- if (this.options.title) { // Updating title of the MB
- this.MBcaption.update(this.options.title);
- } else { // If title isn't given, the header will not displayed
- this.MBheader.hide();
- this.MBcaption.hide();
- }
-
- if (this.MBwindow.style.display == "none") { // First modal box appearing
- this._appear();
- this.event("onShow"); // Passing onShow callback
- } else { // If MB already on the screen, update it
- this._update();
- this.event("onUpdate"); // Passing onUpdate callback
- }
- },
-
- hide: function(options) { // External hide method to use from external HTML and JS
- if (this.initialized) {
- // Reading for options/callbacks except if event given as a parameter
- if (options && !Object.isFunction(options.element))
- Object.extend(this.options, options);
- this.event("beforeHide"); // Passing beforeHide callback
- if (this.options.transitions) {
- Effect.SlideUp(this.MBwindow, { duration: this.options.slideUpDuration, transition: Effect.Transitions.sinoidal, afterFinish: this._deinit.bind(this) });
- } else {
- this.MBwindow.hide();
- this._deinit();
- }
- Event.stopObserving(window, 'scroll');
- } else {
- throw("Modalbox is not initialized.");
- }
- },
-
- _hide: function(event) { // Internal hide method to use with overlay and close link
- event.stop(); // Stop event propagation for link elements
- // When clicked on overlay we'll check the option and in case of overlayClose == false we'll break hiding execution [Fix for #139]
- if (event.element().id == 'MB_overlay' && !this.options.overlayClose) return false;
- this.hide();
- },
-
- alert: function(message){
- var html = '<div class="MB_alert"><p>' + message + '</p><input type="button" onclick="Modalbox.hide()" value="OK" /></div>';
- Modalbox.show(html, {title: 'Alert: ' + document.title, width: 300});
- },
-
- _appear: function() { // First appearing of MB
- if (Prototype.Browser.IE6) { // Preparing IE 6 for showing modalbox
- window.scrollTo(0,0);
- this._prepareIEHtml("100%", "hidden");
- this._prepareIESelects("hidden");
- }
- this._setWidth();
- if(this.options.transitions) {
- this.MBoverlay.setOpacity(0);
- new Effect.Fade(this.MBoverlay, {
- from: 0,
- to: this.options.overlayOpacity,
- duration: this.options.overlayDuration,
- afterFinish: (function() {
- new Effect.SlideDown(this.MBwindow, {
- duration: this.options.slideDownDuration,
- transition: Effect.Transitions.sinoidal,
- afterFinish: this.loadContent.bind(this)
- });
- }).bind(this)
- });
- } else {
- this.MBoverlay.setOpacity(this.options.overlayOpacity);
- this.MBwindow.show();
- this.loadContent();
- }
- Event.observe(window, "resize", this.resizeObserver);
- },
-
- resize: function(byWidth, byHeight, options) { // Change size of MB without content reloading
- var oWidth = $(this.MBoverlay).getWidth();
- var wHeight = $(this.MBwindow).getHeight();
- var wWidth = $(this.MBwindow).getWidth();
- var hHeight = $(this.MBheader).getHeight();
- var cHeight = $(this.MBcontent).getHeight();
- var newHeight = ((wHeight - hHeight + byHeight) < cHeight) ? (cHeight + hHeight) : (wHeight + byHeight);
-
- var el = $(this.MBwindow);
- var contentEl = $(this.MBcontent);
- var windowBottomMargin = 10;
- newHeight += windowBottomMargin;
- var windowOffset = (parseInt(el.getStyle('margin-top'), 0) + parseInt(el.getStyle('margin-bottom'), 0) + parseInt(el.getStyle('border-top-width'), 0) + parseInt(el.getStyle('border-bottom-width'), 0)) + windowBottomMargin;
- var contentPadding = (parseInt(contentEl.getStyle('padding-top')) + parseInt(contentEl.getStyle('padding-bottom')));
-
- if ((newHeight + windowOffset + contentPadding) > document.viewport.getHeight()) {
- // adjust window height to account for margins and border widths
- newHeight = document.viewport.getHeight() - windowOffset - windowBottomMargin;
- // calculate content height including header height and padding values
- newcHeight = newHeight - hHeight - parseInt($(this.MBframe).getStyle('padding-bottom'), 0) - parseInt($(this.MBcontent).getStyle('padding-bottom'), 0);
- $(this.MBcontent).setStyle({height:newcHeight + 'px'});
- } else if ($(this.MBcontent).getStyle('height')) {
- // release any MB_content height set prior to establish scrollbars in content area
- $(this.MBcontent).setStyle({height:''});
- }
-
- var newWidth = wWidth + byWidth;
- //var newStyle = {width: newWidth + "px", height: newHeight + "px", left: (o.width - newWidth)/2 + "px"};
- var newStyle = {width: newWidth + "px", height: newHeight + "px"};
- this.options.width = newWidth;
- if (options) this.setOptions(options); // Passing callbacks
- if (this.options.transitions && !Modalbox.animating) {
- Modalbox.animating = true;
- new Effect.Morph(this.MBwindow, {
- style: newStyle,
- duration: this.options.resizeDuration,
- beforeStart: function(fx){
- fx.element.setStyle({overflow: "hidden"}); // Fix for MSIE 6 to resize correctly
- },
- afterFinish: (function(fx) {
- fx.element.setStyle({overflow: "visible"});
- this.event("_afterResize"); // Passing internal callback
- this.event("afterResize"); // Passing callback
- Modalbox.animating = false;
- }).bind(this)
- });
- } else {
- this.MBwindow.setStyle(newStyle);
- (function() {
- this.event("_afterResize"); // Passing internal callback
- this.event("afterResize"); // Passing callback
- }).bind(this).defer();
- }
- },
-
- resizeToContent: function(options){
- // Resizes the modalbox window to the actual content height.
- // This might be useful to resize modalbox after some content modifications which were changed content height.
-
- if (typeof options == "undefined") {
- options = {};
- }
-
- // check to see if MB_content includes any images
- var mbimages = $('MB_content').select('img');
- var totalimages = mbimages.length;
- if (mbimages[0]) {
- if (typeof options.imagesloaded == "undefined") {
-
- var loadedImages = $A();
- var loadedImageTotal = 0;
- mbimages.each(function(o,idx) {
- loadedImages[idx] = new Image();
- loadedImages[idx].src = o.src;
- loadedImages[idx].onload = function() {
- loadedImageTotal++;
- if (loadedImageTotal == totalimages) {
- // make sure all images have been rendered by checking their height
- var imageincomplete = false;
- mbimages.each(function(i) {
- if (i.height == 0) {
- imageincomplete = true;
- }
- });
- if (imageincomplete || Modalbox.animating) {
- // some image hasn't been rendered yet, trigger resize loop until it is
- Modalbox.resizeToContent();
- } else {
- // trigger one final resize, but set imagesloaded option to skip inspection of images
- options.imagesloaded = true;
- Modalbox.resizeToContent(options);
- }
- }
- }
- })
- }
- }
-
- var byWidth = 0, byHeight = this.options.height - this.MBwindow.getHeight();
- if (options.resizeCSSID && $(options.resizeCSSID)) {
- // byWidth is the amount of pixels needed to increase/decrease window to meet width of options.resizeCSSID
- // plus a 10 pixel margin to accommodate scrollbars
- byWidth = $(options.resizeCSSID).getWidth() - $(this.MBwindow).getWidth() + (parseInt($(this.MBcontent).getStyle('padding-left'), 0) + parseInt($(this.MBcontent).getStyle('padding-right'), 0)) + 15;
- }
- if (byHeight != 0) {
- this.resize(byWidth, byHeight, options);
- }
- },
-
- resizeToInclude: function(element, options){
- // Resizes the modalbox window to the cumulative height of element. Calculations are using CSS properties for margins and border.
- // This method might be useful to resize modalbox before including or updating content.
-
- var el = $(element);
- var elHeight = el.getHeight() + parseInt(el.getStyle('margin-top'), 0) + parseInt(el.getStyle('margin-bottom'), 0) + parseInt(el.getStyle('border-top-width'), 0) + parseInt(el.getStyle('border-bottom-width'), 0);
- if (elHeight > 0) {
- this.resize(0, elHeight, options);
- }
- },
-
- _update: function() { // Updating MB in case of wizards
- this.MBcontent.update($(this.MBloading).update(this.options.loadingString));
- this.loadContent();
- },
-
- loadContent: function() {
- if (this.event("beforeLoad") != false) { // If callback passed false, skip loading of the content
- if (typeof this.content == 'string') {
- var htmlRegExp = new RegExp(/<\/?[^>]+>/gi);
- if (htmlRegExp.test(this.content)) { // Plain HTML given as a parameter
- this._processContent(this.content);
- } else { // URL given as a parameter. We'll request it via Ajax
- new Ajax.Request(this.content, {
- method: this.options.method.toLowerCase(),
- parameters: this.options.params,
- onComplete: (function(response) {
- this._processContent(response.responseText);
- }).bind(this),
- onException: function(instance, exception){
- Modalbox.hide();
- throw('Modalbox Loading Error: ' + exception);
- }
- });
- }
- } else if (typeof this.content == 'object') { // HTML Object is given
- this._insertContent(this.content);
- } else {
- this.hide();
- throw('Modalbox Parameters Error: Please specify correct URL or HTML element (plain HTML or object)');
- }
- }
- },
-
- _processContent: function(content) {
- var html = content.stripScripts(), scripts = content.extractScripts();
- this._insertContent(html, function() {
- scripts.map(function(script) {
- return eval(script.replace("<!--", "").replace("// -->", ""));
- }, window);
- });
- },
-
- _insertContent: function(content, callback) {
- this.MBcontent.hide().update();
-
- if (typeof content == 'string') { // Plain HTML is given
- this.MBcontent.insert(new Element("div", { style: "display: none" }).update(content)).down().show();
- } else if (typeof content == 'object') { // HTML Object is given
- var _htmlObj = content.cloneNode(true); // If node is already a part of DOM we'll clone it
- // If cloneable element has ID attribute defined, modify it to prevent duplicates
- if (content.id) content.id = "MB_" + content.id;
- // Add prefix for IDs on all elements inside the DOM node
- $(content).select('*[id]').each(function(el) { el.id = "MB_" + el.id; });
- this.MBcontent.insert(_htmlObj).down('div').show();
- if (Prototype.Browser.IE6) { // Toggling back visibility for hidden selects in IE
- this._prepareIESelects("", "#MB_content ");
- }
- }
-
- // Prepare and resize modal box for content
- if (this.options.height == this._options.height) {
- this.resize((this.options.width - $(this.MBwindow).getWidth()), this.MBcontent.getHeight() - $(this.MBwindow).getHeight() + this.MBheader.getHeight(), {
- afterResize: (function() {
- this._putContent.bind(this, callback).defer(); // MSIE fix
- }).bind(this)
- });
- } else { // Height is defined. Creating a scrollable window
- this._setWidth();
- this.MBcontent.setStyle({
- overflow: 'auto',
- height: this.MBwindow.getHeight() - this.MBheader.getHeight() - 13 + 'px'
- });
- this._putContent.bind(this, callback).defer(); // MSIE fix
- }
- },
-
- _putContent: function(callback) {
- this.MBcontent.show();
- this._findFocusableElements();
- this._setFocus(); // Setting focus on first 'focusable' element in content (input, select, textarea, link or button)
- if (Object.isFunction(callback))
- callback(); // Executing internal JS from loaded content
- this.event("afterLoad"); // Passing callback
- },
-
- activate: function(options) {
- this.setOptions(options);
- this.active = true;
- if (this.options.overlayClose)
- this.MBoverlay.observe("click", this.hideObserver);
- this.MBclose.observe("click", this.hideObserver).show();
- if (this.options.transitions && this.options.inactiveFade)
- new Effect.Appear(this.MBwindow, {duration: this.options.slideUpDuration});
- },
-
- deactivate: function(options) {
- this.setOptions(options);
- this.active = false;
- if (this.options.overlayClose)
- this.MBoverlay.stopObserving("click", this.hideObserver);
- this.MBclose.stopObserving("click", this.hideObserver).hide();
- if (this.options.transitions && this.options.inactiveFade)
- new Effect.Fade(this.MBwindow, {duration: this.options.slideUpDuration, to: 0.75});
- },
-
- _initObservers: function() {
- this.MBclose.observe("click", this.hideObserver);
- if (this.options.overlayClose)
- this.MBoverlay.observe("click", this.hideObserver);
- // Gecko and Opera are moving focus a way too fast, all other browsers are okay with keydown
- var kbdEvent = (Prototype.Browser.Gecko || Prototype.Browser.Opera) ? "keypress" : "keydown";
- Event.observe(document, kbdEvent, this.kbdObserver);
- },
-
- _removeObservers: function() {
- this.MBclose.stopObserving("click", this.hideObserver);
- if (this.options.overlayClose)
- this.MBoverlay.stopObserving("click", this.hideObserver);
- var kbdEvent = (Prototype.Browser.Gecko || Prototype.Browser.Opera) ? "keypress" : "keydown";
- Event.stopObserving(document, kbdEvent, this.kbdObserver);
- },
-
- _setFocus: function() {
- // Setting focus to the first 'focusable' element which is one with tabindex = 1 or the first in the form loaded.
- if (this.focusableElements.length > 0 && this.options.autoFocusing == true) {
- var firstEl = this.focusableElements.find(function (el){
- return el.tabIndex == 1;
- }) || this.focusableElements.first();
- this.currFocused = this.focusableElements.toArray().indexOf(firstEl);
- firstEl.focus(); // Focus on first focusable element except close button
- } else if (this.MBclose.visible()) {
- this.MBclose.focus(); // If no focusable elements exist focus on close button
- }
- },
-
- _findFocusableElements: function() { // Collect form elements and links from MB content
- if (this.options.autoFocusing === true) {
- // TODO maybe add :enabled to select and textarea elements
- this.MBcontent.select('input:not([type=hidden]):enabled, select, textarea, button, a[href]').invoke('addClassName', 'MB_focusable');
- this.focusableElements = this.MBcontent.select('.MB_focusable');
- }
- },
-
- _kbdHandler: function(event) {
- var node = event.element();
- switch(event.keyCode) {
- case Event.KEY_TAB:
- event.stop();
-
- // Switching currFocused to the element which was focused by mouse instead of TAB-key. Fix for #134
- if (node != this.focusableElements[this.currFocused])
- this.currFocused = this.focusableElements.indexOf(node);
-
- if (!event.shiftKey) { // Focusing in direct order
- if (this.currFocused >= this.focusableElements.length - 1) {
- this.currFocused = 0;
- } else {
- this.currFocused++;
- }
- } else { // Shift key is pressed. Focusing in reverse order
- if (this.currFocused <= 0) {
- this.currFocused = this.focusableElements.length - 1;
- } else {
- this.currFocused--;
- }
- }
- this.focusableElements[this.currFocused].focus();
- break;
- case Event.KEY_ESC:
- if (this.active) this._hide(event);
- break;
- case 32:
- this._preventScroll(event);
- break;
- case 0: // For Gecko browsers compatibility
- if (event.which == 32) this._preventScroll(event);
- break;
- case Event.KEY_UP:
- case Event.KEY_DOWN:
- case Event.KEY_PAGEDOWN:
- case Event.KEY_PAGEUP:
- case Event.KEY_HOME:
- case Event.KEY_END:
- var tagName = node.tagName.toLowerCase();
- // Safari operates in slightly different way. This realization is still buggy in Safari.
- if (Prototype.Browser.WebKit && !["textarea", "select"].include(tagName)) {
- event.stop();
- } else if ((tagName == "input" && ["submit", "button"].include(node.type)) || (tagName == "a")) {
- event.stop();
- }
- break;
- }
- },
-
- _preventScroll: function(event) { // Disabling scrolling by "space" key
- if (!["input", "textarea", "select", "button"].include(event.element().tagName.toLowerCase()))
- event.stop();
- },
-
- _deinit: function() {
- this._removeObservers();
- Event.stopObserving(window, "resize", this.resizeObserver);
- if (this.options.transitions) {
- Effect.toggle(this.MBoverlay, 'appear', {duration: this.options.overlayDuration, afterFinish: this._removeElements.bind(this) });
- } else {
- this.MBoverlay.hide();
- this._removeElements();
- }
- this.MBcontent.setStyle({overflow: '', height: ''});
- },
-
- _cleanUpContentIDs: function() {
- // Replace prefixes 'MB_' in IDs for the original content
- if (typeof this.content == 'object') {
- if (this.content.id && this.content.id.match(/MB_/)) {
- this.content.id = this.content.id.replace(/MB_/, "");
- }
-
- this.content.select('*[id]').each(function(el) {
- el.id = el.id.replace(/MB_/, "");
- });
- }
- },
-
- _removeElements: function() {
- if (Prototype.Browser.Opera) { // Remove overlay after-effects in Opera
- window.scrollBy(0, 0);
- }
- this.MBoverlay.remove();
- $(this.MBwindowwrapper).remove();
- if (Prototype.Browser.IE6) {
- this._prepareIEHtml("", ""); // If set to auto MSIE will show horizontal scrolling
- this._prepareIESelects("");
- window.scrollTo(this.initScrollX, this.initScrollY);
- }
-
- this._cleanUpContentIDs();
-
- // Initialized will be set to false
- this.initialized = false;
- this.event("afterHide"); // Passing afterHide callback
- this.setOptions(this._options); // Settings options object into initial state
- },
-
- _setWidth: function() { // Set size
- this.MBwindow.setStyle({width: this.options.width + "px", height: this.options.height + "px"});
- },
-
- _setWidthAndPosition: function() {
- this.MBwindow.setStyle({
- width: this.options.width + "px"
- });
- },
-
- _prepareIEHtml: function(height, overflow) {
- // IE6 requires width and height set to 100% and overflow hidden
- $$('html, body').invoke('setStyle', {
- width: height,
- height: height,
- overflow: overflow
- });
- },
-
- _prepareIESelects: function(visibility, prefix) {
- // Toggle visibility for select elements
- $$((prefix || "") + "select").invoke('setStyle', {
- 'visibility': visibility
- });
- },
-
- event: function(eventName) {
- var r = true;
- if (this.options[eventName]) {
- var returnValue = this.options[eventName](); // Executing callback
- this.options[eventName] = null; // Removing callback after execution
- if (!Object.isUndefined(returnValue))
- r = returnValue;
- }
- return r;
- }
-};
-
-Object.extend(Modalbox, Modalbox.Methods);
-
-if (Modalbox.overrideAlert) window.alert = Modalbox.alert;
diff --git a/app/assets/javascripts/searchable.js b/app/assets/javascripts/searchable.js
deleted file mode 100644
index 6ef683d..0000000
--- a/app/assets/javascripts/searchable.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Search with chunks
- */
-window.Searchable = uki.newClass(uki.view.Observable, new function() {
- this.chunkSize = 100;
- this.chunkTimeout = 20;
-
- this.init = function(data) {
- this.items = data;
- };
-
- this.search = function(query, callback) {
- stopSearch.call(this);
-
- this._query = query;
- var iterator = this.createIterator(query, callback);
-
- this.trigger('search.start', iterator);
- filterChunk.call(this, iterator);
- };
-
- this.matchRow = function( row, iterator ) { return false; };
-
- this.createIterator = function(query, callback) {
- return {
- query: query,
- iteration: 0,
- found: 0,
- callback: callback
- };
- };
-
- this._bindToDom = function() { return true };
-
- function filterChunk(iterator) {
- var filtered = 0,
- _this = this,
- foundInChunk = [],
- item;
-
- while(iterator.iteration < this.items.length) {
- if (filtered == this.chunkSize) {
- if (foundInChunk.length) this.trigger('search.foundInChunk', foundInChunk);
- this._searchTimer = setTimeout(function() { filterChunk.call(_this, iterator); }, this.chunkTimeout);
- return;
- }
- item = this.items[iterator.iteration];
- if (this.matchRow( item, iterator )) {
- iterator.found++;
- foundInChunk.push(item);
- this.trigger('search.found', item, iterator);
- if (iterator.callback) iterator.callback(item, iterator);
- } else {
- this.trigger('search.missed', item, iterator);
- }
- iterator.iteration++;
- filtered++;
- }
- this.trigger('search.foundInChunk', foundInChunk);
-
- stopSearch.call(this);
- this.trigger('search.finish', iterator);
- };
-
- function stopSearch () {
- if (this._searchTimer) {
- clearTimeout(this._searchTimer);
- this._searchTimer = false;
- }
- }
-}); \ No newline at end of file
diff --git a/app/assets/javascripts/uki-more.js b/app/assets/javascripts/uki-more.js
deleted file mode 100644
index 9f75423..0000000
--- a/app/assets/javascripts/uki-more.js
+++ /dev/null
@@ -1,827 +0,0 @@
-uki.more = {};
-
-uki.more.utils = {
- range: function (from, to) {
- var result = new Array(to - from), idx = 0;
- for (; from <= to; from++, idx++) {
- result[idx] = from;
- };
- return result;
- }
-};
-
-uki.extend(uki, uki.more.utils);
-
-uki.more.view = {};
-
-uki.viewNamespaces.push('uki.more.view.');
-
-// really basic tree list implementation
-uki.more.view.treeList = {};
-
-uki.view.declare('uki.more.view.TreeList', uki.view.List, function(Base) {
- this._setup = function() {
- Base._setup.call(this);
- this._render = new uki.more.view.treeList.Render();
- };
-
- this.listData = Base.data;
-
- this.data = uki.newProp('_treeData', function(v) {
- this._treeData = v;
- this._data = this._treeNodeToListData(v);
- var children = this.listData(), opened = false;
- for (var i=children.length - 1; i >= 0 ; i--) {
- if (this._data[i].__opened) {
- opened = true;
- this._openSubElement(i);
- }
- };
- this.listData(this._data);
- if (opened) this.trigger('open');
- });
-
- this._treeNodeToListData = function(node, indent) {
- indent = indent || 0;
- return uki.map(node, function(row) {
- row.__indent = indent;
- return row;
- });
- };
-
- this.toggle = function(index) {
- this._data[index].__opened ? this.close(index) : this.open(index);
- };
-
- function offsetFrom (array, from, offset) {
- for (var i = from; i < array.length; i++) {
- array[i] += offset;
- };
- }
-
- function recursiveLength (item) {
- var children = uki.attr(item, 'children'),
- length = children.length;
-
- for (var i=0; i < children.length; i++) {
- if (children[i].__opened) length += recursiveLength(children[i]);
- };
- return length;
- }
-
- this._openSubElement = function(index) {
- var item = this._data[index],
- children = uki.attr(item, 'children');
-
- if (!children || !children.length) return 0;
- var length = children.length;
-
- item.__opened = true;
- this._data.splice.apply(this._data, [index+1, 0].concat( this._treeNodeToListData(children, item.__indent + 1) ));
-
- for (var i=children.length - 1; i >= 0 ; i--) {
- if (this._data[index+1+i].__opened) {
- length += this._openSubElement(index+1+i);
- }
- };
- return length;
- };
-
- this.open = function(index) {
- if (this._data[index].__opened) return this;
-
- var length = this._openSubElement(index),
- positionInSelection = uki.binarySearch(index, this._selectedIndexes),
- clickIndex = this._lastClickIndex,
- indexes = this._selectedIndexes;
-
- this.clearSelection(true);
- offsetFrom(
- indexes,
- positionInSelection + (indexes[positionInSelection] == index ? 1 : 0),
- length
- );
-
- this.listData(this._data);
- this.selectedIndexes(indexes);
- this._lastClickIndex = clickIndex > index ? clickIndex + length : clickIndex;
- this.trigger('open');
- return this;
- };
-
- this.close = function(index) {
- var item = this._data[index],
- indexes = this._selectedIndexes,
- children = uki.attr(item, 'children');
- if (!children || !children.length || !item.__opened) return;
-
- var length = recursiveLength(item);
-
- item.__opened = false;
- this._data.splice(index+1, length);
-
- var positionInSelection = uki.binarySearch(index, indexes),
- removeFrom = positionInSelection + (indexes[positionInSelection] == index ? 1 : 0),
- toRemove = 0,
- clickIndex = this._lastClickIndex;
- while (indexes[removeFrom + toRemove] && indexes[removeFrom + toRemove] <= index + length) toRemove++;
-
- this.clearSelection(true);
- offsetFrom(indexes, removeFrom, -length);
- if (toRemove > 0) {
- indexes.splice(positionInSelection, toRemove);
- }
-
- this.listData(this._data);
- this.selectedIndexes(indexes);
- this._lastClickIndex = clickIndex > index ? clickIndex - length : clickIndex;
- this.trigger('close');
- };
-
- this._mousedown = function(e) {
- if (e.target.className.indexOf('toggle-tree') > -1) {
- var o = uki.dom.offset(this._dom),
- y = e.pageY - o.y,
- p = y / this._rowHeight << 0;
- this.toggle(p);
- } else {
- Base._mousedown.call(this, e);
- }
- };
-
- this._keypress = function(e) {
- Base._keypress.call(this, e);
- e = e.domEvent;
- if (e.which == 39 || e.keyCode == 39) { // RIGHT
- this.open(this._lastClickIndex);
- } else if (e.which == 37 || e.keyCode == 37) { // LEFT
- this.close(this._lastClickIndex);
- }
- };
-
-});
-// tree list render
-uki.more.view.treeList.Render = uki.newClass(uki.view.list.Render, new function() {
- this._parentTemplate = new uki.theme.Template(
- '<div class="${classPrefix}-row ${classPrefix}-${opened}" style="margin-left:${indent}px">' +
- '<div class="${classPrefix}-toggle"><i class="toggle-tree"></i></div>${text}' +
- '</div>'
- );
-
- this._leafTemplate = new uki.theme.Template(
- '<div class="${classPrefix}-row" style="margin-left:${indent}px">${text}</div>'
- );
-
- this.initStyles = function() {
- this.classPrefix = 'treeList-' + uki.guid++;
- var style = new uki.theme.Template(
- '.${classPrefix}-row { color: #333; position:relative; padding-top:3px; } ' +
- '.${classPrefix}-toggle { overflow: hidden; position:absolute; left:-15px; top:5px; width: 10px; height:9px; } ' +
- '.${classPrefix}-toggle i { display: block; position:absolute; left: 0; top: 0; width:20px; height:18px; background: url(${imageSrc});} ' +
- '.${classPrefix}-selected { background: #3875D7; } ' +
- '.${classPrefix}-selected .${classPrefix}-row { color: #FFF; } ' +
- '.${classPrefix}-selected i { left: -10px; } ' +
- '.${classPrefix}-selected-blured { background: #CCCCCC; } ' +
- '.${classPrefix}-opened i { top: -9px; }'
- ).render({
- classPrefix: this.classPrefix,
- imageSrc: 'i/arrows.png' // should call uki.image here
- });
- uki.dom.createStylesheet(style);
- };
-
- this.render = function(row, rect, i) {
- this.classPrefix || this.initStyles();
- var text = row.data,
- children = uki.attr(row, 'children');
- if (children && children.length) {
- return this._parentTemplate.render({
- text: text,
- indent: row.__indent*18 + 22,
- classPrefix: this.classPrefix,
- opened: row.__opened ? 'opened' : ''
- });
- } else {
- return this._leafTemplate.render({
- text: text,
- indent: row.__indent*18 + 22,
- classPrefix: this.classPrefix
- });
- }
- };
-
- this.setSelected = function(container, data, state, focus) {
- container.className = !state ? '' : focus ? this.classPrefix + '-selected' : this.classPrefix + '-selected-blured';
- };
-});
-
-uki.view.declare('uki.more.view.ToggleButton', uki.view.Button, function(Base) {
-
- this._setup = function() {
- Base._setup.call(this);
- this._focusable = false;
- };
-
- this.value = this.checked = uki.newProp('_checked', function(state) {
- this._checked = !!state;
- this._updateBg();
- });
-
- this._updateBg = function() {
- var name = this._disabled ? 'disabled' : this._down || this._checked ? 'down' : this._over ? 'hover' : 'normal';
- this._backgroundByName(name);
- };
-
- this._mouseup = function(e) {
- if (!this._down) return;
- this._down = false;
- if (!this._disabled) this.checked(!this.checked())
- };
-
-});
-
-
-uki.view.declare('uki.more.view.RadioButton', uki.more.view.ToggleButton, function(base) {
- var manager = uki.view.Radio;
-
- this.group = uki.newProp('_group', function(g) {
- manager.unregisterGroup(this);
- this._group = g;
- manager.registerGroup(this);
- if (this.checked()) manager.clearGroup(this);
- });
-
- this.value = this.checked = uki.newProp('_checked', function(state) {
- this._checked = !!state;
- if (state) manager.clearGroup(this);
- this._updateBg();
- });
-
- this._mouseup = function() {
- if (!this._down) return;
- this._down = false;
- if (!this._checked && !this._disabled) {
- this.checked(!this._checked);
- this.trigger('change', {checked: this._checked, source: this});
- }
- }
-});
-uki.more.view.splitTable = {};
-
-uki.view.declare('uki.more.view.SplitTable', uki.view.Container, function(Base) {
- var Rect = uki.geometry.Rect,
- Size = uki.geometry.Size;
-
- var propertiesToDelegate = 'rowHeight data packSize visibleRectExt render selectedIndex focusable textSelectable multiselect'.split(' ');
-
-
- this._defaultHandlePosition = 200;
- this._headerHeight = 17;
-
- this._style = function(name, value) {
- this._leftHeader.style(name, value);
- this._rightHeader.style(name, value);
- return Base._style.call(this, name, value);
- };
-
- this.columns = uki.newProp('_columns', function(c) {
- this._columns = uki.build(c);
- this._totalWidth = 0;
- this._leftHeader.columns([this._columns[0]]);
-
- this._columns[0].bind('beforeResize', uki.proxy(this._syncHandlePosition, this, this._columns[0]));
-
- for (var i = 1; i < this._columns.length; i++) {
- this._columns[i].position(i - 1);
- this._columns[i].bind('beforeResize', uki.proxy(this._rightColumnResized, this, this._columns[i]));
- };
- this._updateTotalWidth();
- this._rightHeader.columns(Array.prototype.slice.call(this._columns, 1));
- this._splitPane.leftMin(this._columns[0].minWidth() - 1)
- // this._splitPane.handlePosition(this._columns[0].width());
- this._syncHandlePosition(this._splitPane);
- });
-
- uki.each(propertiesToDelegate, function(i, name) {
- this[name] = function(v) {
- if (v === undefined) return this._leftList[name]();
- this._leftList[name](v);
- this._rightList[name](v);
- return this;
- };
- }, this);
-
- this.hasFocus = function() {
- return this._leftList.hasFocus() || this._rightList.hasFocus();
- };
-
- this.rightColumns = function() {
- return this._rightHeader.columns();
- };
-
- this._rightColumnResized = function(column) {
- this._updateTotalWidth();
- this._horizontalScroll.layout();
- };
-
- this.rowHeight = function(value) {
- if (value === undefined) return this._leftList.rowHeight();
- this._leftList.rowHeight(value);
- this._rightList.rowHeight(value);
- return this;
- };
-
- this.data = function(d) {
- if (d === undefined) return uki.map(this._leftList.data(), function(value, i) {
- return [value].concat(this._rightList.data()[i]);
- }, this);
-
- this._leftList.data(uki.map(d, function(value) {
- return [value[0]];
- }));
-
- this._rightList.data(uki.map(d, function(value) {
- return value.slice(1);
- }));
-
- this._splitPane.minSize(new Size(0, this._leftList.minSize().height));
- this._verticalScroll.layout();
- };
-
- this._createDom = function() {
- Base._createDom.call(this);
- var scrollWidth = uki.view.ScrollPane.initScrollWidth(),
- bodyHeight = this.rect().height - this._headerHeight - scrollWidth,
- contents = uki(
- [
- {
- view: 'table.Header',
- rect: new Rect(this._defaultHandlePosition, this._headerHeight),
- anchors: 'left top'
- },
- {
- view: 'Box',
- className: 'table-header-container',
- style: { overflow: 'hidden' },
- rect: new Rect(this._defaultHandlePosition, 0, this.rect().width - this._defaultHandlePosition - 1, this._headerHeight),
- anchors: 'left top right',
- childViews: {
- view: 'table.Header',
- rect: new Rect(this.rect().width - this._defaultHandlePosition - 1, this._headerHeight),
- anchors: 'top left right',
- className: 'table-header'
- }
- },
- {
- view: 'ScrollPane',
- rect: new Rect(0, this._headerHeight, this.rect().width, bodyHeight),
- anchors: 'left top right bottom',
- className: 'table-v-scroll',
- scrollV: true,
- childViews: [
- {
- view: 'HSplitPane',
- rect: new Rect(this.rect().width, bodyHeight),
- anchors: 'left top right bottom',
- className: 'table-horizontal-split-pane',
- handlePosition: this._defaultHandlePosition,
- handleWidth: 1,
- leftChildViews: [
- {
- view: 'List',
- rect: new Rect(this._defaultHandlePosition, bodyHeight),
- anchors: 'left top right bottom',
- className: 'table-list-left'
- }
- ],
- rightChildViews: [
- {
- view: 'Box',
- rect: '0 0 100 100',
- anchors: 'left top right bottom',
- style: { overflow: 'hidden' },
- rect: new Rect(this.rect().width - this._defaultHandlePosition - 1, bodyHeight),
- childViews: {
- view: 'ScrollPane',
- rect: new Rect(this.rect().width - this._defaultHandlePosition - 1, bodyHeight + scrollWidth),
- scrollableV: false,
- scrollableH: true,
- anchors: 'left top right bottom',
- className: 'table-h-scroll',
- childViews: [
- {
- view: 'List',
- rect: new Rect(this.rect().width - this._defaultHandlePosition - 1, bodyHeight + scrollWidth),
- anchors: 'left top right bottom'
- }
- ]
- }
-
- }
- ]
- }
- ]
- },
- {
- view: 'ScrollPane',
- rect: new Rect(this._defaultHandlePosition + 1, bodyHeight + this._headerHeight, this.rect().width - this._defaultHandlePosition - 1, scrollWidth),
- anchors: 'left bottom right',
- scrollableH: true,
- scrollableV: false,
- scrollH: true,
- className: 'table-h-scroll-bar',
- childViews: { view: 'Box', rect: '1 1', anchors: 'left top' }
- }
- ]).appendTo(this);
-
- this._verticalScroll = uki('ScrollPane[className=table-v-scroll]', this)[0];
- this._horizontalScroll = uki('ScrollPane[className=table-h-scroll]', this)[0];
- this._horizontalScrollBar = uki('ScrollPane[className=table-h-scroll-bar]', this)[0];
- this._leftList = uki('List:eq(0)', this)[0];
- this._rightList = uki('List:eq(1)', this)[0];
- this._splitPane = uki('HSplitPane', this)[0];
- this._leftHeader = uki('table.Header:eq(0)', this)[0];
- this._rightHeader = uki('table.Header:eq(1)', this)[0];
- this._rightHeaderContainer = uki('[className=table-header-container]', this)[0];
- this._dummyScrollContents = uki('Box', this._horizontalScrollBar);
-
- this._leftList._scrollableParent = this._verticalScroll;
- this._rightList._scrollableParent = this._verticalScroll;
- this._verticalScroll.bind('scroll', uki.proxy(this._leftList._scrollableParentScroll, this._leftList));
- this._verticalScroll.bind('scroll', uki.proxy(this._rightList._scrollableParentScroll, this._rightList));
-
- this._leftList.render(new uki.more.view.splitTable.Render(this._leftHeader));
- this._rightList.render(new uki.more.view.splitTable.Render(this._rightHeader));
- this._bindEvents();
- };
-
- this._bindEvents = function() {
- this._splitPane.bind('handleMove', uki.proxy(this._syncHandlePosition, this, this._splitPane));
- this._horizontalScroll.bind('scroll', uki.proxy(this._syncHScroll, this, this._horizontalScroll));
- this._horizontalScrollBar.bind('scroll', uki.proxy(this._syncHScroll, this, this._horizontalScrollBar));
- this._leftList.bind('selection', uki.proxy(this._syncSelection, this, this._leftList));
- this._rightList.bind('selection', uki.proxy(this._syncSelection, this, this._rightList));
- };
-
- var updatingHandlePosition = false;
- this._syncHandlePosition = function(source) {
- if (updatingHandlePosition) return;
- updatingHandlePosition = true;
- var w, rect;
- if (source == this._splitPane) {
- w = this._splitPane.handlePosition() + 1;
- this.columns()[0].width(w);
- } else {
- var w = this.columns()[0].width();
- this._splitPane.handlePosition(w - 1).layout();
- }
-
- this._leftHeader.rect(new Rect(w, this._headerHeight)).layout();
-
- rect = this._rightHeaderContainer.rect().clone();
- rect.x = w;
- rect.width = this._rect.width - w - uki.view.ScrollPane.initScrollWidth();
- this._rightHeaderContainer.rect(rect).layout();
- rect = this._horizontalScrollBar.rect().clone();
- rect.x = w;
- rect.width = this._rect.width - w - uki.view.ScrollPane.initScrollWidth();
- this._horizontalScrollBar.rect(rect).layout();
- updatingHandlePosition = false;
- };
-
- var updatingHScroll = false;
- this._syncHScroll = function(source) {
- if (updatingHScroll) return;
- updatingHScroll = true;
- var scroll, target = source == this._horizontalScroll ? this._horizontalScrollBar : this._horizontalScroll;
- scroll = source.scrollLeft();
- target.scrollLeft(scroll);
- this._rightHeader.dom().style.marginLeft = -scroll + 'px';
- updatingHScroll = false;
- };
-
- var updatingSelection = false;
- this._syncSelection = function(source) {
- if (updatingSelection) return;
- updatingSelection = true;
- var target = source == this._leftList ? this._rightList : this._leftList;
- target.selectedIndexes(source.selectedIndexes());
- updatingSelection = false;
- };
-
- this._updateTotalWidth = function() {
- this._totalWidth = 0;
- for (var i=1; i < this._columns.length; i++) {
- this._totalWidth += this._columns[i].width();
- };
- this._rightHeader.minSize(new Size(this._totalWidth, 0));
- this._rightList.minSize(new Size(this._totalWidth, this._rightList.minSize().height));
- this._dummyScrollContents.rect(new Rect(this._totalWidth, 1)).parent().layout();
- this._rightHeader.minSize(new Size(this._totalWidth, 0));
- this._horizontalScroll.layout();
- };
-
-});
-uki.more.view.splitTable.Render = uki.newClass(uki.view.table.Render, new function() {
-
- this.setSelected = function(container, data, state, focus) {
- focus = true;
- container.style.backgroundColor = state && focus ? '#3875D7' : state ? '#CCC' : '';
- container.style.color = state && focus ? '#FFF' : '#000';
- }
-
-});
-
-
-uki.view.declare('uki.more.view.Form', uki.view.Container, function(Base) {
-
- this._setup = function() {
- Base._setup.call(this);
- uki.extend(this, {
- _method: 'GET',
- _action: ''
- });
- };
-
- this.action = uki.newProp('_action', function(action) {
- this._dom.action = this._action = action;
- });
- this.method = uki.newProp('_method', function(method) {
- this._dom.method = this._method = method;
- });
-
- this.submit = function() { this._dom.submit(); }
- this.reset = function() { this._dom.reset(); }
-
- this._createDom = function() {
- this._dom = uki.createElement('form', Base.defaultCss);
- this._initClassName();
- this._dom.action = this._action;
- this._dom.method = this._method;
- };
-
-});
-
-
-uki.view.declare('uki.more.view.Select', uki.view.Checkbox, function(Base) {
- this._backgroundPrefix = 'select-';
- this._popupBackground = 'theme(select-popup)';
- this._listBackground = 'theme(select-list)';
- this._popupOffset = 0;
-
- this._setup = function() {
- Base._setup.call(this);
- this._inset = new uki.geometry.Inset(0, 20, 0, 4);
- this._selectFirst = true;
- this._focusable = true;
- this._options = [];
- this._maxPopupHeight = 200;
- this._lastScroll = 0;
- };
-
- this.Render = uki.newClass(uki.view.list.Render, function(Base) {
- this.render = function(data, rect, i) {
- return '<span style="line-height: 22px; text-align: left; white-space: nowrap; margin: 0 4px; cursor: default">' + data + '</span>';
- }
-
- this.setSelected = function(container, data, state, focus) {
- container.style.backgroundColor = state ? '#3875D7' : '';
- container.style.color = state ? '#FFF' : '#000';
- }
- });
-
- this.selectFirst = uki.newProp('_selectFirst');
-
- this.opened = function() {
- return this._popup.visible() && this._popup.parent();
- };
-
- this.popupAnchors = function(v) {
- if (v === undefined) return this._popup.anchors();
- this._popup.anchors(v);
- return this;
- };
-
- this._createDom = function() {
- Base._createDom.call(this);
- this.style({ fontWeight: 'normal', textAlign: 'left' });
-
- this._label.style.overflow = 'hidden';
- this._popup = uki(
- { view: 'Popup', anchors: 'left top', rect: '100 100', style: {zIndex: 1000}, offset: this._popupOffset,
- background: this._popupBackground, relativeTo: this, visible: false,
- childViews: [
- { view: 'ScrollPane', rect: '100 100', anchors: 'left top right bottom', childViews: [
- { view: 'List', rect: '100 100', anchors: 'left top right bottom', rowHeight: 22,
- textSelectable: false, focusable: true, background: this._listBackground,
- render: new this.Render(), style: { fontSize: '12px' } }
- ] }
- ] }
- )[0];
-
- this._popup.hide();
-
- this._list = uki('List', this._popup)[0];
- this._scroll = uki('ScrollPane', this._popup)[0];
-
- this._popup.bind('toggle', uki.proxy(function(e) {
- this._down = this._popup.visible();
- if (this._popup.visible()) {
- this._updateWidth();
- this._scroll.scrollTop(this._lastScroll);
- }
- this._checked = this._popup.visible();
- this._updateBg();
- }, this));
-
- this.bind(this._list.keyPressEvent(), function(e) {
- if (this.preventTransfer) {
- this.preventTransfer = false;
- return;
- }
- if (this._popup.visible()) {
- this._list.trigger(e.type, e);
- }
- });
-
- this.bind('blur', function() {
- setTimeout(uki.proxy(function() {
- if (!this._hasFocus && this.opened()) {
- this._lastScroll = this._scroll.scrollTop();
- this._popup.hide();
- }
- }, this), 50)
- });
-
- // refocus on list click
- this._list.bind('focus', uki.proxy(function() {
- this._hasFocus = false;
- this.focus();
- // setTimeout(uki.proxy(this.focus, this), 5);
- }, this));
-
- this._list.bind('click', uki.proxy(this.selectCurrent, this));
- };
-
- this.contentsSize = function(autosize) {
- var html = this.html(), size;
- this.html(this._longestText);
- size = Base.contentsSize.call(this, autosize);
- this.html(html);
- return size;
- };
-
- this._keydown = function(e) {
- if ((e.which == 32 || e.which == 13) && this._popup.visible()) {
- this.selectCurrent(e);
- } else if ((e.which == 40 || e.which == 38) && !this._popup.visible()) {
- this._popup.toggle();
- e.preventDefault();
- this.preventTransfer = true;
- } else {
- Base._keydown.call(this, e);
- }
- };
-
- this.selectCurrent = function(e) {
- if (this.selectedIndex() == -1) {
- this.text(this._selectFirst && this._options[0] ? this._options[0].text : '');
- } else {
- this.text(this._options[this.selectedIndex()].text);
- }
- this._lastScroll = this._scroll.scrollTop();
- this._popup.hide();
- if (e) this.trigger('change', { source: this });
- };
-
- this.value = function(v) {
- if (v === undefined) {
- return this._options[this.selectedIndex()] ? this._options[this.selectedIndex()].value : undefined;
- } else {
- var index = -1,
- option,
- l = this._options.length,
- i;
- for (i=0; i < l; i++) {
- option = this._options[i];
- if (option.value == v) {
- index = i;
- break;
- }
- };
- this.selectedIndex(index);
- this.selectCurrent();
- }
- };
-
- this.maxPopupHeight = uki.newProp('_maxPopupHeight');
-
- this._updateWidth = function() {
- if (this._widthCached || !this._options.length) return;
- var source = this._list.dom().firstChild.firstChild.firstChild, /// omg!
- html = source.innerHTML;
-
- source.innerHTML = this._longestText;
- this._widthCached = source.offsetWidth + 8;
- source.innerHTML = html;
- this._popup.rect(new uki.geometry.Rect(
- this._popup.rect().x,
- this._popup.rect().y,
- Math.max(this._widthCached, this.rect().width),
- Math.min(this._maxPopupHeight, this._options.length * 22)
- )).layout();
- };
-
- this.options = uki.newProp('_options', function(o) {
- this._options = o;
- this._list
- .data(uki.map(o, 'text'))
- .selectedIndex(0);
-
- if (this._selectFirst && (o.length > 0)) this.text(o[0].text);
- this._longestText = '';
- uki.each(o, function(i, row) {
- if (row.text.length > this._longestText.length) this._longestText = row.text;
- }, this);
- this._widthCached = false;
- this._lastScroll = 0;
- });
-
- uki.delegateProp(this, 'selectedIndex', '_list');
-
- this._updateBg = function() {
- return Base._updateBg.call(this);
- };
-
- this._mousedown = function(e) {
- Base._mousedown.call(this, e);
- if (this.disabled()) return;
- this._popup.toggle();
- this.trigger('toggle', { opened: this.opened() });
- // if (this._popup.visible()) this._list.focus();
- };
-
- this._mouseup = function(e) {
- if (!this._down) return;
- this._down = false;
- };
-
-});
-
-uki.Collection.addAttrs(['options']);
-
-
-(function() {
- function selectHandle (image, css) {
- return new uki.background.CssBox((css || '') + 'background: url(' + uki.theme.imageSrc(image) + '); background-position: 100% 50%; background-repeat: no-repeat;');
- }
-
- var theme = uki.extend({}, uki.theme.Base, {
- backgrounds: {
- // 'select-list': function() {
- //
- // },
- // 'select-popup': function() {
- //
- // },
- 'select-normal': function() {
- return new uki.background.Multi(
- selectHandle('select-handle-normal'),
- uki.theme.background('button-normal')
- );
- },
- 'select-hover': function() {
- return new uki.background.Multi(
- selectHandle('select-handle-normal'),
- uki.theme.background('button-hover')
- );
- },
- 'select-checked-normal': function() {
- return new uki.background.Multi(
- selectHandle('select-handle-normal'),
- uki.theme.background('button-down')
- );
- },
- 'select-disabled': function() {
- return new uki.background.Multi(
- selectHandle('select-handle-normal', 'opacity:0.4;'),
- uki.theme.background('button-disabled')
- );
- },
-
- 'select-popup': function() {
- return uki.theme.background('popup-normal');
- }
- },
-
- imageSrcs: {
- 'select-handle-normal': function() {
- return ["select-down-m.png", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAABkCAYAAABtnKvPAAAAeUlEQVRo3u3SMQ2AMBAFUCQgAQlIQUKTthq6IhEpOIAOTIWFABPvkr/c8IZ/15VStu6rgcPhcDgcDofD4XA4HA6HnybnvNRsF1ke4yGEoUJrA691379SS4xxavDx1c5TSvMBh08Oegv253A4HA6Hw+FwOBwOh8P/ie9z0RuWFOYPhAAAAABJRU5ErkJggg==", "select-down-m.gif"];
- }
- }
- });
- theme.backgrounds['select-checked-hover'] = theme.backgrounds['select-checked-normal'];
-
- uki.theme.register(theme);
-})();
-
diff --git a/app/assets/javascripts/uki.js b/app/assets/javascripts/uki.js
deleted file mode 100644
index e748c85..0000000
--- a/app/assets/javascripts/uki.js
+++ /dev/null
@@ -1,8022 +0,0 @@
-/*!
- * uki JavaScript Library
- * Licensed under the MIT license http://ukijs.org/LICENSE
- *
- * Copyright (c) 2010 Vladimir Kolesnikov
- *
- * Parts of code derived from jQuery JavaScript Library
- * Copyright (c) 2009 John Resig
- */
-(function() {
- /**
- * Global uki constants, for speed optimization and better merging
- */
-/** @ignore */
-var root = this,
- doc = document,
- nav = navigator,
- ua = nav.userAgent,
- expando = 'uki' + (+new Date),
-
- MAX = Math.max,
- MIN = Math.min,
- FLOOR = Math.floor,
- CEIL = Math.ceil,
-
- PX = 'px';
-
-
-
-/**
- * Shortcut access to uki.build, uki.Selector.find and uki.Collection constructor
- * uki('#id') is also a shortcut for search by id
- *
- * @param {String|uki.view.Base|Object|Array.<uki.view.Base>} val
- * @param {Array.<uki.view.Base>=} optional context for selector
- * @class
- * @namespace
- * @name uki
- * @return {uki.Collection}
- */
-root.uki = root.uki || function(val, context) {
- if (typeof val === "string") {
-
- var m = val.match(/^#((?:[\w\u00c0-\uFFFF_-]|\\.)+)$/),
- e = m && uki._ids[m[1]];
- if (m && !context) {
- return new uki.Collection( e ? [e] : [] );
- }
- return uki.find(val, context);
-
- }
- if (val.length === undefined) val = [val];
- if (val.length > 0 && uki.isFunction(val[0].typeName)) return new uki.Collection(val);
-
- return uki.build(val);
-};
-
-/**
- * @type string
- * @field
- */
-uki.version = '0.3.8';
-uki.guid = 1;
-
-/**
- * Empty function
- * @type function():boolean
- */
-uki.F = function() { return false; };
-uki._ids = {};
-
-uki.registerId = function(comp) {
- uki._ids[ uki.attr(comp, 'id') ] = comp;
-};
-uki.unregisterId = function(comp) {
- uki._ids[ uki.attr(comp, 'id') ] = undefined;
-};
-
-
-
-(function() {
-
-var toString = Object.prototype.toString,
- trim = String.prototype.trim,
- slice = Array.prototype.slice,
-
- trimRe = /^\s+|\s+$/g;
-
-var marked = '__uki_marked';
-
-// dummy subclass
-/** @ignore */
-function inheritance () {}
-
-/**
- * Utility functions.
- */
-var utils = {
-
- /**
- * Sets or retrieves attribute on an object.
- * <p>If target has function with attr it will be called target[attr](value=)
- * If no function present attribute will be set/get directly: target[attr] = value or return target[attr]</p>
- *
- * @example
- * uki.attr(view, 'name', 'funny') // sets name to funny on view
- * uki.attr(view, 'id') // gets id attribute of view
- *
- * @param {object} target
- * @param {string} attr Attribute name
- * @param {object=} value Value to set
- * @returns {object} target if value is being set, retrieved value otherwise
- */
- attr: function(target, attr, value) {
- if (value !== undefined) {
- if (target[attr] && target[attr].apply) {
- // if (uki.isFunction(target[attr])) {
- target[attr](value);
- } else {
- target[attr] = value;
- }
- return target;
- } else {
- if (target[attr] && target[attr].apply) {
- // if (uki.isFunction(target[attr])) {
- return target[attr]();
- } else {
- return target[attr];
- }
- }
- },
-
- /**
- * Runs a function in a given context
- *
- * @param {function()} fn
- * @param {object} context
- */
- proxy: function(fn, context) {
- var args = slice.call(arguments, 2),
- result = function() {
- return fn.apply(context, args.concat(slice.call(arguments, 0)));
- };
- result.huid = fn.huid = fn.huid || uki.guid++;
- return result;
- },
-
- /**
- * Checks if obj is a function
- *
- * @param {object} object Object to check
- * @returns {boolean}
- */
- isFunction: function( obj ) {
- return toString.call(obj) === "[object Function]";
- },
-
- /**
- * Checks if obj is an Array
- *
- * @param {object} object Object to check
- * @returns {boolean}
- */
- isArray: function( obj ) {
- return toString.call(obj) === "[object Array]";
- },
-
- /**
- * Trims the string
- *
- * @param {string} text
- * @returns {string} trimmed text
- */
- trim: function( text ) {
- text = text || '';
- return trim ? trim.call(text) : text.replace( trimRe, "" );
- },
-
- /**
- * Converts unsafe symbols to entities
- *
- * @param {string} html
- * @returns {string} escaped html
- */
- escapeHTML: function( html ) {
- var trans = {
- '&': '&amp;',
- '<': '&lt;',
- '>': '&gt;',
- '"': '&quot;',
- "'": '&#x27;'
- };
- return (html + '').replace(/[&<>\"\']/g, function(c) { return trans[c]; });
- },
-
- /**
- * Iterates through all non empty values of object or an Array
- *
- * @param {object|Array} object Object to iterate through
- * @param {function(number, object):boolean} callback Called for every item, may return false to stop iteration
- * @param {object} context Context in which callback should called. If not specified context will be set to
- * current item
- * @returns {object}
- */
- each: function( object, callback, context ) {
- var name, i = 0, length = object.length;
-
- if ( length === undefined ) {
- for ( name in object ) {
- if ( !name || object[ name ] === undefined || !object.hasOwnProperty(name) ) continue;
- if ( callback.call( context || object[ name ], name, object[ name ] ) === false ) { break; }
- }
- } else {
- for ( var value = object[0]; i < length && callback.call( context || value, i, value ) !== false; value = object[++i] ){}
- }
- return object;
- },
-
- /**
- * Checks if elem is in array
- *
- * @param {object} elem
- * @param {object} array
- * @returns {boolean}
- */
- inArray: function( elem, array ) {
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) { return i; }
- }
-
- return -1;
- },
-
- /**
- * Returns unique elements in array
- *
- * @param {Array} array
- * @returns {Array}
- */
- unique: function( array ) {
- if (array.length && (typeof array[0] == 'object' || typeof array[0] == 'function')) {
- var result = [],
- i;
-
- for (i = 0; i < array.length; i++) {
- if (!array[i][marked]) { result[result.length] = array[i]; }
- array[i][marked] = true;
- };
- for (i = 0; i < result.length; i++) {
- delete result[i][marked];
- };
- return result;
-
- } else {
-
- var ret = [],
- done = {};
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- var id = array[ i ];
-
- if ( !done[ id ] ) {
- done[ id ] = true;
- ret.push( array[ i ] );
- }
- }
-
- return ret;
- }
- },
-
- /**
- * Searches for all items matching given criteria
- *
- * @param {Array} elems Element to search through
- * @param {function(object, number)} callback Returns true for every matched element
- * @returns {Array} matched elements
- */
- grep: function( elems, callback ) {
- var ret = [];
-
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- if ( callback( elems[ i ], i ) ) { ret.push( elems[ i ] ); }
- }
-
- return ret;
- },
-
- /**
- * Maps elements passing them to callback
- * @example
- * x = uki.map([1, 2, 3], function(item) { return -item });
- *
- * @param {Array} elems Elements to map
- * @param {function(object, number)} mapping function
- * @param {object} context Context in which callback should called. If not specified context will be set to
- * current item
- * @returns {Array} mapped values
- */
- map: function( elems, callback, context ) {
- var ret = [],
- mapper = uki.isFunction(callback) ? callback :
- function(e) { return uki.attr(e, callback); };
-
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- var value = mapper.call( context || elems[ i ], elems[ i ], i );
-
- if ( value != null ) { ret[ ret.length ] = value; }
- }
-
- return ret;
- },
-
- /**
- * Reduces array
- * @example
- * x = uki.reduce(1, [1, 2, 3], function(p, x) { return p * x}) // calculates product
- *
- * @param {object} initial Initial value
- * @param {Array} elems Elements to reduce
- * @param {function(object, number)} reduce function
- * @param {object} context Context in which callback should called. If not specified context will be set to
- * current item
- * @returns {object}
- */
- reduce: function( initial, elems, callback, context ) {
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- initial = callback.call( context || elems[ i ], initial, elems[ i ], i );
- }
- return initial;
- },
-
- /**
- * Copies properties from one object to another
- * @example
- * uki.extend(x, { width: 13, height: 14 }) // sets x.width = 13, x.height = 14
- * options = uki.extend({}, defaultOptions, options)
- *
- * @param {object} target Object to copy properties into
- * @param {...object} sources Objects to take properties from
- * @returns Describe what it returns
- */
- extend: function() {
- var target = arguments[0] || {}, i = 1, length = arguments.length, options;
-
- for ( ; i < length; i++ ) {
- if ( (options = arguments[i]) != null ) {
-
- for ( var name in options ) {
- var copy = options[ name ];
-
- if ( copy !== undefined ) {
- target[ name ] = copy;
- }
-
- }
- }
- }
-
- return target;
- },
-
- /**
- * Creates a new class inherited from base classes. Init function is used as constructor
- * @example
- * baseClass = uki.newClass({
- * init: function() { this.x = 3 }
- * });
- *
- * childClass = uki.newClass(baseClass, {
- * getSqrt: function() { return this.x*this.x }
- * });
- *
- * @param {object=} superClass If superClass has prototype "real" prototype base inheritance is used,
- * otherwise superClass properties are simply copied to newClass prototype
- * @param {Array.<object>=} mixins
- * @param {object} methods
- * @returns Describe what it returns
- */
- newClass: function(/* [[superClass], mixin1, mixin2, ..] */ methods) {
- var klass = function() {
- this.init.apply(this, arguments);
- },
-
- i, startFrom = 0, tmp, baseClasses = [], base, name, copy, $arguments = arguments, length;
-
- if ((length = $arguments.length) > 1) {
- base = $arguments[0];
- if (base.prototype) { // real inheritance
- inheritance.prototype = base.prototype;
- klass.prototype = new inheritance();
- startFrom = 1;
- baseClasses = [inheritance.prototype];
-
- // class method inheritance
- for ( name in base ) {
- copy = base[ name ];
- if ( !base.hasOwnProperty(name) || copy === undefined || name == 'prototype' ) continue;
- klass[ name ] = copy;
- }
- }
- }
-
- for (i=startFrom; i < length; i++) {
- base = $arguments[i];
- if (this.isFunction(base)) {
- tmp = {};
- base.apply(tmp, baseClasses);
- base = tmp;
- }
- baseClasses[ baseClasses.length ] = base;
-
- uki.extend(klass.prototype, base);
- };
- if (!klass.prototype.init) klass.prototype.init = function() {};
- return klass;
- },
-
- /**
- * Search closest value in a sorted array
- * @param {nubmer} value to search
- * @param {array} array sorted array
- * @returns {number} index of closest value
- */
- binarySearch: function (value, array) {
- var low = 0, high = array.length, mid;
-
- while (low < high) {
- mid = (low + high) >> 1;
- array[mid] < value ? low = mid + 1 : high = mid;
- }
-
- return low;
- },
-
-
- /**
- * Creates default uki property function
- * <p>If value is given to this function it sets property to value
- * If no arguments given than function returns current property value</p>
- *
- * <p>Optional setter can be given. In this case setter will be called instead
- * of simple this[field] = value</p>
- *
- * <p>If used as setter function returns self</p>
- *
- * @example
- * x.width = uki.newProperty('_width');
- * x.width(12); // x._width = 12
- * x.width(); // return 12
- *
- * @param {string} field Field name
- * @param {function(object)=} setter
- * @returns {function(object=):object}
- */
- newProp: function(field, setter) {
- return function(value) {
- if (value === undefined) return this[field];
- if (setter) { setter.call(this, value); } else { this[field] = value; };
- return this;
- };
- },
-
- /**
- * Adds several properties (uki.newProp) to a given object.
- * <p>Field name equals to '_' + property name</p>
- *
- * @example
- * uki.addProps(x, ['width', 'height'])
- *
- * @param {object} proto Object to add properties to
- * @param {Array.<string>} props Property names
- */
- addProps: function(proto, props) {
- for (var i =0, len = props.length; i<len; i++)
- proto[ props[i] ] = uki.newProp('_' + props[i]);
- },
-
- toArray: function(arr) {
- return slice.call(arr, 0);
- },
-
- delegateProp: function(proto, name, target) {
- var propName = '_' + name;
- proto[name] = function(value) {
- if (value === undefined) {
- if (this[target]) return uki.attr(this[target], name, value);
- return this[propName];
- }
- if (this[target]) {
- uki.attr(this[target], name, value);
- } else {
- this[propName] = value;
- }
- return this;
- };
- },
-
- camalize: function(string) {
- return string.replace(/[-_]\S/g, function(v) {
- return v.substr(1).toUpperCase();
- });
- },
-
- dasherize: function(string) {
- return string.replace(/[A-Z]/g, function(v) {
- return '-' + v.toLowerCase();
- });
- }
-};
-utils.extend(uki, utils);
-
-})();
-
-
-/**
- * Geometry
- *
- * @namespace
- */
-uki.geometry = {};
-
-
-/**
- * Point with x and y properties
- *
- * @author voloko
- * @name uki.geometry.Point
- * @constructor
- *
- * @param {Integer=} x defaults to 0
- * @param {Integer=} y defaults to 0
- */
-var Point = uki.geometry.Point = function(x, y) {
- this.x = x*1.0 || 0.0;
- this.y = y*1.0 || 0.0;
-};
-
-Point.prototype = /** @lends uki.geometry.Point.prototype */ {
-
- /**
- * Converts to "100 50" string
- *
- * @this {uki.geometry.Point}
- * @return {string}
- */
- toString: function() {
- return this.x + ' ' + this.y;
- },
-
- /**
- * Creates a new Point with the same properties
- *
- * @this {uki.geometry.Point}
- * @return {uki.geometry.Point}
- */
- clone: function() {
- return new Point(this.x, this.y);
- },
-
- /**
- * Checks if this equals to another Point
- *
- * @param {uki.geometry.Point} point Point to compare with
- * @this {uki.geometry.Point}
- * @return {boolean}
- */
- eq: function(point) {
- return this.x == point.x && this.y == point.y;
- },
-
- /**
- * Moves point by x, y
- *
- * @this {uki.geometry.Point}
- * @return {uki.geometry.Point} self
- */
- offset: function(x, y) {
- if (typeof x == 'object') {
- y = x.y;
- x = x.x;
- }
- this.x += x;
- this.y += y;
- return this;
- },
-
- constructor: Point
-};
-
-/**
- * Creates point from "x y" string
- *
- * @memberOf uki.geometry.Point
- * @name fromString
- * @function
- *
- * @param {string} string String representation of point
- *
- * @returns {uki.geometry.Point} created point
- */
-Point.fromString = function(string) {
- var parts = string.split(/\s+/);
- return new Point( parts[0], parts[1] );
-};
-
-
-/**
- * Size with width and height properties
- *
- * @param {number=} width defaults to 0
- * @param {number=} height defaults to 0
- * @name uki.geometry.Size
- * @constructor
- */
-var Size = uki.geometry.Size = function(width, height) {
- this.width = width*1.0 || 0.0;
- this.height = height*1.0 || 0.0;
-};
-
-Size.prototype = /** @lends uki.geometry.Size.prototype */ {
- /**
- * Converts size to "300 100" string
- *
- * @this {uki.geometry.Size}
- * @return {string}
- */
- toString: function() {
- return this.width + ' ' + this.height;
- },
-
- /**
- * Creates a new Size with same properties
- *
- * @this {uki.geometry.Size}
- * @return {uki.geometry.Size} new Size
- */
- clone: function() {
- return new Size(this.width, this.height);
- },
-
- /**
- * Checks if this equals to another Size
- *
- * @param {uki.geometry.Size} size Size to compare with
- * @this {uki.geometry.Size}
- * @return {boolean}
- */
- eq: function(size) {
- return this.width == size.width && this.height == size.height;
- },
-
- /**
- * Checks if this size has non-positive width or height
- *
- * @this {uki.geometry.Size}
- * @return {boolean}
- */
- empty: function() {
- return this.width <= 0 || this.height <= 0;
- },
-
- constructor: Size
-};
-
-/**
- * Creates size from "width height" string
- *
- * @memberOf uki.geometry.Size
- * @name fromString
- * @function
- *
- * @param {string} string String representation of size
- *
- * @returns {uki.geometry.Size} created size
- */
-Size.fromString = function(string) {
- var parts = string.split(/\s+/);
- return new Size( parts[0], parts[1] );
-};
-
-/**
- * Creates size from different representations
- * - if no params given returns null
- * - if uki.geometry.Size given returns it
- * - if "200 300" string converts it to size
- * - if two params given creates size from them
- *
- * @memberOf uki.geometry.Size
- * @name create
- * @function
- *
- * @param {...string|number|uki.geometry.Size} var_args Size representation
- *
- * @returns {uki.geometry.Size} created size
- */
-Size.create = function(a1, a2) {
- if (a1 === undefined) return null;
- if (a1.width !== undefined) return a1;
- if (/\S+\s+\S+/.test(a1 + '')) return Size.fromString(a1, a2);
- return new Size(a1, a2);
-};
-
-
-/**
- * Rectangle with x, y, width and height properties
- * May be used as uki.geometry.Point or uki.geometry.Size
- * - if 4 arguments given creates size with x,y,width,height set to the given arguments
- * - if 2 number arguments given creates size with x = y = 0 and width and height set
- * set to the given arguments
- * - if a Point and a Size given creates rect with point as an origin and given size
- *
- * @param {...number|uki.geometry.Point|uki.geometry.Size} var_args
- * @name uki.geometry.Rect
- * @augments uki.geometry.Size
- * @augments uki.geometry.Point
- * @constructor
- */
-var Rect = uki.geometry.Rect = function(a1, a2, a3, a4) {
- if (a3 !== undefined) {
- this.x = a1*1.0 || 0.0;
- this.y = a2*1.0 || 0.0;
- this.width = a3*1.0 || 0.0;
- this.height = a4*1.0 || 0.0;
- } else if (a1 === undefined || a1.x === undefined) {
- this.x = 0;
- this.y = 0;
- this.width = a1*1.0 || 0.0;
- this.height = a2*1.0 || 0.0;
- } else {
- this.x = a1 ? a1.x*1.0 : 0;
- this.y = a1 ? a1.y*1.0 : 0;
- this.width = a2 ? a2.width*1.0 : 0;
- this.height = a2 ? a2.height*1.0 : 0;
- }
-};
-
-Rect.prototype = /** @lends uki.geometry.Rect.prototype */ {
- /**
- * Converts Rect to "x y width height" string
- *
- * @this {uki.geometry.Rect}
- * @returns {string}
- */
- toString: function() {
- return [this.x, this.y, this.width, this.height].join(' ');
- },
-
- /**
- * Converts Rect to "x y maxX maxY" string
- *
- * @this {uki.geometry.Rect}
- * @returns {string}
- */
- toCoordsString: function() {
- return [this.x, this.y, this.maxX(), this.maxY()].join(' ');
- },
-
- /**
- * Creates a new Rect with same properties
- *
- * @this {uki.geometry.Size}
- * @return {uki.geometry.Size} new Size
- */
- clone: function() {
- return new Rect(this.x, this.y, this.width, this.height);
- },
-
- /**
- * Equals to .x
- *
- * @this {uki.geometry.Rect}
- * @returns {number}
- */
- minX: function() {
- return this.x;
- },
-
- /**
- * Equals to x + width
- *
- * @this {uki.geometry.Rect}
- * @returns {number}
- */
- maxX: function() {
- return this.x + this.width;
- },
-
- /**
- * Point between minX and maxX
- *
- * @this {uki.geometry.Rect}
- * @returns {number}
- */
- midX: function() {
- return this.x + this.width / 2.0;
- },
-
- /**
- * Equals to .y
- *
- * @this {uki.geometry.Rect}
- * @returns {number}
- */
- minY: function() {
- return this.y;
- },
-
- /**
- * Point between minY and maxY
- *
- * @this {uki.geometry.Rect}
- * @returns {number}
- */
- midY: function() {
- return this.y + this.height / 2.0;
- },
-
- /**
- * Equals to y + height
- *
- * @this {uki.geometry.Rect}
- * @returns {number}
- */
- maxY: function() {
- return this.y + this.height;
- },
-
- /**
- * Moves origin to 0,0 point
- *
- * @this {uki.geometry.Rect}
- * @returns {uki.geometry.Point} self
- */
- normalize: function() {
- this.x = this.y = 0;
- return this;
- },
-
- /**
- * Checks if this rect has non-positive width or height
- *
- * @this {uki.geometry.Rect}
- * @function
- * @return {boolean}
- */
- empty: Size.prototype.empty,
-
- /**
- * Checks if this equals to another Rect
- *
- * @param {uki.geometry.Rect} rect Rect to compare with
- * @this {uki.geometry.Rect}
- * @return {boolean}
- */
- eq: function(rect) {
- return rect && this.x == rect.x && this.y == rect.y && this.height == rect.height && this.width == rect.width;
- },
-
- /**
- * Insets size with dx and dy
- *
- * @param {number} dx
- * @param {number} dy
- * @this {uki.geometry.Rect}
- * @returns {uki.geometry.Rect} sefl
- */
- inset: function(dx, dy) {
- this.x += dx;
- this.y += dy;
- this.width -= dx*2.0;
- this.height -= dy*2.0;
- return this;
- },
-
- /**
- * Moves origin point by x, y
- *
- * @this {uki.geometry.Rect}
- * @function
- * @return {uki.geometry.Rect} self
- */
- offset: Point.prototype.offset,
-
- /**
- * Intersects this with given rect
- *
- * @this {uki.geometry.Rect}
- * @param {uki.geometry.Rect} rect Rect to intersect with
- * @returns {uki.geometry.Rect} intersection
- */
- intersection: function(rect) {
- var origin = new Point(
- MAX(this.x, rect.x),
- MAX(this.y, rect.y)
- ),
- size = new Size(
- MIN(this.maxX(), rect.maxX()) - origin.x,
- MIN(this.maxY(), rect.maxY()) - origin.y
- );
- return size.empty() ? new Rect() : new Rect(origin, size);
- },
-
- /**
- * Union rect of this and given rect
- *
- * @this {uki.geometry.Rect}
- * @param {uki.geometry.Rect} rect
- * @returns {uki.geometry.Rect} union
- */
- union: function(rect) {
- return Rect.fromCoords(
- MIN(this.x, rect.x),
- MIN(this.y, rect.y),
- MAX(this.maxX(), rect.maxX()),
- MAX(this.maxY(), rect.maxY())
- );
- },
-
- /**
- * Checks if point is within this
- *
- * @this {uki.geometry.Rect}
- * @param {uki.geometry.Point} point
- * @returns {boolean}
- */
- containsPoint: function(point) {
- return point.x >= this.minX() &&
- point.x <= this.maxX() &&
- point.y >= this.minY() &&
- point.y <= this.maxY();
- },
-
- /**
- * Checks if this contains given rect
- *
- * @this {uki.geometry.Rect}
- * @param {uki.geometry.Rect} rect
- * @returns {boolean}
- */
- containsRect: function(rect) {
- return this.eq(this.union(rect));
- },
-
- constructor: Rect
-};
-
-Rect.prototype.left = Rect.prototype.minX;
-Rect.prototype.top = Rect.prototype.minY;
-
-/**
- * Creates Rect from minX, minY, maxX, maxY
- *
- * @memberOf uki.geometry.Rect
- * @name fromCoords
- * @function
- *
- * @param {number} minX
- * @param {number} maxX
- * @param {number} minY
- * @param {number} maxY
- * @returns {uki.geometry.Rect}
- */
-Rect.fromCoords = function(minX, minY, maxX, maxY) {
- if (maxX === undefined) {
- return new Rect(
- minX.x,
- minX.y,
- minY.x - minX.x,
- minY.y - minX.y
- );
- }
- return new Rect(minX, minY, maxX - minX, maxY - minY);
-};
-
-/**
- * Creates Rect from "minX minY maxX maxY" string
- *
- * @memberOf uki.geometry.Rect
- * @name fromCoordsString
- * @function
- *
- * @param {string} string
- * @returns {uki.geometry.Rect}
- */
-Rect.fromCoordsString = function(string) {
- var parts = string.split(/\s+/);
- return Rect.fromCoords(
- parts[0],
- parts[1],
- parts[2],
- parts[3]
- ) ;
-};
-
-/**
- * Creates Rect from "x y width height" or "width height" string
- *
- * @memberOf uki.geometry.Rect
- * @name fromString
- * @function
- *
- * @param {string} string
- * @returns {uki.geometry.Rect}
- */
-Rect.fromString = function(string) {
- var parts = string.split(/\s+/);
-
- if (parts.length > 2) return new Rect(
- parts[0],
- parts[1],
- parts[2],
- parts[3]
- );
- return new Rect(
- parts[0],
- parts[1]
- ) ;
-};
-
-/**
- * Creates rect from different representations
- * - if no params given returns null
- * - if uki.geometry.Rect given returns it
- * - if "200 300" or "0 10 200 300" string converts it to rect
- * - if two or four params given creates rect from them
- *
- * @memberOf uki.geometry.Rect
- * @name creates
- * @function
- *
- * @param {...string|number|uki.geometry.Rect} var_args Rect representation
- *
- * @returns {uki.geometry.Rect} created size
- */
-Rect.create = function(a1, a2, a3, a4) {
- if (a1 === undefined) return null;
- if (a1.x !== undefined) return a1;
- if (/\S+\s+\S+/.test(a1 + '')) return Rect.fromString(a1, a2);
- if (a3 === undefined) return new Rect(a1, a2);
- return new Rect(a1, a2, a3, a4);
-};
-
-
-/**
- * Inset with top, right, bottom and left properties
- * - if no params given top = right = bottom = left = 0
- * - if two params given top = bottom and right = left
- *
- * @param {number=} top
- * @param {number=} right
- * @param {number=} bottom
- * @param {number=} left
- *
- * @name uki.geometry.Inset
- * @constructor
- */
-var Inset = uki.geometry.Inset = function(top, right, bottom, left) {
- this.top = top*1.0 || 0;
- this.right = right*1.0 || 0;
- this.bottom = bottom === undefined ? this.top*1.0 : bottom*1.0;
- this.left = left === undefined ? this.right*1.0 : left*1.0;
-};
-
-Inset.prototype = /** @lends uki.geometry.Inset.prototype */ {
-
- /**
- * Converts Inset to "top right bottom left" string
- *
- * @returns {string}
- */
- toString: function() {
- return [this.top, this.right, this.bottom, this.left].join(' ');
- },
-
- /**
- * Creates a new Inset with same properties
- *
- * @this {uki.geometry.Inset}
- * @return {uki.geometry.Inset} new Inset
- */
- clone: function() {
- return new Inset(this.top, this.right, this.bottom, this.left);
- },
-
- /**
- * left + right
- *
- * @this {uki.geometry.Inset}
- * @return {number}
- */
- width: function() {
- return this.left + this.right;
- },
-
- /**
- * top + bottom
- *
- * @this {uki.geometry.Inset}
- * @return {number}
- */
- height: function() {
- return this.top + this.bottom;
- },
-
- /**
- * True if any property < 0
- *
- * @this {uki.geometry.Inset}
- * @return {boolean}
- */
- negative: function() {
- return this.top < 0 || this.left < 0 || this.right < 0 || this.bottom < 0;
- },
-
- /**
- * True if all properties = 0
- *
- * @this {uki.geometry.Inset}
- * @return {boolean}
- */
- empty: function() {
- return !this.top && !this.left && !this.right && !this.bottom;
- }
-};
-
-/**
- * Creates Rect from "top right bottom left" or "top right" string
- *
- * @memberOf uki.geometry.Inset
- * @name fromString
- * @function
- *
- * @param {string} string
- * @returns {uki.geometry.Inset}
- */
-Inset.fromString = function(string) {
- var parts = string.split(/\s+/);
- if (parts.length < 3) parts[2] = parts[0];
- if (parts.length < 4) parts[3] = parts[1];
-
- return new Inset(
- parts[0],
- parts[1],
- parts[2],
- parts[3]
- );
-};
-
-/**
- * Creates rect from different representations
- * - if no params given returns null
- * - if uki.geometry.Inset given returns it
- * - if "200 300" or "0 10 200 300" string converts it to inset
- * - if two or four params given creates inset from them
- *
- * @memberOf uki.geometry.Inset
- * @name create
- * @function
- *
- * @param {...string|number|uki.geometry.Inset} var_args Rect representation
- *
- * @returns {uki.geometry.Inset} created inset
- */
-Inset.create = function(a1, a2, a3, a4) {
- if (a1 === undefined) return null;
- if (a1.top !== undefined) return a1;
- if (/\S+\s+\S+/.test(a1 + '')) return Inset.fromString(a1, a2);
- if (a3 === undefined) return new Inset(a1, a2);
- return new Inset(a1, a2, a3, a4);
-};
-
-
-
-
-/**
- * Basic utils to work with the dom tree
- * @namespace
- * @author voloko
- */
-uki.dom = {
- /**
- * Convenience wrapper around document.createElement
- * Creates dom element with given tagName, cssText and innerHTML
- *
- * @param {string} tagName
- * @param {string=} cssText
- * @param {string=} innerHTML
- * @returns {Element} created element
- */
- createElement: function(tagName, cssText, innerHTML) {
- var e = doc.createElement(tagName);
- if (cssText) e.style.cssText = cssText;
- if (innerHTML) e.innerHTML = innerHTML;
- e[expando] = uki.guid++;
- return e;
- },
-
- /**
- * Adds a probe element to page dom tree, callbacks, removes the element
- *
- * @param {Element} dom Probing dom element
- * @param {function(Element)} callback
- */
- probe: function(dom, callback) {
- var target = doc.body;
- target.appendChild(dom);
- var result = callback(dom);
- target.removeChild(dom);
- return result;
- },
-
- /**
- * Assigns layout style properties to an element
- *
- * @param {CSSStyleDeclaration} style Target declaration
- * @param {object} layout Properties to assign
- * @param {object=} prevLayout If given assigns only difference between layout and prevLayout
- */
- layout: function(style, layout, prevLayout) {
- prevLayout = prevLayout || {};
- if (prevLayout.left != layout.left) style.left = layout.left + PX;
- if (prevLayout.top != layout.top) style.top = layout.top + PX;
- if (prevLayout.right != layout.right) style.right = layout.right + PX;
- if (prevLayout.bottom != layout.bottom) style.bottom = layout.bottom + PX;
- if (prevLayout.width != layout.width) style.width = MAX(layout.width, 0) + PX;
- if (prevLayout.height != layout.height) style.height = MAX(layout.height, 0) + PX;
- return layout;
- },
-
- /**
- * Computed style for a give element
- *
- * @param {Element} el
- * @returns {CSSStyleDeclaration} style declaration
- */
- computedStyle: function(el) {
- if (doc && doc.defaultView && doc.defaultView.getComputedStyle) {
- return doc.defaultView.getComputedStyle( el, null );
- } else if (el.currentStyle) {
- return el.currentStyle;
- }
- },
-
- /**
- * Checks if parent contains child
- *
- * @param {Element} parent
- * @param {Element} child
- * @return {Boolean}
- */
- contains: function(parent, child) {
- try {
- if (parent.contains) return parent.contains(child);
- if (parent.compareDocumentPosition) return !!(parent.compareDocumentPosition(child) & 16);
- } catch (e) {}
- while ( child && child != parent ) {
- try { child = child.parentNode } catch(e) { child = null };
- }
- return parent == child;
- },
-
- createStylesheet: function(code) {
- var style = doc.createElement('style');
- doc.getElementsByTagName('head')[0].appendChild(style);
- if (style.styleSheet) { //IE
- style.styleSheet.cssText = code;
- } else {
- style.appendChild(document.createTextNode(code));
- }
- return style;
- }
-
-};
-
-uki.each(['createElement'], function(i, name) {
- uki[name] = uki.dom[name];
-});
-
-uki.dom.special = {};
-
-uki.dom.Event = function( domEvent ) {
- domEvent = domEvent || {};
- this.domEvent = domEvent.domEvent || domEvent;
-
- for ( var i = uki.dom.props.length, prop; i; ){
- prop = uki.dom.props[ --i ];
- this[ prop ] = domEvent[ prop ];
- }
-
- // this.dataTransfer = new uki.dom.DataTransfer(domEvent);
-};
-
-uki.dom.Event.prototype = new function() {
- function returnTrue () {
- return true;
- }
-
- this.preventDefault = function() {
- var domEvent = this.domEvent;
- domEvent.preventDefault && domEvent.preventDefault();
- domEvent.returnValue = false;
-
- this.isDefaultPrevented = returnTrue;
- }
-
- this.stopPropagation = function() {
- var domEvent = this.domEvent;
- domEvent.stopPropagation && domEvent.stopPropagation();
- domEvent.cancelBubble = true;
-
- this.isPropagationStopped = returnTrue;
- }
-
- this.isDefaultPrevented = this.isPropagationStopped = uki.F;
-}
-
-uki.extend(uki.dom, /** @lends uki.dom */ {
- bound: {},
- handlers: {},
-
- props: "type altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which dragOffset dataTransfer".split(" "),
-
- events: "blur focus load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error draggesturestart draggestureend draggesture dragstart dragend drag drop dragenter dragleave dragover".split(" "),
-
- bind: function(el, types, listener) {
- if ( el.setInterval && el != window )
- el = window;
-
- listener.huid = listener.huid || uki.guid++;
-
- var id = el[expando] = el[expando] || uki.guid++,
- handler = uki.dom.handlers[id] = uki.dom.handlers[id] || function() {
- uki.dom.handler.apply(arguments.callee.elem, arguments);
- },
- i, type;
-
- handler.elem = el;
-
- if (!uki.dom.bound[id]) uki.dom.bound[id] = {};
-
- types = types.split(' ');
- for (i=0; i < types.length; i++) {
- type = types[i];
- if (!uki.dom.bound[id][type]) {
- uki.dom.bound[id][type] = [];
- if ( !uki.dom.special[type] || uki.dom.special[type].setup.call(el) === false ) {
- el.addEventListener ? el.addEventListener(type, handler, false) : el.attachEvent('on' + type, handler);
- }
- }
- uki.dom.bound[id][type].push(listener);
- };
- listener = handler = el = null;
- },
-
- unbind: function(el, types, listener) {
- var id = el[expando],
- huid = listener && listener.huid,
- i, type;
- if (types) {
- types = types.split(' ');
- } else {
- types = [];
- uki.each(uki.dom.bound[id] || [], function(k, v) { types.push(k); });
- }
- for (i=0; i < types.length; i++) {
- type = types[i];
- if (!id || !uki.dom.bound[id] || !uki.dom.bound[id][type]) continue;
- uki.dom.bound[id][type] = listener ? uki.grep(uki.dom.bound[id][type], function(h) { return h.huid !== huid; }) : [];
-
- if (uki.dom.bound[id][type].length == 0) {
- var handler = uki.dom.handlers[id];
- if ( !uki.dom.special[type] || uki.dom.special[type].teardown.call(el) === false ) {
- el.removeEventListener ? el.removeEventListener(type, handler, false) : el.detachEvent('on' + type, handler);
- }
- uki.dom.bound[id][type] = null;
- }
- }
- },
-
- /** @ignore */
- handler: function( e ) {
-
- e = e || root.event;
-
- var type = e.type,
- id = this[expando],
- handlers = uki.dom.bound[id],
- i;
-
- if (!e.domEvent) {
- e = new uki.dom.Event(e);
- e = uki.dom.fix( e );
- }
-
- if (!id || !handlers || !handlers[type]) return;
-
- uki.after.start();
- for (i=0, handlers = handlers[type]; i < handlers.length; i++) {
- handlers[i].call(this, e);
- };
- uki.after.stop();
- },
-
- /**
- * Taken from jQuery
- * @ignore
- */
- fix: function( event ) {
- // Fix target property, if necessary
- if ( !event.target )
- event.target = event.srcElement || doc;
-
- // check if target is a textnode (safari)
- if ( event.target.nodeType == 3 )
- event.target = event.target.parentNode;
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement )
- event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var de = doc.documentElement, body = doc.body;
- event.pageX = event.clientX + (de && de.scrollLeft || body && body.scrollLeft || 0) - (de.clientLeft || 0);
- event.pageY = event.clientY + (de && de.scrollTop || body && body.scrollTop || 0) - (de.clientTop || 0);
- }
-
- // Add which for key events
- if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
- event.which = event.charCode || event.keyCode;
-
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey )
- try { event.metaKey = event.ctrlKey; } catch(e){};
-
- // Add which for click: 1 == left; 2 == middle; 3 == right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button )
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
-
- return event;
- },
-
- preventDefaultHandler: function(e) {
- e && e.preventDefault();
- return false;
- }
-});
-
-uki.each({
- mouseover: 'mouseenter',
- mouseout: 'mouseleave'
-}, function( orig, fix ){
- var handler = function(e) {
- if (!uki.dom.contains(this, e.relatedTarget)) {
- e.type = fix;
- uki.dom.handler.apply(this, arguments);
- }
- };
-
- uki.dom.special[ fix ] = {
- setup: function() {
- uki.dom.bind( this, orig, handler );
- },
- teardown: function(){
- uki.dom.unbind( this, orig, handler );
- }
- };
-});
-
-
-if (root.attachEvent) {
- root.attachEvent('onunload', function() {
- uki.each(uki.dom.bound, function(id, types) {
- uki.each(types, function(type, handlers) {
- try {
- uki.dom.handlers[id].elem.detachEvent('on' + type, uki.dom.handlers[id]);
- } catch (e) {};
- });
- });
- });
-};
-
-
-
-(function() {
-/**
- * Drag and Drop support for uki
- * @namespace
- */
-var dnd = uki.dom.dnd = {
- draggable: null,
- nativeDnD: false,
- position: null
-};
-
-// detect if native DnD is supported
-try {
- if (
- // typeof doc.createElement('div').ondragstart == 'object' || // ie support
- typeof doc.createEvent('MouseEvent').dataTransfer == 'object' || // safari
- doc.createEvent('DragEvent').initDragEvent // w3c support
- ) {
- // Google Chrome has to many issues with native d&d. It is simpler to disable than to fix
- dnd.nativeDnD = !ua.match(/Chrome\/4/);
- }
-} catch (e) {}
-
-// bind single drag set of drag events for an element
-// regardless of the number of listeners
-var bindDraggestures = {
- setup: function() {
- if (this.__draggesturebound) {
- this.__draggesturebound++;
- } else {
- this.__draggesturebound = 1;
- uki.dom.bind( this, 'mousedown', draggesturestart );
- // prevent interference with ie drag events
- if (!dnd.nativeDnD && typeof this.ondragstart == 'object')
- this.ondragstart = function() { event.returnValue = false; };
- }
- },
- teardown: function() {
- this.__draggesturebound--;
- if (!this.__draggesturebound) uki.dom.unbind( this, 'mousedown', draggesturestart );
- }
-};
-
-// drag gestures
-uki.extend(uki.dom.special, {
- draggesturestart: bindDraggestures,
- draggestureend: bindDraggestures,
- draggesture: bindDraggestures
-});
-
-var dragEndEvents = 'mouseup ' + (dnd.nativeDnD ? ' dragend' : '');
-// if (window.attachEvent && !window.opera) dragEndEvents += ' mouseleave';
-
-function startGesture (el) {
- if (dnd.draggable) return;
- dnd.draggable = el;
- uki.dom.bind(doc, 'mousemove scroll', draggesture);
- uki.dom.bind(doc, dragEndEvents, draggestureend);
- uki.dom.bind(doc, 'selectstart mousedown', uki.dom.preventDefaultHandler);
-}
-
-function stopGesture () {
- dnd.draggable = null;
- uki.dom.unbind(doc, 'mousemove scroll', draggesture);
- uki.dom.unbind(doc, dragEndEvents, draggestureend);
- uki.dom.unbind(doc, 'selectstart mousedown', uki.dom.preventDefaultHandler);
-}
-
-function draggesturestart (e) {
- e = new uki.dom.Event(e);
- e.type = 'draggesturestart';
- uki.dom.handler.apply(this, arguments);
- if (!e.isDefaultPrevented()) {
- startGesture(this);
- dnd.position = new Point(-e.pageX, -e.pageY);
- }
-}
-
-function draggesture (e) {
- e = new uki.dom.Event(e);
- e.type = 'draggesture';
- e.dragOffset = (new Point(e.pageX, e.pageY)).offset(dnd.position);
- uki.dom.handler.apply(dnd.draggable, arguments);
- if (e.isDefaultPrevented()) stopGesture(dnd.draggable);
-}
-
-function draggestureend (e) {
- e = new uki.dom.Event(e);
- e.type = 'draggestureend';
- e.dragOffset = (new Point(e.pageX, e.pageY)).offset(dnd.position);
- uki.dom.handler.apply(dnd.draggable, arguments);
- stopGesture(dnd.draggable);
-}
-
-})();
-
-
-
-(function() {
-
- var dnd = uki.dom.dnd,
- retriggering = false;
-
- // common properties
- uki.extend(dnd, {
- dragDelta: 5,
- initNativeDnD: function() {
- // moz needs the drag image to be appended to document
- // so create an offscreen container to hold drag images.
- // note that it can't have overflow:hidden, since drag image will be cutted to container
- var container = uki.createElement('div', 'position: absolute;left:-999em;');
- doc.body.appendChild(container);
- dnd.dragImageContainer = container;
- dnd.initNativeDnD = uki.F;
- return true;
- },
- dragImageContainer: null,
- dataTransfer: null,
- target: null,
- dragOver: null
- });
-
-
- function viewToDom (element) {
- if (uki.isFunction(element.dom)) {
- if (element.parent().length) return element.dom();
- var container = uki.createElement('div', 'width:1px;height:1px;position:absolute;left:-999em;top:0');
- doc.body.appendChild(container);
- element.attachTo(container);
- return container;
- }
- return element;
- }
-
- var dataTransferProps = ['dropEffect', 'effectAllowed', 'types', 'files'];
-
- uki.dom.DataTransferWrapper = uki.newClass(new function() {
- this.init = function(dataTransfer) {
- this.dataTransfer = dataTransfer;
- for (var i = dataTransferProps.length - 1; i >= 0; i--){
- this[ dataTransferProps[i] ] = dataTransfer[ dataTransferProps[i] ];
- };
- };
-
- this.setData = function(format, data) {
- return this.dataTransfer.setData(format, data);
- };
-
- this.clearData = function(format) {
- return this.dataTransfer.clearData(format);
- };
-
- this.getData = function(format) {
- return this.dataTransfer.getData(format);
- };
-
- this.setDragImage = function(image, x, y) {
- dnd.initNativeDnD();
- image = viewToDom(image);
- var clone = image.cloneNode(true),
- style = clone.style;
- style.left = style.right = style.top = style.bottom = '';
- style.position = 'static';
- dnd.dragImageContainer.appendChild(clone);
- setTimeout(function() {
- dnd.dragImageContainer.removeChild(clone);
- }, 1);
- return this.dataTransfer.setDragImage(clone, x, y);
- };
- })
-
- // w3c spec based dataTransfer implementation
- uki.dom.DataTransfer = uki.newClass(new function() {
- this.init = function() {
- uki.extend(this, {
- dropEffect: 'none',
- effectAllowed: 'none',
- types: [],
- files: [],
- dragImage: new Image(),
- imagePosition: new Point(),
- data: {}
- });
- };
-
- this.setData = function(format, data) {
- this.data[format] = data;
- if (uki.inArray(format, this.types) == -1) this.types.push(format);
- };
-
- this.clearData = function(format) {
- if (format) {
- delete this.data[format];
- this.types = uki.grep(this.types, function(x) { return x != format; });
- } else {
- this.data = {};
- this.types = [];
- }
- };
-
- this.getData = function(format) {
- return this.data[format];
- };
-
- this.setDragImage = function(image, x, y) {
- this._dragImage = this._initDragImage(image);
- this._imagePosition = new Point(x || 0, y || 0);
- };
-
- this.update = function(e) {
- if (!this._dragImage) return;
- this._dragImage.style.left = e.pageX - this._imagePosition.x + 'px';
- this._dragImage.style.top = e.pageY - this._imagePosition.y + 'px';
- };
-
- this.cleanup = function() {
- this._dragImage && this._dragImage.parentNode.removeChild(this._dragImage);
- this._dragImage = undefined;
- };
-
- this._initDragImage = function(image) {
- image = viewToDom(image);
- var clone = image.cloneNode(true),
- style = clone.style;
-
- style.left = style.right = style.top = style.bottom = '';
- style.position = 'absolute';
- style.left = '-999em';
- style.zIndex = '9999';
- doc.body.appendChild(clone);
- return clone;
- };
- });
-
-
- var bindW3CDrag = {
- setup: function() {
- if (this.__w3cdragbound) {
- this.__w3cdragbound++;
- } else {
- this.__w3cdragbound = 1;
- uki.dom.bind( this, 'draggesture', drag );
- }
- },
- teardown: function() {
- this.__w3cdragbound--;
- if (!this.__draggesturebound) uki.dom.unbind( this, 'draggesture', drag );
- }
- };
-
- if (dnd.nativeDnD) {
- uki.extend(uki.dom.special, {
- dragstart: {
- setup: function() {
- this.addEventListener('dragstart', nativeDragWrapper, false);
- },
- teardown: function() {
- this.removeEventListener('dragstart', nativeDragWrapper, false);
- }
- }
- })
-
- } else {
- uki.extend(uki.dom.special, {
- dragstart: bindW3CDrag,
- drag: bindW3CDrag,
- dragend: bindW3CDrag
- });
-
- uki.each({
- dragover: 'mousemove',
- drop: 'mouseup'
- }, function( source, target ){
-
- var handler = function(e) {
- if (dnd.dataTransfer && retriggering) {
- e = new uki.dom.Event(e);
- e.type = source;
- e.dataTransfer = dnd.dataTransfer;
- if (source == 'dragover') {
- dnd.__canDrop = false;
- } else {
- stopW3Cdrag(this);
- if (!dnd.__canDrop) return;
- }
- uki.dom.handler.apply(this, arguments);
- if (e.isDefaultPrevented()) {
- dnd.__canDrop = true;
- }
- }
- };
-
- uki.dom.special[ source ] = {
- setup: function() {
- uki.dom.bind( this, target, handler );
- },
- teardown: function(){
- uki.dom.unbind( this, target, handler );
- }
- };
- });
-
- uki.dom.special.dragenter = {
- setup: function() {
- uki.dom.bind( this, 'mousemove', dragenter );
- },
- teardown: function(){
- uki.dom.unbind( this, 'mousemove', dragenter );
- }
- };
- uki.dom.special.dragleave = { setup: function() {}, teardown: function() {} }
- }
-
- function nativeDragWrapper (e) {
- e = new uki.dom.Event(e);
- var dataTransfer = e.dataTransfer;
- e.dataTransfer = new uki.dom.DataTransferWrapper(dataTransfer);
- uki.dom.handler.apply(this, arguments);
- dataTransfer.effectAllowed = e.dataTransfer.effectAllowed;
- dataTransfer.dropEffect = e.dataTransfer.dropEffect;
- }
-
- function startW3Cdrag (element) {
- uki.dom.bind( element, 'draggestureend', dragend );
- }
-
- function stopW3Cdrag (element) {
- if (!dnd.dataTransfer) return;
- dnd.dataTransfer.cleanup();
- dnd.dragOver = dnd.dataTransfer = dnd.target = null;
- uki.dom.unbind( element, 'draggestureend', dragend );
- }
-
- function dragenter (e) {
- if (!dnd.dataTransfer || e.domEvent.__dragEntered || !retriggering) return;
- e = new uki.dom.Event(e);
- e.domEvent.__dragEntered = true;
- if (dnd.dragOver == this) return;
- dnd.dragOver = this;
- e.type = 'dragenter';
- uki.dom.handler.apply(this, arguments);
- }
-
- function drag (e) {
- if (retriggering) {
- if (!e.domEvent.__dragEntered && dnd.dragOver) {
- e = new uki.dom.Event(e);
- e.type = 'dragleave';
- uki.dom.handler.apply(dnd.dragOver, arguments);
- dnd.dragOver = null;
- }
- return;
- };
-
- if (dnd.dataTransfer) { // dragging
- e.type = 'drag';
- e.target = dnd.target;
- } else if (e.dragOffset.x > dnd.dragDelta || e.dragOffset.y > dnd.dragDelta) { // start drag
- var target = e.target,
- parent = this.parentNode;
- try {
- while (target && target != parent && !target.getAttribute('draggable')) target = target.parentNode;
- } catch (ex) { target = null; }
- if (target && target.getAttribute('draggable')) {
- dnd.target = e.target = target;
- e.type = 'dragstart';
- dnd.dataTransfer = e.dataTransfer = new uki.dom.DataTransfer(e.domEvent.dataTransfer);
- startW3Cdrag(this);
- } else {
- return;
- }
- } else {
- return;
- }
- e = new uki.dom.Event(e);
- uki.dom.handler.apply(this, arguments);
- if (e.isDefaultPrevented()) {
- stopW3Cdrag(this);
- } else {
- retriggerMouseEvent(e);
- }
-
- }
-
- var props = 'detail screenX screenY clientX clientY ctrlKey altKey shiftKey metaKey button'.split(' ');
-
- function retriggerMouseEvent (e) {
- var imageStyle = dnd.dataTransfer._dragImage.style,
- type = e.domEvent.type, target;
- e.stopPropagation();
- e.preventDefault();
- imageStyle.left = '-999em';
- target = doc.elementFromPoint(e.pageX, e.pageY);
- dnd.dataTransfer.update(e);
-
- try {
- var newEvent;
- retriggering = true;
- try {
- if (doc.createEventObject) {
- newEvent = doc.createEventObject();
- for ( var i = props.length, prop; i; ){
- prop = uki.dom.props[ --i ];
- newEvent[ prop ] = e.domEvent[ prop ];
- }
- target.fireEvent('on' + type, newEvent)
- } else {
- newEvent = doc.createEvent('MouseEvents');
- newEvent.initMouseEvent(
- type,
- true,
- true,
- doc.defaultView,
- e.detail,
- e.screenX,
- e.screenY,
- e.clientX,
- e.clientY,
- e.ctrlKey,
- e.altKey,
- e.shiftKey,
- e.metaKey,
- e.button,
- null
- );
- target.dispatchEvent(newEvent)
- }
- } catch (e) {}
- retriggering = false;
- } catch (e) {}
- }
-
- function dragend (e) {
- if (retriggering) return;
- if (dnd.dataTransfer) { // drag started
- e.type = 'dragend';
- e.target = dnd.target;
- e.dataTransfer = dnd.dataTransfer;
- uki.dom.handler.apply(this, arguments);
- retriggerMouseEvent(e);
- stopW3Cdrag(this);
- }
- }
-})();
-
-
-(function() {
- var self;
-
- if ( doc.documentElement["getBoundingClientRect"] ) {
- self = uki.dom.offset = function( elem ) {
- if ( !elem || elem == root ) return new Point();
- if ( elem === elem.ownerDocument.body ) return self.bodyOffset( elem );
- self.boxModel === undefined && self.initializeBoxModel();
- var box = elem.getBoundingClientRect(),
- doc = elem.ownerDocument,
- body = doc.body,
- docElem = doc.documentElement,
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- top = box.top + (self.pageYOffset || self.boxModel && docElem.scrollTop || body.scrollTop ) - clientTop,
- left = box.left + (self.pageXOffset || self.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
-
- return new Point(left, top);
- };
- } else {
- self = uki.dom.offset = function( elem ) {
- if ( !elem || elem == root ) return new Point();
- if ( elem === elem.ownerDocument.body ) return self.bodyOffset( elem );
- self.initialized || self.initialize();
-
- var offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- doc = elem.ownerDocument,
- computedStyle,
- docElem = doc.documentElement,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView.getComputedStyle(elem, null),
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- computedStyle = defaultView.getComputedStyle(elem, null);
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( self.doesNotAddBorder && !(self.doesAddBorderForTableAndCells && (/^t(able|d|h)$/i).test(elem.tagName)) ) {
- top += parseInt( computedStyle.borderTopWidth, 10) || 0;
- left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
- }
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
- if ( self.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseInt( computedStyle.borderTopWidth, 10) || 0;
- left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
- }
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( prevComputedStyle.position === "fixed" ) {
- top += MAX(docElem.scrollTop, body.scrollTop);
- left += MAX(docElem.scrollLeft, body.scrollLeft);
- }
-
- return new Point(left, top);
- };
- }
-
- uki.extend(self, {
- initialize: function() {
- if ( this.initialized ) return;
- var body = doc.body,
- container = doc.createElement('div'),
- innerDiv, checkDiv, table, td, rules, prop,
- bodyMarginTop = body.style.marginTop,
- html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';
-
- rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
- for ( prop in rules ) container.style[prop] = rules[prop];
-
- container.innerHTML = html;
- body.insertBefore(container, body.firstChild);
- innerDiv = container.firstChild;
- checkDiv = innerDiv.firstChild;
- td = innerDiv.nextSibling.firstChild.firstChild;
-
- this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
- this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
- innerDiv.style.overflow = 'hidden';
- innerDiv.style.position = 'relative';
- this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
- body.style.marginTop = '1px';
- this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
- body.style.marginTop = bodyMarginTop;
-
- body.removeChild(container);
- this.boxModel === undefined && this.initializeBoxModel();
- this.initialized = true;
- },
-
- initializeBoxModel: function() {
- if (this.boxModel !== undefined) return;
- var div = doc.createElement("div");
- div.style.width = div.style.paddingLeft = "1px";
-
- doc.body.appendChild( div );
- this.boxModel = div.offsetWidth === 2;
- doc.body.removeChild( div ).style.display = 'none';
- },
-
- bodyOffset: function(body) {
- self.initialized || self.initialize();
- var top = body.offsetTop, left = body.offsetLeft;
- if ( uki.dom.doesNotIncludeMarginInBodyOffset ) {
- top += parseInt( uki.dom.elem.currentStyle(body).marginTop, 10 ) || 0;
- left += parseInt( uki.dom.elem.currentStyle(body).marginLeft, 10 ) || 0;
- }
- return new Point(left, top);
- }
- });
-})();
-
-
-
-uki.browser = new function() {
-
- var boxShadow;
- this.cssBoxShadow = function() {
- // Opera 10.5 consistently fails to redraw shadows. Easier to switch off
- boxShadow = boxShadow || (root.opera ? 'unsupported' : checkPrefixes('box-shadow'));
- return boxShadow;
- };
-
- var borderRadius;
- this.cssBorderRadius = function() {
- borderRadius = borderRadius || checkPrefixes('border-radius');
- return borderRadius;
- };
-
- var userSelect;
- this.cssUserSelect = function() {
- userSelect = userSelect || checkPrefixes('user-select');
- return userSelect;
- };
-
- var linearGradient;
- this.cssLinearGradient = function() {
- linearGradient = linearGradient || initLinearGradient();
- return linearGradient;
- };
-
- var canvas;
- this.canvas = function() {
- if (canvas === undefined) canvas = !!uki.createElement('canvas').getContext;
- return canvas;
- };
-
- var filter;
- this.cssFilter = function() {
- if (filter === undefined) filter = typeof uki.createElement('div').style.filter != 'undefined';
- return filter;
- };
-
- function swap (obj, src, dst) {
- var v = obj[src];
- obj[src] = undefined;
- obj[dst] = v;
- }
- this.css = function(css) {
- if (!css) return '';
- if (typeof css == 'string') {
- return css.replace(/(^|[^-])(box-shadow|border-radius|user-select)/g, function(value) {
- var p;
- if ((p = value.indexOf('box-shadow')) > -1) return value.substr(0, p) + uki.browser.cssBoxShadow();
- if ((p = value.indexOf('border-radius')) > -1) return value.substr(0, p) + uki.browser.cssBorderRadius();
- if ((p = value.indexOf('user-select')) > -1) return value.substr(0, p) + uki.browser.cssUserSelect();
- });
- }
-
- uki.each(['boxShadow', 'borderRadius', 'userSelect'], function(k, v) {
- if (css[v]) swap(css, v, uki.camalize( uki.browser[ uki.camalize('css-' + v) ]() ) );
- });
- return css;
- };
-
- this.textStyles = 'font fontFamily fontWeight fontSize textDecoration textOverflow textAlign textShadow overflow color'.split(' ');
-
- function checkPrefixes (dashProp) {
- var e = uki.createElement('div'),
- style = e.style,
- prefixes = ['', '-webkit-', '-moz-'];
-
- for (var i=0; i < prefixes.length; i++) {
- if (style[ uki.camalize(prefixes[i] + dashProp) ] !== undefined) return prefixes[i] + dashProp;
- };
- return 'unsupported';
- }
-
- function initLinearGradient () {
- var e = uki.createElement(
- 'div',
- 'background-image:-moz-linear-gradient(right,red,red);'+
- 'background-image:linear-gradient(right,red,red);'+
- 'background-image:-webkit-gradient(linear,0 0,100% 0,from(red),to(red))'
- ),
- style = e.style,
- bgi = style.backgroundImage + '';
-
- if (bgi.indexOf('-moz-linear-gradient') > -1) {
- return '-moz-linear-gradient';
- } else if (bgi.indexOf('-webkit-gradient') > -1) {
- return '-webkit-gradient';
- } else if (bgi.indexOf('linear-gradient') > -1) {
- return 'linear-gradient';
- } else {
- return 'unsupported';
- }
- }
-};
-
-uki.initNativeLayout = function() {
- if (uki.supportNativeLayout === undefined) {
- uki.dom.probe(
- uki.createElement(
- 'div',
- 'position:absolute;width:100px;height:100px;left:-999em;',
- '<div style="position:absolute;left:0;right:0"></div>'
- ),
- function(div) {
- uki.supportNativeLayout = div.childNodes[0].offsetWidth == 100 && !root.opera;
- }
- );
- }
-};
-
-// uki.supportNativeLayout = false;
-
-
-
-
-
-/**
- * Executes callback at or after the end of processing.
- * Example: execute flow layout after all child views were added.
- * Runs either at the end of event handling or after a timeout.
- * Each callback (by huid) is executed once
- * @function
- * @param {function()} callback
- */
-uki.after = (function() {
- var after = function(callback) {
- callback.huid = callback.huid || uki.guid++;
- if (after._bound[callback.huid]) return;
- after._bound[callback.huid] = true;
- after._queue.push(callback);
- if (!after._running) after._startTimer();
- };
-
- after._bound = {};
- after._running = false;
- after._timer = 0;
- after._queue = [];
-
- after.start = function() {
- after._clearTimer();
- after._running++;
- };
-
- after.stop = function() {
- if (--after._running) return;
- after._runCallbacks();
- };
-
-
-
- after._runCallbacks = function() {
- after._clearTimer();
- var queue = after._queue;
- after._queue = [];
- after._bound = {};
- for (var i=0; i < queue.length; i++) queue[i]();
- };
-
- after._startTimer = function() {
- if (after._timer) return;
- after._timer = setTimeout(after._runCallbacks, 1);
- };
-
- after._clearTimer = function() {
- if (!after._timer) return;
- clearTimeout(after._timer);
- after._timer = 0;
- };
-
- return after;
-})();
-
-
-
-
-/** @namespace */
-uki.view = {
- declare: function(/*name, baseClasses, implementation*/) {
- var args = uki.toArray(arguments),
- name = args.shift(),
- klass = uki.newClass.apply(uki, args),
- parts = name.split('.'),
- obj = root,
- i, part, l = parts.length - 1;
-
- klass.prototype.typeName = function() { return name; };
-
- for ( i= 0; i < l; i++ ) {
- part = parts[i];
- if (!obj[part]) obj[part] = {};
- obj = obj[part];
-
- };
-
- obj[ parts[l] ] = klass;
- return klass;
- }
-};
-
-/**
- * @class
- */
-uki.view.Observable = /** @lends uki.view.Observable.prototype */ {
- // dom: function() {
- // return null; // should implement
- // },
-
- /**
- * @param {String} name Event name
- * @param {function()} callback
- */
- bind: function(name, callback) {
- callback.huid = callback.huid || uki.guid++;
- uki.each(name.split(' '), function(i, name) {
- if (!this._bound(name)) this._bindToDom(name);
- this._observersFor(name).push(callback);
- }, this);
- return this;
- },
-
- unbind: function(name, callback) {
- if (!this._observers) return;
- var names;
- if (name) {
- names = name.split(' ');
- } else {
- names = [];
- uki.each(this._observers, function(k, v) { names.push(k) });
- }
- uki.each(names, function(i, name) {
- this._observers[name] = !callback ? [] : uki.grep(this._observersFor(name, true), function(observer) {
- return observer != callback && observer.huid != callback.huid;
- });
- if (this._observers[name].length == 0) {
- this._observers[name] = undefined;
- this._unbindFromDom(name);
- }
- }, this);
- return this;
- },
-
- trigger: function(name/*, data1, data2*/) {
- var attrs = Array.prototype.slice.call(arguments, 1);
- uki.each(this._observersFor(name, true), function(i, callback) {
- callback.apply(this, attrs);
- }, this);
- return this;
- },
-
- _unbindFromDom: function(name) {
- if (!this._domHander || !this._eventTargets[name]) return;
- uki.dom.unbind(this._eventTargets[name], name, this._domHander);
- },
-
- _bindToDom: function(name, target) {
- if (!target && !this.dom) return false;
- this._domHander = this._domHander || uki.proxy(function(e) {
- e.source = this;
- this.trigger(e.type, e);
- }, this);
- this._eventTargets = this._eventTargets || {};
- this._eventTargets[name] = target || this.dom();
- uki.dom.bind(this._eventTargets[name], name, this._domHander);
- return true;
- },
-
- _bound: function(name) {
- return this._observers && this._observers[name];
- },
-
- _observersFor: function(name, skipCreate) {
- if (skipCreate && (!this._observers || !this._observers[name])) return [];
- if (!this._observers) this._observers = {};
- if (!this._observers[name]) this._observers[name] = [];
- return this._observers[name];
- }
-};
-
-(function() {
- var self = uki.Attachment = uki.newClass(uki.view.Observable, /** @lends uki.Attachment.prototype */ {
- /**
- * Attachment serves as a connection between a uki view and a dom container.
- * It notifies its view with parentResized on window resize.
- * Attachment supports part of uki.view.Base API like #domForChild or #rectForChild
- *
- * @param {Element} dom Container element
- * @param {uki.view.Base} view Attached view
- * @param {uki.geometry.Rect} rect Initial size
- *
- * @see uki.view.Base#parentResized
- * @name uki.Attachment
- * @augments uki.view.Observable
- * @constructor
- */
- init: function( dom, view, rect ) {
- uki.initNativeLayout();
-
- this._dom = dom = dom || root;
- this._view = view;
- this._rect = Rect.create(rect) || this.rect();
-
- uki.dom.offset.initialize();
-
- view.parent(this);
- this.domForChild().appendChild(view.dom());
-
- if (dom != root && dom.tagName != 'BODY') {
- var computedStyle = dom.runtimeStyle || dom.ownerDocument.defaultView.getComputedStyle(dom, null);
- if (!computedStyle.position || computedStyle.position == 'static') dom.style.position = 'relative';
- }
- self.register(this);
-
- this.layout();
- },
-
- /**
- * Returns document.body if attached to window. Otherwise returns dom
- * uki.view.Base api
- *
- * @type Element
- */
- domForChild: function() {
- return this._dom === root ? doc.body : this._dom;
- },
-
- /**
- * uki.view.Base api
- *
- * @type uki.geometry.Rect
- */
- rectForChild: function(child) {
- return this.rect();
- },
-
- /**
- * uki.view.Base api
- */
- scroll: function() {
- // TODO: support window scrolling
- },
-
- /**
- * uki.view.Base api
- */
- scrollTop: function() {
- // TODO: support window scrolling
- return this._dom.scrollTop || 0;
- },
-
- /**
- * uki.view.Base api
- */
- scrollLeft: function() {
- // TODO: support window scrolling
- return this._dom.scrollLeft || 0;
- },
-
- /**
- * uki.view.Base api
- */
- parent: uki.F,
-
- /**
- * uki.view.Base api
- */
- childResized: uki.F,
-
- /**
- * On window resize resizes and layout its child view
- * @fires event:layout
- */
- layout: function() {
- var oldRect = this._rect;
-
- // if (rect.eq(this._rect)) return;
- var newRect = this._rect = this.rect();
- this._view.parentResized(oldRect, newRect);
- if (this._view._needsLayout) this._view.layout();
- this.trigger('layout', {source: this, rect: newRect});
- },
-
- /**
- * @return {Element} Container dom
- */
- dom: function() {
- return this._dom;
- },
-
- /**
- * @return {Element} Child view
- */
- view: function() {
- return this._view;
- },
-
- /**
- * @private
- * @return {uki.geometry.Rect} Size of the container
- */
- rect: function() {
- var width = this._dom === root || this._dom === doc.body ?
- MAX(getRootElement().clientWidth, this._dom.offsetWidth || 0) :
- this._dom.offsetWidth,
- height = this._dom === root || this._dom === doc.body ?
- MAX(getRootElement().clientHeight, this._dom.offsetHeight || 0) :
- this._dom.offsetHeight;
-
- return new Rect(width, height);
- }
- });
-
- function getRootElement() {
- return doc.compatMode == "CSS1Compat" && doc.documentElement || doc.body;
- }
-
- self.instances = [];
-
- /**
- * @memberOf uki.Attachment
- */
- self.register = function(a) {
- if (self.instances.length == 0) {
- var timeout = false;
- uki.dom.bind(root, 'resize', function() {
- if (!timeout) {
- timeout = true;
- setTimeout(function(i,len) {
- uki.after.start();
-
- timeout = false;
- for (i=0,len=self.instances.length;i<len;i++)
- self.instances[i].layout();
-
- uki.after.stop();
- }, 1);
- }
- });
- }
- self.instances.push(a);
- };
-
- /**
- * @memberOf uki.Attachment
- */
- self.childViews = function() {
- return uki.map(self.instances, 'view');
- };
-
- /**
- * @memberOf uki.Attachment
- */
- uki.top = function() {
- return [self];
- };
-})();
-
-
-
-
-
-
-
-/**
- * Collection performs group operations on uki.view objects.
- * <p>Behaves much like result jQuery(dom nodes).
- * Most methods are chainable like .attr('text', 'somevalue').bind('click', function() { ... })</p>
- *
- * <p>Its easier to call uki([view1, view2]) or uki('selector') instead of creating collection directly</p>
- *
- * @author voloko
- * @constructor
- * @class
- */
-uki.Collection = function( elems ) {
- this.length = 0;
- Array.prototype.push.apply( this, elems );
-};
-
-uki.fn = uki.Collection.prototype = new function() {
- var proto = this;
-
- /**#@+ @memberOf uki.Collection# */
- /**
- * Iterates trough all items within itself
- *
- * @function
- *
- * @param {function(this:uki.view.Base, number, uki.view.Base)} callback Callback to call for every item
- * @returns {uki.view.Collection} self
- */
- this.each = function( callback ) {
- return uki.each( this, callback );
- };
-
- /**
- * Creates a new uki.Collection populated with found items
- *
- * @function
- *
- * @param {function(uki.view.Base, number):boolean} callback Callback to call for every item
- * @returns {uki.view.Collection} created collection
- */
- this.grep = function( callback ) {
- return new uki.Collection( uki.grep(this, callback) );
- };
-
- /**
- * Sets an attribute on all views or gets the value of the attribute on the first view
- *
- * @example
- * c.attr('text', 'my text') // sets text to 'my text' on all collection views
- * c.attr('name') // gets name attribute on the first view
- *
- * @function
- *
- * @param {string} name Name of the attribute
- * @param {object=} value Value to set
- * @returns {uki.view.Collection|Object} Self or attribute value
- */
- this.attr = function( name, value ) {
- if (value !== undefined) {
- for (var i=this.length-1; i >= 0; i--) {
- uki.attr( this[i], name, value );
- };
- return this;
- } else {
- return this[0] ? uki.attr( this[0], name ) : "";
- }
- };
-
- /**
- * Finds views within collection context
- * @example
- * c.find('Button')
- *
- * @function
- *
- * @param {string} selector
- * @returns {uki.view.Collection} Collection of found items
- */
- this.find = function( selector ) {
- return uki.find( selector, this );
- };
-
- /**
- * Attaches all child views to dom container
- *
- * @function
- *
- * @param {Element} dom Container dom element
- * @param {uki.geometry.Rect} rect Default size
- * @returns {uki.view.Collection} self
- */
- this.attachTo = function( dom, rect ) {
- this.each(function() {
- new uki.Attachment( dom, this, rect );
- });
- return this;
- };
-
- /**
- * Appends views to the first item in collection
- *
- * @function
- *
- * @param {Array.<uki.view.Base>} views Views to append
- * @returns {uki.view.Collection} self
- */
- this.append = function( views ) {
- var target = this[0];
- if (!target) return this;
-
- views = views.length !== undefined ? views : [views];
-
- for (var i = views.length-1; i >= 0; i--) {
- target.appendChild(views[i]);
- };
-
- return this;
- };
-
- this.appendTo = function( target ) {
- target = uki(target)[0];
- this.each(function() {
- target.appendChild(this);
- });
- return this;
-
- };
-
- /**#@-*/
-
- /**
- * @function
- */
- uki.Collection.addAttrs = function(attrNames) {
- uki.each(attrNames, function(i, name) {
- proto[name] = function( value ) { return this.attr( name, value ); };
- });
- };
-
- /** @function
- @name uki.Collection#html */
- /** @function
- @name uki.Collection#text */
- /** @function
- @name uki.Collection#background */
- /** @function
- @name uki.Collection#value */
- /** @function
- @name uki.Collection#rect */
- /** @function
- @name uki.Collection#checked */
- /** @function
- @name uki.Collection#anchors */
- /** @function
- @name uki.Collection#childViews */
- /** @function
- @name uki.Collection#typeName */
- /** @function
- @name uki.Collection#id */
- /** @function
- @name uki.Collection#name */
- /** @function
- @name uki.Collection#visible */
- /** @function
- @name uki.Collection#disabled */
- /** @function
- @name uki.Collection#focusable */
- /** @function
- @name uki.Collection#style */
- uki.Collection.addAttrs('dom html text background value rect checked anchors childViews typeName id name visible disabled focusable style draggable textSelectable width height minX maxX minY maxY left top x y contentsSize'.split(' '));
-
-
- /** @function
- @name uki.Collection#parent */
- /** @function
- @name uki.Collection#next */
- /** @function
- @name uki.Collection#prev */
- uki.each([
- ['parent', 'parent'],
- ['next', 'nextView'],
- ['prev', 'prevView']
- ], function(i, desc) {
- proto[ desc[0] ] = function() {
- return new uki.Collection( uki.unique( uki.map(this, desc[1]) ) );
- };
- });
-
-
- /** @function
- @name uki.Collection#bind */
- /** @function
- @name uki.Collection#unload */
- /** @function
- @name uki.Collection#trigger */
- /** @function
- @name uki.Collection#layout */
- /** @function
- @name uki.Collection#appendChild */
- /** @function
- @name uki.Collection#removeChild */
- /** @function
- @name uki.Collection#insertBefore */
- /** @function
- @name uki.Collection#addRow */
- /** @function
- @name uki.Collection#removeRow */
- /** @function
- @name uki.Collection#resizeToContents */
- /** @function
- @name uki.Collection#toggle */
- uki.each('bind unbind trigger layout appendChild removeChild insertBefore addRow removeRow resizeToContents toggle'.split(' '), function(i, name) {
- proto[name] = function() {
- for (var i=this.length-1; i >=0; i--) {
- this[i][name].apply(this[i], arguments);
- };
- return this;
- };
- });
-
- /** @function
- @name uki.Collection#blur */
- /** @function
- @name uki.Collection#focus */
- /** @function
- @name uki.Collection#load */
- /** @function
- @name uki.Collection#resize */
- /** @function
- @name uki.Collection#scroll */
- /** @function
- @name uki.Collection#unload */
- /** @function
- @name uki.Collection#click */
- /** @function
- @name uki.Collection#dblclick */
- /** @function
- @name uki.Collection#mousedown */
- /** @function
- @name uki.Collection#mouseup */
- /** @function
- @name uki.Collection#mousemove */
- /** @function
- @name uki.Collection#mouseover */
- /** @function
- @name uki.Collection#mouseout */
- /** @function
- @name uki.Collection#mouseenter */
- /** @function
- @name uki.Collection#mouseleave */
- /** @function
- @name uki.Collection#change */
- /** @function
- @name uki.Collection#select */
- /** @function
- @name uki.Collection#submit */
- /** @function
- @name uki.Collection#keydown */
- /** @function
- @name uki.Collection#keypress */
- /** @function
- @name uki.Collection#keyup */
- /** @function
- @name uki.Collection#error */
- uki.each( uki.dom.events, function(i, name){
- proto[name] = function( handler ){
- if (handler) {
- this.bind(name, handler);
- } else {
- for (var i=this.length-1; i >=0; i--) {
- this[i][name] ? this[i][name]() : this[i].trigger(name);
- };
- }
- return this;
- };
- });
-};
-
-
-
-
-(function() {
-
- /**
- * Creates uki view tree from JSON-like markup
- *
- * @example
- * uki.build( {view: 'Button', rect: '100 100 100 24', text: 'Hello world' } )
- * // Creates uki.view.Button with '100 100 100 24' passed to constructor,
- * // and calls text('Hello world') on it
- *
- * @function
- * @name uki.build
- *
- * @param {object} ml JSON-like markup
- * @returns {uki.view.Collection} collection of created elements
- */
- uki.build = function(ml) {
-
- return new uki.Collection( createMulti( (ml.length === undefined) ? [ml] : ml ) );
-
- };
-
- uki.viewNamespaces = ['uki.view.', ''];
-
- function createMulti (ml) {
- return uki.map(ml, function(mlRow) { return createSingle(mlRow); });
- }
-
- function createSingle (mlRow) {
- if (uki.isFunction(mlRow.typeName)) {
- return mlRow;
- }
-
- var c = mlRow.view || mlRow.type,
- result;
- if (uki.isFunction(c)) {
- result = new c(mlRow.rect);
- } else if (typeof c === 'string') {
- for (var i=0, ns = uki.viewNamespaces, ns$length = ns.length; i < ns$length; i++) {
- var parts = (ns[i] + c).split('.'),
- obj = root;
-
- for (var j=0, parts$length = parts.length; obj && j < parts$length; j++) {
- obj = obj[parts[j]];
- };
- if (obj) {
- result = new obj(mlRow.rect);
- break;
- }
- };
- if (!obj) throw 'No view of type ' + c + ' found';
- } else {
- result = c;
- }
-
- copyAttrs(result, mlRow);
- return result;
- }
-
- function copyAttrs(comp, mlRow) {
- uki.each(mlRow, function(name, value) {
- if (name == 'view' || name == 'type' || name == 'rect') return;
- uki.attr(comp, name, value);
- });
- return comp;
- }
-
- uki.build.copyAttrs = copyAttrs;
-})();
-
-
-
-
-/* Ideas and code parts borrowed from Sizzle (http://sizzlejs.com/) */
-(function() {
- /**#@+ @ignore */
- var self,
- attr = uki.attr,
- chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
- regexps = [ // enforce order
- { name: 'ID', regexp: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/ },
- { name: 'ATTR', regexp: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/ },
- { name: 'TYPE', regexp: /^((?:[\w\u00c0-\uFFFF\*_\.-]|\\.)+)/ },
- { name: 'POS', regexp: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/ }
- ],
- posRegexp = regexps.POS,
- posFilters = {
- first: function(i){
- return i === 0;
- },
- last: function(i, match, array){
- return i === array.length - 1;
- },
- even: function(i){
- return i % 2 === 0;
- },
- odd: function(i){
- return i % 2 === 1;
- },
- lt: function(i, match){
- return i < match[2] - 0;
- },
- gt: function(i, match){
- return i > match[2] - 0;
- },
- nth: function(i, match){
- return match[2] - 0 == i;
- },
- eq: function(i, match){
- return match[2] - 0 == i;
- }
- },
- reducers = {
- TYPE: function(comp, match) {
- var expected = match[1];
- if (expected == '*') return true;
- var typeName = attr(comp, 'typeName');
- return typeName && typeName.length >= expected.length &&
- ('.' + typeName).indexOf('.' + expected) == (typeName.length - expected.length);
- },
-
- ATTR: function(comp, match) {
- var result = attr(comp, match[1]),
- value = result + '',
- type = match[2],
- check = match[4];
-
- return result == null ? type === "!=" :
- type === "=" ? value === check :
- type === "*=" ? value.indexOf(check) >= 0 :
- type === "~=" ? (" " + value + " ").indexOf(check) >= 0 :
- !check ? value && result !== false :
- type === "!=" ? value != check :
- type === "^=" ? value.indexOf(check) === 0 :
- type === "$=" ? value.substr(value.length - check.length) === check :
- false;
- },
-
- ID: function(comp, match) {
- return reducers.ATTR(comp, ['', 'id', '=', '', match[1]]);
- },
-
- POS: function(comp, match, i, array) {
- var filter = posFilters[match[1]];
- return filter ? filter( i, match, array ) : false;
- }
- },
- mappers = {
- "+": function(context){
- return uki.unique( uki.map(context, 'nextView') );
- },
-
- ">": function(context){
- return uki.unique( flatten(uki.map(context, 'childViews')) );
- },
-
- "": function(context) {
- return uki.unique( recChildren(flatten(uki.map(context, 'childViews'))) );
- },
-
- "~": function(context){
- return uki.unique( flatten( uki.map(context, nextViews) ) );
- }
- };
-
- function nextViews (view) {
- return view.parent().childViews().slice((view._viewIndex || 0) + 1);
- }
-
- function recChildren (comps) {
- return flatten(uki.map(comps, function(comp) {
- return [comp].concat( recChildren(attr(comp, 'childViews')) );
- }));
- }
-
- function flatten (array) {
- return uki.reduce( [], array, reduceFlatten );
- }
-
- function reduceFlatten (x, e) {
- return x.concat(e);
- }
- /**#@-*/
-
- self =
- /**
- * @namespace
- */
- uki.Selector = {
- /**
- * Finds views by CSS3 selectors in view tree.
- * <p>Can be called as uki(selector) instead of uki.Selector.find(selector)</p>
- *
- * @example
- * uki('Label') find all labels on page
- * uki('Box[name=main] > Label') find all immediate descendant Labels in a box with name = "main"
- * uki('> Slider', context) find all direct descendant Sliders within given context
- * uki('Slider,Checkbox') find all Sliders and Checkboxes
- * uki('Slider:eq(3)') find 3-d slider
- *
- * @param {string} selector
- * @param {Array.<uki.view.Base>} context to search in
- *
- * @return {uki.Collection} found views
- */
- find: function(selector, context, skipFiltering) {
- context = context || uki.top();
- if (context.length === undefined) context = [context];
-
- var tokens = self.tokenize(selector),
- expr = tokens[0],
- extra = tokens[1],
- result = context,
- mapper;
-
- while (expr.length > 0) {
- mapper = mappers[expr[0]] ? mappers[expr.shift()] : mappers[''];
- result = mapper(result);
- if (expr.length == 0) break;
- result = self.reduce(expr.shift(), result);
- }
-
- if (extra) {
- result = result.concat(self.find(extra, context, true));
- }
-
- return skipFiltering ? result : new uki.Collection(uki.unique(result));
- },
-
- /** @ignore */
- reduce: function(exprItem, context) {
- if (!context || !context.length) return [];
-
- var match, found;
-
- while (exprItem != '') {
- found = false;
- uki.each(regexps, function(index, row) {
-
- /*jsl:ignore*/
- if (match = exprItem.match(row.regexp)) {
- /*jsl:end*/
- found = true;
- context = uki.grep(context, function(comp, index) {
- return reducers[row.name](comp, match, index, context);
- });
- exprItem = exprItem.replace(row.regexp, '');
- return false;
- }
- });
- if (!found) break;
- }
- return context;
- },
-
- /** @ignore */
- tokenize: function(expr) {
- var parts = [], match, extra;
-
- chunker.lastIndex = 0;
-
- while ( (match = chunker.exec(expr)) !== null ) {
- parts.push( match[1] );
-
- if ( match[2] ) {
- extra = RegExp.rightContext;
- break;
- }
- }
-
- return [parts, extra];
- }
- };
-
- uki.find = self.find;
-})();
-
-
-
-
-/**
- * Creates image element from url
- *
- * @param {string} url Image url
- * @param {string=} dataUrl Data url representation of image, used if supported
- * @param {string=} alphaUrl Gif image url for IE6
- *
- * @namespace
- * @function
- *
- * @returns {Element}
- */
-uki.image = function(url, dataUrl, alphaUrl) {
- var result = new Image();
- result.src = uki.imageSrc(url, dataUrl, alphaUrl);
- return result;
-};
-/**
- * Selects image src depending on browser
- *
- * @param {string} url Image url
- * @param {string=} dataUrl Data url representation of image, used if supported
- * @param {string=} alphaUrl Gif image url for IE6
- *
- * @returns {string}
- */
-uki.imageSrc = function(url, dataUrl, alphaUrl) {
- if (uki.image.dataUrlSupported && dataUrl) return dataUrl;
- if (alphaUrl && uki.image.needAlphaFix) return alphaUrl;
- return url;
-};
-
-/**
- * Image html representation: '<img src="">'
- *
- * @param {string} url Image url
- * @param {string=} dataUrl Data url representation of image, used if supported
- * @param {boolean=} alphaUrl Gif image url for IE6
- * @param {string=} html Additional html
- *
- * @returns {string} html
- */
-uki.imageHTML = function(url, dataUrl, alphaUrl, html) {
- if (uki.image.needAlphaFix && alphaUrl) {
- url = alphaUrl;
- } else if (uki.image.dataUrlSupported) {
- url = dataUrl;
- }
- return '<img' + (html || '') + ' src="' + url + '" />';
-};
-
-
-/**
- * @type boolean
- */
-uki.image.dataUrlSupported = doc.createElement('canvas').toDataURL || (/MSIE (8)/).test(ua);
-
-/**
- * @type boolean
- */
-uki.image.needAlphaFix = /MSIE 6/.test(ua);
-if(uki.image.needAlphaFix) try { doc.execCommand("BackgroundImageCache", false, true); } catch(e){}
-
-
-
-
-(function() {
- var nullRegexp = /^\s*null\s*$/,
- themeRegexp = /theme\s*\(\s*(.*\s*)\)/,
- rowsRegexp = /rows\s*\(\s*(.*\s*)\)/,
- cssBoxRegexp = /cssBox\s*\(\s*(.*\s*)\)/;
-
- /**
- * Transforms a bg string into a background object
- * <p>Supported strings:<br />
- * theme(bg-name) Takes background with bg-name from uki.theme<br />
- * rows(30, #CCFFFF, #FFCCFF, #FFFFCC) Creates Rows background with 30px rowHeight and 3 colors<br />
- * cssBox(border:1px solid red;background:blue) Creates CssBox background with given cssText<br />
- * url(i.png) or #FFFFFF Creates Css background with single property</p>
- *
- * @param {String} bg
- * @name uki.background
- * @namespace
- * @returns {uki.background.Base} created background
- */
- var self = uki.background = function(bg) {
- if (typeof(bg) === 'string') {
- var match;
- /*jsl:ignore*/
- if ( match = bg.match(nullRegexp) ) return new self.Null();
-
- if ( match = bg.match(themeRegexp) ) return uki.theme.background( match[1] );
- if ( match = bg.match(rowsRegexp) ) return new self.Rows( match[1].split(',')[0], match[1].split(/\s*,\s*/).slice(1) );
- if ( match = bg.match(cssBoxRegexp) ) return new self.CssBox( match[1] );
- /*jsl:end*/
- return new self.Css(bg);
- }
- return bg;
- };
-})();
-
-
-
-/**
- * @class
- */
-uki.background.Base = uki.background.Null = uki.newClass({
- init: uki.F,
- attachTo: uki.F,
- detach: uki.F
-});
-
-
-
-/**
- * Adds a div with 9 sliced images in the corners, sides and center
- *
- * @class
- */
-uki.background.Sliced9 = uki.newClass(new function() {
- var nativeCss = ['MozBorderImage', 'WebkitBorderImage', 'borderImage'],
- dom = uki.dom;
-
- var LEFT = 'left:',
- TOP = 'top:',
- RIGHT = 'right:',
- BOTTOM = 'bottom:',
- WIDTH = 'width:',
- HEIGHT = 'height:',
- PX = 'px',
- P100 = '100%';
-
- var cache = {};
-
- /**#@+ @memberOf uki.background.Sliced9.prototype */
-
- this.init = function(partSettings, inset, options) {
- this._settings = uki.extend({}, partSettings);
- this._inset = Inset.create(inset);
- this._size = null;
- this._inited = false;
-
- options = options || {};
- this._fixedSize = Size.create(options.fixedSize) || new Size();
- this._bgInset = Inset.create(options.inset) || new Inset();
- this._zIndex = options.zIndex || -1;
-
- this._container = this._getContainer();
- this._container.style.zIndex = this._zIndex;
- };
-
- /** @ignore */
- function makeDiv (name, style, setting, imgStyle, bgSettings) {
- var inner = setting[3] ? img(setting, imgStyle) : '';
- if (!setting[3]) style += bgStyle(setting, bgSettings);
- return '<div class="' + name + '" style="position:absolute;overflow:hidden;' + style + '">' + inner + '</div>';
- }
-
- /** @ignore */
- function bgStyle (setting, bgSettings) {
- return ';background: url(' + uki.imageSrc(setting[0], setting[1], setting[2]) + ') ' + bgSettings;
- }
-
- /** @ignore */
- function img (setting, style) {
- return uki.imageHTML(setting[0], setting[1], setting[2], ' ondragstart="return false;" galleryimg="no" style="-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;position:absolute;' + style + '"');
- }
-
- /** @ignore */
- this._getContainer = function() {
- var key = this._getKey();
- if (!cache[key]) {
- return cache[key] = this._createContainer();
- }
- return cache[key].cloneNode(true);
- };
-
- /** @ignore */
- this._createContainer = function() {
- var inset = this._inset,
- bgInset = this._bgInset,
- settings = this._settings,
- width = inset.left + inset.right,
- height = inset.top + inset.bottom,
- css = [LEFT + bgInset.left + PX, RIGHT + bgInset.right + PX, TOP + bgInset.top + PX, BOTTOM + bgInset.bottom + PX].join(';'),
- html = [];
-
- if (inset.top && inset.left) {
- html[html.length] = makeDiv('tl',
- [LEFT + 0, TOP + 0, WIDTH + inset.left + PX, HEIGHT + inset.top + PX].join(';'),
- settings.c, [LEFT + 0, TOP + 0, WIDTH + width + PX, HEIGHT + height + PX].join(';'), 'top left'
- );
- }
- if (inset.top) {
- html[html.length] = makeDiv('t',
- [LEFT + inset.left + PX, TOP + 0, HEIGHT + inset.top + PX, RIGHT + inset.right + PX].join(';'),
- settings.h, [LEFT + 0, TOP + 0, WIDTH + P100, HEIGHT + height + PX].join(';'), 'repeat-x top'
- );
- }
- if (inset.top && inset.right) {
- html[html.length] = makeDiv('tr',
- [RIGHT + 0, TOP + 0, WIDTH + inset.right + PX, HEIGHT + inset.top + PX].join(';'),
- settings.c, [LEFT + '-' + inset.left + PX, TOP + 0, WIDTH + width + PX, HEIGHT + height + PX].join(';'), 'top right'
- );
- }
-
- if (inset.left) {
- html[html.length] = makeDiv('l',
- [LEFT + 0, TOP + inset.top + PX, WIDTH + inset.left + PX, BOTTOM + inset.bottom + PX].join(';'),
- settings.v, [LEFT + 0, TOP + 0, HEIGHT + P100, WIDTH + width + PX].join(';'), 'repeat-y left'
- );
- }
- if (settings.m) {
- html[html.length] = makeDiv('m',
- [LEFT + inset.left + PX, TOP + inset.top + PX, RIGHT + inset.right + PX, BOTTOM + inset.bottom + PX].join(';'),
- settings.m, [LEFT + 0, TOP + 0, HEIGHT + P100, WIDTH + P100].join(';'), ''
- );
- }
- if (inset.right) {
- html[html.length] = makeDiv('r',
- [RIGHT + 0, TOP + inset.top + PX, WIDTH + inset.right + PX, BOTTOM + inset.bottom + PX].join(';'),
- settings.v, [LEFT + '-' + inset.left + PX, TOP + 0, HEIGHT + P100, WIDTH + width + PX].join(';'), 'repeat-y right'
- );
- }
-
- if (inset.bottom && inset.left) {
- html[html.length] = makeDiv('bl',
- [LEFT + 0, BOTTOM + 0, WIDTH + inset.left + PX, HEIGHT + inset.bottom + PX].join(';'),
- settings.c, [LEFT + 0, TOP + '-' + inset.top + PX, WIDTH + width + PX, HEIGHT + height + PX].join(';'), 'left -' + inset.top + PX
- );
- }
- if (inset.bottom) {
- html[html.length] = makeDiv('b',
- [LEFT + inset.left + PX, BOTTOM + 0, HEIGHT + inset.bottom + PX, RIGHT + inset.right + PX].join(';'),
- settings.h, [LEFT + 0, TOP + '-' + inset.top + PX, WIDTH + P100, HEIGHT + height + PX].join(';'), 'repeat-x 0 -' + inset.top + PX
- );
- }
- if (inset.bottom && inset.right) {
- html[html.length] = makeDiv('br',
- [RIGHT + 0, BOTTOM + 0, WIDTH + inset.right + PX, HEIGHT + inset.bottom + PX].join(';'),
- settings.c, [LEFT + '-' + inset.left + PX, TOP + '-' + inset.top + PX, WIDTH + width + PX, HEIGHT + height + PX].join(';'), 'right -' + inset.top + PX
- );
- }
- var container = uki.createElement('div', 'position:absolute;overflow:hidden;' + css, html.join(''));
- container.className = 'uki-background-Sliced9';
- return container;
- };
-
- /** @ignore */
- this._getKey = function() {
- return uki.map(['v', 'h', 'm', 'c'], function(x) {
- return this._settings[x] && this._settings[x][0] || '';
- }, this).concat([this._inset, this._bgInset, this._fixedSize]).join(',');
- };
-
- this.attachTo = function(comp) {
- this._comp = comp;
-
- this._container.style.visibility = 'visible';
- this._comp.dom().insertBefore(this._container, this._comp.dom().firstChild);
- // this._comp.dom().appendChild(this._container);
-
- if (!uki.supportNativeLayout) {
- this._layoutHandler = this._layoutHandler || uki.proxy(function(e) {
- if (this._size && this._size.eq(e.rect)) return;
- this._size = e.rect;
- this.layout();
- }, this);
- this._comp.bind('layout', this._layoutHandler);
- this.layout();
- }
- };
-
- this.detach = function() {
- if (this._comp) {
- // this._comp.dom().removeChild(this._container);
- this._container.style.visibility = 'hidden';
- if (!uki.supportNativeLayout) this._comp.unbind('layout', this._layoutHandler);
- this._size = this._comp = null;
- this._attached = this._inited = false;
- }
- };
-
- this.layout = function(e) {
- var size = this._comp.rect(),
- parts = this._parts,
- inset = this._inset,
- bgInset = this._bgInset,
- fixedSize = this._fixedSize,
- width = FLOOR(fixedSize.width || size.width - bgInset.left - bgInset.right),
- height = FLOOR(fixedSize.height || size.height - bgInset.top - bgInset.bottom),
- insetWidth = inset.left + inset.right,
- insetHeight = inset.top + inset.bottom;
-
- if (!parts) {
- parts = {};
- uki.each(this._container.childNodes, function() {
- if (this.className) parts[this.className] = this;
- });
- this._parts = parts;
- }
- // parts.b.style.bottom = ''
- // parts.b.style.top = '100%';
- // parts.b.style.marginTop = - inset.bottom + 'px';
- if (parts.t) dom.layout(parts.t.style, { width: width - insetWidth });
- if (parts.b) dom.layout(parts.b.style, { width: width - insetWidth });
- if (parts.l) dom.layout(parts.l.style, { height: height - insetHeight });
- if (parts.r) dom.layout(parts.r.style, { height: height - insetHeight });
- if (parts.m) dom.layout(parts.m.style, {
- height: height - insetHeight,
- width: width - insetWidth
- });
- dom.layout(this._container.style, {
- width: width,
- height: height
- });
- };
-
- /**#@-*/
-});
-
-
-
-/**
- * Writes css properties to targets dom()
- *
- * @class
- */
-uki.background.Css = uki.newClass(new function() {
-
- /**#@+ @memberOf uki.background.Css.prototype */
- this.init = function(options) {
- this._options = typeof options == 'string' ? {background: options} : options;
- this._options = uki.browser.css(this._options);
- };
-
- this.attachTo = function(comp) {
- this._comp = comp;
- this._originalValues = {};
-
- uki.each(this._options, function(name, value) {
- // this._originalValues[name] = dom.style[name];
- // dom.style[name] = value;
- this._originalValues[name] = comp.style(name);
- comp.style(name, value);
- }, this);
- };
-
- this.detach = function() {
- if (this._comp) {
- uki.each(this._options, function(name, value) {
- this._comp.style(name, this._originalValues[name]);
- }, this);
- }
-
- };
- /**#@-*/
-});
-
-
-
-/**
- * Adds a div with given cssText to dom()
- *
- * @class
- */
-uki.background.CssBox = uki.newClass(new function() {
-
- var cache = {};
- /** @ignore */
- function getInsets(options) {
- if (!cache[options]) {
- uki.dom.probe(
- uki.createElement('div', options + ';position:absolute;overflow:hidden;left:-999em;width:10px;height:10px;'),
- function(c) {
- cache[options] = new Inset(
- c.offsetHeight - 10,
- c.offsetWidth - 10
- );
- }
- );
- }
- return cache[options];
- }
-
- /**#@+ @memberOf uki.background.CssBox.prototype */
-
- this.init = function(options, ext) {
- this._options = options;
- ext = ext || {};
- this._inset = inset = Inset.create(ext.inset) || new Inset();
- this._insetWidth = getInsets(options).left + inset.left + inset.right;
- this._insetHeight = getInsets(options).top + inset.top + inset.bottom;
-
- this._container = uki.createElement(
- 'div',
- 'position:absolute;overflow:hidden;z-index:' + (ext.zIndex || '-1') + ';' +
- 'left:' + inset.left + 'px;top:' + inset.top + 'px;right:' + inset.right + 'px;bottom:' + inset.bottom + 'px;' +
- uki.browser.css(options),
- ext.innerHTML
- );
- this._container.className = 'uki-background-CssBox';
- this._attached = false;
- };
-
- this.attachTo = function(comp) {
- this._comp = comp;
- this._comp.dom().insertBefore(this._container, this._comp.dom().firstChild);
-
- if (uki.supportNativeLayout) return;
-
- this._layoutHandler = this._layoutHandler || uki.proxy(function(e) { this.layout(e.rect); }, this);
- this._comp.bind('layout', this._layoutHandler);
- this.layout(this._comp.rect());
- };
-
- this.layout = function(size) {
- this._prevLayout = uki.dom.layout(this._container.style, {
- width: size.width - this._insetWidth,
- height: size.height - this._insetHeight
- }, this._prevLayout);
- };
-
- this.detach = function() {
- if (this._comp) {
- this._comp.dom().removeChild(this._container);
- if (!uki.supportNativeLayout) this._comp.unbind('layout', this._layoutHandler);
- this._attached = false;
- }
- };
-
- /**#@-*/
-});
-
-
-/**
- * Adds a div with given cssText to dom()
- *
- * @class
- */
-uki.background.LinearGradient = uki.newClass(uki.background.CssBox, new function() {
-
- var CANVAS_GRADIENT_SIZE = 200;
-
- /**
- * @param options Object { startColor: '#FFFFFF', endColor: '#CCCCCC', horizontal: true, css: 'border: 1px solid #CCC' }
- */
- this.init = function(options) {
- this._options = options;
- var inset = this._inset = uki.geometry.Inset.create(this._options.inset) || new uki.geometry.Inset();
-
- this._container = this._createContainer();
- var clone = this._container.cloneNode(true);
- clone.style.cssText += ';width:100px;height:100px;';
- uki.dom.probe(clone, uki.proxy(function(c) {
- this._insetWidth = c.offsetWidth - 100 + inset.width();
- this._insetHeight = c.offsetHeight - 100 + inset.height();
- }, this));
- this._container.style.cssText += ';left:' + inset.left + 'px;top:' + inset.top + 'px;right:' + inset.right + 'px;bottom:' + inset.bottom + 'px;';
-
- this._attached = false;
- };
-
- var urlCache = {};
- function getGradientURL (startColor, endColor, horizontal, stops) {
- var key = startColor + endColor + (horizontal ? 1 : 0) + uki.map(stops, function(stop) { return stop.pos + '-' + stop.color; });
- if (!urlCache[key]) {
-
- var canvas = document.createElement('canvas');
- canvas.width = canvas.height = CANVAS_GRADIENT_SIZE;
-
- var context = canvas.getContext('2d'),
- gradient = context.createLinearGradient(0, 0, horizontal ? CANVAS_GRADIENT_SIZE : 0, horizontal ? 0 : CANVAS_GRADIENT_SIZE);
-
- gradient.addColorStop(0, startColor);
- gradient.addColorStop(1, endColor);
- for (var i=0; i < stops.length; i++) {
- gradient.addColorStop(stops[i].pos, stops[i].color);
- };
- context.fillStyle = gradient;
- context.fillRect(0, 0, CANVAS_GRADIENT_SIZE, CANVAS_GRADIENT_SIZE);
- urlCache[key] = canvas.toDataURL && canvas.toDataURL();
- }
- return urlCache[key];
- }
-
- function mosFilter (horizontal, startColor, endColor) {
- return 'filter:progid:DXImageTransform.Microsoft.gradient(gradientType=' + (horizontal ? '1' : '0') + ', startColorstr=#FF' + startColor.substr(1) + ', endColorstr=#FF' + endColor.substr(1) + ');';
- }
-
-
- this._createContainer = function() {
- var startColor = this._options.startColor || '#FFFFFF',
- endColor = this._options.endColor || '#CCCCCC',
- horizontal = this._options.horizontal,
- stops = this._options.stops || [],
- css = '',
- i = 0,
- cssProp = uki.browser.cssLinearGradient(),
- url;
-
- if (cssProp == '-moz-linear-gradient' || cssProp == 'linear-gradient') {
- css += 'background-image:' + cssProp + '(' + (horizontal ? 'left' : 'top') + ', ' + startColor;
- for (;i<stops.length;i++) {
- css += ',' + stops[i].color + ' ' + (stops[i].pos * 100) + '%';
- }
- css += ', ' + endColor + ');';
- } else if (cssProp == '-webkit-gradient') {
- css += 'background-image:' + cssProp + '(linear, 0% 0%, ' + (horizontal ? '100% 0%' : '0% 100%') + ', from(' + startColor + '), to(' + endColor + ')';
- for (;i<stops.length;i++) {
- css += ',color-stop(' + (stops[i].pos * 100) + '%,' + stops[i].color +')';
- }
- css += ');';
- } else if (!uki.browser.canvas() && uki.browser.cssFilter() && stops.length == 0) {
- css += mosFilter(horizontal, startColor, endColor);
- }
-
- var container = uki.createElement('div', uki.browser.css(this._options.css) + ';position:absolute;overflow:hidden;z-index:' + (this._options.zIndex || '-1') + ';' + css, this._options.innerHTML);
- container.className = 'uki-background-CssBox';
- if (css) return container;
-
- if (uki.browser.canvas() && (url = getGradientURL(startColor, endColor, horizontal, stops))) {
- var img = uki.createElement('img', 'position:absolute;left:0;top:0;width:100%;height:100%;z-index:0;');
- img.src = url;
- container.appendChild(img);
- } else if (uki.browser.cssFilter() && stops.length > 0) {
- stops.unshift({ pos: 0, color: startColor });
- stops.push({ pos: 1, color: endColor });
- var child;
- for (;i<stops.length-1;i++) {
- child = uki.createElement('div', 'position:absolute;z-index:-1' +
- ';left:' + (horizontal ? stops[i].pos * 100 - (i && 1) + '%' : '0') +
- ';top:' + (horizontal ? '0' : stops[i].pos * 100 - (i && 1) + '%') +
- ';width:' + (horizontal ? (stops[i+1].pos - stops[i].pos) * 100 + 1 + '%' : '100%') +
- ';height:' + (horizontal ? '100%' : (stops[i+1].pos - stops[i].pos) * 100 + 1 + '%') +
- ';' + mosFilter(horizontal, stops[i].color, stops[i+1].color)
- );
- container.appendChild(child);
- }
- }
- return container;
- };
-
- /**#@-*/
-});
-
-
-/**
- * Adds a div with colored rows to dom
- *
- * @class
- */
-uki.background.Rows = uki.newClass(new function() {
- var cache = [],
- packSize = 100;
-
- /**#@+ @memberOf uki.background.Rows.prototype */
-
- this.init = function(height, colors) {
- this._height = height || 20;
- this._colors = uki.isArray(colors) ? colors : colors.split(' ');
- this._packSize = CEIL(packSize/this._colors.length)*this._colors.length;
- this._renderedHeight = 0;
- this._visibleExt = 200;
- if (this._colors.length == 1) this._colors = this._colors.concat(['#FFF']);
- };
-
- this.attachTo = function(comp) {
- this._comp && this.detach();
- this._comp = comp;
- if (!this._container) {
- this._container = uki.createElement(
- 'div',
- 'position:absolute;left:0;top:0;width:100%;z-index:-1'
- );
- this._container.className = 'uki-background-Rows' ;
- }
- this._layoutHandler = this._layoutHandler || uki.proxy(function(e) { this.layout(e.rect, e.visibleRect); }, this);
- this._comp.dom().appendChild(this._container);
- this._comp.bind('layout', this._layoutHandler);
- };
-
- this.layout = function(rect, visibleRect) {
- var height = visibleRect ? visibleRect.height + this._visibleExt*2 : rect.maxY();
- while (this._renderedHeight < height) {
- var h = packSize * this._height,
- c = uki.createElement('div', 'height:' + h + 'px;overflow:hidden;width:100%;', getPackHTML(this._height, this._colors));
- this._renderedHeight += h;
- this._container.appendChild(c);
- }
- if (visibleRect) {
- this._container.style.top = CEIL((visibleRect.y - this._visibleExt)/this._height/this._colors.length)*this._height*this._colors.length + 'px';
- }
- };
-
- this.detach = function() {
- if (!this._comp) return;
- this._comp.dom().removeChild(this._container);
- this._comp.unbind('layout', this._layoutHandler);
- this._comp = null;
- };
-
- /**#@-*/
-
- function getPackHTML (height, colors) {
- var key = height + ' ' + colors.join(' '),
- rows = [],
- html = [],
- i, l = colors.length;
- if (!cache[key]) {
- for (i=0; i < l; i++) {
- rows[i] = ['<div style="height:', height, 'px;width:100%;overflow:hidden;',
- (colors[i] ? 'background:' + colors[i] : ''),
- '"></div>'].join('');
- };
- for (i=0; i < packSize; i++) {
- html[i] = rows[i%l];
- };
- cache[key] = html.join('');
- }
- return cache[key];
- }
-});
-
-
-/**
- * @class
- */
-uki.background.Multi = uki.newClass({
- init: function() {
- this._bgs = Array.prototype.slice.call(arguments, 0);
- },
- attachTo: function(comp) {
- for (var i=0, $this$_bgs$length = this._bgs.length; i < $this$_bgs$length; i++) {
- this._bgs[i].attachTo(comp);
- };
- },
- detach: function() {
- for (var i=0, $this$_bgs$length = this._bgs.length; i < $this$_bgs$length; i++) {
- this._bgs[i].detach();
- };
- }
-});
-
-
-/**
- * @namespace
- */
-(function() {
-var self = uki.theme = {
- themes: [],
-
- register: function(theme, /* internal */ themes) {
- (themes = self.themes)[ themes.length] = theme;
- },
-
- background: function(name, params) {
- return self._namedResource(name, 'background', params) || new uki.background.Null();
- },
-
- image: function(name, params) {
- return self._namedResource(name, 'image', params) || new Image();
- },
-
- imageSrc: function(name, params) {
- return self._namedResource(name, 'imageSrc', params) || '';
- },
-
- style: function(name, params) {
- return self._namedResource(name, 'style', params) || '';
- },
-
- dom: function(name, params) {
- return self._namedResource(name, 'dom', params) || uki.createElement('div');
- },
-
- template: function(name, params) {
- return self._namedResource(name, 'template', params) || '';
- },
-
- _namedResource: function(name, type, params, i, result) {
- for ( i = self.themes.length - 1 ; i >= 0; i--) {
- if (result = (self.themes[i] [type](name, params)))
- return result;
- };
- return null;
- }
-};
-})();
-
-
-
-/**
- * @class
- */
-uki.theme.Base = {
- images: [],
- imageSrcs: [],
- backgrounds: [],
- doms: [],
- styles: [],
- templates: [],
-
- background: function(name, params) {
- return this.backgrounds[name] && this.backgrounds[name](params);
- },
-
- image: function(name, params) {
- if (this.images[name]) return this.images[name](params);
- return this.imageSrcs[name] && uki.image.apply(uki, this.imageSrcs[name](params));
- },
-
- imageSrc: function(name, params) {
- if (this.imageSrcs[name]) return uki.imageSrc.apply(uki, this.imageSrcs[name](params));
- return this.images[name] && this.images[name](params).src;
- },
-
- dom: function(name, params) {
- return this.doms[name] && this.doms[name](params);
- },
-
- style: function(name, params) {
- return this.styles[name] && this.styles[name](params);
- },
-
- template: function(name, params) {
- return this.templates[name] && this.templates[name](params);
- }
-};
-
-
-/**
- * Simple and fast (2x-15x faster than regexp) html template
- * @example
- * var t = new uki.theme.Template('<p class="${className}">${value}</p>')
- * t.render({className: 'myClass', value: 'some html'})
- */
-uki.theme.Template = function(code) {
- var parts = code.split('${'), i, l, tmp;
- this.parts = [parts[0]];
- this.names = [];
- for (i=1, l = parts.length; i < l; i++) {
- tmp = parts[i].split('}');
- this.names.push(tmp.shift());
- this.parts.push('');
- this.parts.push(tmp.join('}'));
- };
-};
-
-uki.theme.Template.prototype.render = function(values) {
- for (var i=0, names = this.names, l = names.length; i < l; i++) {
- this.parts[i*2+1] = values[names[i]] || '';
- };
- return this.parts.join('');
-};
-
-
-/**
- * @namespace
- */
-uki.view.utils = new function() {
- this.visibleRect = function (from, upTo) {
- var queue = [],
- rect, i, tmpRect, c = from;
-
- do {
- queue[queue.length] = c;
- c = c.parent();
- } while (c && c != upTo);
-
- if (upTo && upTo != from) queue[queue.length] = upTo;
-
- for (i = queue.length - 1; i >= 0; i--){
- c = queue[i];
- tmpRect = visibleRect(c);
- rect = rect ? rect.intersection(tmpRect) : tmpRect;
- rect.x -= c.rect().x;
- rect.y -= c.rect().y;
-
- };
- return rect;
- };
-
- this.top = function(c) {
- while (c.parent()) c = c.parent();
- return c;
- };
-
- this.offset = function(c, upTo) {
- var offset = new Point(),
- rect;
-
- while (c && c != upTo) {
- rect = c.rect();
- offset.x += rect.x;
- offset.y += rect.y;
- if (c.scrollTop) {
- offset.x -= c.scrollLeft();
- offset.y -= c.scrollTop();
- }
- c = c.parent();
- }
- return offset;
- };
-
- this.scrollableParent = function(c) {
- do {
- if (uki.isFunction(c.scrollTop)) return c;
- c = c.parent();
- } while (c);
- return null;
- };
-
- /** @inner */
- function visibleRect (c) {
- return c.visibleRect ? c.visibleRect() : c.rect().clone();
- }
- /**#@-*/
-};
-
-uki.extend(uki.view, uki.view.utils);
-
-
-/**
- * @class
- */
-uki.view.Styleable = new function() {
- /** @scope uki.view.Styleable.prototype */
-
- /**
- * @name style
- * @memberOf uki.view.Styleable#
- * @function
- */
- this.style = function(name, value) {
- if (typeof name == 'string') return this._style(name, value);
-
- uki.each(name, function(name, value) {
- this._style(name, value);
- }, this);
- return this;
- };
-
- this._style = function(name, value) {
- if (value === undefined) return this._dom.style[name];
- this._dom.style[name] = value;
- return this;
- };
-
- // TODO: is this really needed?
- // uki.each('fontSize,textAlign,color,fontFamily,fontWeight,lineHeight,zIndex'.split(','), function(i, name) {
- // proto[name] = function(value) {
- // return this._style(name, value);
- // };
- // });
-
- /**
- * Sets whether text of the view can be selected.
- *
- * @memberOf uki.view.Styleable#
- * @name textSelectable
- * @function
- * @param {boolean=} state
- * @returns {boolean|uki.view.Base} current textSelectable state of self
- */
- this.textSelectable = uki.newProp('_textSelectable', function(state) {
- this._textSelectable = state;
- if (uki.browser.cssUserSelect() != 'unsupported') {
- this._dom.style[uki.camalize(uki.browser.cssUserSelect())] = (state ? '' : uki.browser.cssUserSelect() == '-moz-user-select' ? '-moz-none' : 'none');
- } else {
- uki.dom[state ? 'unbind' : 'bind'](this.dom(), 'selectstart', uki.dom.preventDefaultHandler);
- }
- this._dom.style.cursor = state ? '' : 'default';
- });
-
- this.draggable = function(state) {
- if (state === undefined) return this._dom.getAttribute('draggable');
- this._dom.setAttribute('draggable', true);
- this._dom.style.WebkitUserDrag = 'element';
- return this;
- };
-
- /**#@-*/
-};
-
-
-
-
-/**
- * @interface
- */
-uki.view.Focusable = new function() {/** @lends uki.view.Focusable.prototype */
-
- // dom: function() {
- // return null; // should implement
- // },
- this._focusable = true; // default value
- this._focusOnClick = true;
-
- this.focusOnClick = uki.newProp('_focusOnClick');
-
- this.focusable = uki.newProp('_focusable', function(v) {
- this._focusable = v;
- if (v) this._initFocusable();
- this._updateFocusable();
- }),
-
- this.disabled = uki.newProp('_disabled', function(d) {
- var changed = d !== !!this._disabled;
- this._disabled = d;
- if (d) this.blur();
- this._updateFocusable();
- if (changed && this._updateBg) this._updateBg();
- }),
-
- this._updateFocusable = function() {
- if (this._preCreatedFocusTarget || !this._focusTarget) return;
-
- if (this._focusable && !this._disabled) {
- this._focusTarget.style.display = 'block';
- } else {
- this._focusTarget.style.display = 'none';
- }
- },
-
- this._initFocusable = function(preCreatedFocusTarget) {
- if ((!preCreatedFocusTarget && !this._focusable) || this._focusTarget) return;
- this._focusTarget = preCreatedFocusTarget;
- this._preCreatedFocusTarget = preCreatedFocusTarget;
-
- if (!preCreatedFocusTarget) {
- this._focusTarget = uki.createElement('input', 'position:absolute;left:-9999px;top:0;width:1px;height:1px;');
- this._focusTarget.className = 'uki-view-Focusable';
- this.dom().appendChild(this._focusTarget);
- }
- this._hasFocus = false;
- this._firstFocus = true;
-
- uki.dom.bind(this._focusTarget, 'focus', uki.proxy(function(e) {
- this._stopWatingForBlur();
- if (!this._hasFocus) this._focus(e);
- }, this));
-
- uki.dom.bind(this._focusTarget, 'blur', uki.proxy(function(e) {
- if (this._hasFocus) {
- this._hasFocus = false;
- this._waitingForBlur =
- setTimeout(uki.proxy(function() { // wait for mousedown refocusing
- this._waitingForBlur = false;
- if (!this._hasFocus) this._blur();
- }, this), 1);
- }
- }, this));
-
- if (!preCreatedFocusTarget) this.bind('mousedown', function(e) {
- if (this._focusOnClick) this.focus();
- });
- this._updateFocusable();
- }
-
- this._focus = function(e) {
- this._hasFocus = true;
- this._firstFocus = false;
- }
-
- this._blur = function(e) {
- this._hasFocus = false;
- }
-
- this._stopWatingForBlur = function() {
- if (this._waitingForBlur) {
- clearTimeout(this._waitingForBlur);
- this._waitingForBlur = false;
- this._hasFocus = true;
- }
- };
-
- this.focus = function() {
- if (this._focusable && !this._disabled) {
- this._stopWatingForBlur();
- if (!this._hasFocus) this._focus();
- var target = this._focusTarget;
- setTimeout(function() {
- try {
- target.focus();
- } catch(e) { }
- target = null;
- }, 1);
- }
- return this;
- },
-
- this.blur = function() {
- try {
- this._focusTarget.blur();
- } catch(e) {}
- return this;
- }
-
- this.hasFocus = function() {
- return this._hasFocus;
- }
-
- this._bindToDom = function(name) {
- if (!this._focusTarget || 'keyup keydown keypress focus blur'.indexOf(name) == -1) return false;
-
- return uki.view.Observable._bindToDom.call(this, name, this._focusTarget);
- }
-
-
-};
-
-
-
-
-
-
-
-
-var ANCHOR_TOP = 1,
- ANCHOR_RIGHT = 2,
- ANCHOR_BOTTOM = 4,
- ANCHOR_LEFT = 8,
- ANCHOR_WIDTH = 16,
- ANCHOR_HEIGHT = 32;
-
-uki.view.declare('uki.view.Base', uki.view.Observable, uki.view.Styleable, function(Observable, Styleable) {
-
- var layoutId = 1;
-
- this.defaultCss = 'position:absolute;z-index:100;-moz-user-focus:none;';
-
- /**
- * Base class for all uki views.
- *
- * <p>View creates and layouts dom nodes. uki.view.Base defines basic API for other views.
- * It also defines common layout algorithms.</p>
- *
- * Layout
- *
- * <p>View layout is defined by rectangle and anchors.
- * Rectangle is passed to constructor, anchors are set through the #anchors attribute.</p>
- *
- * <p>Rectangle defines initial position and size. Anchors specify how view will move and
- * resize when its parent is resized.</p>
- *
- * 2 phases of layout
- *
- * <p>Layout process has 2 phases.
- * First views rectangles are recalculated. This may happen several times before dom
- * is touched. This is done either explicitly through #rect attribute or through
- * #parentResized callbacks.
- * After rectangles are set #layout is called. This actually updates dom styles.</p>
- *
- * @example
- * uki({ view: 'Base', rect: '10 20 100 50', anchors: 'left top right' })
- * // Creates Base view with initial x = 10px, y = 20px, width = 100px, height = 50px.
- * // When parent resizes x, y and height will stay the same. Width will resize with parent.
- *
- *
- * @see uki.view.Base#anchors
- * @constructor
- * @augments uki.view.Observable
- * @augments uki.view.Styleable
- *
- * @name uki.view.Base
- * @implements uki.view.Observable
- * @param {uki.geometry.Rect} rect initial position and size
- */
- this.init = function(rect) {
- this._parentRect = this._rect = Rect.create(rect);
- this._setup();
- uki.initNativeLayout();
- this._createDom();
- };
-
- /**#@+ @memberOf uki.view.Base# */
-
- /** @private */
- this._setup = function() {
- uki.extend(this, {
- _anchors: 0,
- _parent: null,
- _visible: true,
- _needsLayout: true,
- _textSelectable: false,
- _styleH: 'left',
- _styleV: 'top',
- _firstLayout: true
- });
- this.defaultCss += uki.theme.style('base');
- };
-
- /**
- * Get views container dom node.
- * @returns {Element} dom
- */
- this.dom = function() {
- return this._dom;
- };
-
- /* ------------------------------- Common settings --------------------------------*/
- /**
- * Used for fast (on hash lookup) view searches: uki('#view_id');
- *
- * @param {string=} id New id value
- * @returns {string|uki.view.Base} current id or self
- */
- this.id = function(id) {
- if (id === undefined) return this._dom.id;
- if (this._dom.id) uki.unregisterId(this);
- this._dom.id = id;
- uki.registerId(this);
- return this;
- };
-
- /**
- * Accessor for dom().className
- * @param {string=} className
- *
- * @returns {string|uki.view.Base} className or self
- */
- uki.delegateProp(this, 'className', '_dom');
-
- /**
- * Accessor for view visibility.
- *
- * @param {boolean=} state
- * @returns {boolean|uki.view.Base} current visibility state of self
- */
- this.visible = function(state) {
- if (state === undefined) return this._dom.style.display != 'none';
-
- this._dom.style.display = state ? 'block' : 'none';
- return this;
- };
-
- /**
- * Accessor for background attribute.
- * @param {string|uki.background.Base=} background
- * @returns {uki.background.Base|uki.view.Base} current background or self
- */
- this.background = function(val) {
- if (val === undefined && !this._background && this.defaultBackground) this._background = this.defaultBackground();
- if (val === undefined) return this._background;
- val = uki.background(val);
-
- if (val == this._background) return this;
- if (this._background) this._background.detach(this);
- val.attachTo(this);
-
- this._background = val;
- return this;
- };
-
- /**
- * Accessor for default background attribute.
- * @name defaultBackground
- * @function
- * @returns {uki.background.Base} default background if not overridden through attribute
- */
- this.defaultBackground = function() {
- return this._defaultBackground && uki.background(this._defaultBackground);
- };
-
- /* ----------------------------- Container api ------------------------------*/
-
- /**
- * Accessor attribute for parent view. When parent is set view appends its #dom
- * to parents #domForChild
- *
- * @param {?uki.view.Base=} parent
- * @returns {uki.view.Base} parent or self
- */
- this.parent = function(parent) {
- if (parent === undefined) return this._parent;
-
- // if (this._parent) this._dom.parentNode.removeChild(this._dom);
- this._parent = parent;
- // if (this._parent) this._parent.domForChild(this).appendChild(this._dom);
- return this;
- };
-
- /**
- * Accessor for childViews. @see uki.view.Container for implementation
- * @returns {Array.<uki.view.Base>}
- */
- this.childViews = function() {
- return [];
- };
-
- /**
- * Reader for previous view
- * @returns {uki.view.Base}
- */
- this.prevView = function() {
- if (!this.parent()) return null;
- return this.parent().childViews()[this._viewIndex - 1] || null;
- };
-
- /**
- * Reader for next view
- * @returns {uki.view.Base}
- */
- this.nextView = function() {
- if (!this.parent()) return null;
- return this.parent().childViews()[this._viewIndex + 1] || null;
- };
-
-
- /* ----------------------------- Layout ------------------------------*/
-
- /**
- * Sets or retrieves view's position and size.
- *
- * @param {string|uki.geometry.Rect} newRect
- * @returns {uki.view.Base} self
- */
- this.rect = function(newRect) {
- if (newRect === undefined) return this._rect;
-
- newRect = Rect.create(newRect);
- this._parentRect = newRect;
- this._rect = this._normalizeRect(newRect);
- this._needsLayout = this._needsLayout || layoutId++;
- return this;
- };
-
- /**
- * Set or get sides which the view should be attached to.
- * When a view is attached to a side the distance between this side and views border
- * will remain constant on resize. Anchor can be any combination of
- * "top", "right", "bottom", "left", "width" and "height".
- * If you set both "right" and "left" than "width" is assumed.
- *
- * Anchors are stored as a bit mask. Though its easier to set them using strings
- *
- * @function
- * @param {string|number} anchors
- * @returns {number|uki.view.Base} anchors or self
- */
- this.anchors = uki.newProp('_anchors', function(anchors) {
- if (anchors.indexOf) {
- var tmp = 0;
- if (anchors.indexOf('right' ) > -1) tmp |= ANCHOR_RIGHT;
- if (anchors.indexOf('bottom' ) > -1) tmp |= ANCHOR_BOTTOM;
- if (anchors.indexOf('top' ) > -1) tmp |= ANCHOR_TOP;
- if (anchors.indexOf('left' ) > -1) tmp |= ANCHOR_LEFT;
- if (anchors.indexOf('width' ) > -1 || (tmp & ANCHOR_LEFT && tmp & ANCHOR_RIGHT)) tmp |= ANCHOR_WIDTH;
- if (anchors.indexOf('height' ) > -1 || (tmp & ANCHOR_BOTTOM && tmp & ANCHOR_TOP)) tmp |= ANCHOR_HEIGHT;
- anchors = tmp;
- }
- this._anchors = anchors;
- this._styleH = anchors & ANCHOR_LEFT ? 'left' : 'right';
- this._styleV = anchors & ANCHOR_TOP ? 'top' : 'bottom';
- });
-
- /**
- * Returns rectangle for child layout. Usually equals to #rect. Though in some cases,
- * client rectangle my differ from #rect. Example uki.view.ScrollPane.
- *
- * @param {uki.view.Base} child
- * @returns {uki.geometry.Rect}
- */
- this.rectForChild = function(child) {
- return this.rect();
- };
-
- /**
- * Updates dom to match #rect property.
- *
- * Layout is designed to minimize dom writes. If view is anchored to the right then
- * style.right is used, style.left for left anchor, etc. If browser supports this
- * both style.right and style.left are used. Otherwise style.width will be updated
- * manually on each resize.
- *
- * @fires event:layout
- * @see uki.dom.initNativeLayout
- */
- this.layout = function() {
- this._layoutDom(this._rect);
- this._needsLayout = false;
- this.trigger('layout', {rect: this._rect, source: this});
- this._firstLayout = false;
- };
-
- this.layoutIfNeeded = function() {
- if (this._needsLayout && this.visible()) this.layout();
- };
-
-
- /**
- * @function uki.view.Base#minSize
- * @function uki.view.Base#maxSize
- */
- uki.each(['min', 'max'], function(i, name) {
- var attr = name + 'Size',
- prop = '_' + attr;
- this[attr] = function(s) {
- if (s === undefined) return this[prop] || new Size();
- this[prop] = Size.create(s);
- this.rect(this._parentRect);
- this._dom.style[name + 'Width'] = this[prop].width ? this[prop].width + PX : '';
- this._dom.style[name + 'Height'] = this[prop].height ? this[prop].height + PX : '';
- return this;
- };
- }, this);
-
- /**
- * Resizes view when parent changes size according to anchors.
- * Called from parent view. Usually after parent's #rect is called.
- *
- * @param {uki.geometry.Rect} oldSize
- * @param {uki.geometry.Rect} newSize
- */
- this.parentResized = function(oldSize, newSize) {
- var newRect = this._parentRect.clone(),
- dX = (newSize.width - oldSize.width) /
- ((this._anchors & ANCHOR_LEFT ^ ANCHOR_LEFT ? 1 : 0) + // flexible left
- (this._anchors & ANCHOR_WIDTH ? 1 : 0) +
- (this._anchors & ANCHOR_RIGHT ^ ANCHOR_RIGHT ? 1 : 0)), // flexible right
- dY = (newSize.height - oldSize.height) /
- ((this._anchors & ANCHOR_TOP ^ ANCHOR_TOP ? 1 : 0) + // flexible top
- (this._anchors & ANCHOR_HEIGHT ? 1 : 0) +
- (this._anchors & ANCHOR_BOTTOM ^ ANCHOR_BOTTOM ? 1 : 0)); // flexible right
-
- if (this._anchors & ANCHOR_LEFT ^ ANCHOR_LEFT) newRect.x += dX;
- if (this._anchors & ANCHOR_WIDTH) newRect.width += dX;
-
- if (this._anchors & ANCHOR_TOP ^ ANCHOR_TOP) newRect.y += dY;
- if (this._anchors & ANCHOR_HEIGHT) newRect.height += dY;
- this.rect(newRect);
- };
-
- /**
- * Called when child changes it's size
- */
- this.childResized = function(child) {
- // do nothing, extend in subviews
- };
-
- /**
- * Resizes view to its contents. Contents size is determined by view.
- * View can be resized by width, height or both. This is specified through
- * autosizeStr param.
- * View will grow shrink according to its #anchors.
- *
- * @param {autosizeStr} autosize
- * @returns {uki.view.Base} self
- */
- this.resizeToContents = function(autosizeStr) {
- var autosize = decodeAutosize(autosizeStr);
- if (0 == autosize) return this;
-
- var oldRect = this.rect(),
- newRect = this._calcRectOnContentResize(autosize);
- // if (newRect.eq(oldRect)) return this;
- // this.rect(newRect);
- this._rect = this._parentRect = newRect;
- this._needsLayout = true;
- return this;
- };
-
- /**
- * Calculates view's contents size. Redefined in subclasses.
- *
- * @param {number} autosize Bitmask
- * @returns {uki.geometry.Rect}
- */
- this.contentsSize = function(autosize) {
- return this.rect();
- };
-
- /** @private */
- this._normalizeRect = function(rect) {
- if (this._minSize) {
- rect = new Rect(rect.x, rect.y, MAX(this._minSize.width, rect.width), MAX(this._minSize.height, rect.height));
- }
- if (this._maxSize) {
- rect = new Rect(rect.x, rect.y, MIN(this._maxSize.width, rect.width), MIN(this._maxSize.height, rect.height));
- }
- return rect;
- };
-
-
-
- /** @ignore */
- function decodeAutosize (autosizeStr) {
- if (!autosizeStr) return 0;
- var autosize = 0;
- if (autosizeStr.indexOf('width' ) > -1) autosize = autosize | ANCHOR_WIDTH;
- if (autosizeStr.indexOf('height') > -1) autosize = autosize | ANCHOR_HEIGHT;
- return autosize;
- }
-
-
- /** @private */
- this._initBackgrounds = function() {
- if (this.background()) this.background().attachTo(this);
- };
-
- /** @private */
- this._calcRectOnContentResize = function(autosize) {
- var newSize = this.contentsSize( autosize ),
- oldSize = this.rect();
-
- if (newSize.eq(oldSize)) return oldSize; // nothing changed
-
- // calculate where to resize
- var newRect = this.rect().clone(),
- dX = newSize.width - oldSize.width,
- dY = newSize.height - oldSize.height;
-
- if (autosize & ANCHOR_WIDTH) {
- if (this._anchors & ANCHOR_LEFT ^ ANCHOR_LEFT && this._anchors & ANCHOR_RIGHT ^ ANCHOR_RIGHT) {
- newRect.x -= dX/2;
- } else if (this._anchors & ANCHOR_LEFT ^ ANCHOR_LEFT) {
- newRect.x -= dX;
- }
- newRect.width += dX;
- }
-
- if (autosize & ANCHOR_HEIGHT) {
- if (this._anchors & ANCHOR_TOP ^ ANCHOR_TOP && this._anchors & ANCHOR_BOTTOM ^ ANCHOR_BOTTOM) {
- newRect.y -= dY/2;
- } else if (this._anchors & ANCHOR_TOP ^ ANCHOR_TOP) {
- newRect.y -= dY;
- }
- newRect.height += dY;
- }
-
- return newRect;
- };
-
- /** @function
- @name uki.view.Base#width */
- /** @function
- @name uki.view.Base#height */
- /** @function
- @name uki.view.Base#minX */
- /** @function
- @name uki.view.Base#maxX */
- /** @function
- @name uki.view.Base#minY */
- /** @function
- @name uki.view.Base#maxY */
- /** @function
- @name uki.view.Base#left */
- /** @function
- @name uki.view.Base#top */
- uki.each(['width', 'height', 'minX', 'maxX', 'minY', 'maxY', 'x', 'y', 'left', 'top'], function(index, attr) {
- this[attr] = function(value) {
- if (value === undefined) return uki.attr(this.rect(), attr);
- uki.attr(this.rect(), attr, value);
- return this;
- };
- }, this);
-
- /* ---------------------------------- Dom --------------------------------*/
- /**
- * Called through a second layout pass when _dom should be created
- * @private
- */
- this._createDom = function() {
- this._dom = uki.createElement('div', this.defaultCss);
- this._initClassName();
- };
-
- this._initClassName = function() {
- this._dom.className = this.typeName().replace(/\./g, '-');
- };
-
- /**
- * Called through a second layout pass when _dom is already created
- * @private
- */
- this._layoutDom = function(rect) {
- var l = {}, s = uki.supportNativeLayout, relativeRect = this.parent().rectForChild(this);
- if (s && this._anchors & ANCHOR_LEFT && this._anchors & ANCHOR_RIGHT) {
- l.left = rect.x;
- l.right = relativeRect.width - rect.x - rect.width;
- } else {
- l.width = rect.width;
- l[this._styleH] = this._styleH == 'left' ? rect.x : relativeRect.width - rect.x - rect.width;
- }
-
- if (s && this._anchors & ANCHOR_TOP && this._anchors & ANCHOR_BOTTOM) {
- l.top = rect.y;
- l.bottom = relativeRect.height - rect.y - rect.height;
- } else {
- l.height = rect.height;
- l[this._styleV] = this._styleV == 'top' ? rect.y : relativeRect.height - rect.y - rect.height;
- }
- this._lastLayout = uki.dom.layout(this._dom.style, l, this._lastLayout);
- if (this._firstLayout) this._initBackgrounds();
- return true;
- };
-
- /** @private */
- this._bindToDom = function(name) {
- if ('resize layout'.indexOf(name) > -1) return true;
- return uki.view.Observable._bindToDom.call(this, name);
- };
-
- /**#@-*/
-});
-
-
-
-/**
- * @class
- * @augments uki.view.Base
- * @name uki.view.Container
- */
-uki.view.declare('uki.view.Container', uki.view.Base, function(Base) {
- /**#@+ @memberOf uki.view.Container# */
-
- this._inset = new Inset();
-
- /** @private */
- this._setup = function() {
- this._childViews = [];
- Base._setup.call(this);
- };
-
- /** @ignore */
- function maxProp (c, prop) {
- var val = 0, i, l;
- for (i = c._childViews.length - 1; i >= 0; i--){
- if (!c._childViews[i].visible()) continue;
- val = MAX(val, c._childViews[i].rect()[prop]());
- };
- return val;
- }
-
- this.contentsWidth = function() {
- return maxProp(this, 'maxX') + this.inset().right;
- };
-
- this.contentsHeight = function() {
- return maxProp(this, 'maxY') + this.inset().bottom;
- };
-
- this.contentsSize = function() {
- return new Size(this.contentsWidth(), this.contentsHeight());
- };
-
- /**
- * Sets or retrieves view child view.
- * @param anything uki.build can parse
- *
- * Note: if setting on view with child views, all child view will be removed
- */
- this.childViews = function(val) {
- if (val === undefined) return this._childViews;
- uki.each(this._childViews, function(i, child) {
- this.removeChild(child);
- }, this);
- uki.each(uki.build(val), function(tmp, child) {
- this.appendChild(child);
- }, this);
- return this;
- };
-
- /**
- * Remove particular child
- */
- this.removeChild = function(child) {
- child.parent(null);
- this.domForChild(child).removeChild(child.dom());
- var index = child._viewIndex,
- i, l;
- for (i=index+1, l = this._childViews.length; i < l; i++) {
- this._childViews[i]._viewIndex--;
- };
- this._childViews = uki.grep(this._childViews, function(elem) { return elem != child; });
- this._contentChanged();
- };
-
- /**
- * Adds a child.
- */
- this.appendChild = function(child) {
- child._viewIndex = this._childViews.length;
- this._childViews.push(child);
- child.parent(this);
- this.domForChild(child).appendChild(child.dom());
- this._contentChanged();
- };
-
- /**
- * Insert child before target beforeChild
- * @param {uki.view.Base} child Child to insert
- * @param {uki.view.Base} beforeChild Existent child before which we should insert
- */
- this.insertBefore = function(child, beforeChild) {
- var i, l;
- child._viewIndex = beforeChild._viewIndex;
- for (i=beforeChild._viewIndex, l = this._childViews.length; i < l; i++) {
- this._childViews[i]._viewIndex++;
- };
- this._childViews.splice(beforeChild._viewIndex-1, 0, child);
- child.parent(this);
- this.domForChild(child).insertBefore(child.dom(), beforeChild.dom());
- this._contentChanged();
- };
-
- /**
- * Should return a dom node for a child.
- * Child should append itself to this dom node
- */
- this.domForChild = function(child) {
- return this._dom;
- };
-
- this.inset = uki.newProp('_inset', function(v) {
- this._inset = Inset.create(v);
- });
-
- /** @private */
- this._contentChanged = function() {
- // called on every insertBefore, appendChild, removeChild
- };
-
- this._layoutDom = function(rect) {
- Base._layoutDom.call(this, rect);
- this._layoutChildViews(rect);
- };
-
- /** @private */
- this._layoutChildViews = function() {
- for (var i=0, childViews = this.childViews(); i < childViews.length; i++) {
- childViews[i].layoutIfNeeded();
- };
- };
-
- /**
- * @fires event:resize
- */
- this.rect = function(newRect) {
- if (newRect === undefined) return this._rect;
-
- newRect = Rect.create(newRect);
- this._parentRect = newRect;
- var oldRect = this._rect;
- if (!this._resizeSelf(newRect)) return this;
- this._needsLayout = true;
-
- if (oldRect.width != newRect.width || oldRect.height != newRect.height) this._resizeChildViews(oldRect);
- this.trigger('resize', {oldRect: oldRect, newRect: this._rect, source: this});
- return this;
- };
-
- /** @private */
- this._resizeSelf = function(newRect) {
- // if (newRect.eq(this._rect)) return false;
- this._rect = this._normalizeRect(newRect);
- return true;
- };
-
- /**
- * Called to notify all interested parties: childViews and observers
- * @private
- */
- this._resizeChildViews = function(oldRect) {
- for (var i=0, childViews = this.childViews(); i < childViews.length; i++) {
- childViews[i].parentResized(oldRect, this._rect);
- };
- };
-
- /**#@-*/
-});
-/**
- * Basic container view
- *
- *
- * @author voloko
- * @name uki.view.Box
- * @class
- * @extends uki.view.Container
- */
-uki.view.declare('uki.view.Box', uki.view.Container, {});
-
-/**
- * Image
- *
- * @author voloko
- * @name uki.view.Image
- * @class
- * @extends uki.view.Base
- */
-uki.view.declare('uki.view.Image', uki.view.Base, function() {
- this.typeName = function() { return 'uki.view.Image'; };
-
- /**
- * @function
- * @name uki.view.Image#src
- */
- uki.delegateProp(this, 'src', '_dom');
-
- this._createDom = function() {
- this._dom = uki.createElement('img', this.defaultCss);
- this._initClassName();
- };
-});
-
-
-
-/**
- * Label View
- * Contains any html
- *
- * @author voloko
- * @name uki.view.Label
- * @class
- * @extends uki.view.Base
- */
-uki.view.declare('uki.view.Label', uki.view.Base, function(Base) {
-
- this._setup = function() {
- Base._setup.call(this);
- uki.extend(this, {
- _scrollable: false,
- _textSelectable: false,
- _inset: new Inset()
- });
- this.defaultCss += uki.theme.style('label');
- };
-
- this._style = function(name, value) {
- if (value !== undefined && uki.inArray(name, uki.browser.textStyles) != -1) {
- this._label.style[name] = value;
- }
- return Base._style.call(this, name, value);
- };
-
- this.adaptToContents = uki.newProp('_adaptToContents');
-
- this.textSelectable = function(state) {
- if (state !== undefined && !this._textSelectProp) {
- this._label.unselectable = state ? '' : 'on';
- }
- return Base.textSelectable.call(this, state);
- };
-
- /**
- * Warning! this operation is expensive
- */
- this.contentsSize = function(autosize) {
- var clone = this._createLabelClone(autosize), inset = this.inset(), size;
-
- uki.dom.probe(clone, function() {
- size = new Size(clone.offsetWidth + inset.width(), clone.offsetHeight + inset.height());
- });
- return size;
- };
-
- /**
- * Read/write escaped html contents
- * @function
- * @name uki.view.Label#text
- */
- this.text = function(text) {
- return text === undefined ? this.html() : this.html(uki.escapeHTML(text));
- };
-
- /**
- * Read/write html contents
- * @function
- * @name uki.view.Label#html
- */
- this.html = function(html) {
- if (html === undefined) return this._label.innerHTML;
- this._label.innerHTML = html;
- return this;
- };
-
- /**
- * Insets between text and view borders
- * @function
- * @name uki.view.Label#inset
- */
- this.inset = uki.newProp('_inset', function(inset) {
- this._inset = Inset.create(inset);
- });
-
- /**
- * Whether label have inline scrollbars on not
- * @function
- * @name uki.view.Label#scrollable
- */
- this.scrollable = uki.newProp('_scrollable', function(state) {
- this._scrollable = state;
- this._label.style.overflow = state ? 'auto' : 'hidden';
- });
-
- /**
- * Whether can have multiline lines or not
- * @function
- * @name uki.view.Label#multiline
- */
- this.multiline = uki.newProp('_multiline', function(state) {
- this._multiline = state;
- this._label.style.whiteSpace = state ? '' : 'nowrap';
- });
-
- this._createLabelClone = function(autosize) {
- var clone = this._label.cloneNode(true),
- inset = this.inset(), rect = this.rect();
-
- if (autosize & ANCHOR_WIDTH) {
- clone.style.width = clone.style.right = '';
- } else if (uki.supportNativeLayout) {
- clone.style.right = '';
- clone.style.width = rect.width - inset.width() + 'px';
- }
- if (autosize & ANCHOR_HEIGHT) {
- clone.style.height = clone.style.bottom = '';
- } else if (uki.supportNativeLayout) {
- clone.style.bottom = '';
- clone.style.height = rect.height - inset.height() + 'px';
- }
- clone.style.paddingTop = 0;
- clone.style.visibility = 'hidden';
- return clone;
- };
-
- this._createDom = function() {
- Base._createDom.call(this);
- this._label = uki.createElement('div', this.defaultCss + 'white-space:nowrap;'); // text-shadow:0 1px 0px rgba(255,255,255,0.8);
- this._dom.appendChild(this._label);
- this.textSelectable(this.textSelectable());
- };
-
- this._layoutDom = function() {
- var inset = this._inset,
- l,
- a = this._anchors,
- watchField = '', watchValue;
-
- if (uki.supportNativeLayout) {
- l = {
- left: inset.left,
- top: inset.top,
- right: inset.right,
- bottom: inset.bottom
- };
- } else {
- l = {
- left: inset.left,
- top: inset.top,
- width: this._rect.width - inset.width(),
- height: this._rect.height - inset.height()
- };
- }
-
- if (!(a & ANCHOR_BOTTOM)) {
- l.height = l.bottom = undefined;
- watchField = 'offsetHeight';
- } else if (!(a & ANCHOR_TOP)) {
- l.height = l.bottom = undefined;
- watchField = 'offsetHeight';
- } else if (!(a & ANCHOR_RIGHT)) {
- l.right = l.width = undefined;
- watchField = 'offsetWidth';
- } else if (!(a & ANCHOR_LEFT)) {
- l.left = l.width = undefined;
- watchField = 'offsetWidth';
- }
-
- Base._layoutDom.apply(this, arguments);
-
- if (!this.multiline()) {
- var fz = parseInt(this.style('fontSize'), 10) || 12;
- this._label.style.lineHeight = (this._rect.height - inset.top - inset.bottom) + 'px';
- // this._label.style.paddingTop = MAX(0, this._rect.height/2 - fz/2) + 'px';
- }
- this._lastLabelLayout = uki.dom.layout(this._label.style, l, this._lastLabelLayout);
-
- if (this.adaptToContents() && watchField) {
- watchValue = this._label[watchField];
- if (watchValue != this._lastWatchValue && this.parent()) {
- this.resizeToContents(watchField == 'offsetWidth' ? 'width' : 'height');
- this.parent().childResized(this);
- }
- this._lastWatchValue = watchValue;
- }
- };
-
-});
-
-
-/**
- * Button view
- *
- *
- * @author voloko
- * @name uki.view.Button
- * @class
- * @extends uki.view.Label
- * @implements uki.view.Focusable
- */
-uki.view.declare('uki.view.Button', uki.view.Label, uki.view.Focusable, function(Base, Focusable) {
- /** @lends uki.view.Button.prototype */
-
- this._backgroundPrefix = 'button-';
-
- this._setup = function() {
- Base._setup.call(this);
- uki.extend(this, {
- _inset: new Inset(0, 4)
- });
- this.defaultCss += "cursor:default;-moz-user-select:none;-webkit-user-select:none;" + uki.theme.style('button');
- };
-
- /**
- * @function
- * @name uki.view.Button#backgroundPrefix
- */
- uki.addProps(this, ['backgroundPrefix']);
-
- /**
- * @function
- * @name uki.view.Button#"normal-background"
- */
- /**
- * @function
- * @name uki.view.Button#"hover-background"
- */
- /**
- * @function
- * @name uki.view.Button#"down-background"
- */
- /**
- * @function
- * @name uki.view.Button#"focus-background"
- */
- /**
- * @function
- * @name uki.view.Button#"disabled-background"
- */
- uki.each(['normal', 'hover', 'down', 'focus', 'disabled'], function(i, name) {
- var property = name + '-background';
- this[property] = function(bg) {
- if (bg) this['_' + property] = bg;
- return this['_' + property] = this['_' + property] ||
- uki.theme.background(this._backgroundPrefix + name, {height: this.rect().height, view: this});
- };
- }, this);
-
- this._createLabelClone = function(autosize) {
- var clone = Base._createLabelClone.call(this, autosize);
- // clone.style.fontWeight = this.style('fontWeight');
- return clone;
- };
-
- this._layoutDom = function(rect) {
- Base._layoutDom.call(this, rect);
- if (this._firstLayout) {
- this['hover-background']();
- this['down-background']();
-
- this._backgroundByName(this._backgroundName || 'normal');
- }
- };
-
- this._updateBg = function() {
- var name = this._disabled ? 'disabled' : this._down ? 'down' : this._over ? 'hover' : 'normal';
- this._backgroundByName(name);
- };
-
- this._createDom = function() {
- // dom
- this._dom = uki.createElement('div', this.defaultCss);
- this._initClassName();
- this._label = uki.createElement('div', this.defaultCss); // text-shadow:0 1px 0px rgba(255,255,255,0.8);
- this._dom.appendChild(this._label);
-
- this._dom.appendChild(uki.createElement('div', 'left:0;top:0;width:100%;height:100%;position:absolute;background:url(' + uki.theme.imageSrc('x') + ');'));
-
- this.textSelectable(this.textSelectable());
- this._initFocusable();
-
- uki.dom.bind(document, 'mouseup', uki.proxy(this._mouseup, this));
- this.bind('mousedown', this._mousedown);
- this.bind('mouseenter', this._mouseenter);
- this.bind('mouseleave', this._mouseleave);
- this.bind('keyup', this._keyup);
- this.bind('keydown', this._keydown);
- };
-
- this._mouseup = function(e) {
- if (!this._down) return;
- this._down = false;
- this._updateBg();
- };
-
- this._mousedown = function(e) {
- this._down = true;
- this._updateBg();
- };
-
- this._mouseenter = function(e) {
- this._over = true;
- this._updateBg();
- };
-
- this._mouseleave = function(e) {
- this._over = false;
- this._updateBg();
- };
-
- this._focus = function(e) {
- this['focus-background']().attachTo(this);
- Focusable._focus.call(this, e);
- };
-
- this._keydown = function(e) {
- if ((e.which == 32 || e.which == 13) && !this._down) this._mousedown();
- };
-
- this._keyup = function(e) {
- if ((e.which == 32 || e.which == 13) && this._down) {
- this._mouseup();
- this.trigger('click', {domEvent: e, source: this});
- }
- if (e.which == 27 && this._down) {
- this._mouseup();
- }
- };
-
- this._blur = function(e) {
- this['focus-background']().detach();
- Focusable._blur.call(this, e);
- };
-
- this._backgroundByName = function(name) {
- var bg = this[name + '-background']();
- if (this._background == bg) return;
- if (this._background) this._background.detach();
- bg.attachTo(this);
- this._background = bg;
- this._backgroundName = name;
- };
-
- this._bindToDom = function(name) {
- return uki.view.Focusable._bindToDom.call(this, name) || uki.view.Label.prototype._bindToDom.call(this, name);
- };
-});
-/**
- * Checkbox
- *
- * @author voloko
- * @name uki.view.Checkbox
- * @class
- * @extends uki.view.Button
- */
-uki.view.declare('uki.view.Checkbox', uki.view.Button, function(Base) {
-
- this._backgroundPrefix = 'checkbox-';
-
- /**
- * @function
- * @name uki.view.Button#"checked-normal-background"
- */
- /**
- * @function
- * @name uki.view.Button#"checked-hover-background"
- */
- /**
- * @function
- * @name uki.view.Button#"checked-disabled-background"
- */
- uki.each(['checked-normal', 'checked-hover', 'checked-disabled'], function(i, name) {
- var property = name + '-background';
- this[property] = function(bg) {
- if (bg) this['_' + property] = bg;
- return this['_' + property] = this['_' + property] ||
- uki.theme.background(this._backgroundPrefix + name, {height: this.rect().height, view: this});
- };
- }, this);
-
- this._setup = function() {
- Base._setup.call(this);
- this._focusable = false;
- };
-
- this._updateBg = function() {
- var name = this._disabled ? 'disabled' : this._over ? 'hover' : 'normal';
- if (this._checked) name = 'checked-' + name;
- this._backgroundByName(name);
- };
-
- /**
- * @function
- * @name uki.view.Button#value
- */
- /**
- * @function
- * @name uki.view.Button#checked
- */
- this.value = this.checked = uki.newProp('_checked', function(state) {
- this._checked = !!state;
- this._updateBg();
- });
-
- this._mouseup = function(e) {
- if (!this._down) return;
- this._down = false;
- if (!this._disabled) {
- this.checked(!this.checked())
- this.trigger('change', {checked: this._checked, source: this});
- }
- };
-
-});
-
-
-
-(function() {
- /**
- * Radio button
- *
- * @author voloko
- * @name uki.view.Radio
- * @class
- * @extends uki.view.Checkbox
- */
- var manager = uki.view.declare('uki.view.Radio', uki.view.Checkbox, function(base) {
-
- this._backgroundPrefix = 'radio-';
-
- /**
- * @function
- * @param {String} group
- * @name uki.view.Popup#hide
- */
- this.group = uki.newProp('_group', function(g) {
- manager.unregisterGroup(this);
- this._group = g;
- manager.registerGroup(this);
- if (this.checked()) manager.clearGroup(this);
- });
-
- this.value = this.checked = uki.newProp('_checked', function(state) {
- this._checked = !!state;
- if (state) manager.clearGroup(this);
- this._updateBg();
- });
-
- this._mouseup = function() {
- if (!this._down) return;
- this._down = false;
- if (!this._checked && !this._disabled) {
- this.checked(!this._checked);
- this.trigger('change', { checked: this._checked, source: this });
- }
- }
- });
-
-
- manager.groups = {};
-
- manager.registerGroup = function(radio) {
- var group = radio.group();
- if (!manager.groups[group]) {
- manager.groups[group] = [radio];
- } else {
- manager.groups[group].push(radio);
- }
- };
-
- manager.unregisterGroup = function(radio) {
- var group = radio.group();
- if (manager.groups[group]) manager.groups[group] = uki.grep(manager.groups[group], function(registered) {
- return registered != radio;
- });
- };
-
- manager.clearGroup = function(radio) {
- uki.each(manager.groups[radio.group()] || [], function(i, registered) {
- if (registered == radio) return;
- if (registered.checked()) {
- registered.checked(false);
- this.trigger('change', { checked: false, source: registered });
- }
- });
- };
-
-})();
-/**
-* Editable Text Field
-*
-* @author voloko
-* @name uki.view.TextField
-* @class
-* @extends uki.view.Base
-* @implements uki.view.Focusable
-*/
-uki.view.declare('uki.view.TextField', uki.view.Base, uki.view.Focusable, function(Base, Focusable) {
- var emptyInputHeight = {};
-
- function getEmptyInputHeight (css) {
- if (!emptyInputHeight[css]) {
- var node = uki.createElement('input', Base.defaultCss + "border:none;padding:0;border:0;margin:0;overflow:hidden;left:-999em;top:0;line-height:1;" + css);
- uki.dom.probe(
- node,
- function(probe) {
- emptyInputHeight[css] = probe.offsetHeight;
- }
- );
- }
- return emptyInputHeight[css];
- }
-
- function nativePlaceholder (node) {
- return typeof node.placeholder == 'string';
- }
-
- this._backgroundPrefix = '';
- this._tagName = 'input';
- this._type = 'text';
-
- this._setup = function() {
- Base._setup.apply(this, arguments);
- uki.extend(this, {
- _value: '',
- _multiline: false,
- _placeholder: ''
- });
- this.defaultCss += "margin:0;border:none;outline:none;padding:0;left:2px;top:0;z-index:100;-moz-resize:none;resize:none;background: url(" + uki.theme.imageSrc('x') + ");" + uki.theme.style('input');
- };
-
- this._updateBg = function() {
- this._input.style.color = this._disabled ? '#999' : '#000';
- };
-
- /**
- * @function
- * @name uki.view.TextField#name
- */
- uki.delegateProp(this, 'name', '_input');
-
- /**
- * @function
- * @name uki.view.TextField#value
- */
- this.value = function(value) {
- if (value === undefined) return this._input.value;
-
- this._input.value = value;
- this._updatePlaceholderVis();
- return this;
- };
-
- /**
- * Cross browser placeholder implementation
- * @function
- * @name uki.view.TextField#placeholder
- */
- this.placeholder = uki.newProp('_placeholder', function(v) {
- this._placeholder = v;
- if (!this._multiline && nativePlaceholder(this._input)) {
- this._input.placeholder = v;
- } else {
- if (!this._placeholderDom) {
- this._placeholderDom = uki.createElement('div', this.defaultCss + 'z-input:103;color:#999;cursor:text;-moz-user-select:none;', v);
- if (!this._multiline) this._placeholderDom.style.whiteSpace = 'nowrap';
- this._dom.appendChild(this._placeholderDom);
- this._updatePlaceholderVis();
- uki.each(['fontSize', 'fontFamily', 'fontWeight'], function(i, name) {
- this._placeholderDom.style[name] = this._input.style[name];
- }, this);
-
- uki.dom.bind(this._placeholderDom, 'mousedown', uki.proxy(function(e) {
- this.focus();
- e.preventDefault();
- }, this));
- } else {
- this._placeholderDom.innerHTML = v;
- }
- }
- });
-
- this._style = function(name, value) {
- if (uki.inArray(name, uki.browser.textStyles) != -1) {
- if (value === undefined) return this._input.style[name];
- this._input.style[name] = value;
- if (this._placeholderDom) this._placeholderDom.style[name] = value;
- }
- return Base._style.call(this, name, value);
- };
-
- /**
- * @function
- * @name uki.view.TextField#backgroundPrefix
- */
- uki.addProps(this, ['backgroundPrefix']);
-
- /**
- * @function
- * @name uki.view.TextField#defaultBackground
- */
- this.defaultBackground = function() {
- return uki.theme.background(this._backgroundPrefix + 'input');
- };
-
- this._createDom = function() {
- this._dom = uki.createElement('div', Base.defaultCss + ';cursor:text;overflow:visible;');
- this._initClassName();
- this._input = uki.createElement(this._tagName, this.defaultCss + (this._multiline ? '' : ';overflow:hidden;'));
-
- this._input.value = this._value;
- if (this._type) this._input.type = this._type;
- this._dom.appendChild(this._input);
-
- this._input.value = this.value();
-
- this._initFocusable(this._input);
- this.bind('mousedown', function(e) {
- if (e.target == this._input) return;
- this.focus();
- });
- };
-
- this._layoutDom = function(rect) {
- Base._layoutDom.apply(this, arguments);
- uki.dom.layout(this._input.style, {
- width: this._rect.width - 4
- });
- var margin;
- if (this._multiline) {
- this._input.style.height = this._rect.height - 4 + PX;
- this._input.style.top = 2 + PX;
- margin = '2px 0';
- } else {
- var o = (this._rect.height - getEmptyInputHeight( 'font-size:' + this.style('fontSize') + ';font-family:' + this.style('fontFamily') )) / 2;
- margin = CEIL(o) + 'px 0 ' + FLOOR(o) + 'px 0';
- this._input.style.padding = margin;
- }
- if (this._placeholderDom) this._placeholderDom.style.padding = margin;
- };
-
- this._updatePlaceholderVis = function() {
- if (this._placeholderDom) this._placeholderDom.style.display = this.value() ? 'none' : 'block';
- };
-
- this._focus = function(e) {
- this._focusBackground = this._focusBackground || uki.theme.background(this._backgroundPrefix + 'input-focus');
- this._focusBackground.attachTo(this);
- if (this._placeholderDom) this._placeholderDom.style.display = 'none';
- Focusable._focus.call(this, e);
- };
-
- this._blur = function(e) {
- this._focusBackground.detach();
- this._updatePlaceholderVis();
- Focusable._blur.call(this, e);
- };
-
- this._bindToDom = function(name) {
- return Focusable._bindToDom.call(this, name) || Base._bindToDom.call(this, name);
- };
-});
-
-/**
-* Multiline Editable Text Field (textarea)
-*
-* @author voloko
-* @name uki.view.MultilineTextField
-* @class
-* @extends uki.view.TextField
-*/
-uki.view.declare('uki.view.MultilineTextField', uki.view.TextField, function(Base) {
- this._tagName = 'textarea';
- this._type = '';
-
- this._setup = function() {
- Base._setup.call(this);
- this._multiline = true;
- };
-});
-
-/**
-* Password Field
-*
-* @author voloko
-* @name uki.view.PasswordTextField
-* @class
-* @extends uki.view.TextField
-*/
-uki.view.declare('uki.view.PasswordTextField', uki.view.TextField, function(Base) {
- this._setup = function() {
- Base._setup.call(this);
- this._type = 'password';
- };
-});
-
-uki.Collection.addAttrs(['placeholder']);
-
-(function() {
- var scrollWidth, widthIncludesScrollBar;
-
- function initScrollWidth () {
- if (!scrollWidth) {
- uki.dom.probe(
- uki.createElement(
- 'div',
- 'position:absolute;left:-99em;width:100px;height:100px;overflow:scroll;',
- '<div style="position:absolute;left:0;width:100%;"></div>'
- ),
- function( probe ) {
- scrollWidth = probe.offsetWidth - probe.clientWidth;
- widthIncludesScrollBar = probe.firstChild.offsetWidth == 100;
- }
- );
- }
- return scrollWidth;
- }
-
- /**
- * Scroll pane.
- * Pane with scrollbars with content overflowing the borders.
- * Works consistently across all supported browsers.
- *
- * @author voloko
- * @name uki.view.ScrollPane
- * @class
- * @extends uki.view.Container
- */
- uki.view.declare('uki.view.ScrollPane', uki.view.Container, function(Base) {
- uki.extend(this, {
- _scrollableY: true,
- _scrollableX: false,
- _scrollY: false,
- _scrollX: false,
- _sbY: false,
- _sbX: false
- });
-
- this._setup = function() {
- Base._setup.call(this);
-
- this._clientRect = this.rect().clone();
- this._rectForChild = this.rect().clone();
- };
-
- /**
- * @function
- * @name uki.view.ScrollPane#scrollableY
- */
- /**
- * @function
- * @name uki.view.ScrollPane#scrollableX
- */
- /**
- * @function
- * @name uki.view.ScrollPane#scrollX
- */
- /**
- * @function
- * @name uki.view.ScrollPane#scrollY
- */
- uki.addProps(this, ['scrollableY', 'scrollableX', 'scrollX', 'scrollY']);
- this.scrollV = this.scrollY;
- this.scrollH = this.scrollX;
-
- this.scrollableV = this.scrollableY;
- this.scrollableH = this.scrollableX;
-
- this.rectForChild = function() { return this._rectForChild; };
- this.clientRect = function() { return this._clientRect; };
-
- /**
- * @function
- * @param {Number} dx
- * @param {Number} dy
- * @name uki.view.ScrollPane#scroll
- */
- this.scroll = function(dx, dy) {
- if (dx) this.scrollLeft(this.scrollLeft() + dx);
- if (dy) this.scrollTop(this.scrollTop() + dy);
- };
-
- /**
- * @function
- * @name uki.view.ScrollPane#scrollTop
- */
- /**
- * @function
- * @name uki.view.ScrollPane#scrollLeft
- */
- uki.each(['scrollTop', 'scrollLeft'], function(i, name) {
- this[name] = function(v) {
- if (v == undefined) return this._dom[name];
- this._dom[name] = v;
- this.trigger('scroll', { source: this });
- return this;
- };
- }, this);
-
- /**
- * @function
- * @return {uki.geometry.Rect}
- * @name uki.view.ScrollPane#visibleRect
- */
- this.visibleRect = function() {
- var tmpRect = this._clientRect.clone();
- tmpRect.x = this.rect().x + this.scrollLeft();
- tmpRect.y = this.rect().y + this.scrollTop();
- return tmpRect;
- };
-
- this.rect = function(newRect) {
- if (newRect === undefined) return this._rect;
-
- newRect = Rect.create(newRect);
- var oldRect = this._rect;
- this._parentRect = newRect;
- if (!this._resizeSelf(newRect)) return this;
- this._updateClientRects();
- this._needsLayout = true;
- this.trigger('resize', {oldRect: oldRect, newRect: this._rect, source: this});
- return this;
- };
-
- this._createDom = function() {
- Base._createDom.call(this);
- if (ua.indexOf('Gecko/') > -1) this._dom.tabIndex = '-1';
- };
-
- this._recalcClientRects = function() {
- initScrollWidth();
-
- var cw = this.contentsWidth(),
- ch = this.contentsHeight(),
- sx = this._scrollableX ? cw > this._rect.width : false,
- sy = this._scrollableY ? ch > this._rect.height : false;
-
- this._sbX = sx || this._scrollX;
- this._sbY = sy || this._scrollY;
- this._clientRect = new Rect( this._rect.width + (sy ? -1 : 0) * scrollWidth,
- this._rect.height + (sx ? -1 : 0) * scrollWidth );
- this._rectForChild = new Rect( this._rect.width + ((sy && !widthIncludesScrollBar) ? -1 : 0) * scrollWidth,
- this._rect.height + ((sx && !widthIncludesScrollBar) ? -1 : 0) * scrollWidth );
- };
-
- this._updateClientRects = function() {
- var oldClientRect = this._clientRect;
- this._recalcClientRects();
-
- if (oldClientRect.width != this._clientRect.width || oldClientRect.height != this._clientRect.height) {
- this._resizeChildViews(oldClientRect);
- }
- };
-
- this._resizeChildViews = function(oldClientRect) {
- for (var i=0, childViews = this.childViews(); i < childViews.length; i++) {
- childViews[i].parentResized(oldClientRect, this._clientRect);
- };
- };
-
- this._layoutChildViews = function() {
- for (var i=0, childViews = this.childViews(); i < childViews.length; i++) {
- if (childViews[i]._needsLayout && childViews[i].visible()) {
- childViews[i].layout();
- }
- };
- };
-
- this._layoutDom = function(rect) {
- this._updateClientRects();
-
- if (this._layoutScrollX !== this._sbX) {
- this._dom.style.overflowX = this._sbX ? 'scroll' : 'hidden';
- this._layoutScrollX = this._sbX;
- }
-
- if (this._layoutScrollY !== this._sbY) {
- this._dom.style.overflowY = this._sbY ? 'scroll' : 'hidden';
- this._layoutScrollY = this._sbY;
- }
-
- Base._layoutDom.call(this, rect);
- };
-
- this.childResized = function() {
- this._needsLayout = true;
- uki.after(uki.proxy(this.layoutIfNeeded, this));
- };
-
- this._contentChanged = this.childResized;
-
- });
-
- uki.view.ScrollPane.initScrollWidth = initScrollWidth;
-})();
-
-uki.Collection.addAttrs(['scrollTop', 'scrollLeft']);
-uki.fn.scroll = function(dx, dy) {
- this.each(function() {
- this.scroll(dx, dy);
- });
-};
-
-uki.view.list = {};
-/**
- * List View
- * Progressevly renders list data. Support selection and drag&drop.
- * Renders rows with plain html.
- *
- * @author voloko
- * @name uki.view.List
- * @class
- * @extends uki.view.Base
- * @implements uki.view.Focusable
- */
-uki.view.declare('uki.view.List', uki.view.Base, uki.view.Focusable, function(Base, Focusable) {
-
- this._throttle = 42; // do not try to render more often than every 42ms
- this._visibleRectExt = 300; // extend visible rect by 300 px overflow
- this._defaultBackground = 'theme(list)';
-
- this._setup = function() {
- Base._setup.call(this);
- uki.extend(this, {
- _rowHeight: 30,
- _render: new uki.view.list.Render(),
- _data: [],
- _lastClickIndex: -1,
- _selectedIndexes: []
- });
- };
-
- /**
- * @function
- * @name uki.view.List#defaultBackground
- */
- this.defaultBackground = function() {
- return uki.theme.background('list', this._rowHeight);
- };
-
- /**
- * @type uki.view.list.Render
- * @function
- * @name uki.view.List#render
- */
- /**
- * @function
- * @name uki.view.List#packSize
- */
- /**
- * @function
- * @name uki.view.List#visibleRectExt
- */
- /**
- * @function
- * @name uki.view.List#throttle
- */
- /**
- * @function
- * @name uki.view.List#lastClickIndex
- */
- /**
- * @function
- * @name uki.view.List#multiselect
- */
- uki.addProps(this, ['render', 'packSize', 'visibleRectExt', 'throttle', 'lastClickIndex', 'multiselect']);
-
- /**
- * @function
- * @name uki.view.List#rowHeight
- */
- this.rowHeight = uki.newProp('_rowHeight', function(val) {
- this._rowHeight = val;
- this.minSize(new Size(this.minSize().width, this._rowHeight * this._data.length));
- if (this._background) this._background.detach();
- this._background = null;
- if (this.background()) this.background().attachTo(this);
- this._contentChanged();
- });
-
- /**
- * @example list.data(['row1', 'row2', ...])
- * @function
- * @name uki.view.List#data
- */
- this.data = function(d) {
- if (d === undefined) return this._data;
- this.clearSelection();
- this._data = d;
- this._packs[0].itemFrom = this._packs[0].itemTo = this._packs[1].itemFrom = this._packs[1].itemTo = 0;
-
- this.minSize(new Size(this.minSize().width, this._rowHeight * this._data.length));
- this.trigger('selection', {source: this});
- this._contentChanged();
- return this;
- };
-
- /**
- * Forces list content update
- * @function
- * @name uki.view.List#relayout
- */
- this.relayout = function() {
- this._packs[0].itemFrom = this._packs[0].itemTo = this._packs[1].itemFrom = this._packs[1].itemTo = 0;
- this.layout();
- };
-
- this.contentsSize = function() {
- return new Size(this.rect().width, this._rowHeight * this._data.length);
- };
-
- /**
- * used in search. should be fast
- * @function
- * @param {Number} position
- * @param {String} data
- * @name uki.view.List#addRow
- */
- this.addRow = function(position, data) {
- this._data.splice(position, 0, data);
- var item = this._itemAt(position);
- var container = doc.createElement('div');
-
- container.innerHTML = this._rowTemplate.render({
- height: this._rowHeight,
- text: this._render.render(this._data[position], this._rowRect(position), position)
- });
- if (item) {
- item.parentNode.insertBefore(container.firstChild, item);
- } else {
- this._dom.childNodes[0].appendChild(container.firstChild);
- }
-
- if (position <= this._packs[0].itemTo) {
- this._packs[0].itemTo++;
- this._packs[1].itemFrom++;
- this._packs[1].itemTo++;
- this._packs[1].dom.style.top = this._packs[1].itemFrom*this._rowHeight + 'px';
- } else {
- this._packs[1].itemTo++;
- }
-
- // offset selection
- var selectionPosition = uki.binarySearch(position, this.selectedIndexes());
- for (var i = selectionPosition; i < this._selectedIndexes.length; i++) {
- this._selectedIndexes[i]++;
- };
-
- // needed for scrollbar
- this.minSize(new Size(this.minSize().width, this._rowHeight * this._data.length));
- this._contentChanged();
-
- return this;
- };
-
- /**
- * @function
- * @param {Number} position
- * @name uki.view.List#removeRow
- */
- this.removeRow = function(position) {
- this._data.splice(position, 1);
- this.data(this._data);
- return this;
- };
-
- /**
- * Forces one particular row to be redrawn
- * @function
- * @param {Number} position
- * @name uki.view.List#removeRow
- */
- this.redrawRow = function(position) {
- var item = this._itemAt(position);
- if (item) item.innerHTML = this._render.render(this._data[position], this._rowRect(position), position);
- return this;
- };
-
- /**
- * Read/write current selected index for selectable lists
- * @function
- * @param {Number} position
- * @name uki.view.List#selectedIndex
- */
- this.selectedIndex = function(position) {
- if (position === undefined) return this._selectedIndexes.length ? this._selectedIndexes[0] : -1;
- this.selectedIndexes([position]);
- this._scrollToPosition(position);
- return this;
- };
-
- /**
- * Read/write all selected indexes for multiselectable lists
- * @function
- * @param {Array.<Number>} position
- * @name uki.view.List#selectedIndex
- */
- this.selectedIndexes = function(indexes) {
- if (indexes === undefined) return this._selectedIndexes;
- this.clearSelection(true);
- this._selectedIndexes = indexes;
- for (var i=0; i < this._selectedIndexes.length; i++) {
- this._setSelected(this._selectedIndexes[i], true);
- };
- this.trigger('selection', {source: this});
- return this;
- };
-
- /**
- * Read contents of selected row
- * @function
- * @name uki.view.List#selectedRow
- */
- this.selectedRow = function() {
- return this._data[this.selectedIndex()];
- };
-
- /**
- * Read contents of all selected rows
- * @function
- * @name uki.view.List#selectedRows
- */
- this.selectedRows = function() {
- return uki.map(this.selectedIndexes(), function(index) {
- return this._data[index];
- }, this)
- };
-
- /**
- * @function
- * @name uki.view.List#clearSelection
- */
- this.clearSelection = function(skipClickIndex) {
- for (var i=0; i < this._selectedIndexes.length; i++) {
- this._setSelected(this._selectedIndexes[i], false);
- };
- this._selectedIndexes = [];
- if (!skipClickIndex) this._lastClickIndex = -1;
- };
-
- /**
- * @function
- * @param {Number} index
- * @name uki.view.List#isSelected
- */
- this.isSelected = function(index) {
- var found = uki.binarySearch(index, this._selectedIndexes);
- return this._selectedIndexes[found] == index;
- };
-
- this.layout = function() {
- this._layoutDom(this._rect);
- this._needsLayout = false;
- // send visibleRect with layout
- this.trigger('layout', { rect: this._rect, source: this, visibleRect: this._visibleRect });
- this._firstLayout = false;
- };
-
- function range (from, to) {
- var result = new Array(to - from);
- for (var idx = 0; from <= to; from++, idx++) {
- result[idx] = from;
- };
- return result;
- }
-
- function removeRange (array, from, to) {
- var p = uki.binarySearch(from, array),
- initialP = p;
- while (array[p] <= to) p++;
- if (p > initialP) array.splice(initialP, p - initialP);
- }
-
- this._rowRect = function(p) {
- return new Rect(0, p*this._rowHeight, this.rect().width, this._rowHeight);
- };
-
- this._toggleSelection = function(p) {
- var indexes = [].concat(this._selectedIndexes);
- var addTo = uki.binarySearch(p, indexes);
- if (indexes[addTo] == p) {
- indexes.splice(addTo, 1);
- } else {
- indexes.splice(addTo, 0, p);
- }
- this.selectedIndexes(indexes);
- };
-
- var updatingScroll = false;
- this._scrollableParentScroll = function() {
- if (updatingScroll) return;
- if (this._throttle) {
- if (this._throttleStarted) return;
- this._throttleStarted = true;
- setTimeout(uki.proxy(function() {
- this._throttleStarted = false;
- this.layout();
- }, this), this._throttle);
- } else {
- this.layout();
- }
- };
-
- this._contentChanged = function() {
- this._needsLayout = true;
- uki.after(uki.proxy(this._relayoutParent, this));
- };
-
- this._relayoutParent = function() {
- this.parent().childResized(this);
- if (!this._scrollableParent) return;
- var c = this;
- while ( c && c != this._scrollableParent) {
- c._needsLayout = true;
- c = c.parent();
- }
- c.layout();
- };
-
-
- this.keyPressEvent = function() {
- var useKeyPress = root.opera || (/mozilla/i.test( ua ) && !(/(compatible|webkit)/i).test( ua ));
- return useKeyPress ? 'keypress' : 'keydown';
- };
-
- this._bindSelectionEvents = function() {
- this.bind('mousedown', this._mousedown);
- this.bind('mouseup', this._mouseup);
- this.bind(this.keyPressEvent(), this._keypress);
- };
-
- this._mouseup = function(e) {
- if (!this._multiselect) return;
-
- var o = uki.dom.offset(this._dom),
- y = e.pageY - o.y,
- p = y / this._rowHeight << 0;
-
- if (this._selectionInProcess && this._lastClickIndex == p && this.isSelected(p)) this.selectedIndexes([p]);
- this._selectionInProcess = false;
- };
-
- this._mousedown = function(e) {
- var o = uki.dom.offset(this._dom),
- y = e.pageY - o.y,
- p = y / this._rowHeight << 0,
- indexes = this._selectedIndexes;
-
- if (this._multiselect) {
- this._selectionInProcess = false;
- if (e.shiftKey && indexes.length > 0) {
- if (this.isSelected(p)) {
- indexes = [].concat(indexes);
- removeRange(indexes, Math.min(p+1, this._lastClickIndex), Math.max(p-1, this._lastClickIndex));
- this.selectedIndexes(indexes);
- } else {
- this.selectedIndexes(range(
- Math.min(p, indexes[0]),
- Math.max(p, indexes[indexes.length - 1])
- ));
- }
- } else if (e.metaKey) {
- this._toggleSelection(p);
- } else {
- if (!this.isSelected(p)) {
- this.selectedIndexes([p]);
- } else {
- this._selectionInProcess = true;
- }
- }
- } else {
- this.selectedIndexes([p]);
- }
- this._lastClickIndex = p;
- };
-
- this._keypress = function(e) {
- var indexes = this._selectedIndexes,
- nextIndex = -1;
- if (e.which == 38 || e.keyCode == 38) { // UP
- nextIndex = Math.max(0, this._lastClickIndex - 1);
- e.preventDefault();
- } else if (e.which == 40 || e.keyCode == 40) { // DOWN
- nextIndex = Math.min(this._data.length-1, this._lastClickIndex + 1);
- e.preventDefault();
- } else if (this._multiselect && (e.which == 97 || e.which == 65) && e.metaKey) {
- e.preventDefault();
- this.selectedIndexes(range(0, this._data.length -1));
- }
- if (nextIndex > -1 && nextIndex != this._lastClickIndex) {
- if (e.shiftKey && this._multiselect) {
- if (this.isSelected(nextIndex)) {
- this._toggleSelection(this._lastClickIndex);
- } else {
- this._toggleSelection(nextIndex);
- }
- this._scrollToPosition(nextIndex);
- } else {
- this.selectedIndex(nextIndex);
- }
- this._lastClickIndex = nextIndex;
- }
- };
-
- this._createDom = function() {
- this._dom = uki.createElement('div', this.defaultCss + 'overflow:hidden');
- this._initClassName();
-
- var packDom = uki.createElement('div', 'position:absolute;left:0;top:0px;width:100%;overflow:hidden');
- this._packs = [
- {
- dom: packDom,
- itemTo: 0,
- itemFrom: 0
- },
- {
- dom: packDom.cloneNode(false),
- itemTo: 0,
- itemFrom: 0
- }
- ];
- this._dom.appendChild(this._packs[0].dom);
- this._dom.appendChild(this._packs[1].dom);
-
- this._initFocusable();
- this._bindSelectionEvents();
- };
-
- this._setSelected = function(position, state) {
- var item = this._itemAt(position);
- if (item) this._render.setSelected(item, this._data[position], state, this.hasFocus());
- };
-
- this._scrollToPosition = function(position) {
- if (!this._visibleRect) return;
- var maxY, minY;
- maxY = (position+1)*this._rowHeight;
- minY = position*this._rowHeight;
- updatingScroll = true;
- if (maxY >= this._visibleRect.maxY()) {
- this._scrollableParent.scroll(0, maxY - this._visibleRect.maxY());
- } else if (minY < this._visibleRect.y) {
- this._scrollableParent.scroll(0, minY - this._visibleRect.y);
- }
- updatingScroll = false;
- this.layout();
- };
-
- this._itemAt = function(position) {
- if (position < this._packs[1].itemTo && position >= this._packs[1].itemFrom) {
- return this._packs[1].dom.childNodes[position - this._packs[1].itemFrom];
- } else if (position < this._packs[0].itemTo && position >= this._packs[0].itemFrom) {
- return this._packs[0].dom.childNodes[position - this._packs[0].itemFrom];
- }
- return null;
- };
-
- this._rowTemplate = new uki.theme.Template('<div style="width:100%;height:${height}px;overflow:hidden;">${text}</div>')
-
- this._renderPack = function(pack, itemFrom, itemTo) {
- var html = [], position;
- for (i=itemFrom; i < itemTo; i++) {
- html[html.length] = this._rowTemplate.render({
- height: this._rowHeight,
- text: this._render.render(this._data[i], this._rowRect(i), i)
- });
- };
- pack.dom.innerHTML = html.join('');
- pack.itemFrom = itemFrom;
- pack.itemTo = itemTo;
- pack.dom.style.top = itemFrom*this._rowHeight + 'px';
- this._restorePackSelection(pack, itemFrom, itemTo);
- };
-
- // xxxxx | xxxxx | xxxxxxxx | xxx
- // yyyyy | yyyyy | yyyy | yyyyyyy
- this._restorePackSelection = function(pack) {
- var indexes = this._selectedIndexes;
-
- if (
- (indexes[0] <= pack.itemFrom && indexes[indexes.length - 1] >= pack.itemFrom) || // left index
- (indexes[0] <= pack.itemTo && indexes[indexes.length - 1] >= pack.itemTo) || // right index
- (indexes[0] >= pack.itemFrom && indexes[indexes.length - 1] <= pack.itemTo) // within
- ) {
- var currentSelection = uki.binarySearch(pack.itemFrom, indexes);
- currentSelection = Math.max(currentSelection, 0);
- while(indexes[currentSelection] !== null && indexes[currentSelection] < pack.itemTo) {
- var position = indexes[currentSelection] - pack.itemFrom;
- this._render.setSelected(pack.dom.childNodes[position], this._data[position], true, this.hasFocus());
- currentSelection++;
- }
- }
- };
-
- this._swapPacks = function() {
- var tmp = this._packs[0];
- this._packs[0] = this._packs[1];
- this._packs[1] = tmp;
- };
-
- this._layoutDom = function(rect) {
- if (!this._scrollableParent) {
- this._scrollableParent = uki.view.scrollableParent(this);
- this._scrollableParent.bind('scroll', uki.proxy(this._scrollableParentScroll, this));
- }
-
- var totalHeight = this._rowHeight * this._data.length,
- scrollableParent = this._scrollableParent;
-
- this._visibleRect = uki.view.visibleRect(this, scrollableParent);
- if (this._focusTarget) this._focusTarget.style.top = this._visibleRect.y + 'px';
- var prefferedPackSize = CEIL((this._visibleRect.height + this._visibleRectExt*2) / this._rowHeight),
-
- minVisibleY = MAX(0, this._visibleRect.y - this._visibleRectExt),
- maxVisibleY = MIN(totalHeight, this._visibleRect.maxY() + this._visibleRectExt),
- minRenderedY = this._packs[0].itemFrom * this._rowHeight,
- maxRenderedY = this._packs[1].itemTo * this._rowHeight,
-
- itemFrom, itemTo, startAt, updated = true;
-
- Base._layoutDom.call(this, rect);
- if (
- maxVisibleY <= minRenderedY || minVisibleY >= maxRenderedY || // both packs below/above visible area
- (maxVisibleY > maxRenderedY && this._packs[1].itemFrom * this._rowHeight > this._visibleRect.y && this._packs[1].itemTo > this._packs[1].itemFrom) || // need to render below, and pack 2 is not enough to cover
- (minVisibleY < minRenderedY && this._packs[0].itemTo * this._rowHeight < this._visibleRect.maxY()) // need to render above, and pack 1 is not enough to cover the area
- // || prefferedPackSize is not enough to cover the area above/below, can this actually happen?
- ) {
- // this happens a) on first render b) on scroll jumps c) on container resize
- // render both packs, move them to be at the center of visible area
- // startAt = minVisibleY + (maxVisibleY - minVisibleY - prefferedPackSize*this._rowHeight*2) / 2;
- startAt = minVisibleY - this._visibleRectExt / 2;
- itemFrom = MAX(0, Math.round(startAt / this._rowHeight));
- itemTo = MIN(this._data.length, itemFrom + prefferedPackSize);
-
- this._renderPack(this._packs[0], itemFrom, itemTo);
- this._renderPack(this._packs[1], itemTo, itemTo);
- // this._renderPack(this._packs[1], itemTo, MIN(this._data.length, itemTo + prefferedPackSize));
- } else if (maxVisibleY > maxRenderedY && this._packs[1].itemTo > this._packs[1].itemFrom) { // we need to render below current area
- // this happens on normal scroll down
- // re-render bottom, swap
- itemFrom = this._packs[1].itemTo;
- itemTo = MIN(this._data.length, this._packs[1].itemTo + prefferedPackSize);
-
- this._renderPack(this._packs[0], itemFrom, itemTo);
- this._swapPacks();
- } else if (maxVisibleY > maxRenderedY) { // we need to render below current area
- itemFrom = this._packs[0].itemTo;
- itemTo = MIN(this._data.length, this._packs[1].itemTo + prefferedPackSize);
-
- this._renderPack(this._packs[1], itemFrom, itemTo);
- } else if (minVisibleY < minRenderedY) { // we need to render above current area
- // this happens on normal scroll up
- // re-render top, swap
- itemFrom = MAX(this._packs[0].itemFrom - prefferedPackSize, 0);
- itemTo = this._packs[0].itemFrom;
-
- this._renderPack(this._packs[1], itemFrom, itemTo);
- this._swapPacks();
- } else {
- updated = false;
- }
- if (updated && /MSIE 6|7/.test(ua)) this.dom().className += '';
- };
-
- this._bindToDom = function(name) {
- return Focusable._bindToDom.call(this, name) || Base._bindToDom.call(this, name);
- };
-
- this._focus = function(e) {
- Focusable._focus.call(this, e);
- if (this._selectedIndexes.length == 0 && this._data.length > 0) {
- this.selectedIndexes([0]);
- } else {
- this.selectedIndexes(this.selectedIndexes());
- }
- };
-
- this._blur = function(e) {
- Focusable._blur.call(this, e);
- this.selectedIndexes(this.selectedIndexes());
- };
-
-});
-
-/** @function
-@name uki.Collection#data */
-/** @function
-@name uki.Collection#selectedIndex */
-/** @function
-@name uki.Collection#selectedIndexes */
-/** @function
-@name uki.Collection#selectedRow */
-/** @function
-@name uki.Collection#selectedRows */
-/** @function
-@name uki.Collection#lastClickIndex */
-uki.Collection.addAttrs(['data', 'selectedIndex', 'selectedIndexes', 'selectedRow', 'selectedRows', 'lastClickIndex']);
-
-/**
- * Scrollable List View
- * Puts a list into a scroll pane
- *
- * @author voloko
- * @name uki.view.ScrollableList
- * @class
- * @extends uki.view.ScrollPane
- */
-uki.view.declare('uki.view.ScrollableList', uki.view.ScrollPane, function(Base) {
-
- this._createDom = function() {
- Base._createDom.call(this);
- this._list = uki({ view: 'List', rect: this.rect().clone().normalize(), anchors: 'left top right bottom' })[0];
- this.appendChild(this._list);
- };
-
- uki.each('data rowHeight render packSize visibleRectExt throttle focusable selectedIndex selectedIndexes selectedRow selectedRows multiselect draggable textSelectable'.split(' '),
- function(i, name) {
- uki.delegateProp(this, name, '_list');
- }, this);
-
-});
-
-
-/**
- * Flyweight view rendering
- * Used in lists, tables, grids
- * @class
- */
-uki.view.list.Render = uki.newClass({
- init: function() {},
-
- /**
- * Renders data to an html string
- * @param Object data Data to render
- * @return String html
- */
- render: function(data, rect, i) {
- return '<div style="line-height: ' + rect.height + 'px; font-size: 12px; padding: 0 4px;">' + data + '</div>';
- },
-
- setSelected: function(container, data, state, focus) {
- container.style.backgroundColor = state && focus ? '#3875D7' : state ? '#CCC' : '';
- container.style.color = state && focus ? '#FFF' : '#000';
- }
-});
-
-
-
-
-uki.view.table = {};
-
-/**
-* Table
-*
-* Uses uki.view.List to render data. Wraps it into scroll pane and ads a header
-* @author voloko
-* @name uki.view.Table
-* @class
-* @extends uki.view.Container
-*
-* @lends uki.view.List#rowHeight as rowHeight
-* @lends uki.view.List#data as data
-* @lends uki.view.List#packSize as packSize
-* @lends uki.view.List#visibleRectExt as visibleRectExt
-* @lends uki.view.List#render as render
-* @lends uki.view.List#selectedIndex as selectedIndex
-* @lends uki.view.List#selectedIndexes as selectedIndexes
-* @lends uki.view.List#selectedRow as selectedRow
-* @lends uki.view.List#selectedRows as selectedRows
-* @lends uki.view.List#lastClickIndex as lastClickIndex
-* @lends uki.view.List#textSelectable as textSelectable
-* @lends uki.view.List#multiselect as multiselect
-* @lends uki.view.List#redrawRow as redrawRow
-* @lends uki.view.List#addRow as addRow
-* @lends uki.view.List#removeRow as removeRow
-* @lends uki.view.List#focusable as lastClickIndex
-* @lends uki.view.List#focus as focus
-* @lends uki.view.List#blur as blur
-* @lends uki.view.List#hasFocus as hasFocus
-*
-*/
-uki.view.declare('uki.view.Table', uki.view.Container, function(Base) {
- var propertiesToDelegate = 'rowHeight data packSize visibleRectExt render selectedIndex selectedIndexes selectedRows selectedRow focus blur hasFocus lastClickIndex focusable textSelectable multiselect'.split(' ');
-
- this._rowHeight = 17;
- this._headerHeight = 17;
- this._listImpl = 'uki.view.List';
-
- uki.each(propertiesToDelegate, function(i, name) { uki.delegateProp(this, name, '_list'); }, this);
-
- this._setup = function() {
- Base._setup.call(this);
- this._columns = [];
- this.defaultCss += 'overflow:hidden;';
- };
-
- this._style = function(name, value) {
- this._header.style(name, value);
- return Base._style.call(this, name, value);
- };
-
- /**
- * @function
- * @return {uki.view.List}
- * @name uki.view.Table#list
- */
- this.list = function() {
- return this._list;
- };
-
- /**
- * @function
- * @return {uki.view.table.Header}
- * @name uki.view.Table#header
- */
- this.header = function() {
- return this._header;
- };
-
- /**
- * @function
- * @param {Array.<uki.view.table.Column>} c
- * @name uki.view.Table#columns
- */
- this.columns = uki.newProp('_columns', function(c) {
- for (var i = 0; i < this._columns.length; i++) {
- this._columns[i].unbind();
- }
- this._columns = uki.build(c);
- this._totalWidth = 0;
- for (i = 0; i < this._columns.length; i++) {
- this._columns[i].position(i);
- this._columns[i].bind('beforeResize', uki.proxy(function() {
- this._updateTotalWidth();
- this._scrollPane.layout();
- }, this));
- };
- this._updateTotalWidth();
- this._header.columns(this._columns);
- });
-
- /**
- * @function
- * @param {Number} row
- * @param {Number} col
- * @name uki.view.Table#redrawCell
- */
- this.redrawCell = function(row, col) {
- var item = this._list._itemAt(row);
- if (item) {
- var cell, container = doc.createElement('div');
- container.innerHTML = this.columns()[col].render(
- this.data()[row],
- new Rect(0, row*this.rowHeight(), this.list().width(), this.rowHeight()),
- row
- );
- cell = container.firstChild;
- item.replaceChild(cell, item.childNodes[col]);
- }
- return this;
- };
-
- uki.each(['redrawRow', 'addRow', 'removeRow'], function(i, name) {
- this[name] = function() {
- this.list()[name].apply(this.list(), arguments);
- return this;
- };
- }, this);
-
- /**
- * @function
- * @param {Number} col
- * @name uki.view.Table#redrawColumn
- */
- this.redrawColumn = function(col) {
- var from = this._list._packs[0].itemFrom,
- to = this._list._packs[1].itemTo;
- for (var i=from; i < to; i++) {
- this.redrawCell(i, col);
- };
- return this;
- };
-
- this._updateTotalWidth = function() {
- this._totalWidth = 0;
- for (var i=0; i < this._columns.length; i++) {
- this._columns[i].position(i);
- this._totalWidth += this._columns[i].width();
- };
- this._list.minSize(new Size(this._totalWidth, this._list.minSize().height));
- // this._list.rect(new Rect(this._totalWidth, this._list.height()));
- this._header.minSize(new Size(this._totalWidth, 0));
- };
-
- this._createDom = function() {
- Base._createDom.call(this);
- this._initClassName();
- var scrollPaneRect = new Rect(0, this._headerHeight, this.rect().width, this.rect().height - this._headerHeight),
- listRect = scrollPaneRect.clone().normalize(),
- headerRect = new Rect(0, 0, this.rect().width, this._headerHeight),
- listML = { view: this._listImpl, rect: listRect, anchors: 'left top bottom right', render: new uki.view.table.Render(this), className: 'table-list' },
- paneML = { view: 'ScrollPane', rect: scrollPaneRect, anchors: 'left top right bottom', scrollableH: true, childViews: [listML], className: 'table-scroll-pane'},
- headerML = { view: 'table.Header', rect: headerRect, anchors: 'top left right', className: 'table-header' };
-
- uki.each(propertiesToDelegate, function(i, name) {
- if (this['_' + name] !== undefined) listML[name] = this['_' + name];
- }, this);
- this._scrollPane = uki.build(paneML)[0];
- this._list = this._scrollPane.childViews()[0];
- this._header = uki.build(headerML)[0];
- this._scrollPane.resizeToContents();
- this.appendChild(this._header);
- this.appendChild(this._scrollPane);
-
- this._scrollPane.bind('scroll', uki.proxy(function() {
- // this is kinda wrong but faster than calling rect() + layout()
- this._header.dom().style.left = -this._scrollPane.scrollLeft() + 'px';
- }, this));
-
- };
-});
-
-uki.Collection.addAttrs(['columns']);
-
-
-/**
- * @class
- * @extends uki.view.list.Render
- */
-uki.view.table.Render = uki.newClass(uki.view.list.Render, new function() {
- this.init = function(table) {
- this._table = table;
- };
-
- this.render = function(row, rect, i) {
- var table = this._table,
- columns = table.columns();
- return uki.map(columns, function(val, j) {
- return columns[j].render(row, rect, i);
- }).join('');
- };
-});
-/**
- * @class
- * @extends uki.view.Observable
- */
-uki.view.table.Column = uki.newClass(uki.view.Observable, new function() {
- this._width = 100;
- this._offset = 0;
- this._position = 0;
- this._minWidth = 0;
- this._maxWidth = 0;
- this._css = 'float:left;white-space:nowrap;text-overflow:ellipsis;';
- this._inset = new Inset(3, 5);
- this._templatePrefix = 'table-';
-
- this.init = function() {};
-
- uki.addProps(this, ['position', 'css', 'formatter', 'label', 'resizable', 'maxWidth', 'minWidth', 'maxWidth', 'key', 'sort']);
-
- this.template = function() {
- // cache
- return this._template || (this._template = uki.theme.template(this._templatePrefix + 'cell'));
- };
-
- this.headerTemplate = function() {
- var suffix = '';
- if (this.sort() == 'ASC') suffix = '-asc';
- if (this.sort() == 'DESC') suffix = '-desc';
- return uki.theme.template(this._templatePrefix + 'header-cell' + suffix);
- };
-
- this.sortData = function(data) {
- var _this = this;
- return data.sort(function(a, b) {
- return _this._key ?
- _this.compare(uki.attr(a, _this._key), uki.attr(b, _this._key)) :
- _this.compare(a[_this._position], b[_this._position]);
- });
-
- };
-
- this.compare = function(a, b) {
- return (a >= b ? 1 : a == b ? 0 : -1) * (this._sort == 'DESC' ? -1 : 1);
- };
-
- /**
- * @fires event:beforeResize
- * @fires event:resize
- */
- this.width = uki.newProp('_width', function(w) {
- var e = {
- oldWidth: this._width,
- source: this
- };
- this._width = this._normailizeWidth(w);
- e.newWidth = this._width;
- this.trigger('beforeResize', e);
- if (this._stylesheet && e.newWidth != e.oldWidth) {
- var rules = this._stylesheet.styleSheet ? this._stylesheet.styleSheet.rules : this._stylesheet.sheet.cssRules;
- rules[0].style.width = this._clientWidth() + PX;
- }
- this.trigger('resize', e);
- });
-
- this._bindToDom = uki.F;
-
- this._normailizeWidth = function(w) {
- if (this._maxWidth) w = MIN(this._maxWidth, w);
- if (this._minWidth) w = MAX(this._minWidth, w);
- return w;
- };
-
- this.inset = uki.newProp('_inset', function(i) {
- this._inset = Inset.create(i);
- });
-
- this.render = function(row, rect, i) {
- this._prerenderedTemplate || this._prerenderTemplate(rect);
- var value = this._key ? uki.attr(row, this._key) : row[this._position];
- this._prerenderedTemplate[1] = this._formatter ? this._formatter(value, row, i) : value;
- return this._prerenderedTemplate.join('');
- };
-
- this.appendResizer = function(dom, height) {
- var resizer = uki.theme.dom('resizer', height);
- dom.appendChild(resizer);
- return resizer;
- };
-
- this.renderHeader = function(height) {
- this._className || this._initStylesheet();
- var x = this.headerTemplate().render({
- data: '<div style="overflow:hidden;text-overflow:ellipsis;*width:100%;height:100%;padding-top:' + this._inset.top + 'px">' + this.label() + '</div>',
- style: '*overflow-y:hidden;' + this._cellStyle(true, height),
- className: this._className
- });
- return x;
- };
-
- this._prerenderTemplate = function(rect) {
- this._className || this._initStylesheet();
- this._prerenderedTemplate = this.template().render({
- data: '\u0001\u0001',
- style: 'overflow:hidden;' + this._cellStyle(false, rect.height),
- className: this._className
- }).split('\u0001');
- };
-
- this._cellPadding = function(skipVertical) {
- var inset = this._inset;
- return ['padding:', (skipVertical ? '0' : inset.top), 'px ', inset.right, 'px ', (skipVertical ? '0' : inset.bottom), 'px ', inset.left, 'px;'].join('');
- };
-
- this._cellHeight = function(skipVertical, height) {
- return 'height:' + (height - (uki.dom.offset.boxModel && !skipVertical ? this._inset.height() : 0)) + 'px;';
- };
-
- this._cellStyle = function(skipVertical, height) {
- return this._css + this._cellPadding(skipVertical) + ';' + this._cellHeight(skipVertical, height);
- };
-
- this._clientWidth = function() {
- return this._width - (uki.dom.offset.boxModel ? this._inset.width() + 1 : 0);
- };
-
- this._initStylesheet = function() {
- if (!this._className) {
- uki.dom.offset.initializeBoxModel();
- this._className = 'uki-table-column-' + (uki.guid++);
- var css = '.' + this._className + ' {width:' + this._clientWidth() + 'px;}';
- this._stylesheet = uki.dom.createStylesheet(css);
- }
- };
-});
-
-uki.view.table.NumberColumn = uki.newClass(uki.view.table.Column, new function() {
- var Base = uki.view.table.Column.prototype;
-
- this._css = Base._css + 'text-align:right;';
-
- this.compare = function(a, b) {
- a*=1;
- b*=1;
- return (a >= b ? 1 : a == b ? 0 : -1) * (this._sort == 'DESC' ? -1 : 1);
- };
-});
-
-uki.view.table.CustomColumn = uki.view.table.Column;
-
-
-/**
- * @class
- * @extends uki.view.Label
- */
-uki.view.declare('uki.view.table.Header', uki.view.Label, function(Base) {
- this._defaultBackground = 'theme(table-header)';
-
- this._setup = function() {
- Base._setup.call(this);
- this._multiline = true;
- this._resizers = [];
- };
-
- this.columns = uki.newProp('_columns', function(v) {
- this._columns = v;
- this.html(this._createColumns());
- this._createResizers();
- });
-
- this._createDom = function() {
- Base._createDom.call(this);
- this.bind('click', this._click);
- };
-
- this._click = function(e) {
- if (this._dragging) return;
-
- var target = e.target;
- if (target == this.dom() || target == this._label) return;
- while (target.parentNode != this._label) target = target.parentNode;
- var i = uki.inArray(target, this._label.childNodes);
- if (i > -1) {
- this.trigger('columnClick', { source: this, columnIndex: i, column: this._columns[i] });
- }
- };
-
- this.redrawColumn = function(col) {
- if (this._resizers[col]) uki.dom.unbind(this._resizers[col]);
- var container = doc.createElement('div');
- container.innerHTML = this._columns[col].renderHeader(this.rect().height);
- this._label.replaceChild(container.firstChild, this._label.childNodes[col]);
- if (this._columns[col].resizable()) this._createResizers(col);
- };
-
- this._createColumns = function() {
- var html = [];
- for(var i = 0, offset = 0, columns = this._columns, l = columns.length; i < l; i++) {
- html[html.length] = columns[i].renderHeader(this.rect().height);
- }
- return html.join('');
- };
-
- this._createResizer = function(i) {
- var column = this._columns[i];
- if (column.resizable()) {
- var resizer = column.appendResizer(this._label.childNodes[i], this.rect().height);
- this._bindResizerDrag(resizer, i);
- this._resizers[i] = resizer;
- }
- };
-
- this._createResizers = function() {
- uki.each(this._columns, this._createResizer, this);
- };
-
- this._bindResizerDrag = function(resizer, columnIndex) {
- var _this = this;
-
- uki.dom.bind(resizer, 'draggesture', function(e) {
- _this._dragging = true;
- var headerOffset = uki.dom.offset(_this.dom()),
- offsetWithinHeader = e.pageX - headerOffset.x,
- columnOffset = 0, i, column = _this._columns[columnIndex];
- for (i=0; i < columnIndex; i++) {
- columnOffset += _this._columns[i].width();
- };
- column.width(offsetWithinHeader - columnOffset);
- });
-
- uki.dom.bind(resizer, 'draggestureend', function() {
- setTimeout(function() {
- _this._dragging = false;
- }, 1);
- });
- };
-});
-
-/**
-* Horizontal Slider.
-*
-* @author voloko
-* @name uki.view.Slider
-* @class
-* @extends uki.view.Base
-* @implements uki.view.Focusable
-*/
-uki.view.declare('uki.view.Slider', uki.view.Container, uki.view.Focusable, function(Base, Focusable) {
-
- this._handleSize = new Size(10,18);
-
- this._setup = function() {
- Base._setup.call(this);
- uki.extend(this, {
- _min: 0,
- _max: 1,
- _value: 0,
- _values: null,
- _keyStep: 0.01
- });
- };
-
- /**
- * @function
- * @name uki.view.Slider#min
- */
- /**
- * @function
- * @name uki.view.Slider#max
- */
- /**
- * @function
- * @name uki.view.Slider#values
- */
- /**
- * @function
- * @name uki.view.Slider#keyStep
- */
- uki.addProps(this, ['min', 'max', 'values', 'keyStep']);
-
- this.values = uki.newProp('_values', function(val) {
- this._values = val;
- this._min = val[0];
- this._max = val[val.length - 1];
- });
-
- /**
- * @function
- * @fires event:change
- * @name uki.view.Slider#value
- */
- this.value = uki.newProp('_value', function(val) {
- this._value = MAX(this._min, MIN(this._max, val));
- this._position = this._val2pos(this._value);
- this._moveHandle();
- });
-
- this._pos2val = function(pos, cacheIndex) {
- if (this._values) {
- var index = Math.round(1.0 * pos / (this._rect.width - this._handleSize.width) * (this._values.length - 1));
- if (cacheIndex) this._cachedIndex = index;
- return this._values[index];
- }
- return pos / (this._rect.width - this._handleSize.width) * (this._max - this._min) + this._min;
- };
-
- this._val2pos = function(val) {
- if (this._values) {
- var index = this._cachedIndex !== undefined ? this._cachedIndex : uki.binarySearch(val, this._values);
- return index / (this._values.length - 1) * (this._rect.width - this._handleSize.width);
- }
- return (val - this._min) / (this._max - this._min) * (this._rect.width - this._handleSize.width);
- };
-
- this._createDom = function() {
- this._dom = uki.createElement('div', this.defaultCss + 'height:18px;-moz-user-select:none;-webkit-user-select:none;overflow:visible;');
- this._initClassName();
- this._handle = uki({
- view: 'SliderHandle',
- rect: new Rect(0, (this._rect.height-this._handleSize.height)/2, this._handleSize.width, this._handleSize.height),
- anchors: 'left top'
- })[0];
- this.appendChild(this._handle);
-
- uki.theme.background('slider-bar').attachTo(this);
- uki.each(['draggesturestart', 'draggesture', 'draggestureend'], function(i, name) {
- this._handle.bind(name, uki.proxy(this['_' + name], this));
- }, this);
-
- this.bind(uki.view.List.prototype.keyPressEvent(), this._keypress);
- this.bind('click', this._click);
-
- this._initFocusable();
- };
-
- this._focus = function(e) {
- this._handle._focus();
- Focusable._focus.call(this, e);
- };
-
- this._blur = function(e) {
- this._handle._blur();
- Focusable._blur.call(this, e);
- };
-
- this._click = function(e) {
- var x = e.pageX - uki.dom.offset(this._dom).x - this._handleSize.width/2;
- this.value(this._pos2val(x, true));
- this._cachedIndex = undefined;
- this.trigger('change', {source: this, value: this._value});
- };
-
- this._keypress = function(e) {
- if (e.which == 39 || e.keyCode == 39) {
- this.value(this.value() + this._keyStep * (this._max - this._min));
- } else if (e.which == 37 || e.keyCode == 37) {
- this.value(this.value() - this._keyStep * (this._max - this._min));
- }
- };
-
- this._moveHandle = function() {
- var rect = this._handle.rect().clone();
- rect.x = this._position;
- rect.y = (this._rect.height - this._handleSize.height) / 2;
- this._handle.rect(rect).layout();
- };
-
- this._draggesturestart = function(e) {
- this._dragging = true;
- this._initialPosition = this._handle.rect().clone();
- return true;
- };
-
- /**
- * @fires event:change
- */
- this._draggesture = function(e) {
- var position = MAX(0, MIN(this._rect.width - this._handleSize.width, this._initialPosition.x + e.dragOffset.x));
- this.value(this._pos2val(position, true));
- this._cachedIndex = undefined;
- };
-
- this._draggestureend = function(e) {
- this._dragging = false;
- this._initialPosition = null;
- this.value(this._pos2val(this._position, true));
- this._cachedIndex = undefined;
- this.trigger('change', {source: this, value: this._value});
- };
-
- this._layoutDom = function(rect) {
- Base._layoutDom.call(this, rect);
- this._position = this._val2pos(this._value);
- this._moveHandle();
- return true;
- };
-
- this._bindToDom = function(name) {
- if (name == 'change') return true;
- return uki.view.Focusable._bindToDom.call(this, name) || Base._bindToDom.call(this, name);
- };
-
-});
-
-uki.view.declare('uki.view.SliderHandle', uki.view.Button, { _backgroundPrefix: 'slider-handle-', _focusable: false });
-
-/**
-* Horizontal Split Pane
-*
-* @author voloko
-* @name uki.view.HSplitPane
-* @class
-* @extends uki.view.Container
-*/
-uki.view.declare('uki.view.HSplitPane', uki.view.Container, function(Base) {
- this._throttle = 0; // do not try to render more often than every Xms
-
- this._setup = function() {
- Base._setup.call(this);
- this._originalRect = this._rect;
- uki.extend(this, {
- _vertical: false,
- _handlePosition: 200,
- _autogrowLeft: false,
- _autogrowRight: true,
- _handleWidth: 7,
- _leftMin: 100,
- _rightMin: 100,
-
- _panes: []
- });
- };
-
- /**
- * @function
- * @name uki.view.HSplitPane#leftMin
- */
- /**
- * @function
- * @name uki.view.HSplitPane#rightMin
- */
- /**
- * @function
- * @name uki.view.HSplitPane#autogrowLeft
- */
- /**
- * @function
- * @name uki.view.HSplitPane#autogrowRight
- */
- /**
- * @function
- * @name uki.view.HSplitPane#throttle
- */
- uki.addProps(this, ['leftMin', 'rightMin', 'autogrowLeft', 'autogrowRight', 'throttle']);
- this.topMin = this.leftMin;
- this.bottomMin = this.rightMin;
-
- /**
- * @function
- * @fires event:handleMove
- * @name uki.view.HSplitPane#handlePosition
- */
- this.handlePosition = uki.newProp('_handlePosition', function(val) {
- this._handlePosition = this._normalizePosition(val);
- this.trigger('handleMove', {source: this, handlePosition: this._handlePosition, dragValue: val });
- this._resizeChildViews();
- });
-
- /**
- * @function
- * @name uki.view.HSplitPane#handleWidth
- */
- this.handleWidth = uki.newProp('_handleWidth', function(val) {
- if (this._handleWidth != val) {
- this._handleWidth = val;
- var handle = this._createHandle();
- this._dom.insertBefore(handle, this._handle);
- this._removeHandle();
- this._handle = handle;
- this._resizeChildViews();
- }
- });
-
-
- this._normalizePosition = function(val) {
- var prop = this._vertical ? 'height' : 'width';
- return MAX(
- this._leftMin,
- MIN(
- this._rect[prop] - this._rightMin - this._handleWidth,
- MAX(0, MIN(this._rect ? this._rect[prop] : 1000, val * 1))
- ));
- };
-
-
- this._removeHandle = function() {
- this._dom.removeChild(this._handle);
- };
-
- this._createHandle = function() {
- var handle;
- if (this._vertical) {
- handle = uki.theme.dom('splitPane-vertical', {handleWidth: this._handleWidth});
- handle.style.top = this._handlePosition + PX;
- } else {
- handle = uki.theme.dom('splitPane-horizontal', {handleWidth: this._handleWidth});
- handle.style.left = this._handlePosition + PX;
- }
-
- uki.each(['draggesturestart', 'draggesture', 'draggestureend'], function(i, name) {
- uki.dom.bind(handle, name, uki.proxy(this['_' + name], this));
- }, this);
-
- return handle;
- };
-
- this._createDom = function() {
- this._dom = uki.createElement('div', this.defaultCss);
- this._initClassName();
- for (var i=0, paneML; i < 2; i++) {
- paneML = { view: 'Container' };
- paneML.anchors = i == 1 ? 'left top bottom right' :
- this._vertical ? 'left top right' :
- 'left top bottom';
- paneML.rect = i == 0 ? this._leftRect() : this._rightRect();
- this._panes[i] = uki.build(paneML)[0];
- this.appendChild(this._panes[i]);
- };
- this._dom.appendChild(this._handle = this._createHandle());
- };
-
- this._normalizeRect = function(rect) {
- rect = Base._normalizeRect.call(this, rect);
- var newRect = rect.clone();
- if (this._vertical) {
- newRect.height = MAX(newRect.height, this._leftMin + this._rightMin); // force min width
- } else {
- newRect.width = MAX(newRect.width, this._leftMin + this._rightMin); // force min width
- }
- return newRect;
- };
-
- this._resizeSelf = function(newRect) {
- var oldRect = this._rect,
- dx, prop = this._vertical ? 'height' : 'width';
- if (!Base._resizeSelf.call(this, newRect)) return false;
- if (this._autogrowLeft) {
- dx = newRect[prop] - oldRect[prop];
- this._handlePosition = this._normalizePosition(this._handlePosition + (this._autogrowRight ? dx / 2 : dx));
- }
- if (this._vertical) {
- if (newRect.height - this._handlePosition < this._rightMin) {
- this._handlePosition = MAX(this._leftMin, newRect.height - this._rightMin);
- }
- } else {
- if (newRect.width - this._handlePosition < this._rightMin) {
- this._handlePosition = MAX(this._leftMin, newRect.width - this._rightMin);
- }
- }
- return true;
- };
-
- this._draggesturestart = function(e) {
- var offset = uki.dom.offset(this.dom());
- this._posWithinHandle = (e[this._vertical ? 'pageY' : 'pageX'] - offset[this._vertical ? 'y' : 'x']) - this._handlePosition;
- return true;
- };
-
- this._draggesture = function(e) {
- this._updatePositionOnDrag(e);
- };
-
- this._draggestureend = function(e, offset) {
- this._updatePositionOnDrag(e);
- };
-
- this._updatePositionOnDrag = function(e) {
- var offset = uki.dom.offset(this.dom());
- this.handlePosition(e[this._vertical ? 'pageY' : 'pageX'] - offset[this._vertical ? 'y' : 'x'] - this._posWithinHandle);
- if (this._throttle) {
- this._throttleHandler = this._throttleHandler || uki.proxy(function() {
- this.layout();
- this._trottling = false;
- }, this);
- if (this._trottling) return;
- this._trottling = true;
- setTimeout(this._throttleHandler, this._throttle);
- } else {
- this.layout();
- }
- };
-
-
- /**
- * @function
- * @name uki.view.HSplitPane#topPane
- */
- /**
- * @function
- * @name uki.view.HSplitPane#leftPane
- */
- this.topPane = this.leftPane = function(pane) {
- return this._paneAt(0, pane);
- };
-
- /**
- * @function
- * @name uki.view.HSplitPane#bottomPane
- */
- /**
- * @function
- * @name uki.view.HSplitPane#rightPane
- */
- this.bottomPane = this.rightPane = function(pane) {
- return this._paneAt(1, pane);
- };
-
- /**
- * @function
- * @name uki.view.HSplitPane#topChildViews
- */
- /**
- * @function
- * @name uki.view.HSplitPane#leftChildViews
- */
- this.topChildViews = this.leftChildViews = function(views) {
- return this._childViewsAt(0, views);
- };
-
- /**
- * @function
- * @name uki.view.HSplitPane#rightChildViews
- */
- /**
- * @function
- * @name uki.view.HSplitPane#bottomChildViews
- */
- this.bottomChildViews = this.rightChildViews = function(views) {
- return this._childViewsAt(1, views);
- };
-
- this._childViewsAt = function(i, views) {
- if (views === undefined) return this._panes[i].childViews();
- this._panes[i].childViews(views);
- return this;
- };
-
- this._paneAt = function(i, pane) {
- if (pane === undefined) return this._panes[i];
- uki.build.copyAttrs(this._panes[i], pane);
- return this;
- };
-
- this._leftRect = function() {
- if (this._vertical) {
- return new Rect(this._rect.width, this._handlePosition);
- } else {
- return new Rect(this._handlePosition, this._rect.height);
- }
- };
-
- this._rightRect = function() {
- if (this._vertical) {
- return new Rect(
- 0, this._handlePosition + this._handleWidth,
- this._rect.width, this._rect.height - this._handleWidth - this._handlePosition
- );
- } else {
- return new Rect(
- this._handlePosition + this._handleWidth, 0,
- this._rect.width - this._handleWidth - this._handlePosition, this._rect.height
- );
- }
- };
-
- this._resizeChildViews = function() {
- this._panes[0].rect(this._leftRect());
- this._panes[1].rect(this._rightRect());
- };
-
- this._layoutDom = function(rect) {
- Base._layoutDom.call(this, rect);
- this._handle.style[this._vertical ? 'top' : 'left'] = this._handlePosition + 'px';
- };
-
- this._bindToDom = function(name) {
- if (name == 'handleMove') return true;
- return Base._bindToDom.call(this, name);
- };
-
-});
-
-/**
-* Vertical Split Pane
-*
-* @author voloko
-* @name uki.view.VSplitPane
-* @class
-* @extends uki.view.HSplitPane
-*/
-uki.view.declare('uki.view.VSplitPane', uki.view.HSplitPane, function(Base) {
- this._setup = function() {
- Base._setup.call(this);
- this._vertical = true;
- };
-});
-
-
-uki.Collection.addAttrs(['handlePosition']);
-
-
-/**
- * Popup
- *
- * @author voloko
- * @name uki.view.Popup
- * @class
- * @extends uki.view.Container
- */
-uki.view.declare('uki.view.Popup', uki.view.Container, function(Base) {
-
- this._setup = function() {
- Base._setup.call(this);
- uki.extend(this, {
- _offset: 2,
- _relativeTo: null,
- _horizontal: false,
- _flipOnResize: true,
- _defaultBackground: 'theme(popup-normal)'
- });
- };
-
- this._createDom = function() {
- Base._createDom.call(this);
- this.hideOnClick(true);
- };
-
- /**
- * @function
- * @name uki.view.Popup#offset
- */
- /**
- * @function
- * @name uki.view.Popup#relativeTo
- */
- /**
- * @function
- * @name uki.view.Popup#horizontal
- */
- /**
- * @function
- * @name uki.view.Popup#flipOnResize
- */
- uki.addProps(this, ['offset', 'relativeTo', 'horizontal', 'flipOnResize']);
-
- /**
- * @function
- * @name uki.view.Popup#hideOnClick
- */
- this.hideOnClick = function(state) {
- if (state === undefined) return this._clickHandler;
- if (state != !!this._clickHandler) {
- if (state) {
- this._clickHandler = this._clickHandler || uki.proxy(function(e) {
- if (uki.dom.contains(this._relativeTo.dom(), e.target)) return;
- if (uki.dom.contains(this.dom(), e.target)) return;
- this.hide();
- }, this);
- uki.dom.bind(doc.body, 'mousedown', this._clickHandler);
- uki.dom.bind(root, 'resize', this._clickHandler);
- } else {
- uki.dom.unbind(doc.body, 'mousedown', this._clickHandler);
- uki.dom.unbind(root, 'resize', this._clickHandler);
- this._clickHandler = false;
- }
- }
- return this;
- };
-
- /**
- * @function
- * @name uki.view.Popup#toggle
- */
- this.toggle = function() {
- if (this.parent() && this.visible()) {
- this.hide();
- } else {
- this.show();
- }
- };
-
- /**
- * @function
- * @name uki.view.Popup#show
- */
- this.show = function() {
- this.visible(true);
- if (!this.parent()) {
- new uki.Attachment( root, this );
- } else {
- this.rect(this._recalculateRect());
- this.layout(this._rect);
- }
- this.trigger('toggle', { source: this });
- };
-
- /**
- * @function
- * @name uki.view.Popup#hide
- */
- this.hide = function() {
- this.visible(false);
- this.trigger('toggle', { source: this });
- };
-
- this.parentResized = function() {
- this.rect(this._recalculateRect());
- };
-
- this._resizeSelf = function(newRect) {
- this._rect = this._normalizeRect(newRect);
- return true;
- };
-
- this._layoutDom = function(rect) {
- return Base._layoutDom.call(this, rect);
- };
-
- this._recalculateRect = function() {
- if (!this.visible()) return this._rect;
- var relativeOffset = uki.dom.offset(this._relativeTo.dom()),
- relativeRect = this._relativeTo.rect(),
- rect = this.rect().clone(),
- attachment = uki.view.top(this),
- attachmentRect = attachment.rect(),
- attachmentOffset = uki.dom.offset(attachment.dom()),
- position = new Point(),
- hOffset = this._horizontal ? this._offset : 0,
- vOffset = this._horizontal ? 0 : this._offset;
-
- relativeOffset.offset(-attachmentOffset.x, -attachmentOffset.y);
-
- if (this._anchors & ANCHOR_RIGHT) {
- position.x = relativeOffset.x + relativeRect.width - (this._horizontal ? 0 : rect.width) + hOffset;
- } else if (this._anchors & ANCHOR_LEFT) {
- position.x = relativeOffset.x - (this._horizontal ? rect.width : 0) - hOffset;
- } else {
- position.x = relativeOffset.x + ((relativeRect.width - rect.width) >> 1) - hOffset;
- }
-
- if (this._anchors & ANCHOR_BOTTOM) {
- position.y = relativeOffset.y + (this._horizontal ? relativeRect.height : 0) - rect.height - vOffset;
- } else if (this._anchors & ANCHOR_TOP) {
- position.y = relativeOffset.y + (this._horizontal ? 0 : relativeRect.height) + vOffset;
- } else {
- position.y = relativeOffset.y + ((relativeRect.height - rect.height) >> 1) + vOffset;
- }
-
- return new Rect(position.x, position.y, rect.width, rect.height);
- };
-});
-
-
-uki.each(['show', 'hide', 'toggle'], function(i, name) {
- uki.fn[name] = function() {
- this.each(function() { this[name](); });
- };
-});
-/**
- * Vertical Flow
- * Arranges child views verticaly, one after another
- *
- * @author voloko
- * @name uki.view.VFlow
- * @class
- * @extends uki.view.Container
- */
-uki.view.declare('uki.view.VFlow', uki.view.Container, function(Base) {
- this.contentsSize = function() {
- var value = uki.reduce(0, this._childViews, function(sum, e) {
- return sum + (e.visible() ? e.rect().height : 0);
- } );
- return new Size( this.contentsWidth(), value );
- };
-
- this.hidePartlyVisible = uki.newProp('_hidePartlyVisible');
-
- this.resizeToContents = function(autosizeStr) {
- this._resizeChildViews(this._rect);
- return Base.resizeToContents.call(this, autosizeStr);
- }
-
- this.layout = function() {
- return Base.layout.call(this);
- };
-
- // resize in layout
- this._resizeChildViews = function(oldRect) {
- var offset = 0, rect, view;
- for (var i=0, childViews = this.childViews(); i < childViews.length; i++) {
- view = childViews[i];
- view.parentResized(oldRect, this._rect);
- view.rect().y = offset;
- // view.rect(new Rect(view._rect.x, offset, view._rect.width, view._rect.height));
- if (this._hidePartlyVisible) {
- view.visible(view._rect.height + offset <= this._rect.height);
- }
- if (view.visible()) offset += view._rect.height;
- };
- };
-
- this.childResized = function() {
- this._needsLayout = true;
- uki.after(uki.proxy(this._afterChildResized, this));
- };
-
- this._contentChanged = this.childResized;
-
- this._afterChildResized = function() {
- this.resizeToContents('height');
- this.parent().childResized(this);
- this.layoutIfNeeded();
- };
-
-});
-
-/**
- * Horizontla Flow
- * Arranges child views horizontally
- *
- * @author voloko
- * @name uki.view.HFlow
- * @class
- * @extends uki.view.VFlow
- */
-uki.view.declare('uki.view.HFlow', uki.view.VFlow, function(Base) {
- this.contentsSize = function() {
- var value = uki.reduce(0, this._childViews, function(sum, e) {
- return sum + (e.visible() ? e.rect().width : 0);
- } );
- return new Size( value, this.contentsHeight() );
- };
-
- this._resizeChildViews = function(oldRect) {
- var offset = 0, rect, view;
- for (var i=0, childViews = this.childViews(); i < childViews.length; i++) {
- view = childViews[i];
- view.parentResized(oldRect, this._rect);
- view.rect().x = offset;
- // view.rect(new Rect(offset, view._rect.y, view._rect.width, view._rect.height));
- if (this._hidePartlyVisible) {
- view.visible(view._rect.width + offset <= this._rect.width);
- }
- if (view.visible()) offset += view._rect.width;
- };
- };
-
- this._afterChildResized = function() {
- this.resizeToContents('width');
- this.parent().childResized(this);
- this.layoutIfNeeded();
- };
-});
-
-
-
-
-uki.view.toolbar = {};
-
-/**
-* Toolbar
-*
-* @author voloko
-* @name uki.view.Toolbar
-* @class
-* @extends uki.view.Container
-*/
-uki.view.declare('uki.view.Toolbar', uki.view.Container, function(Base) {
-
- this.typeName = function() { return 'uki.view.Toolbar'; };
-
- this._moreWidth = 30;
-
- this._setup = function() {
- Base._setup.call(this);
- this._buttons = [];
- this._widths = [];
- };
-
- /**
- * @function
- * @name uki.view.Toolbar#buttons
- */
- this.buttons = uki.newProp('_buttons', function(b) {
- this._buttons = b;
- var buttons = uki.build(uki.map(this._buttons, this._createButton, this)).resizeToContents('width');
- this._flow.childViews(buttons);
- this._totalWidth = uki.reduce(0, this._flow.childViews(), function(s, v) { return s + v.rect().width; });
- });
-
- /**
- * @function
- * @name uki.view.Toolbar#moreWidth
- */
- uki.moreWidth = uki.newProp('_moreWidth', function(v) {
- this._moreWidth = v;
- this._updateMoreVisible();
- });
-
- this._createDom = function() {
- Base._createDom.call(this);
-
- var rect = this.rect(),
- flowRect = rect.clone().normalize(),
- moreRect = new Rect(rect.width - this._moreWidth, 0, this._moreWidth, rect.height),
- flowML = { view: 'HFlow', rect: flowRect, anchors: 'left top right', className: 'toolbar-flow', hidePartlyVisible: true },
- moreML = { view: 'Button', rect: moreRect, anchors: 'right top', className: 'toolbar-button', visible: false, backgroundPrefix: 'toolbar-more-', text: '>>', focusable: false },
- popupML = { view: 'Popup', rect: '0 0', anchors: 'right top', className: 'toolbar-popup', background: 'theme(toolbar-popup)',
- childViews: { view: 'VFlow', rect: '0 5 0 0', anchors: 'right top left bottom' }
- };
-
- this._flow = uki.build(flowML)[0];
- this._more = uki.build(moreML)[0];
- this.appendChild(this._flow);
- this.appendChild(this._more);
- popupML.relativeTo = this._more;
- this._popup = uki.build(popupML)[0];
-
- this._more.bind('click', uki.proxy(this._showMissingButtons, this));
- };
-
- this._showMissingButtons = function() {
- var maxWith = this._flow.rect().width,
- currentWidth = 0,
- missing = [];
- for (var i=0, childViews = this._flow.childViews(), l = childViews.length; i < l; i++) {
- currentWidth += childViews[i].rect().width;
- if (currentWidth > maxWith) missing.push(i);
- };
- var newButtons = uki.map(missing, function(i) {
- var descr = { html: childViews[i].html(), backgroundPrefix: 'toolbar-popup-button-' };
- uki.each(['fontSize', 'fontWeight', 'color', 'textAlign', 'inset'], function(j, name) {
- descr[name] = uki.attr(childViews[i], name);
- });
- return this._createButton(descr);
- }, this);
- uki('VFlow', this._popup).childViews(newButtons).resizeToContents('width height');
- this._popup.resizeToContents('width height').height(this._popup.height() + 5).toggle();
- };
-
- this._updateMoreVisible = function() {
- var rect = this._rect;
- if (this._more.visible() != rect.width < this._totalWidth) {
- this._more.visible(rect.width < this._totalWidth);
- var flowRect = this._flow.rect();
- flowRect.width += (rect.width < this._totalWidth ? -1 : 1)*this._moreWidth;
- this._flow.rect(flowRect);
- }
- };
-
- this.rect = function(rect) {
- var result = Base.rect.call(this, rect);
- if (rect) this._updateMoreVisible();
- return result;
- };
-
- this._createButton = function(descr) {
- var rect = this.rect().clone().normalize();
- rect.width = 100;
- return uki.extend({
- view: 'Button', rect: rect, focusable: false, align: 'left',
- anchors: 'left top', backgroundPrefix: 'toolbar-button-', autosizeToContents: 'width', focusable: false
- }, descr);
- };
-});
-
-}());
-(function() {
- var defaultCss = 'position:absolute;z-index:100;-moz-user-focus:none;font-family:Arial,Helvetica,sans-serif;',
- reflex = '<div style="position:absolute;z-index:1;left:1px;bottom:0px;right:1px;height:1px;overflow:hidden;background:rgba(255,255,255,0.4)"></div>';
-
- uki.theme.airport = uki.extend({}, uki.theme.Base, {
- imagePath: 'http://static.ukijs.org/pkg/0.3.8/uki-theme/airport/i/',
-
- backgrounds: {
- // basic button
- 'button-normal': function() {
- return new uki.background.LinearGradient({
- startColor: '#FDFEFF',
- stops: [
- { pos: 0.15, color: '#F5F7FD' },
- { pos: 0.8, color: '#C9CACF' }
- ],
- endColor: '#C7CBD2',
- innerHTML: reflex,
- css: 'border:1px solid #666;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,0.5);'
- });
- },
-
- 'button-hover': function() {
- return new uki.background.LinearGradient({
- startColor: '#FFFFFF',
- stops: [
- { pos: 0.7, color: '#D7DAE4' }
- ],
- endColor: '#D9DEE6',
- innerHTML: reflex,
- css: 'border:1px solid #666;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,0.5);'
- });
- },
-
- 'button-down': function() {
- return new uki.background.LinearGradient({
- startColor: '#9C9DA1',
- stops: [
- { pos: 0.6, color: '#C5C7CD' }
- ],
- endColor: '#CCCFD6',
- css: 'border:1px solid #666;border-radius:3px;box-shadow:inset 0 1px 3px rgba(0,0,0,0.5);'
- });
- },
-
- 'button-focus': function() {
- if (uki.browser.cssBoxShadow() == 'unsupported') {
- return new uki.background.CssBox(
- 'background:#7594D2;' + (uki.browser.cssFilter() && uki.image.needAlphaFix ? 'filter:Alpha(opacity=70);' : 'opacity:0.7;'),
- { inset: '-2 -2', zIndex: -2 }
- );
- }
- return new uki.background.Css({
- // WebkitTransition: '-webkit-box-shadow 0.2s linear',
- boxShadow: '0 0 6px #0244D4',
- borderRadius: '3px'
- });
- },
-
- 'button-disabled': function() {
- return new uki.background.Multi(
- uki.theme.background('button-normal'),
- new uki.background.Css({ color: '#999' })
- );
- },
-
-
- // checkbox
- 'checkbox-normal': function() {
- return checkboxBg(18);
- },
-
- 'checkbox-hover': function() {
- return checkboxBg(54);
- },
-
- 'checkbox-disabled': function() {
- return checkboxBg(90);
- },
-
- 'checkbox-checked-normal': function() {
- return checkboxBg(0);
- },
-
- 'checkbox-checked-hover': function() {
- return checkboxBg(36);
- },
-
- 'checkbox-checked-disabled': function() {
- return checkboxBg(72);
- },
-
- 'checkbox-focus': function() {
- if (uki.image.needAlphaFix) {
- return new uki.background.CssBox('',
- { innerHTML: '<div style="position:absolute;left:50%;top:50%;width:19px;height:19px;overflow:hidden;' +
- 'margin:-10px 0 0 -10px;background:#7594D2;filter:Alpha(opacity=70);"></div>', zIndex: -2 }
- );
- }
- return new uki.background.CssBox('',
- { innerHTML: '<div style="position:absolute;left:50%;top:50%;width:24px;height:24px;overflow:hidden;' +
- 'margin:-12px 0 0 -12px; background: url(' + uki.theme.imageSrc('checkbox-focus') + ') 0 0"></div>', zIndex: -2 }
- );
- },
-
-
- // radio button
- 'radio-normal': function() {
- return radioBg(18);
- },
-
- 'radio-hover': function() {
- return radioBg(54);
- },
-
- 'radio-disabled': function() {
- return radioBg(90);
- },
-
- 'radio-checked-normal': function() {
- return radioBg(0);
- },
-
- 'radio-checked-hover': function() {
- return radioBg(36);
- },
-
- 'radio-checked-disabled': function() {
- return radioBg(72);
- },
-
- 'radio-focus': function() {
- if (uki.image.needAlphaFix) return uki.theme.airport.background('checkbox-focus');
- var src = uki.theme.imageSrc('radio-focus');
- return new uki.background.CssBox('',
- { innerHTML: '<div style="position:absolute;left:50%;top:50%;width:24px;height:24px;overflow:hidden;' +
- 'margin:-12px 0 0 -12px; background: url(' + src + ') 0 0"></div>', zIndex: -2 }
- );
- },
-
-
-
- // toolbar button
- 'toolbar-button-normal': function() {
- return new uki.background.Css('#CCC');
- },
-
- 'toolbar-button-hover': function() {
- return new uki.background.Css('#E0E0E0');
- },
-
- 'toolbar-button-down': function() {
- return new uki.background.Css('#AAA');
- },
-
- 'toolbar-button-focus': function() {
- return new uki.background.Css('#CCC');
- },
-
- 'toolbar-popup-button-normal': function() {
- return new uki.background.Css({ textAlign: 'left' });
- },
-
- 'toolbar-popup-button-down': function() {
- return new uki.background.Css({ background: '#AAA', textAlign: 'left' });
- },
-
- 'toolbar-popup-button-hover': function() {
- return new uki.background.Css({ background: '#4086FF', color: '#FFF', textAlign: 'left', textShadow: 'none' });
- },
-
-
- // panel
- 'popup-normal': function() {
- return new uki.background.CssBox('background:#ECEDEE;border-radius:5px;border:1px solid #CCC;box-shadow:0 3px 8px rgba(0,0,0,0.6)');
- },
-
- 'panel': function() {
- return new uki.background.LinearGradient({
- startColor: '#DEDEDF',
- stops: [
- { pos: 0.2, color: '#D4D4D5' },
- { pos: 0.9, color: '#989899' }
- ],
- endColor: '#989899',
- css: 'box-shadow:0 1px 0 rgba(0,0,0,0.5);'
- });
- },
-
- // text field
- 'input': function() {
- return new uki.background.CssBox(
- 'background:white;border: 1px solid #999;border-top-color:#777;box-shadow:0 1px 0 rgba(255, 255, 255, 0.4), inset 0 1px 2px rgba(0,0,0,0.2);'
- );
- },
-
- 'input-focus': function() {
- if (uki.browser.cssBoxShadow() == 'unsupported') {
- return new uki.background.CssBox(
- 'background:#7594D2;' + (uki.browser.cssFilter() && uki.image.needAlphaFix ? 'filter:Alpha(opacity=70);' : 'opacity:0.7;'),
- { inset: '-2 -2', zIndex: -2 }
- );
- }
- return new uki.background.Css({
- // WebkitTransition: '-webkit-box-shadow 0.2s linear',
- boxShadow: '0 0 6px #0244D4'
- });
- },
-
-
-
- // slider
- 'slider-handle-normal': function() {
- return new uki.background.LinearGradient({
- startColor: '#FFFFFF',
- endColor: '#B1CEEA',
- innerHTML: sliderPin(),
- css: 'border:1px solid #8393A6;border-bottom-color:#687482;box-shadow:0 0 2px rgba(0,0,0,0.5);'
- });
- },
-
- 'slider-handle-hover': function() {
- return new uki.background.LinearGradient({
- startColor: '#DFF6FF',
- endColor: '#8AC5F3',
- innerHTML: sliderPin(),
- css: 'border:1px solid #8393A6;border-bottom-color:#687482;box-shadow:0 0 2px rgba(0,0,0,0.5);'
- });
- },
-
- 'slider-handle-focus': function() {
- if (uki.browser.cssBoxShadow() == 'unsupported') {
- return new uki.background.CssBox(
- 'background:#7594D2;' + (uki.browser.cssFilter() && uki.image.needAlphaFix ? 'filter:Alpha(opacity=70);' : 'opacity:0.7;'),
- { inset: '-2 -2', zIndex: -2 }
- );
- }
- return new uki.background.CssBox(
- 'box-shadow: 0 0 6px #0244D4;',
- { zIndex: 2, inset: '1' }
- );
- },
-
- 'slider-bar': function() {
- uki.dom.offset.initializeBoxModel();
- return new uki.background.CssBox(
- 'overflow:visible;',
- {
- inset: uki.dom.offset.boxModel ? '0 2 0 0' : '0 0',
- innerHTML: '<div style="' + uki.browser.css('position:absolute;left:0;overflow:hidden;width:100%;top:50%;height:3px;margin-top:-2px;background:#C6C7CD;border:1px solid #777;border-radius:3px;box-shadow:0 1px 0 rgba(255,255,255,0.5),inset 0 1px 1px rgba(0,0,0,0.2)') + '"></div>'
- }
- );
- },
-
- // list
- list: function(rowHeight) {
- return new uki.background.Rows(rowHeight, '#EDF3FE');
- },
-
- // table
- 'table-header': function() {
- return new uki.background.LinearGradient({
- startColor: '#FFFFFF',
- stops: [
- { pos: 0.8, color: '#e0e0e0' }
- ],
- endColor: '#EEEEEE',
- css: 'border-bottom:1px solid #CCC;'
- });
- }
- },
-
- images: {
- checkbox: function() {
- var prefix = "checkbox/normal";
- return uki.image(u(prefix + ".png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAABsCAYAAABn5uLmAAAF1UlEQVRYw+2Y3VMTVxjGve9N/4T+CU4vetErpxfauzp1puNFZ3Ckah1jibWOGqhFhYpY8AvBIoygiErwIxAI+UCQhhgkEQwgIQKiIXwJBEKABIJP913dlJNddE8602mrO/ObIee8z8Oe3cnL87JuXZLXJ+vXf/zp519kyjYM7nHwsOtgDrakaLDhy6+3xU30jucgXr2CKsorq7H3yGno8sqwZZtmc9zoWpMP0eUVVdxrcWDHT1k4VVaP/KsWMMe63PAY4UhM5Okzf/znRDp7fEjV/oLjRdUorm5GidHNGhUb2hCcX0azw41NX22Fy+MVP6/GPx7Ed2kZyMi/gtMVFjz2+UE6xqigqgUvQ1GcLa7A9n2Z2K45hGcjU+KahFaXhf1ZhcgrN6Hufoe4RjrGiM46EoxgYCSIvNI70B49jx1pOvj8k+J6ztlL2H04FydLa1F4wyquEbJnlFNSg+eTiyLtvX5kF+mxJ/0UUn84jIo7ZqTsTcexwirhburFfamWdIzRcaGof3whjtXZi8xzlUg7cga7DmQjI68cuaU1uNPoZupIxxj9LDzA3pEwQ2W9A1nCnWULbyjn0l0U3TDLakjHGB08UQyPf07GhesNwnMxIPuiHu39k7J90jFG+46eg3soJMPRN4ETRTdxu6lTcZ90jNEeXS6cAzPckI4x2rn/GIieQFg1kkb27d+m0YGXde/Z1eruBi8yk8ZWF4iVlVeqkTSMkanJgdjKCjekYxt/wz0sx2LckI4xqjKYsLS8zA3pGKMKvSEpI9IxRiVXbyK6tMQN6RijotIriESj3JCOMTpTeAkLkSg3pGOMTuYXYH4xwg3p2J594jeEFxa5IR1jlHE0G3PzC9yQjjE6oDuCUHieG9IxRmn7D4HgefWSRvbF3a3Rgpf/aSP8ZzKk2uutGTImhEw1NNudb8+QS0IfJob8gfjPifT09SN135sMeeu+coYMR1dgb3uETZu3iqGTPq9mbGoWO7R/ZciegWHlDDknpNaC0mtihkzdewijkzPimsSP6dnxDGm2d76uV8qQs4sxjE7P4fTl1xlylzYdgZcz4nrehdJ4hrxYZRPXCMUMORVeEukZCIjBijLkTq0OeqM1niHzhQxJ+1KtYoacEOKuhL2jTzFDmloeMXWKGXJkJsJw2+pkMmSJ3iqrUcyQL6YWZRRXWcQM+atwVF8gKNtXzJDPJxdk9A1P41RxFawPuhT3FTPk4MswN2tmyEBwUTUfMuTfuHg7JCEz4Z2yCUnDGPFM2ash3ZpTNg+kU5yyeVlzyuZlzSmbl7dO2Ty8c8pWi6opWw2qp+x3oXrKfhcfpuz/2rVx48aPUlK+/Ua2MRwYAA93DXpkHsvQazTfb4ibDA4+AREVZjA19PV5UVNbDZutDpmZ6Z/Fjbx9j1WbjI2NCgZmPHnigdOZ0EY8Xe2riiNrmszNhdDQUIfOThf6+73o6HSyRi5Xq1g4MTGKiopyzMxOKxqZTEY8fNiK3t4uLCyEQTrGyOFoFgs7OlyoN9XCaKyRmdhsFvxhb0J3dydGR4fFNdIxRk1N5rjA43GjudmGurpa4fOiuNbW5oDVZhL3vN7ueC3pGCOzxRjfnBWO5XI5hTswCXd2Fz5fr/CGbgtrD9DV9Ujcl2pJxxjVGm+9ecivGRsfFu7CjsZGM0wNRuEILcKx2+H3DzJ1pGOMqm9dFzbCDPRW2oWH6XI5xDukZ5NYQzrGqLLyivAWQjLoKC73AzxstyMUmpLtk44xKisrQTg8LSM4MyEecWioX3GfdOxf2uILwm+c5IZ0jNH5gjMgIpGwaiSN7Nufl58LXt63DDk8/AK8yEwGBp6CiAn/yVOLpGGMvN4eLhMJ0rEd0tORlBHpEjpkW1JGpEvokPakjEiX0CFtSRmRjjGyWExJGZGOMTIaDUkZkY7tkNX6pIxIl9AhryVlRLqEDnk5KSPSJXTI35MyIh07ixScB8FjImlkX9z8/Dzw8u/uZ38Cqx5HdHgrjesAAAAASUVORK5CYII=", u(prefix + ".gif"));
- },
- 'checkbox-focus': function() {
- return uki.image(u("checkbox/focus.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABdklEQVRIie2Wv0rDUBSHUxRFRHQRFxWRioTeZHEXVxHqYgaRNrmrj+Ai+AAdi6trH0AQh6K05uYpfBQ934m0EnHQcIuDB+5y7/l9J+dPchMEU2sER8P5VjJY2ExeljY6D8v77dHKbvK4+t3iHD/80aFXzhdLBnPN4/tFBE37vN7qjrbDzO2ZTh6GnbExXRdXl+5zLn74o1O9cOB9xjfY3MmGa8Y+bSGO0vGhSYuT2Lqz2BbnUZpfVBf7nOOn/gQWPRwNMslE0iIyh1HqDiLrTuPMXZqsuI5s3hNQX/Zuq6vcz3v44Y8OPRx4H+UKAmpHevrkCi+ubu5e33660KGHo2WmJ5g2SGpImjzJb+DTIJKJcODB1QBMgTZUakm6dQKghwMPrgbQ+ss00DBqWidA2TNpvPC0DxjzzMiVU1H0a5VI9HDgwZ0EKEdTxk+mo14GMmHCgfcf4I8F8DpF3t8D72+y92+R96+p9/vA/402gzt5Bn8VHu0d2HhIetPffvAAAAAASUVORK5CYII=");
- },
- radio: function() {
- var prefix = "radio/normal";
- return uki.image(u(prefix + ".png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAABsCAYAAABn5uLmAAAGiklEQVRYw+2X/08TdxjH/RP6Z+2XJWeyzMTMjGkkEkmsog4VzSGiA0FUQAPIUHEqMC0i3Rgt66Sj8q0wkG9tgV4RAflij7b0C198du8Ozn6uPe66uGSJXvLO5fk8r+cNP/TeeT579vxXj8nmNTxzvuVbnEtCy8ASyZJqnKOvadLg8HKNDp/Y61khf2id3r8nWahxjj44VZN66xjX2OmmRTFMsY0tVaEPDnySSZnJZrhjdoqzyyEKRTc1BQ485hijyiY739btIv/ahm6BxxxjdO2BRXDPvqOlQExWR1c/fbnvO/riq2/jb9SJffCYY4x+uNNCc/4oowNHTtOpK9WUX9EQf6NWMphjjPIrHpNvOcLImF9O5Q1/UFVzd/yNWslgjjE6V1JHk2/DjPJK66j8sY0qJBO8USsZzDFGOQWVQtfIaxqfC8my9E7Q1dpnVFJnjr9RJ/bBY44xyj57lS+//5yGXwd1CzzmGKMMI2/IzLkotvdPkVMIaAoceMwl/Si/yTrNZZ7gydztpu4pUVXogwOv+pl8fSib23fomMhfryPTn+Nkd/tlocY5+uA0P1yOyzBw+zP5vfsPC3v3Z9IHHRZwjv6eT/yx2QYN9r5XfJdzRJBECRJwjr6mibWzn7N29Yujbi+tBtdoa+u9LNQ4Rx+cqskvVgdnsfeQPxCkza0tVaEPDnxy4JtMhua2DnHFv0obm5uaAgcec2zom8x8t3OI1jc2dAs85hijB03NwuLySlpG4DHHGN2pb6DY+nrawhxjdLv2PkVjsbSFOcbo+q0aCkdjaQtzjFFRaYXgm52jtUhUt8Bjjg3/wqv802etFApHdAs85hgjI88bzuUXilOCj4JrYU2BA4+5pB9lzpk87vzFQvJMeykQWlMV+uDAq34m2TmnuWM534t36x+RyzMlfV8hWahxjj44zQ83I8NoOJJt5LOOGoWsbCPJkmqco/+pJyR2RFPfPN/sXMDOSDtCjfM0dkhB7PMskxiKUeKDGufoa+yQLq7RPknLgShtSsunmtAHBz7FDjlo+LHtL/GttGiuS/msJXDgMccYVZle8lZpMQjFtnQLPOYYo4rGTsG3uEpBaWPdkb1nQNodD27vkAfjdWIfPObYZbS+nVYjm4wOZCl2SKlWMphLWkZXpM0+Ual2SCWTtIwW3GqkRWnlTdT50rvMDolayWCOMcorvS+8ml6gOTEqyzHkoZLtHRJv1Il98JhjjE4XVvF1TzpoZiWiW+Axp0jIMsPx/Jti/8SstD+HNQUOPOaSfpRZZ4q4E/k3qGdMoOmlkKrQBwde9TPJzOE5bKs3655Q1/A0uReCslDjHH1wuhIyI/ssn3H0rCC9SdY/9eeE/NgJ2SsloV9KRPaWHaPedBJyUYxo3LIj2gmZzi1bNSHb+ybTumWDT5mQnjd+5hatJfApE1J5g9ajlAmpvEHrUcqEVN6g9ShlQjrG3jC3aC2BT5mQVY3WtG7Z4FUT0jog6Lplg9s1IY/z1+nXvqldb9nog9OVkEXVTdTy0sPcslHj/HNCfsTH6x00eL3jvFeYEASfi3aEOn7u1XHLdrkGOZd7SJyfn6FwBLfsLVmocY4+OFWTweEebnRsgNbWQoyBUuiDA59kYrPZDL19nWIoFNjVZEfgwGOOMXrxwsK7XKO6THYEHnOMkcXSKqyuikl/1e0ZoQnXUPyt/G/BY44xet76NOkvjow6aWi4VxZqJYM5xqjp54dJUE+PPUlKBnOM0U8P70qNTUYOxwuy2ztkoVYymGOMamurhaWleakZlbW8PE+/236jdos5/kad2AePOcaosvIGb7W20fp6WLfAY44x4qXbcum1YnH2jZei0YCmwIHnU92yL18u4K6VFdPMzCSFw6Kq0AcHXvUzycs7w124cE5sanpE09MTFAyuyEKNc/TBaX64RqPRkJt7kpck5Oaeog9CfZJH/3NCfqSEdG8nZESRkJHthHRrJeTwcD83Pj6oKyHBgU+ZkP1Oh5SQQZ0JGSTwSQnZ1WXjPZ6JtBISPOYYo85OixAIrKZlBB5zyqhNy2RHmGOMWs2mf2WEOcboqakhKf30CHOM0aPH9cLKuwUmAbUEHnOM0b17NbzdbksrIcFjjjEqKyszVFffln7RPl0JCQ485pJ+lOXlZVxNzW2anZ3eNSHRBwde9TMpKStC3IpmczP5fB4mIVHjHH1wmh8uAv1KUQFfVHxJKCoupA+6JOA8ZeD/L5+/ASNtA71vTxEVAAAAAElFTkSuQmCC", u(prefix + ".gif"));
- },
- 'radio-focus': function() {
- return uki.image(u("radio/focus.png"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAABcElEQVRIx92VP0oEMRTGt9ADeAERq21E8ACLNp7AUrRbWdzdDDa6IBhnM5YqaCPCiiewyPzBA1gK1oIsHsNCNL9owBl1HYWM6MBjSPK+7+W99yWp1X7jm5dyrLUVTwTyYqotdb0dJjOdUM86Y8w86/jhX5q82TwZF1JPrkd6rtNPF40tiTBb7qps1Rlj5lnHD39wpchbMp4WKmmIKF0x/+0gSg8DlZ0KlZ05Y8w8669+DXAjgzjy7m68IPrJmoiS/Y29S907vr7fGdw+hOfDJ2eMmWcdP/zBfRqEGpKm3TnkKj3aPLi6kYO7x7fERWMdP/xfcAZveN71hEbZWpKu2RGgUcRFs0HIxODhgS8XADXQMGpK2l/t/KNMbLkMHh74cgGQHKqgcdT2O+TOwIGHB758AKNrpIc6ig0ta+Cs2gwPfLkAHB6rbyPBn5A7Aw8PfP8sgPceeFeR93Pg/SR7v4u836aVvAeVvGiVvMl/7nsGaBHOn+3vxvEAAAAASUVORK5CYII=");
- }
- },
-
- imageSrcs: {
- x: function() {
- return [u("x.gif"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIHWNgAAIAAAUAAY27m/MAAAAASUVORK5CYII="];
- },
- 'splitPane-horizontal': function() {
- return [u("splitPane/horizontal.gif"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAYAAAA870V8AAAAFUlEQVQIW2MoLy//zwAEYJq6HGQAAJuVIXm0sEPnAAAAAElFTkSuQmCC"];
- },
- 'splitPane-vertical': function() {
- return [u("splitPane/vertical.gif"), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAADCAYAAABfwxXFAAAAE0lEQVQIHWMsLy//z0AOYMSnEwAIngTLoazFLgAAAABJRU5ErkJggg=="];
- }
- },
-
- templates: {
- 'table-header-cell': function() {
- return new uki.theme.Template(
- '<div style="position:relative;border-right:1px solid #CCC;'+
- '${style}" class="${className}">${data}</div>');
- },
-
- 'table-cell': function() {
- return new uki.theme.Template(
- '<div style="position:relative;border-right:1px solid #CCC;height:100%;'+
- '${style}" class="${className}">${data}</div>');
- },
-
- 'table-header-cell-asc': function() {
- return new uki.theme.Template(
- '<div style="position:relative;border-right:1px solid #CCC;background: rgba(0,0,128,0.1);'+
- '${style}" class="${className}"><div style="padding-right:7px">${data}</div><span style="position:absolute;right:0;top:50%;margin-top:-7px;">&darr;</span></div>');
- },
-
- 'table-header-cell-desc': function() {
- return new uki.theme.Template(
- '<div style="position:relative;border-right:1px solid #CCC;background: rgba(0,0,128,0.1);'+
- '${style}" class="${className}"><div style="padding-right:7px">${data}</div><span style="position:absolute;right:0;top:50%;margin-top:-7px;">&uarr;</span></div>');
- }
- },
-
- doms: {
- 'resizer': function(height) {
- var template = new uki.theme.Template('position:absolute;width:5px;top:0;right:-3px;height:${height}px;cursor:col-resize;cursor:ew-resize;z-index:101;background:url(' + uki.theme.imageSrc('x') + ')'),
- node = uki.createElement('div', template.render({height:height}));
-
- if (!node.style.cursor || window.opera) node.style.cursor = 'e-resize';
- return node;
- },
- 'splitPane-vertical': function(params) {
- var commonVerticalStyle = 'cursor:row-resize;cursor:ns-resize;z-index:200;overflow:hidden;',
- handle = params.handleWidth == 1 ?
- uki.createElement('div',
- defaultCss + 'width:100%;height:5px;margin-top:-2px;' +
- commonVerticalStyle + 'background: url(' + uki.theme.imageSrc('x') + ')',
- '<div style="' +
- defaultCss + 'background:#999;width:100%;height:1px;left:0px;top:2px;overflow:hidden;' +
- '"></div>') :
- uki.createElement('div',
- defaultCss + 'width:100%;height:' + (params.handleWidth - 2) + 'px;' +
- 'border: 1px solid #CCC;border-width: 1px 0;' + commonVerticalStyle +
- 'background: url(' + uki.theme.imageSrc('splitPane-vertical') + ') 50% 50% no-repeat;');
- if (!handle.style.cursor || window.opera) handle.style.cursor = 'n-resize';
- return handle;
- },
-
- 'splitPane-horizontal': function(params) {
- var commonHorizontalStyle = 'cursor:col-resize;cursor:ew-resize;z-index:200;overflow:hidden;',
- handle = params.handleWidth == 1 ?
- uki.createElement('div',
- defaultCss + 'height:100%;width:5px;margin-left:-2px;' +
- commonHorizontalStyle + 'background: url(' + uki.theme.imageSrc('x') + ')',
- '<div style="' +
- defaultCss + 'background:#999;height:100%;width:1px;top:0px;left:2px;overflow:hidden;' +
- '"></div>') :
- uki.createElement('div',
- defaultCss + 'height:100%;width:' + (params.handleWidth - 2) + 'px;' +
- 'border: 1px solid #CCC;border-width: 0 1px;' + commonHorizontalStyle +
- 'background: url(' + uki.theme.imageSrc('splitPane-horizontal') + ') 50% 50% no-repeat;');
- if (!handle.style.cursor || window.opera) handle.style.cursor = 'e-resize';
- return handle;
-
- }
- },
- styles: {
- base: function() {
- return 'font-family:Arial,Helvetica,sans-serif;';
- },
- 'label': function() {
- return 'font-size:12px;';
- },
- 'button': function() {
- return 'color:#333;text-align:center;font-weight:bold;text-shadow:0 1px 0 rgba(255,255,255,0.6);';
- },
- 'input': function() {
- return 'font-size:12px;';
- }
- }
- });
-
- function u(url) {
- return uki.theme.airport.imagePath + url;
- }
-
- function checkboxBg (offset) {
- var src = uki.theme.imageSrc('checkbox');
- return new uki.background.CssBox('',
- { innerHTML: '<div style="position:absolute;left:50%;top:50%;width:18px;height:18px;overflow:hidden;' +
- 'margin:-9px 0 0 -9px; background: url(' + src + ') 0 -' + offset + 'px"></div>' }
- );
- }
-
- function radioBg (offset) {
- var src = uki.theme.imageSrc('radio');
- return new uki.background.CssBox('',
- { innerHTML: '<div style="position:absolute;left:50%;top:50%;width:18px;height:18px;overflow:hidden;' +
- 'margin:-9px 0 0 -9px; background: url(' + src + ') 0 -' + offset + 'px"></div>' }
- );
- }
-
- function sliderPin () {
- return '<div style="' + uki.browser.css('position:absolute;overflow:hidden;z-index:10;left:50%;top:50%;width:2px;height:11px;margin:-6px 0 0 -1px;background:#8599AE;border-top:1px solid #6A7A8C;') + '"></div>';
- }
-
- uki.theme.airport.backgrounds['slider-handle-down'] = uki.theme.airport.backgrounds['slider-handle-hover'];
- uki.theme.airport.backgrounds['toolbar-popup'] = uki.theme.airport.backgrounds['popup-normal'];
- uki.theme.airport.backgrounds['toolbar-popup-button-disabled'] = uki.theme.airport.backgrounds['toolbar-popup-button-normal'];
-
- uki.theme.register(uki.theme.airport);
-})();
diff --git a/app/assets/stylesheets/admin.css b/app/assets/stylesheets/admin.css
deleted file mode 100644
index 28c0a9c..0000000
--- a/app/assets/stylesheets/admin.css
+++ /dev/null
@@ -1,54 +0,0 @@
-table.user-table span.user-login {
- font-size: 110%;
- line-height: 90%;
- font-weight: bold;
- letter-spacing: 1pt;
-}
-
-
-table.user-table span.user-name {
- font-size: 90%;
-}
-
-table.user-table span.user-email {
- color: #555;
- font-size: 90%;
-}
-
-.fieldWithErrors {
- background-color: #A40000;
- display: table;
- padding: 2px;
-}
-
-#errorExplanation {
- border: 2px solid #A40000;
- padding: 5px;
- margin-bottom: 20px;
- background-color: #f0f0f0;
-}
-
-#errorExplanation h2 {
- text-align: left;
- font-weight: bold;
- padding: 5px 5px 5px 15px;
- font-size: 12px;
- margin: -7px;
- background-color: #A40000;
- color: #fff;
-}
-
-#errorExplanation p {
- color: #333;
- margin-bottom: 0;
- padding: 5px;
-}
-
-#errorExplanation ul {
- margin-bottom: 0;
-}
-
-#errorExplanation ul li {
- font-size: 12px;
- list-style: square;
-} \ No newline at end of file
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
deleted file mode 100644
index fc3f853..0000000
--- a/app/assets/stylesheets/application.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * This is a manifest file that'll automatically include all the stylesheets available in this directory
- * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
- * the top of the compiled file, but it's generally better to create a new file per style scope.
- *= require_self
- *= require screen
- *= require admin
- *= require modalbox
- *= require cve
-*/ \ No newline at end of file
diff --git a/app/assets/stylesheets/cve.css b/app/assets/stylesheets/cve.css
deleted file mode 100644
index bebb317..0000000
--- a/app/assets/stylesheets/cve.css
+++ /dev/null
@@ -1,23 +0,0 @@
-.cvename {
- font-weight: bold;
-}
-
-.cve-new {
- color: #A40000;
-}
-
-.cve-assigned {
- color: #4E9A06;
-}
-
-.cve-nfu {
- color: #204A87;
-}
-
-.cve-later {
- color: #5C3566;
-}
-
-.cve-invalid {
- color: #CCC;
-} \ No newline at end of file
diff --git a/app/assets/stylesheets/login.css b/app/assets/stylesheets/login.css
deleted file mode 100644
index cdcec08..0000000
--- a/app/assets/stylesheets/login.css
+++ /dev/null
@@ -1,91 +0,0 @@
-#login-form {
- width: 489px;
- height: 295px;
- background: url(/assets/login-bg.png);
- margin: auto;
- color: white;
-}
-
-#login-form div {
- padding-top: 60px;
- padding-left: 40px;
- padding-right: 40px;
- padding-bottom: 20px;
- text-align: left;
-}
-
-#login-form h1 {
- font-size: 120%;
- margin-top: 0;
- padding-top: 0;
-}
-
-#login-form label {
- font-size: 90%;
- letter-spacing: 1px;
- text-transform: lowercase;
-}
-
-#login-form p {
- margin-top: .2em;
- margin-bottom: .2em;
-}
-
-#login-form input#login, #login-form input#password {
- font-size: 180%;
- border: 1px solid #4C3E61;
- background-color: #D3CFE5;
- width: 100%;
-}
-
-#login-form input#submit {
- font-size: 130%;
-}
-
-body {
- background-color: #D3CFE5;
- font-family: Lucida Grande, Verdana, Arial, Helvetica, sans-serif;
- font-size: 95%;
-}
-
-small.error {
- color: #A40000;
-}
-
-p.submit {
- text-align: right;
-}
-
-/* Centerization fix */
-body, html {
- height: 99%;
-}
-
-#outer {
- height: 100%;
- overflow: visible;
- width: 100%;
-}
-
-#outer[id] {
- display: table;
- position: static;
-}
-
-#middle {
- position: absolute;
- top: 50%;
- text-align: center;
-}
-
-#middle[id] {
- display: table-cell;
- vertical-align: middle;
- position: static;
- text-align: center;
-}
-
-#inner {
- position: relative;
- top: -50%;
-} \ No newline at end of file
diff --git a/app/assets/stylesheets/modalbox.css b/app/assets/stylesheets/modalbox.css
deleted file mode 100644
index 0a2cbf4..0000000
--- a/app/assets/stylesheets/modalbox.css
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- modalbox.css
-
- Modalbox project
-
- Created by Andrew Okonetchnikov.
- Copyright 2006-2010 okonet.ru. All rights reserved.
-
- Licensed under MIT license.
-*/
-
-#MB_overlay {
- position: absolute;
- margin: auto;
- top: 0; left: 0;
- width: 100%; height: 100%;
- z-index: 9999;
- border: 0;
- background-color: #000!important;
-}
-#MB_overlay[id] { position: fixed; }
-
-#MB_windowwrapper {
- position:absolute;
- top:0;
- width:100%;
-}
-
-#MB_window {
- position:relative;
- margin-left:auto;
- margin-right:auto;
- top:0;
- left:0;
- border: 0 solid;
- text-align: left;
- z-index: 10000;
-}
-#MB_window[id] { position: relative; }
-
-#MB_frame {
- position: relative;
- background-color: #EFEFEF;
- height: 100%;
-}
-
-#MB_header {
- margin: 0;
- padding: 0;
-}
-
-#MB_content {
- position: relative;
- padding: 6px .75em;
- overflow: auto;
-}
-
-#MB_caption {
- font: bold 100% "Lucida Grande", Arial, sans-serif;
- text-shadow: #FFF 0 1px 0;
- padding: .5em 2em .5em .75em;
- margin: 0;
- text-align: left;
-}
-
-#MB_close {
- display: block;
- position: absolute;
- right: 5px; top: 4px;
- padding: 2px 3px;
- font-weight: bold;
- text-decoration: none;
- font-size: 13px;
-}
-#MB_close:hover {
- background: transparent;
-}
-
-#MB_loading {
- padding: 1.5em;
- text-indent: -10000px;
- background: transparent url(../assets/spinner.gif) 50% 0 no-repeat;
-}
-
-/* Color scheme */
-#MB_window {
- background-color: #EFEFEF;
- color: #000;
-
- -webkit-box-shadow: 0 0 64px #000;
- -moz-box-shadow: #000 0 0 64px;
- box-shadow: 0 0 64px #000;
-}
- #MB_frame {
- padding-bottom: 4px;
-
- -webkit-border-bottom-left-radius: 4px;
- -webkit-border-bottom-right-radius: 4px;
-
- -moz-border-radius-bottomleft: 4px;
- -moz-border-radius-bottomright: 4px;
-
- border-bottom-left-radius: 4px;
- border-bottom-right-radius: 4px;
- }
-
- #MB_content { border-top: 1px solid #F9F9F9; }
-
- #MB_header {
- background-color: #DDD;
- border-bottom: 1px solid #CCC;
- }
- #MB_caption { color: #000 }
- #MB_close { color: #777 }
- #MB_close:hover { color: #000 }
-
-
-/* Alert message */
-.MB_alert {
- margin: 10px 0;
- text-align: center;
-}
diff --git a/app/assets/stylesheets/screen.css.erb b/app/assets/stylesheets/screen.css.erb
deleted file mode 100644
index fe4add9..0000000
--- a/app/assets/stylesheets/screen.css.erb
+++ /dev/null
@@ -1,662 +0,0 @@
-body {
- border-left: 6px solid #5B4A73;
- height: 100% !important;
- margin: 0;
- padding: 0;
- font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: .85em;
- color: #333;
-}
-
-html {
- margin: 0;
- padding: 0;
- background: url(<%= asset_path 'line.png' %>) repeat-y;
- background-repeat: repeat-y;
-}
-
-a img {
- border: none !important;
-}
-
-a, a:visited {
- color: #4C3E61;
-}
-
-a:hover {
- color: #609317;
-}
-
-/* Menu */
-#top-menu {
- background-color: #4C3E61;
- font-size: 10px;
- position: relative;
- padding: 0;
- height: 21px;
- margin-left: -7px;
- padding-left: 7px;
-}
-
-#top-menu li, #top-menu #loggedas {
- color: #ddd;
- line-height: 21px;
- margin-right: 4px;
-}
-
-#top-menu li {
- float: left;
- list-style-type: none;
- margin: 0;
- padding: 0;
- white-space: nowrap;
-}
-
-#top-menu li a {
- color: #999;
- font-weight: normal;
- padding:4px 5px;
-}
-
-#top-menu li a:hover {
- color: #fff;
- text-decoration: none;
-}
-
-#top-menu ul {
- margin: 0;
- padding: 0;
-}
-
-#top-menu a {
- color: #fff;
- margin-right: 8px;
- font-weight: bold;
-}
-
-#top-menu #loggedas {
- float: right;
- margin-right: 0.5em;
- color: #fff;
-}
-
-#menu li a {
- background-color: #5B4A73;
- font-weight: normal;
- padding:4px 8px 6px;
- opacity: 0.6;
-}
-
-div#menu li {
- float:left;
- list-style-type:none;
- margin: 0px 2px 0px 0px;
- padding: 0px 0px 0px 0px;
- white-space:nowrap;
-}
-
-div#menu li a {
- display: block;
- color: #fff;
- text-decoration: none;
- font-weight: bold;
- margin: 0;
- padding: 4px 10px 4px 10px;
-}
-
-#menu li a:hover {
- background: #5B4A73;
- color: #fff;
- opacity: 1;
-}
-
-#menu li a.selected,
-body#new #menu li a.new,
-body#requests #menu li a.requests,
-body#drafts #menu li a.drafts,
-body#archive #menu li a.archive,
-body#secunia #menu li a.secunia,
-body#cve #menu li a.cve {
- background: #fff;
- color: #555;
- opacity: 1;
-}
-
-div#menu {
- height: 42px;
- background: #4C3E61 url(<%= asset_path 'menubg.png' %>) repeat-x;
- position: relative;
- bborder-bottom: 3px solid #4C3E61;
-}
-
-div#menu img.logo {
- float: right;
- border: 0 !important;
-}
-
-div#menu ul {
- position: absolute;
- bottom: 0;
- margin: 0;
- padding: 0;
- padding-left: 1em;
- margin-right: 260px;
- list-style: none;
-}
-
-div#menu #search {
- position: absolute;
- right: 200px;
- font-size: 80%;
- margin-top: 17px;
- color: white;
-}
-
-div#menu #search input {
- font-size: 80%;
-}
-
-/* Infobar */
-div#infobar {
- background-color: #D3CFE5;
- color: #4C3E61;
- font-size: 95%;
- padding: 0.2em;
- padding-left: 1.5em;
- border-bottom: 1px solid #8875B0;
-}
-
-div#infobar span {
- padding-right: 3em;
-}
-
-/* Flash notice stuff */
-div#flash.notice {
- padding: 0.2em;
- font-size: 95%;
- padding-left: 1.5em;
- background-color: #729FCF;
- border-bottom: 1px solid #1F3F7E;
- color: #1F3F7E;
-}
-
-div#flash.error {
- padding: 0.2em;
- font-size: 95%;
- padding-left: 1.5em;
- margin: 0;
- background-color: #A40000;
- border: none;
- border-bottom: 1px solid #A40000;
- color: white;
-}
-
-/* Sidebar */
-div#right {
- float: right;
- width: 252px;
- /*dbackground: #FCAF3E url(img/orangebg.png) repeat-y;*/
- cursor: default;
-}
-
-br.clear {
- clear: both;
-}
-
-/* Content */
-div#content {
- padding: 1em;
- border-right: 1px solid #B2AAC2;
- padding-bottom: 40px;
-}
-
-div#content h1 {
- margin-top: -.3em;
- margin-left: -.2em;
- margin-bottom: .3em;
- color: #4C3E61;
- font-size: 15pt;
-}
-
-h2 {
- color: #3E3550;
- font-size: 13pt;
-}
-
-.red {
- color: #A40000;
-}
-
-.spelling-error {
- border-bottom: 1px red dotted;
-}
-
-/* Floating */
-img.left, div.left, span.left {
- float: left;
-}
-
-.oneemright {
- margin-right: 1em;
-}
-
-.oneembottom {
- margin-bottom: 1em;
-}
-
-div#footer {
- border-left: 6px solid #5B4A73;
-
- color: #4C3E61;
- border-top: 3px solid #5B4A73;
- background-color: #D3CFE5;
-
- position: fixed;
- bottom: 0;
- height: 1.5em;
-
- font-size: 85%;
- margin-top: .3em;
- margin-left: -6px;
- width: 100%;
- padding: 0.4em;
-}
-
-div#footer a {
- color: #4C3E61;
-}
-
-div#footer span {
- padding-right: 1.5em;
-}
-
-span.hspacer {
- padding-right: 3em;
-}
-
-/** Tables **/
-table {
- border-spacing: 0;
- width: 100%;
-}
-
-tr {
- border-spacing: .3em;
-}
-
-.odd {
- background-color: #D3CFE5;
-}
-
-.odd-bright {
- background-color: #DEDBEF;
-}
-
-tr.invalid, tr.invalid td {
- background-color: #a40000 !important;
- color: white;
-}
-
-td {
- margin: 0;
- border: none;
- padding: .2em;
-}
-
-table#bugtable, table.list {
- font-size: 80%;
-}
-
-table#bugtable td, table.list td {
- border-bottom: 1px solid #8875B0;
- background-color: #DEDBEF;
-}
-
-table.code-preserve-ws code {
- white-space: pre-wrap;
- display: block;
- margin-bottom: .5em;
-}
-
-/** boxes **/
-div.box, div.legend {
- padding: .4em;
- background-color: #D3CFE5;
- border-bottom: 1px solid #8875B0;
- margin-bottom: 0.5em;
-}
-
-div.error {
- border: 1px solid #A40000;
- padding: .5em;
- margin: .5em;
- color: #A40000;
- background-color: white;
-}
-
-div.error .actions {
- border-top: 1px solid #A40000;
- padding: .25em;
- margin-top: .5em;
- text-align: right;
- padding-bottom: 0;
-}
-
-div.error .actions form.button-to div {
- display: inline;
-}
-
-div.legend {
- margin-top: 1em;
-}
-
-div.legend img {
- vertical-align: middle;
-}
-
-div.legend h3 {
- margin: 0;
-}
-
-div.legend span.column {
- float: left;
- display: inline-block;
- width: 19%;
- margin-right: 0.9%;
- border-right: 1px solid #8875B0;
-}
-
-div.legend span.last {
- margin-right: 0 !important;
- border-right: none !important;
-}
-
-div.box h2 {
- color: #3E3550;
- font-size: 120%;
- margin: 0;
-}
-
-div.box h2.boxtitle img {
- /*vertical-align: middle;*/
-}
-
-div.box span.toolbar {
- float: right;
- margin-right: 5px;
- margin-top: 2px;
-}
-
-div.box p {
- margin: 0;
-}
-
-div.box .box-actions {
- margin-top: 1em;
- padding: .25em;
- border-top: 1px solid #8875B0;
- text-align: right;
-}
-
-.pmargin p {
- margin-bottom: .5em !important;
-}
-
-.w40em {
- width: 40em;
-}
-
-.w100p {
- width: 100%;
-}
-
-/** comment list **/
-ul#commentslist {
- list-style-type: none;
- padding: 0;
- margin-bottom: 0;
-}
-
-li.comment {
- border-bottom: 1px solid #8875B0;
- padding: .25em;
-}
-
-.comment-header {
- float: left;
- text-align: center;
-}
-
-.comment-toolbox {
- float: right;
-}
-
-.comment-text {
- margin-left: 1.5em;
-}
-
-.comment-text p {
- margin-bottom: .5em !important;
-}
-
-.comment-author {
- font-size: smaller;
- clear: both;
- text-align: right;
- padding-bottom: .3em;
-}
-
-.comment-number {
- float: left;
- color: gray;
-}
-
-#addcommentsubmit {
- margin-right: 0;
-}
-
-/** popups **/
-div.popup {
- background-color: #8875B0;
- opacity: .9;
- padding: .2em;
-}
-
-/** leftright **/
-div#right {
- width: 40%;
- position: fixed;
- top: 100px;
- right: 10px;
-}
-
-div#left {
- width: 55%;
-}
-
-span.left {
- float: left;
-}
-
-table.padcells td {
- padding: 0.3em;
- padding-left: 0.5em;
- padding-right: 0.5em;
-}
-
-table.swap .odd {
- background-color: #E6E5EE;
-}
-
-table.centercells th {
- text-align: center;
-}
-
-tr.addbug {
- background-color: #D2DEBF;
-}
-
-tr.delbug {
- background-color: #AD9095;
-}
-
-div.progress {
- display: none;
- position: absolute;
- top: 10%;
- left: 45%;
-}
-
-/** Buttons **/
-div.buttons {
- padding: 0.5em;
- background-color: #D3CFE5;
- border-bottom: 1px solid #8875B0;
- margin-bottom: 0.5em;
-}
-
-a.button, input.button {
- border-top: 1px solid #8875B0;
- border-left: 1px solid #8875B0;
- border-right: 1px solid #5B4A73;
- border-bottom: 1px solid #5B4A73;
- padding: .2em;
- background: #4C3E61 url(<%= asset_path 'menubg.png' %>) repeat-x;
- font-size: 90%;
- color: white;
- text-decoration: none;
- margin: .4em;
- margin-right: .5em;
-}
-
-a.button:hover {
- color: #2B1C4A;
-}
-
-a.button:active {
- border-right: 1px solid #8875B0;
- border-bottom: 1px solid #8875B0;
- border-top: 1px solid #5B4A73;
- border-left: 1px solid #5B4A73;
-}
-
-a.button img {
- vertical-align: top;
-}
-
-/** Form controls **/
-form p, form ul#commentslist {
- padding: .5em;
- margin-bottom: .3em;
- margin-top: .3em;
-}
-
-form.l label {
- width: 15em;
- float: left;
-}
-
-form.popupform p {
- padding: 0;
- margin: 0;
- margin-bottom: .3em;
-}
-
-input.text {
- border: 1px solid #4C3E61;
- /*background-color: #D3CFE5;*/
-}
-
-textarea.nice, input.nice {
- border: 1px solid #4C3E61;
- width: 100%;
-}
-
-.largetext {
- font-size: 150%;
-}
-
-.hugetext {
- font-size: 180%;
-}
-
-.floatright {
- float: right;
-}
-
-.greytext {
- color: #555753;
-}
-
-.smalltext {
- font-size: 80%;
-}
-
-form.button_to {
- display: inline-block;
-}
-
-/** diff **/
-.diff_in, .diff_out {
- padding: 0.1em;
-}
-
-.diff_in {
- background-color: #A54F5D;
-}
-
-.diff_out {
- background-color: #7E9557;
-}
-
-.docked-right {
- position: fixed;
- top: 40px;
- right: 1em;
- bottom: 40px;
- width: inherit;
- margin-left: 1em;
-}
-
-/** tables **/
-table.glsamaker-table {
-}
-
-table.glsamaker-table p {
- margin-bottom: .5em;
- margin-top: .5em;
-}
-
-table.glsamaker-table th {
- border-bottom: 2px solid #4C3E61;
- border-right: 1px dotted #4C3E61;
- padding: .5em;
-}
-
-table.glsamaker-table th.left {
- border-right: 1px solid #4C3E61;
- border-bottom: 1px solid #4C3E61;
- text-align: left;
-}
-
-table.glsamaker-table tr.restricted, table.glsamaker-table tr.restricted a, .legend .red {
- color: #a40000 !important;
-}
-
-table.glsamaker-table td {
- padding: .5em;
- padding-top: .4em;
- padding-bottom: .4em;
- border-right: 1px dotted #4C3E61;
- border-bottom: 1px solid #4C3E61;
-}
-
-/** search **/
-span.match {
- color: #4C3E61;
- font-weight: bold;
-}
-
-.nowrap {
- white-space: nowrap;
-} \ No newline at end of file
diff --git a/app/controllers/admin/index_controller.rb b/app/controllers/admin/index_controller.rb
deleted file mode 100644
index ac48bfb..0000000
--- a/app/controllers/admin/index_controller.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-class Admin::IndexController < ApplicationController
- before_filter :admin_access_required
-
- def index
- end
-end
diff --git a/app/controllers/admin/templates_controller.rb b/app/controllers/admin/templates_controller.rb
deleted file mode 100644
index 1e5de16..0000000
--- a/app/controllers/admin/templates_controller.rb
+++ /dev/null
@@ -1,85 +0,0 @@
-class Admin::TemplatesController < ApplicationController
- before_filter :admin_access_required
-
- # GET /admin/templates
- # GET /admin/templates.json
- def index
- @templates = Template.all
-
- respond_to do |format|
- format.html # index.html.erb
- format.json { render :json => @templates }
- end
- end
-
- # GET /admin/templates/1
- # GET /admin/templates/1.json
- def show
- @template = Template.find(params[:id])
-
- respond_to do |format|
- format.html # show.html.erb
- format.json { render :json => @template }
- end
- end
-
- # GET /admin/templates/new
- # GET /admin/templates/new.json
- def new
- @template = Template.new
-
- respond_to do |format|
- format.html # new.html.erb
- format.json { render :json => @template }
- end
- end
-
- # GET /admin/templates/1/edit
- def edit
- @template = Template.find(params[:id])
- end
-
- # POST /admin/templates
- # POST /admin/templates.json
- def create
- @template = Template.new(params[:template].permit(:name, :text, :target, :enabled))
-
- respond_to do |format|
- if @template.save
- format.html { redirect_to admin_template_path(@template), :notice => 'Template was successfully created.' }
- format.json { render :json => @template, :status => :created, :location => @template }
- else
- format.html { render :action => "new" }
- format.json { render :json => @template.errors, :status => :unprocessable_entity }
- end
- end
- end
-
- # PUT /admin/templates/1
- # PUT /admin/templates/1.json
- def update
- @template = Template.find(params[:id])
-
- respond_to do |format|
- if @template.update_attributes(params[:template].permit(:name, :text, :target, :enabled))
- format.html { redirect_to admin_template_path(@template), :notice => 'Template was successfully updated.' }
- format.json { head :ok }
- else
- format.html { render :action => "edit" }
- format.json { render :json => @template.errors, :status => :unprocessable_entity }
- end
- end
- end
-
- # DELETE /admin/templates/1
- # DELETE /admin/templates/1.json
- def destroy
- @template = Template.find(params[:id])
- @template.destroy
-
- respond_to do |format|
- format.html { redirect_to admin_templates_url }
- format.json { head :ok }
- end
- end
-end
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
deleted file mode 100644
index d43628d..0000000
--- a/app/controllers/admin/users_controller.rb
+++ /dev/null
@@ -1,71 +0,0 @@
-class Admin::UsersController < ApplicationController
- before_filter :admin_access_required
-
- def index
- @users = User.where('id > 0')
- end
-
- def show
- @user = User.find(params[:id])
-
- if @user.id == 0
- flash[:error] = "That's the system account."
- redirect_to(admin_users_path)
- return
- end
- end
-
- def create
- @user = User.new(params[:user].permit([:login, :name, :email, :access, :disabled, :jefe]))
-
- if @user.save
- redirect_to(admin_user_path(@user), :notice => 'User was successfully created.')
- else
- render :action => "new"
- end
- end
-
- def new
- @user = User.new
- end
-
- def edit
- @user = User.find(params[:id])
-
- if @user.id == 0
- flash[:error] = "That's the system account."
- redirect_to(admin_users_path)
- return
- end
- end
-
- def update
- @user = User.find(params[:id])
-
- if @user.id == 0
- flash[:error] = "That's the system account."
- redirect_to(admin_users_path)
- return
- end
-
- if @user.update_attributes(params[:user].permit([:login, :name, :email, :access, :disabled, :jefe]))
- redirect_to(admin_user_path(@user), :notice => 'User was successfully updated.')
- else
- render :action => "edit"
- end
- end
-
- def destroy
- @user = User.find(params[:id])
-
- if @user.id == 0
- flash[:error] = "That's the system account."
- redirect_to(admin_users_path)
- return
- end
-
- @user.destroy
- flash[:notice] = "User was successfully deleted."
- redirect_to(admin_users_path)
- end
-end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
deleted file mode 100644
index e839aeb..0000000
--- a/app/controllers/application_controller.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Filters added to this controller apply to all controllers in the application.
-# Likewise, all the methods added will be available for all controllers.
-
-class ApplicationController < ActionController::Base
- helper :all # include all helpers, all the time
- protect_from_forgery # See ActionController::RequestForgeryProtection for details
-
- include Authentication
- include Authorization
- include ApplicationHelper
-
- before_filter :login_required
-
- protected
- def log_error(error)
- caller[0] =~ /`([^']*)'/ and where = $1
- logger.error "[#{where}] #{error.class}: #{error.message}"
- logger.info error.backtrace.join("\n")
- #ExceptionNotifier::Notifier.exception_notification(request.env, error).deliver
- end
-end
diff --git a/app/controllers/bug_controller.rb b/app/controllers/bug_controller.rb
deleted file mode 100644
index 83672bb..0000000
--- a/app/controllers/bug_controller.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-class BugController < ApplicationController
- def bug
- begin
- @bug = Glsamaker::Bugs::Bug.load_from_id(params[:id].to_i)
- rescue SocketError => e
- log_error e
- @bug = "down"
- rescue ArgumentError => e
- log_error e
- @bug = nil
- end
-
- render :layout => false
- end
-
- def history
- begin
- @bug = Glsamaker::Bugs::Bug.load_from_id(params[:id].to_i)
- rescue SocketError => e
- @bug = "down"
- rescue ArgumentError => e
- @bug = nil
- end
-
- render :layout => false
- end
-
-end
diff --git a/app/controllers/bugs_controller.rb b/app/controllers/bugs_controller.rb
deleted file mode 100644
index 5e5c6d9..0000000
--- a/app/controllers/bugs_controller.rb
+++ /dev/null
@@ -1,59 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2011 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# BugsController handles bugs attached to GLSAs
-class BugsController < ApplicationController
- layout false
-
- def new
- begin
- @glsa = Glsa.find(Integer(params[:glsa_id]))
- @bug = Bug.new
- rescue Exception
- @glsa = nil
- end
- end
-
- def create
- @glsa = Glsa.find(params[:glsa_id].to_i)
- return unless check_object_access!(@glsa)
-
- unless @glsa.nil?
- @added_bugs = []
- Bugzilla::Bug.str2bugIDs(params[:addbugs]).map do |bugid|
- begin
- @added_bugs << Glsamaker::Bugs::Bug.load_from_id(bugid)
- rescue Exception => e
- # Silently ignore invalid bugs
- end
- end
-
- begin
- @bugs_text = render_to_string :partial => '/glsa/edit_bug_row', :collection => @added_bugs, :as => :bug
- rescue Exception => e
- @error = "Error: #{e.message}"
- log_error e
- end
- else
- @error = "Cannot find GLSA"
- end
-
- respond_to do |format|
- format.html { render :status => 500 }
- format.js
- end
- end
-
- def destroy
- end
-
- def show
- end
-end
diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb
deleted file mode 100644
index aa56e6a..0000000
--- a/app/controllers/comments_controller.rb
+++ /dev/null
@@ -1,76 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2011 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# CommentController handles comments made for GLSAs
-class CommentsController < ApplicationController
- layout false
-
- def new
- begin
- @glsa = Glsa.find(Integer(params[:glsa_id]))
- @comment = Comment.new
- rescue Exception => e
- @glsa = nil
- end
- end
-
- def create
- @glsa = Glsa.find(params[:glsa_id].to_i)
-
- unless @glsa.nil?
- comment_data = params[:newcomment].permit([:text, :rating])
- comment = nil
-
- if comment_data['text'].strip != ''
- comment = @glsa.comments.build(comment_data)
- comment.user = current_user
-
- if comment.save
- Glsamaker::Mail.comment_notification(@glsa, comment, current_user)
-
- if @glsa.is_approved? and @glsa.approvals.count == @glsa.rejections.count + 2
- Glsamaker::Mail.approval_notification(@glsa)
- end
- else
- @error = comment.errors
- render
- return
- end
- else
- @error = "Error: Comment text is empty."
- render
- return
- end
-
- begin
- @comment_number = @glsa.comments.count
- @css_class = @comment_number.odd? ? 'odd-bright' : ''
- @comment_text = render_to_string :partial => "/glsa/comment", :object => comment
- rescue Exception => e
- log_error e
- @error = "Error: #{e.message}"
- end
- else
- @error = "Error: Cannot find GLSA"
- end
-
- respond_to do |format|
- format.html { render :status => 500 }
- format.js
- end
- end
-
- def show
- end
-
- def destroy
- end
-
-end
diff --git a/app/controllers/cve_controller.rb b/app/controllers/cve_controller.rb
deleted file mode 100644
index 203dfad..0000000
--- a/app/controllers/cve_controller.rb
+++ /dev/null
@@ -1,323 +0,0 @@
-class CveController < ApplicationController
- include ApplicationHelper
- include CveHelper
-
- before_filter :check_access, :except => [:info, :general_info, :references, :packages, :comments, :changes]
-
- def index
- @pageID = 'cve'
- end
-
- def list
- @pageID = 'cve'
-
- condition = view_mask_to_condition(params[:view_map].to_i)
- @cves = Cve.where(condition).limit(1000).order('cve_id DESC')
-
- respond_to do |format|
- format.html
- format.json {
- x = @cves.map {|cve| [cve.id, cve.colorize(:cve_id), CGI.escapeHTML(cve.summary), cve.state]}
- render :text => x.to_json }
- end
- end
-
- def bug_package
- cve_nums = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "File new Bug; CVElist: " + cve_nums.inspect }
-
- cves = cve_nums.map {|c| Cve.find(c) }
- cpes = cves.map {|c| c.cpes.map{|cpe| cpe.product } }.flatten.uniq
-
- package_hints = cves.map{|c| c.package_hints }.flatten.uniq.sort
- logger.debug { "CPE Products: " + cpes.inspect }
- logger.debug { "Package hints: " + package_hints.inspect }
-
- logger.debug { {:package_hints => package_hints}.to_json }
- render :json => {:package_hints => package_hints}.to_json
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def bug_preview
- cve_nums = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "File new Bug (preview); CVElist: " + cve_nums.inspect }
-
- @cve_ids = cve_nums.map {|c| Cve.find(c).cve_id }
- @cve_txt = Cve.concat(cve_nums)
- @package = params[:package]
- @maintainers = Glsamaker::Portage.get_maintainers(params[:package])
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def bug
- cve_nums = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "File new Bug (final); CVElist: " + cve_nums.inspect }
-
- cves = cve_nums.map {|c| Cve.find(c) }
-
- data = {
- :product => 'Gentoo Security',
- :component => params[:bug_type] == 'true' ? 'Vulnerabilities' : 'Kernel',
- :summary => params[:bug_title],
- :assignee => 'security@gentoo.org'
- }
-
- cc = []
- if params[:cc_maint] == 'true'
- cc += Glsamaker::Portage.get_maintainers(params[:package])
- end
-
- cc += params[:cc_custom].split(',')
- data[:cc] = cc.compact.delete_if {|i| i == ''}
-
- comment = ""
- if params[:add_cves] == 'true'
- comment += Cve.concat(cve_nums)
- end
-
- if params[:add_comment] == 'true'
- comment += "\n" if params[:add_cves]
- comment += params[:comment]
- end
- data[:comment] = comment
-
- whiteboard = ""
- if params[:bug_type] == 'true' # If the bug is not a kernel issue
- whiteboard += "%s %s" % [params[:wb_1], params[:wb_2]]
- whiteboard += " %s" % params[:wb_ext] unless params[:wb_ext] == ""
- else
- whiteboard = params[:wb_ext]
- end
-
- data[:severity] = whiteboard_to_severity(whiteboard)
- data[:version] = 'unspecified'
- data[:status] = 'IN_PROGRESS'
-
- bugnr = -1
- begin
- bugnr = Bugzilla.file_bug(data)
- Bugzilla.update_bug(bugnr, {:whiteboard => whiteboard})
- rescue Exception => e
- log_error e
- raise "Filing the bug failed. Check if the accounts in CC actually exist."
- end
-
- logger.info "Filed bug #{bugnr} on behalf of user #{current_user.login}."
-
- cves.each {|cve| cve.assign(bugnr, current_user, :file) }
-
- render :text => 'ok'
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def assign_preview
- bug_id = Integer(params[:bug])
- cves = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "Assign Bug: #{bug_id} CVElist: " + cves.inspect }
-
- cve_ids = cves.map {|c| Cve.find(c).cve_id }
- logger.debug { cve_ids.inspect }
-
- @cve_txt = Cve.concat(cves)
- @bug = Glsamaker::Bugs::Bug.load_from_id(bug_id)
- @summary = cveify_bug_title(@bug.summary, cve_ids)
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def assign
- bug_id = Integer(params[:bug])
- cves = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "Assign Bug: #{bug_id} CVElist: " + cves.inspect }
-
- if params[:comment] or params[:summary]
- bug = Glsamaker::Bugs::Bug.load_from_id(bug_id)
- cve_ids = cves.map {|c| Cve.find(c).cve_id }
- changes = {}
-
- changes[:comment] = Cve.concat(cves) if params[:comment] == 'true'
- changes[:summary] = cveify_bug_title(bug.summary, cve_ids) if params[:summary] == 'true'
- Bugzilla.update_bug(bug_id, changes)
- end
-
- cves.each {|cve_id| Cve.find(cve_id).assign(bug_id, current_user, :assign) }
-
- render :text => "ok"
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def new
- @cve = Cve.create(cve_id: params[:cve_id], summary: params[:summary], state: 'NEW')
- render :text => "ok"
- rescue Exception => e
- log_error e
- respond_to do |format|
- format.html { flash.now[:error] = 'Filing the CVE failed. Is this a duplicate?' }
- format.js {
- raise 'Filing the CVE failed. Is this a dupliate?'
- render :text => e.message, :status => 500
- }
- end
- end
-
- def nfu
- @cves = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "NFU CVElist: " + @cves.inspect + " Reason: " + params[:reason] }
-
- @cves.each do |cve_id|
- Cve.find(cve_id).nfu(current_user, params[:reason])
- end
-
- render :text => "ok"
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def note
- @cves = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "Note CVElist: " + @cves.inspect + " Note: " + params[:note] }
-
- @cves.each do |cve_id|
- Cve.find(cve_id).add_comment(current_user, params[:note])
- end
-
- render :text => "ok"
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def invalid
- @cves = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "Invalid CVElist: " + @cves.inspect + " Reason: " + params[:reason] }
-
- @cves.each do |cve_id|
- Cve.find(cve_id).invalidate(current_user, params[:reason])
- end
-
- render :text => "ok"
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def later
- @cves = params[:cves].split(',').map{|cve| Integer(cve)}
- logger.debug { "LATER CVElist: " + @cves.inspect + " Reason: " + params[:reason] }
-
- @cves.each do |cve_id|
- Cve.find(cve_id).later(current_user, params[:reason])
- end
-
- render :text => "ok"
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- # Popup methods
- def info
- @cve = Cve.where(cve_id: params[:id]).first
- fail ActionController::RoutingError, 'Not Found' unless @cve
-
- respond_to do |wants|
- wants.html {}
- wants.json {}
- end
- end
-
- def general_info
- @cve = Cve.where(:cve_id => params[:cve_id]).first
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def references
- @cve = Cve.where(:cve_id => params[:cve_id]).first
- raise "Cannot find CVE" if @cve == nil
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def packages
- @cve = Cve.where(:cve_id => params[:cve_id]).first
- raise "Cannot find CVE" if @cve == nil
-
- @package_hints = @cve.package_hints
-
- logger.debug @package_hints.inspect
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def comments
- @cve = Cve.where(:cve_id => params[:cve_id]).first
- raise "Cannot find CVE" if @cve == nil
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def changes
- @cve = Cve.where(:cve_id => params[:cve_id]).first
- raise "Cannot find CVE" if @cve == nil
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def actions
- @cve = Cve.where(:cve_id => params[:cve_id]).first
- raise "Cannot find CVE" if @cve == nil
-
- render :layout => false
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- def mark_new
- @cve = Cve.where(:cve_id => params[:cve_id]).first
-
- @cve.mark_new(current_user)
- render :text => "ok"
- rescue Exception => e
- log_error e
- render :text => e.message, :status => 500
- end
-
- protected
- def check_access
- if current_user.access < 2
- deny_access "User has no access to the CVEtool"
- return false
- end
- end
-
-end
diff --git a/app/controllers/glsa_controller.rb b/app/controllers/glsa_controller.rb
deleted file mode 100644
index 84012b6..0000000
--- a/app/controllers/glsa_controller.rb
+++ /dev/null
@@ -1,562 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010-11 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# GLSA controller
-class GlsaController < ApplicationController
- def requests
- @pageID = "requests"
- @pageTitle = "GLSA requests"
- @glsas = Glsa.where(:status => 'request').order('updated_at DESC')
- end
-
- def drafts
- @pageID = "drafts"
- @pageTitle = "GLSA drafts"
- @glsas = Glsa.where(:status => 'draft').order('updated_at DESC')
- end
-
- def archive
- @pageID = "archive"
- @pageTitle = "GLSA archive"
-
- respond_to do |format|
- format.html {
- @month = (params[:month] || Date.today.month).to_i
- @year = (params[:year] || Date.today.year).to_i
-
- month_start = Date.new(@year, @month, 1)
- if @month == 12
- month_end = DateTime.new(@year + 1, 1, 1, 23, 59, 59) -1
- else
- month_end = DateTime.new(@year, @month + 1, 1, 23, 59, 59) - 1
- end
-
- @glsas = Glsa.where(:status => 'release', :first_released_at => month_start..month_end).order('updated_at DESC')
- }
- format.js {
- @month = params[:view]['month(2i)'].to_i
- @year = params[:view]['month(1i)'].to_i
-
- month_start = Date.new(@year, @month, 1)
- month_end = nil
-
- if @month == 12
- month_end = DateTime.new(@year + 1, 1, 1, 23, 59, 59) -1
- else
- month_end = DateTime.new(@year, @month + 1, 1, 23, 59, 59) - 1
- end
-
- @glsas = Glsa.where(:status => 'release', :first_released_at => month_start..month_end).order('updated_at DESC')
- @table = render_to_string :partial => "glsa_row", :collection => @glsas, :as => :glsa, :locals => { :view => :drafts }
- }
- end
- end
-
- def new
- @pageID = "new"
- @pageTitle = "New GLSA"
-
- # TODO: Straight-to-draft editing
- render :action => "new-request"
- return
-
- if params[:what] == "request"
- render :action => "new-request"
- elsif params[:what] == "draft"
- render :action => "new-draft"
- else
- render
- end
- end
-
- def create
- if params[:what] == "request"
- begin
- glsa = Glsa.new_request(params[:title], params[:bugs], params[:comment], params[:access], (params[:import_references].to_i == 1), current_user)
-
- Glsamaker::Mail.request_notification(glsa, current_user)
-
- flash[:notice] = "Successfully created GLSA #{glsa.glsa_id}"
- redirect_to :action => "requests"
- rescue Exception => e
- log_error e
- flash.now[:error] = e.message
- render :action => "new-request"
- end
- end
- end
-
- def show
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @rev = params[:rev_id].nil? ? @glsa.last_revision : @glsa.revisions.find_by_revid(params[:rev_id])
- @pageTitle = "GLSA #{@glsa.glsa_id} (#{@rev.title})"
-
- if @rev == nil
- flash[:error] = "Invalid revision ID"
- redirect_to :action => "show"
- return
- end
-
- respond_to do |wants|
- wants.html { render }
- wants.xml { }
- wants.txt { render }
- end
- end
-
- def download
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @rev = params[:rev_id].nil? ? @glsa.last_revision : @glsa.revisions.find_by_revid(params[:rev_id])
-
- if @rev == nil
- flash[:error] = "Invalid revision ID"
- redirect_to :action => "show"
- return
- end
-
- text = nil
- respond_to do |wants|
- wants.xml do
- text = render_to_string(:action => :show, :format => 'xml')
- send_data(text, :filename => "glsa-#{@glsa.glsa_id}.#{params[:format]}")
- end
-
- wants.txt do
- text = render_to_string(:template => 'glsa/_email_headers.txt.erb', :format => 'txt')
- text += render_to_string(:action => :show, :format => 'txt')
- render :text => text
- end
-
- wants.html do
- render :text => "Cannot download HTML format. Pick .xml or .txt"
- return
- end
- end
- end
-
- def edit
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @rev = @glsa.last_revision
- @pageTitle = "Edit GLSA #{@glsa.glsa_id}"
-
- set_up_editing
- end
-
- def update
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @rev = @glsa.last_revision
-
- if @glsa.nil?
- flash[:error] = "Unknown GLSA ID"
- redirect_to :action => "index"
- return
- end
-
- # GLSA object
- # The first editor is submitter, we assume he edits the description during that
- if @glsa.submitter.nil? and params[:glsa][:description].strip != ""
- @glsa.submitter = current_user
- @glsa.status = "draft" if @glsa.status == "request"
- end
-
- @glsa.restricted = (params[:glsa][:restricted] == "confidential")
-
- # Force update
- @glsa.touch
-
- revision = Revision.new
- revision.revid = @glsa.next_revid
- revision.glsa = @glsa
- revision.user = current_user
- revision.title = params[:glsa][:title]
- revision.synopsis = params[:glsa][:synopsis]
- revision.access = params[:glsa][:access]
- revision.severity = params[:glsa][:severity]
- revision.product = params[:glsa][:product]
- revision.description = params[:glsa][:description]
- revision.background = params[:glsa][:background]
- revision.impact = params[:glsa][:impact]
- revision.workaround = params[:glsa][:workaround]
- revision.resolution = params[:glsa][:resolution]
-
- unless revision.save
- flash[:error] = "Errors occurred while saving the Revision object: #{revision.errors.full_messages.join ', '}"
- set_up_editing
- render :action => "edit"
- return
- end
-
- unless @glsa.save
- flash[:error] = "Errors occurred while saving the GLSA object"
- set_up_editing
- render :action => "edit"
- return
- end
-
- # Bugs
- bugzilla_warning = false
-
- if params[:glsa][:bugs]
- bugs = params[:glsa][:bugs].map {|bug| bug.to_i }
-
- bugs.uniq.sort.each do |bug|
- begin
- b = Glsamaker::Bugs::Bug.load_from_id(bug)
-
- revision.bugs.create!(
- :bug_id => bug,
- :title => b.summary,
- :whiteboard => b.status_whiteboard,
- :arches => b.arch_cc.join(', ')
- )
- rescue ActiveRecord::RecordInvalid => e
- flash[:error] = "Errors occurred while saving a bug: #{e.record.errors.full_messages.join ', '}"
- set_up_editing
- render :action => "edit"
- return
- rescue Exception => e
- log_error e
- # In case of bugzilla errors, just keep the bug #
- revision.bugs.create(
- :bug_id => bug
- )
- bugzilla_warning = true
- end
- end
- end
-
- logger.debug "Packages: " + params[:glsa][:package].inspect
-
- # Packages
- packages = params[:glsa][:package] || []
- packages.each do |package|
- logger.debug package.inspect
- next if package[:atom].strip == ''
-
- begin
- revision.packages.create!(package.permit([:atom, :comp, :version, :arch, :automatic, :my_type, :slot]))
- rescue ActiveRecord::RecordInvalid => e
- flash[:error] = "Errors occurred while saving a package: #{e.record.errors.full_messages.join ', '}"
- set_up_editing
- render :action => "edit"
- return
- end
- end
-
- # References
- unless params[:glsa][:reference].nil?
- refs = params[:glsa][:reference].sort { |a, b| a[:title] <=> b[:title] }
- refs.each do |reference|
- logger.debug reference.inspect
- next if reference[:title].strip == ''
-
- # Special handling: Add CVE URL automatically
- if reference[:title].strip =~ /^CVE-\d{4}-\d{4}/ and reference[:url].strip == ''
- reference[:url] = "https://nvd.nist.gov/vuln/detail/#{reference[:title].strip}"
- end
-
- begin
- revision.references.create(reference.permit([:title, :url]))
- rescue ActiveRecord::RecordInvalid => e
- flash[:error] = "Errors occurred while saving a reference: #{e.record.errors.full_messages.join ', '}"
- set_up_editing
- render :action => "edit"
- return
- end
- end
- end
-
- # Comments
- @glsa.comments.each do |comment|
- comment.read = params["commentread-#{comment.id}"] == "true"
- comment.save
- end
-
- # Sending emails
- Glsamaker::Mail.edit_notification(@glsa, rev_diff(@glsa, @glsa.revisions[-2], revision), current_user)
-
- flash[:notice] = "Saving was successful. #{'NOTE: Bugzilla integration is not available, only plain bug numbers.' if bugzilla_warning}"
- redirect_to :action => 'show', :id => @glsa
-
- end
-
- def prepare_release
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @pageTitle = "Releasing GLSA #{@glsa.glsa_id}"
-
- if current_user.access < 2
- deny_access "Tried to prepare release"
- return
- end
-
- if @glsa.status == 'request'
- flash[:error] = 'You cannot release a request. Draft the advisory first.'
- redirect_to :action => "show", :id => @glsa
- return
- end
-
- if @glsa.restricted
- flash[:error] = 'You cannot release a confidential draft. Make it public first.'
- redirect_to :action => "show", :id => @glsa
- return
- end
-
- @rev = @glsa.last_revision
-
- @comments_override = (current_user.is_el_jefe? and params[:override_approvals].to_i == 1) || false
- end
-
- def release
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @pageTitle = "Releasing GLSA #{@glsa.glsa_id}"
-
- if current_user.access < 2
- deny_access "Tried to release"
- return
- end
-
- if @glsa.status == 'request'
- flash[:error] = 'You cannot release a request. Draft the advisory first.'
- redirect_to :action => "show", :id => @glsa
- return
- end
-
- if @glsa.restricted
- flash[:error] = 'You cannot release a confidential draft. Make it public first.'
- redirect_to :action => "show", :id => @glsa
- return
- end
-
- @rev = @glsa.last_revision
- begin
- if current_user.is_el_jefe?
- @glsa.release!
- else
- @glsa.release
- end
-
- @glsa.invalidate_last_revision_cache
-
- if params[:email] == '1'
- with_format('txt') do
- Glsamaker::Mail.send_text(
- render_to_string({:template => 'glsa/show.txt.erb', :layout => false}).html_safe,
- "[ GLSA #{@glsa.glsa_id} ] #{@rev.title}",
- current_user,
- false
- )
- end
- end
- rescue GLSAReleaseError => e
- flash[:error] = "Internal error: #{e.message}. Cannot release advisory."
- redirect_to :action => "show", :id => @glsa
- return
- end
-
- # ugly hack, but necessary to switch back to html
- @real_format = 'html'
- render(:formats => [:html], :layout => 'application')
- end
-
- def finalize_release
- @glsa = Glsa.find(params[:id])
- @pageTitle = "Released GLSA #{@glsa.glsa_id}"
-
- if params[:close_bugs] == '1'
- message = "GLSA #{@glsa.glsa_id}"
- with_format(:txt) do
- message = render_to_string :partial => 'close_msg'
- end
-
- @glsa.close_bugs(message)
- end
-
- # ugly hack, but necessary to switch back to html
- @real_format = 'html'
- render(:formats => [:html], :layout => 'application')
- end
-
- def diff
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @pageTitle = "Comparing GLSA #{@glsa.glsa_id}"
-
- rev_old = @glsa.revisions.find_by_revid(params[:old])
- rev_new = @glsa.revisions.find_by_revid(params[:new])
-
- @diff = with_format(:xml) { rev_diff(@glsa, rev_old, rev_new) }
- end
-
- def update_cache
- @glsa = Glsa.find(params[:id])
- return unless check_object_access!(@glsa)
- @rev = @glsa.last_revision
-
- @rev.update_cached_bug_metadata
-
- flash[:notice] = "Successfully updated all caches."
- if params[:redirect]
- redirect_to params[:redirect]
- else
- redirect_to :action => 'show', :id => @glsa unless params[:no_redirect]
- end
- rescue Exception => e
- log_error e
- flash[:notice] = "Could not update caches: #{e.message}"
- if params[:redirect]
- redirect_to params[:redirect]
- else
- redirect_to :action => 'show', :id => @glsa unless params[:no_redirect]
- end
- end
-
- def destroy
- if !current_user.is_el_jefe?
- deny_access "Cannot delete draft as non-admin user"
- end
-
- @glsa = Glsa.find(Integer(params[:id]))
- @glsa.destroy
- flash[:notice] = "GLSA successfully deleted."
- redirect_to :controller => :index
- end
-
- def import_references
- begin
- if params[:go].to_s == '1'
- glsa = Glsa.find(Integer(params[:id]))
- return unless check_object_access!(glsa)
- refs = []
-
- params[:import][:cve].each do |cve_id|
- cve = Cve.find_by_cve_id cve_id
- refs << {:title => cve.cve_id, :url => cve.url}
- end
-
- refs = refs.sort { |a, b| a[:title] <=> b[:title] }
-
- glsa.add_references refs
-
- flash[:notice] = "Imported #{refs.count} references."
- redirect_to :action => "show", :id => glsa.id
- return
- else
- @glsa = Glsa.find(Integer(params[:id]))
- return unless check_object_access!(@glsa)
- @cves = @glsa.related_cves
- end
- rescue Exception => e
- render :text => "Error: #{e.message}", :status => 500
- log_error e
- return
- end
-
- render :layout => false
- end
-
- protected
- def set_up_editing
- # Packages
- @rev.vulnerable_packages.build(:comp => "<", :slot => "*", :arch => "*") if @rev.vulnerable_packages.length == 0
- @rev.unaffected_packages.build(:comp => ">=", :slot => "*", :arch => "*") if @rev.unaffected_packages.length == 0
-
- # References
- if params.has_key? :glsa and params[:glsa].has_key? :reference
- @references = []
- params[:glsa][:reference].each do |reference|
- @references << Reference.new(reference)
- end
- elsif @rev.references.length == 0
- @references = [Reference.new]
- else
- @references = @rev.references
- end
-
- # Bugs
- if params.has_key? :glsa and params[:glsa].has_key? :bugs
- @bugs = []
- params[:glsa][:bugs].each do |bug|
- @bugs << Bug.new(:bug_id => bug)
- end
- else
- @bugs = @rev.bugs
- end
-
- # Packages
- if params.has_key? :glsa and params[:glsa].has_key? :package
- @unaffected_packages = []
- @vulnerable_packages = []
- params[:glsa][:package].each do |package|
- if package[:my_type] == 'vulnerable'
- @vulnerable_packages << Package.new(package)
- elsif package[:my_type] == 'unaffected'
- @unaffected_packages << Package.new(package)
- end
- end
- else
- @unaffected_packages = @rev.unaffected_packages
- @vulnerable_packages = @rev.vulnerable_packages
- end
-
- @templates = {}
- GLSAMAKER_TEMPLATE_TARGETS.each do |target|
- @templates[target] = Template.where(:target => target).all
- end
- end
-
-
- def rev_diff(glsa, rev_old, rev_new, format = :unified, context_lines = 3)
- @glsa = glsa
- old_text = ""
-
- unless rev_old.nil?
- @rev = rev_old
- old_text = Glsamaker::XML.indent(
- render_to_string(
- :template => 'glsa/_glsa.xml.builder',
- :locals => {:glsa => @glsa, :rev => @rev},
- :layout => 'none'
- ),
- {:indent => 2, :maxcols => 80}
- )
- end
-
- new_text = ""
-
- unless rev_new.nil?
- @rev = rev_new
- new_text = Glsamaker::XML.indent(
- render_to_string(
- :template => 'glsa/_glsa.xml.builder',
- :locals => {:glsa => @glsa, :rev => @rev},
- :layout => 'none'
- ),
- {:indent => 2, :maxcols => 80}
- )
- end
-
- diff = ""
- begin
- diff = Glsamaker::Diff.diff(old_text, new_text, format, context_lines)
- rescue Exception => e
- diff = "Error in diff provider. Cannot provide diff."
- log_error e
- end
-
- diff
- end
-end
diff --git a/app/controllers/index_controller.rb b/app/controllers/index_controller.rb
deleted file mode 100644
index 2420092..0000000
--- a/app/controllers/index_controller.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Index controller
-class IndexController < ApplicationController
- skip_before_filter :login_required, :only => [:error]
-
- def index
- @my_drafts = Glsa.where(:status => 'draft', :submitter => current_user.id).order("updated_at DESC").limit(10)
- @pageTitle = "Welcome"
- end
-
- def error
- if params[:type] == "user"
- render :template => 'index/error-user', :layout => 'notice'
- elsif params[:type] == "disabled"
- render :template => 'index/error-disabled', :layout => 'notice'
- elsif params[:type] == "access"
- render :template => 'index/error-access', :layout => 'notice'
- else
- render :template => 'index/error-system', :layout => 'notice'
- end
- end
-
- def about
- @pageTitle = "About GLSAMaker 2"
- end
-
- def profile
- @user = current_user
- @prefs = @user.preferences
- end
-
- def update
- @user = current_user
- @prefs = @user.preferences
-
- preferences = {:own_ready => false, :own_comment => false, :edit => false, :new_req => false, :not_me => false}
-
- unless params[:preferences] == nil
- %w[own_ready own_comment edit new_req not_me].each do |notification|
- preferences[notification.to_sym] = params[:preferences][notification] == '1'
- end
- end
-
- @user.preferences[:mail] ||= {}
- @user.preferences[:mail] = preferences
- if @user.save
- flash[:notice] = "Successfully updated your profile"
- redirect_to :action => "index"
- else
- flash[:error] = "Could not update your profile"
- render :action => "profile"
- end
- end
-
-end
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
deleted file mode 100644
index 55c6594..0000000
--- a/app/controllers/search_controller.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-class SearchController < ApplicationController
- def index
- end
-
- def results
- search = ThinkingSphinx.search(params[:q], :max_matches => 1000, :per_page => 1000)
- search.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
-
- @results = {}
- search.each do |result|
- klass = result.class.to_s
- @results[klass] = [] unless @results.include? klass
- @results[klass] << result
- end
-
- if @results.include? 'Revision'
- @results['Glsa'] = [] unless @results['Glsa']
-
- @results['Revision'].each do |rev|
- @results['Glsa'] << rev.glsa
- end
-
- @results['Glsa'].uniq!
- end
-
- # Filter search results
- if @results.include? 'Glsa'
- @results['Glsa'].delete_if do |result|
- not check_object_access(result)
- end
- end
- rescue Riddle::ConnectionError => e
- @error = true
- rescue Riddle::ResponseError => e
- @error = true
- end
-end
diff --git a/app/controllers/tools_controller.rb b/app/controllers/tools_controller.rb
deleted file mode 100644
index b1ead08..0000000
--- a/app/controllers/tools_controller.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Tools controller
-class ToolsController < ApplicationController
- layout false
-
- # Provides information for the 'file new request' page
- def bugs_ajax_info
- if params[:bugs] == nil
- render :text => "No bug given", :status => 500
- return
- end
-
- bug_ids = Bugzilla::Bug.str2bugIDs(params[:bugs])
-
- @bugs = []
- bug_ids.each do |bug_id|
- begin
- @bugs << Bugzilla::Bug.load_from_id(bug_id.to_i)
- rescue Exception => e
- @bugs << "Ignoring #{bug_id} #{e.message}"
- end
- end
-
- buginfo = render_to_string :template => 'tools/ajaxbugs', :layout => false
-
- # Generating a description
- @bugs.delete_if {|i| i.is_a? String}
- suggestion = nil
-
- if @bugs.length == 1
- @text = @bugs[0].summary
- suggestion = render_to_string :template => 'tools/ajaxdescr', :layout => false
- else
- @atoms = []
- @bugs.each do |bug|
- matchdata = /([\w-]+)\/([\w-]+)(-([\w.]+))?/.match(bug.summary)
-
- unless matchdata.nil?
- category = matchdata[1]
- package = matchdata[2].gsub(/-+?$/, '')
-
- @atoms << "#{category}/#{package}"
- end
- end
-
- @atoms.uniq!
-
- if @atoms.length > 0
- @text = @atoms.join(', ') + ": Multiple vulnerabilities"
- suggestion = render_to_string :template => 'tools/ajaxdescr', :layout => false
- end
- end
-
- suggestion ||= "(no suggestion available)"
-
- render :json => {"buginfo" => buginfo, "title" => suggestion}
- end
-
- def background
- render :layout => false
- end
-
- def template
- @target = params[:template][:target]
-
- if GLSAMAKER_TEMPLATE_TARGETS.include? @target
- begin
- @template = Template.find(params[:template][:id])
- rescue ActiveRecord::RecordNotFound
- @error = "Cannot find template"
- end
- else
- @error = "Invalid target"
- end
- end
-end
diff --git a/app/helpers/admin/index_helper.rb b/app/helpers/admin/index_helper.rb
deleted file mode 100644
index 64c6fee..0000000
--- a/app/helpers/admin/index_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module Admin::IndexHelper
-end
diff --git a/app/helpers/admin/templates_helper.rb b/app/helpers/admin/templates_helper.rb
deleted file mode 100644
index 6f30e51..0000000
--- a/app/helpers/admin/templates_helper.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-module Admin::TemplatesHelper
- # Generates a list of targets
- def target_list
- GLSAMAKER_TEMPLATE_TARGETS.map{|x| [x.titleize, x]}
- end
-end
diff --git a/app/helpers/admin/users_helper.rb b/app/helpers/admin/users_helper.rb
deleted file mode 100644
index 142839f..0000000
--- a/app/helpers/admin/users_helper.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-module Admin::UsersHelper
- def access_string(lvl)
- case lvl
- when 0
- "Contributor"
- when 1
- "Padawan"
- when 2
- "Full member"
- when 3
- "Confidential member"
- end
- end
-
- def access_list
- [0, 1, 2, 3].map{|x| [access_string(x), x]}
- end
-end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
deleted file mode 100644
index 68194e7..0000000
--- a/app/helpers/application_helper.rb
+++ /dev/null
@@ -1,168 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-11 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2006-07 Jean-Philippe Lang
-# Copyright (C) 2008 Robert Buchholz <rbu@gentoo.org> and Tobias Heinlein <keytoaster@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Methods added to this helper will be available to all templates in the application.
-module ApplicationHelper
- # Same as Rails' simple_format helper without using paragraphs
- def simple_format_without_paragraph(text)
- text.to_s.
- gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
- gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
- gsub(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
- end
-
- # shamelessly stolen from the old cvetools.py
- # Extracts all CVEs from a string into an array
- def get_bug_cves(str)
- cve_group_all = /[ (]*CVE-(\d{4})([-,(){}|, \d]+)/
- cve_group_split = /(\d{4})(?:\D|$)/
-
- bug_cves = []
-
- str.scan(cve_group_all).each do |m|
- m[1].scan(cve_group_split).each do |n|
- bug_cves << "CVE-%s-%s" % [m[0], n[0]]
- end
- end
-
- bug_cves
- end
-
- # Groups an array of CVE names into groups
- def bugs_unify_cvenames(cves)
- cve_r = /CVE-(\d{4})-(\d+)/
-
- years = {}
- cves.uniq.each do |cve|
- cve_r =~ cve
- years[$1] ||= []
- years[$1] << $2
- end
-
- title = ""
- years.keys.sort.each do |year|
- title += "CVE-%s" % year
- if years[year].size == 1
- title += "-%s," % years[year].first
- else
- title += "-{%s}," % years[year].sort.join(',')
- end
- end
-
- title[0, title.length - 1]
- end
-
- # Updates a bug string with the cve_ids
- def cveify_bug_title(summary, cve_ids)
- cve_str = bugs_unify_cvenames(get_bug_cves(summary) + cve_ids)
- summary = summary.gsub(/[ (]*CVE-(\d{4})([-,(){}|, \d]+)/, '')
- summary.gsub!(/\(?CVEs? requested\)?/, '')
- "#{summary} (#{cve_str})"
- end
-
- # Returns the appropriate severity setting for a given whiteboard string
- def whiteboard_to_severity(wb)
- return 'normal' if wb.length < 2
-
- ev = wb[0..1]
- case ev
- when 'A0', 'B0'
- 'blocker'
- when 'A1', 'C0'
- 'critical'
- when 'A2', 'B1', 'C1'
- 'major'
- when 'A3', 'B2', 'C2'
- 'normal'
- when 'A4', 'B3', 'B4', 'C3'
- 'minor'
- when 'C4', '~0', '~1', '~2', '~3', '~4'
- 'trivial'
- else
- 'normal'
- end
- end
-
- # Simplistic helper for rendering an error message.
- # Shows a little icon before the message
- def error_msg(msg)
- content = image_tag('icons/error.png')
- content << " " << msg
- content
- end
-
- # Checks a string for spelling mistakes
- def spelling(str)
- Glsamaker::Spelling.check_string(str, '<span class="spelling-error">'.html_safe, '</span>'.html_safe)
- rescue
- Rails.logger.error "Spell checking not available"
- str
- end
-
- # Renders a title bar for our boxes
- def box_title(title, options = {})
- content = "".html_safe
-
- if options.has_key? :toolbar
- span_content = "".html_safe
-
- options[:toolbar].each do |toolbar_item|
- if toolbar_item == :sep
- span_content << image_tag('separator.png')
- else
- if toolbar_item[:uri].start_with? 'javascript:'
- span_content << link_to_function(
- image_tag(toolbar_item[:icon]),
- toolbar_item[:uri].gsub(/^javascript:/, ''),
- :title => toolbar_item[:title]
- ) << ' '
- else
- span_content << link_to(image_tag(toolbar_item[:icon]), toolbar_item[:uri]) << ' '
- end
- end
- end
-
- content << content_tag("span", span_content, :class => 'toolbar')
- end
-
- if options.has_key? :icon
- content << image_tag(options[:icon]) << " "
- end
-
- title2 = title
- if options.has_key? :escape and options[:escape] == false
- title2 = title2.html_safe
- end
-
- if options.has_key? :label
- content << content_tag('label', title2, :for => options[:label])
- else
- content << title2
- end
-
- content_tag("h2", content, :class => "boxtitle")
- end
-
- def last_import_start
- Rails.cache.fetch(::CVE_CACHE_LAST_IMPORT)
- end
-
- def with_format(format, &block)
- old_formats = formats
- begin
- self.formats = [format]
- return block.call
- ensure
- self.formats = old_formats
- end
- end
-end
diff --git a/app/helpers/bug_helper.rb b/app/helpers/bug_helper.rb
deleted file mode 100644
index afe37be..0000000
--- a/app/helpers/bug_helper.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-module BugHelper
-
-
- # Creates links around common phrases like <tt>Bug 12345</tt> or <tt>Comment 234</tt>
- def linkify_comment(text)
- text.gsub(/bug (\d+)/i, link_to_function('bug \1', 'buginfo(\1);'))
- end
-end
diff --git a/app/helpers/bugs_helper.rb b/app/helpers/bugs_helper.rb
deleted file mode 100644
index 8d70fcb..0000000
--- a/app/helpers/bugs_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module BugsHelper
-end
diff --git a/app/helpers/comments_helper.rb b/app/helpers/comments_helper.rb
deleted file mode 100644
index 0ec9ca5..0000000
--- a/app/helpers/comments_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module CommentsHelper
-end
diff --git a/app/helpers/cve_helper.rb b/app/helpers/cve_helper.rb
deleted file mode 100644
index 174603f..0000000
--- a/app/helpers/cve_helper.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-module CveHelper
- # Converts a bit mask to a condition usable by AR
- def view_mask_to_condition(mask)
- conditions = []
-
- conditions << 'state = "NEW"' if mask & 1 == 1
- conditions << 'state = "ASSIGNED"' if mask & 2 == 2
- conditions << 'state = "LATER"' if mask & 4 == 4
- conditions << 'state = "NFU"' if mask & 8 == 8
- conditions << 'state = "INVALID"' if mask & 16 == 16
-
- conditions.join(' OR ')
- end
-end
diff --git a/app/helpers/glsa_helper.rb b/app/helpers/glsa_helper.rb
deleted file mode 100644
index 7770227..0000000
--- a/app/helpers/glsa_helper.rb
+++ /dev/null
@@ -1,200 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# GLSA Helper
-module GlsaHelper
-
- def glsa_content(g, field)
- (params[:glsa][field.to_sym] if params[:glsa]) || g[field]
- end
-
- def lastrev_content(g, field)
- (params[:glsa][field.to_sym] if params[:glsa]) || g.last_revision[field]
- end
-
- def add_vulnerable_package_link(name)
- link_to_function(
- name,
- "Element.insert('packages_table_vulnerable', { bottom: '#{escape_javascript(render(:partial => '/glsa/package', :object => Package.new(:comp => "<", :slot => "*", :arch => "*", :my_type => "vulnerable")))}' })",
- :title => 'Add package')
- end
-
- def add_unaffected_package_link(name)
- link_to_function(
- name,
- "Element.insert('packages_table_unaffected', { bottom: '#{escape_javascript(render(:partial => '/glsa/package', :object => Package.new(:comp => ">=", :slot => "*", :arch => "*", :my_type => "unaffected")))}' })",
- :title => 'Add package')
- end
-
- def add_reference_link(name)
- link_to_function name, :title => "Add reference" do |page|
- page.insert_html :bottom, :references_table, :partial => 'reference', :object => Reference.new
- end
- end
-
- def status_icon(status)
- if status == "request"
- image_tag "icons/request.png", :title => "This item is a request."
- elsif status == "draft"
- image_tag "icons/draft.png", :title => "This item is a draft."
- elsif status == "release"
- image_tag "icons/sent.png", :title => "This item is a sent GLSA."
- else
- "?"
- end
- end
-
- def bugready_icon(status)
- if status
- image_tag "icons/bug.png", :title => "This item is bug ready."
- else
- image_tag "icons/bug-grey.png", :title => "This item is NOT bug ready."
- end
- end
-
- def approval_icon(status)
- if status == :approved
- image_tag "icons/status-green.png", :title => "This item is approved for sending."
- elsif status == :commented
- image_tag "icons/status-red.png", :title => "This item has received comments."
- elsif status == :comments_pending
- image_tag "icons/status-yellow.png", :title => "This item has received comments."
- else
- image_tag "icons/status-grey.png", :title => "This item has no comments."
- end
- end
-
- def workflow_icon(status)
- if status == :commented
- image_tag "icons/commented.png", :title => "You have commented on this item."
- elsif status == :approved
- image_tag "icons/approved.png", :title => "You have approved this item."
- elsif status == :own
- image_tag "icons/user.png", :title => "This is your own draft."
- elsif status == :todo
- image_tag "icons/not-approved.png", :title => "Please comment and/or approve."
- end
- end
-
- def restricted_icon(status)
- if status
- image_tag "icons/confidential.png", :title => "This item is CONFIDENTIAL."
- else
- image_tag "icons/public.png", :title => "This item is public."
- end
- end
-
- def check_icon(status)
- if status
- image_tag "icons/ok.png", :title => "All checks passed"
- else
- image_tag "icons/error.png", :title => "Error. Cannot continue."
- end
- end
-
- def is_approval_icon(status)
- if status
- image_tag 'icons/approval.png', :title => 'This item is an approval'
- else
- image_tag 'icons/rejection.png', :title => 'This item is a rejection'
- end
- end
-
- def prefixed_item(prefix, text)
- tf = Text::Format.new()
- tf.first_indent = tf.body_indent = prefix.length + 1
-
- str = tf.format(text)
- str[0, prefix.length] = prefix
- str.chomp
- end
-
- def adv_wrap(text, shorten_args = false)
- text.gsub!(/\r?\n/, "\n")
-
- text.gsub!(/<\/?(b|i)>/, '')
-
- text.gsub!(/^\*\s+(.*)$/) do |s|
- '* ' + word_wrap($1, :line_width => 69).gsub("\n","\n ")
- end
-
- text.gsub!(/(?:<ul>\s*(.*?)<\/ul>(?:\s*\n)?)/m) do |s|
- $1.gsub(/<li>(.*?)<\/li>\s*/) do |t|
- ('* ' + word_wrap($1, :line_width => 69)).gsub("\n", "\n ") + "\n\n"
- end
- end
-
- # TODO: ordered lists? never used...
-
- text.gsub!(/(?:<ol>\s*(.*?)<\/ol>(?:\s*\n)?)/m) do |s|
- nom = 0
- $1.gsub(/<li>(.*?)<\/li>\s*/) do |t|
- ("#{nom += 1}. " + word_wrap($1, :line_with => 68)).gsub("\n", "\n ") + "\n\n"
- end
- end
-
- text.gsub!(/(?:<code>\s*(.*?)<\/code>(?:\s*\n)?)/m) do |s|
- (' ' + word_wrap(shorten_args ? shorten_args($1) : $1, :line_width => 69)).gsub("\n", "\n ") + "\n\n"
- end
-
- word_wrap(text.chomp, :line_width => 71)
- end
-
- def template_popups
- render :partial => 'template_popups', :locals => {:templates => @templates}
- end
-
- def xml_format(str)
- content = Kramdown::Document.new(str || "").to_xml
-
- content.gsub! "<p><code>", "<code>"
- content.gsub! "</code></p>", "</code>"
- content.gsub! "&lsquo;", "'"
- content.gsub! "&rsquo;", "'"
- content.gsub! "&ldquo;", '"'
- content.gsub! "&rdquo;", '"'
-
- content
- end
-
- def html_format(str)
- content = Kramdown::Document.new(str || "").to_xml
-
- content.gsub! "<p><code>", "<code>"
- content.gsub! "</code></p>", "</code>"
-
- content
- end
-
- def field_content(str)
- sanitize(html_format(spelling(str)), :tags => %w[p ul li code span])
- end
-
-private
- def shorten_args(text)
- text.gsub!(/# (.*)/) do |s|
- r = $1
- r_fallback = r.dup
-
- logger.debug r.inspect
- logger.debug r.length
-
- r.gsub!(/ --verbose /m, " -v ") if r.length > 67
- r.gsub!(/ --ask /m, " -a ") if r.length > 67
- r.gsub!(/ --oneshot /m, " -1 ") if r.length > 67
- r.gsub!(/ -a -1 -v /m, " -1av ") if r.length > 67
-
- r = r_fallback.gsub(/ --verbose /, " --verbose \\\n ") if r.length > 67
-
- "# " + r
- end
- end
-end
diff --git a/app/helpers/index_helper.rb b/app/helpers/index_helper.rb
deleted file mode 100644
index ea82a6a..0000000
--- a/app/helpers/index_helper.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Index Helper
-module IndexHelper
-end
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
deleted file mode 100644
index b3ce20a..0000000
--- a/app/helpers/search_helper.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-module SearchHelper
-end
diff --git a/app/helpers/tools_helper.rb b/app/helpers/tools_helper.rb
deleted file mode 100644
index 5fa4f26..0000000
--- a/app/helpers/tools_helper.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Tools helper
-module ToolsHelper
-end
diff --git a/app/indices/indices.rb b/app/indices/indices.rb
deleted file mode 100644
index 04be101..0000000
--- a/app/indices/indices.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-ThinkingSphinx::Index.define :bug, :with => :active_record do
- indexes whiteboard
-
- has revision_id
-end
-
-ThinkingSphinx::Index.define :cve_comment, :with => :active_record do
- indexes comment
- has user_id, cve_id
-end
-
-ThinkingSphinx::Index.define :cve, :with => :active_record do
- indexes cve_id, :sortable => true
- indexes state, :sortable => true
- indexes summary
-
- has published_at, last_changed_at
-end
-
-ThinkingSphinx::Index.define :glsa, :with => :active_record do
- indexes glsa_id, :sortable => true
-end
-
-ThinkingSphinx::Index.define :revision, :with => :active_record do
- indexes title
- indexes synopsis
- indexes description
- indexes impact
- indexes workaround
- indexes resolution
- indexes is_release
-
- has glsa_id, revid, release_revision
-end
diff --git a/app/mailers/glsa_mailer.rb b/app/mailers/glsa_mailer.rb
deleted file mode 100644
index 1f6b54a..0000000
--- a/app/mailers/glsa_mailer.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-class GlsaMailer < ActionMailer::Base
- default :from => GLSAMAKER_FROM_EMAIL,
- :content_type => 'text/plain'
-
- def new_request(recipient, glsa, requestor)
- @requestor = requestor
- @glsa = glsa
-
- mail(:to => recipient.email,
- :subject => "[GLSAMaker] New request: #{glsa.last_revision.title}")
- end
-
- def edit(recipient, glsa, diff, editor)
- @editor = editor
- @diff = diff
- @glsa = glsa
-
- mail(:to => recipient.email,
- :subject => "[GLSAMaker] Draft edit: #{glsa.last_revision.title}")
- end
-
- def comment(recipient, glsa, comment, commentator)
- @commentator = commentator
- @comment = comment
- @glsa = glsa
-
- mail(:to => recipient.email,
- :subject => "[GLSAMaker] Draft commented: #{glsa.last_revision.title}")
- end
-
- def approval(recipient, glsa)
- @glsa = glsa
-
- mail(:to => recipient.email,
- :subject => "[GLSAMaker] Draft approved: #{glsa.last_revision.title}")
- end
-
- def text(recipient, subject, text, footer)
- @text = text
- @footer = footer
-
- mail(:to => recipient.email,
- :subject => subject)
- end
-end
diff --git a/app/models/bug.rb b/app/models/bug.rb
deleted file mode 100644
index 00e2d6d..0000000
--- a/app/models/bug.rb
+++ /dev/null
@@ -1,46 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Bug model
-class Bug < ActiveRecord::Base
- belongs_to :revision
-
- def cc
- self.arches
- end
-
- include Glsamaker::Bugs::StatusMixin
- include Glsamaker::Bugs::ArchesMixin
- include Glsamaker::Bugs::BugReadyMixin
-
- # Returns the Gentoo Bugzilla URI for the bug.
- # Set +secure+ to false to get a HTTP instead of a HTTPS URI
- def bug_url(secure = true)
- if secure
- "https://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{self.bug_id}"
- else
- "http://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{self.bug_id}"
- end
- end
-
- # Updates the cached bug metadata
- def update_cached_metadata
- b = Glsamaker::Bugs::Bug.load_from_id(bug_id)
-
- update_attributes!(
- :title => b.summary,
- :whiteboard => b.status_whiteboard,
- :arches => b.arch_cc.join(', ')
- )
- rescue Exception => e
- raise "Could not update cached metadata: " + e.message
- end
-end
diff --git a/app/models/comment.rb b/app/models/comment.rb
deleted file mode 100644
index fa285a4..0000000
--- a/app/models/comment.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Comment model
-class Comment < ActiveRecord::Base
- belongs_to :glsa, :class_name => "Glsa", :foreign_key => "glsa_id"
- belongs_to :user
-
- include ActiveModel::Validations
- validates :glsa_id, :presence => true
- validates :user_id, :presence => true
- validates :rating, :inclusion => { :in => %w[neutral approval rejection]}
- validates :rating, :uniqueness => { :scope => [:glsa_id, :user_id], :if => Proc.new {|comment| comment.rating != 'neutral'}, :message => 'You have already approved or rejected this draft' }
-
- class CommentValidator < ActiveModel::Validator
- def validate(record)
- if record.glsa.is_owner? record.user
- if record.rating != 'neutral'
- record.errors[:rating] << 'The owner of a draft cannot make approvals or rejections'
- end
- end
-
- if record.glsa.submitter.nil?
- record.errors[:rating] << 'You may not approve or reject advisories that have not been filled in yet'
- end
-
- if record.user.access < 2
- if record.rating != 'neutral'
- record.errors[:rating] << 'You may not approve or reject drafts'
- end
- end
- end
- end
-
- validates_with CommentValidator
-end
diff --git a/app/models/cpe.rb b/app/models/cpe.rb
deleted file mode 100644
index 243cced..0000000
--- a/app/models/cpe.rb
+++ /dev/null
@@ -1,29 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-class Cpe < ActiveRecord::Base
- has_and_belongs_to_many :cves, :class_name => 'Cve'
-
- def split
- self.cpe.split(':')
- end
-
- def vendor
- split[2]
- end
-
- def product
- split[3]
- end
-
- def version
- split[4]
- end
-end
diff --git a/app/models/cve.rb b/app/models/cve.rb
deleted file mode 100644
index d9a05c6..0000000
--- a/app/models/cve.rb
+++ /dev/null
@@ -1,177 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'glsamaker/helpers'
-
-class Cve < ActiveRecord::Base
- has_many :references, :class_name => "CveReference"
- has_many :comments, :class_name => "CveComment"
- has_and_belongs_to_many :cpes, :class_name => "Cpe"
- has_many :cve_changes, :class_name => "CveChange", :foreign_key => "cve_id"
- has_many :assignments, :class_name => "CveAssignment", :foreign_key => "cve_id"
-
- def to_s(line_length = 78)
- str = "#{self.cve_id} #{"(%s):" % url}\n"
- str += " " + Glsamaker::help.word_wrap(self.summary, :line_width => line_length-2).gsub(/\n/, "\n ")
- end
-
- # Returns the URL for this CVE at NVD (<tt>:nvd</tt>, default) or MITRE (<tt>:mitre</tt>)
- def url(site = :nvd)
- if site == :nvd
- "https://nvd.nist.gov/vuln/detail/%s" % self.cve_id
- elsif site == :mitre
- "https://cve.mitre.org/cgi-bin/cvename.cgi?name=%s" % self.cve_id
- else
- raise ArgumentError, 'Invalid site'
- end
- end
-
- # Concatenates the CVE descriptions of many cves, separated by separator
- def self.concat(cves, separator = "\n\n")
- txt = ""
- cves.each do |cve|
- txt += Cve.find(cve).to_s
- txt += separator
- end
- txt
- end
-
- # Assigns the CVE to a certain bug, creating a history entry
- def assign(bugnr, user, action = 'assign')
- bugnr = Integer(bugnr)
-
- case action
- when 'assign', :assign
- act = 'assign'
- when 'file', :file
- act = 'file'
- else
- raise ArgumentError, "Invalid action specified"
- end
-
- a = self.assignments.create!(:bug => bugnr)
-
- ch = self.cve_changes.create!(
- :user => user,
- :action => act,
- :object => a.id
- )
-
- self.state = 'ASSIGNED'
- save!
- end
-
- # Mark the CVE as Not-For-Us, creating a history entry
- def nfu(user, reason = nil)
- self.cve_changes.create!(
- :user => user,
- :action => 'nfu',
- :object => reason
- )
-
- self.state = 'NFU'
- save!
- end
-
- # Mark the CVE as INVALID, creating a history entry
- def invalidate(user, reason = nil)
- self.cve_changes.create!(
- :user => user,
- :action => 'invalid',
- :object => reason
- )
-
- self.state = 'INVALID'
- save!
- end
-
- def later(user, reason = nil)
- self.cve_changes.create!(
- :user => user,
- :action => 'later',
- :object => reason
- )
-
- self.state = 'LATER'
- save!
- end
-
- def mark_new(user, reason = nil)
- self.cve_changes.create!(
- :user => user,
- :action => 'new',
- :object => reason
- )
-
- self.state = 'NEW'
- save!
- end
-
- def add_comment(user, comment, confidential = false)
- self.comments << CveComment.create!(
- :user => user,
- :confidential => confidential,
- :comment => comment
- )
- end
-
- # Decorates the output of field with a color, depending on the status
- def colorize(field = :cve_id)
- "<span class='cvename cve-%s'>%s</span>" % [state.downcase, self[field]]
- end
-
- # Looks for Gentoo packages that might be affected by this CVE
- def package_hints
- def search(s)
- return [] if s.nil? or s == ""
-
- Glsamaker::Portage.find_packages(
- Regexp.compile(Regexp.escape(s).gsub(/[^a-zA-Z0-9]/, '.*?'), Regexp::IGNORECASE)
- )
- end
-
- package_hints = []
- my_cpes = cpes.map {|c| c.product }.uniq
- package_hints << my_cpes.map {|c| search c }.flatten
-
- # stolen from the old cvetools.py
- if summary =~ / in (\S+\.\S+) in (?:the )?(?:a )?(\D+) \d+/
- match = $2
- if match.end_with? 'before'
- package_hints << search(match[0, match.length - 7])
- else
- package_hints << search(match)
- end
- end
-
- if summary =~ / in (?:the )?(?:a )?(\D+) \d+/
- match = $1
- if match.end_with? 'before'
- package_hints << search(match[0, match.length - 7])
- else
- package_hints << search(match)
- end
- end
-
- if summary =~ / in (\S+\.\S+) in (?:the )?(?:a )?(\S+) /
- package_hints << search($1)
- end
-
- if summary =~ / in (?:the )?(?:a )?(\S+) /
- package_hints << search($1)
- end
-
- if summary =~ /(?:The )?(\S+) /
- package_hints << search($1)
- end
-
- package_hints.flatten.uniq
- end
-end
diff --git a/app/models/cve_assignment.rb b/app/models/cve_assignment.rb
deleted file mode 100644
index af1559a..0000000
--- a/app/models/cve_assignment.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class CveAssignment < ActiveRecord::Base
- belongs_to :cve
-end
diff --git a/app/models/cve_change.rb b/app/models/cve_change.rb
deleted file mode 100644
index 71ff974..0000000
--- a/app/models/cve_change.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class CveChange < ActiveRecord::Base
- belongs_to :user, :class_name => "User", :foreign_key => "user_id"
- belongs_to :cve
-end
diff --git a/app/models/cve_comment.rb b/app/models/cve_comment.rb
deleted file mode 100644
index 73357dc..0000000
--- a/app/models/cve_comment.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class CveComment < ActiveRecord::Base
- belongs_to :cve
- belongs_to :user, :class_name => "User", :foreign_key => "user_id"
-end
diff --git a/app/models/cve_reference.rb b/app/models/cve_reference.rb
deleted file mode 100644
index 1f11e01..0000000
--- a/app/models/cve_reference.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-class CveReference < ActiveRecord::Base
- belongs_to :cve
-end
diff --git a/app/models/glsa.rb b/app/models/glsa.rb
deleted file mode 100644
index bee70be..0000000
--- a/app/models/glsa.rb
+++ /dev/null
@@ -1,311 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# GLSA model
-class Glsa < ActiveRecord::Base
- validates_uniqueness_of :glsa_id, :message => "must be unique"
- validates_presence_of :glsa_id, :message => "GLSA ID needed"
-
- belongs_to :submitter, :class_name => "User", :foreign_key => "submitter"
- belongs_to :requester, :class_name => "User", :foreign_key => "requester"
- belongs_to :bugreadymaker, :class_name => "User", :foreign_key => "bugreadymaker"
-
- has_many :revisions, :dependent => :destroy
- has_many :comments, :dependent => :destroy
-
- # Returns the last revision object, referring to the current state of things
- def last_revision
- @last_revision ||= self.revisions.order("revid DESC").first
- end
-
- # Returns the last revision object that was a release
- def last_release_revision
- self.revisions.where(:is_release => true).order('release_revision DESC').first
- end
-
- # Invalidates the last revision cache
- def invalidate_last_revision_cache
- @last_revision = nil
- end
-
- # Returns the next revision ID to be given for this GLSA
- def next_revid
- if (rev = last_revision)
- rev.revid + 1
- else
- 0
- end
- end
-
- # Returns the next release revision ID to be given for this GLSA
- def next_releaseid
- if (rev = last_release_revision)
- rev.release_revision + 1
- else
- 1
- end
- end
-
- # Returns the best available release date
- def release_date
- return first_released_at if status == 'release'
- last_revision.created_at
- end
-
- # Returns the best available revision date
- def revised_date
- if status == 'release' and last_revision.created_at < first_released_at
- first_released_at
- else
- last_revision.created_at
- end
- end
-
- # Returns all approving comments
- def approvals
- comments.where(:rating => 'approval')
- end
-
- # Returns all rejecting comments
- def rejections
- comments.where(:rating => 'rejection')
- end
-
- # Returns true if the draft is ready for sending
- def is_approved?
- count = 0
- users_who_approved = approvals.map { |a| a.user_id }
- users_who_rejected = rejections.map { |a| a.user_id }
-
- common_users = (users_who_approved & users_who_rejected)
- common_users.each do |user|
- approval = approvals.where(:user_id => user).order('created_at DESC').first
- rejection = rejections.where(:user_id => user).order('created_at DESC').first
-
- # if the approval was before a rejection => 0
- if approval.created_at < rejection.created_at
- count += 0
- elsif approval.created_at > rejection.created_at
- count += 1
- end
- end
-
- (users_who_approved - common_users).each do |user|
- count += 1
- end
-
- (users_who_rejected - common_users).each do |user|
- count -= 1
- end
-
- (count >= 1)
- end
-
- # Returns true if it has comments
- def has_comments?
- comments.count > 0
- end
-
- # The approval status of the GLSA, either :approved, :commented, or :none
- def approval_status
- if is_approved?
- return :approved
- elsif has_comments?
- if has_pending_comments?
- return :comments_pending
- else
- return :commented
- end
- end
- return :none
- end
-
- # Returns true if user is the owner of this GLSA.
- def is_owner?(user)
- return false if user.nil?
- luser = (status == "request" ? requester : submitter)
- luser == user
- end
-
- # Returns the workflow status of this GLSA for a given user.
- # Return values: :own (own draft), :approved (approval given), :commented (comment or rejection given)
- def workflow_status(user)
- if is_owner?(user)
- return :own
- end
-
- if comments.where(:rating => 'approval', :user_id => user.id).count > 0
- return :approved
- end
-
- if comments.where(:user_id => user.id, :read => false).count > 0
- return :commented
- end
-
- return :todo
- end
-
- # Returns true if there are any pending comments left
- def has_pending_comments?
- comments.where(:read => false).all.count > 0
- end
-
- # Returns all CVEs linked to this GLSA
- def related_cves
- last_revision.bugs.map do |bug|
- CveAssignment.where(bug: bug.bug_id).map {|assignment| assignment.cve}.uniq
- end.flatten
- end
-
- # Bulk addition of references.
- # Expects an array of hashes <tt>{:title => ..., :url => ...}</tt>
- def add_references(refs)
- rev = last_revision.deep_copy
-
- refs.each do |reference|
- rev.references.create(reference)
- end
-
- invalidate_last_revision_cache
- self
- end
-
- # Performs the steps to release the GLSA, performing santiy checks.
- def release
- raise GLSAReleaseError, 'Cannot release the GLSA as it is not approved' if not is_approved?
- raise GLSAReleaseError, 'Cannot release the GLSA as there are comments pending' if has_pending_comments?
- # TODO: releasing someone else's draft
- release!
- end
-
- # Performs the steps to release the GLSA, performing not as many checks. The +release+ method is to be preferred.
- def release!
- # This one is not avoidable. Some information is only filled in during the first edit, thus making it required.
- raise GLSAReleaseError, 'Cannot release the GLSA as it is not in "draft" or "release" status' if not (self.status == 'draft' or self.status == 'release')
-
- rev = last_revision.deep_copy
- rev.is_release = true
- rev.release_revision = next_releaseid
- rev.save!
-
- unless self.status == 'release'
- self.glsa_id = Glsa.next_id
- self.first_released_at = Time.now
- end
-
- self.status = 'release'
- save!
- end
-
- # Closes all bugs linked to this advisory and refreshes the metadata
- def close_bugs(message)
- last_revision.bugs.each do |bug|
- logger.info "Closing bug #{bug.bug_id}"
- b = Glsamaker::Bugs::Bug.load_from_id(bug.bug_id)
-
- changes = {}
- changes[:comment] = message
- changes[:whiteboard] = b.status_whiteboard.gsub(/(ebuild\+?|upstream\+?|stable\+?|glsa)\??/, 'glsa+').gsub(/glsa\/glsa/, 'glsa+')
- changes[:status] = "RESOLVED"
- changes[:resolution] = "FIXED"
-
- Bugzilla.update_bug(bug.bug_id, changes)
- bug.update_cached_metadata
- end
- end
-
- # Returns a publically accessible URL for the advisory if it's a released GLSA
- def to_url
- "https://security.gentoo.org/glsa/#{self.glsa_id}"
- end
-
- # Calculates the next GLSA ID for the given month, or the current month
- def self.next_id(month = Time.now)
- month_id = month.strftime("%Y%m")
- items = Glsa.where("glsa_id LIKE ? AND status = ?", month_id + '%', 'release').order('glsa_id DESC')
-
- return "#{month_id}-01" if items.length == 0
-
- items.first.glsa_id =~ /^#{month_id}-(\d+)$/
- next_id = $1.to_i + 1
- "#{month_id}-#{format "%02d", next_id}"
- end
-
- # Files a new GLSA request
- def self.new_request(title, bugs, comment, access, import_references, user)
- glsa = Glsa.new
- glsa.requester = user
- glsa.glsa_id = Digest::MD5.hexdigest(title + Time.now.to_s)[0...9]
- glsa.restricted = (access == "confidential")
- glsa.status = "request"
-
- begin
- glsa.save!
- rescue Exception => e
- raise Exception, "Error while saving the GLSA object: #{e.message}"
- end
-
- # unless comment.strip.blank?
- # glsa.comments << Comment.new(:rating => "neutral", :text => comment, :user => user)
-
- # begin
- # glsa.save!
- # rescue Exception => e
- # raise Exception, "Error while saving the comment: #{e.message}"
- # end
- # end
-
- revision = Revision.new
- revision.revid = glsa.next_revid
- revision.glsa = glsa
- revision.title = title
- revision.user = user
-
- begin
- revision.save!
- rescue Exception => e
- glsa.delete
- raise Exception, "Error while saving Revision object: #{e.message}"
- end
-
- bugs = Bugzilla::Bug.str2bugIDs(bugs)
-
- bugs.each do |bug|
- begin
- b = Glsamaker::Bugs::Bug.load_from_id(bug)
-
- revision.bugs.create(
- :bug_id => bug,
- :title => b.summary,
- :whiteboard => b.status_whiteboard,
- :arches => b.arch_cc.join(', ')
- )
- rescue Exception => e
- # In case of bugzilla errors, just keep the bug #
- revision.bugs.create(:bug_id => bug)
- end
- end
-
- if import_references
- logger.debug { "importing references" }
- refs = []
- glsa.related_cves.each do |cve|
- refs << {:title => cve.cve_id, :url => cve.url}
- end
- glsa.add_references refs
- end
-
- glsa
- end
-
-end
-
-class GLSAReleaseError < StandardError; end
diff --git a/app/models/package.rb b/app/models/package.rb
deleted file mode 100644
index 30fb1bd..0000000
--- a/app/models/package.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-# Copyright (C) 2017 Robin H. Johnson <robbat2@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Package model
-class Package < ActiveRecord::Base
- # Mapping XML comparators to internally used ones
- COMP_MAP = {
- '>=' => 'ge',
- '>' => 'gt',
- '=' => 'eq',
- '<=' => 'le',
- '<' => 'lt',
- '*<' => 'rlt',
- '*<=' => 'rle',
- '*>' => 'rgt',
- '*>=' => 'rge'
- }.freeze
-
- # Arches (from $PORTDIR/profiles/arch.list)
- ARCHLIST_BASE = %w{alpha amd64 arm arm64 hppa ia64 m68k mips nios2 ppc ppc64 riscv s390 sh sparc x86}.freeze
- ARCHLIST_FBSD = %w{amd64-fbsd sparc-fbsd x86-fbsd}.freeze
- ARCHLIST_PREFIX = %w{ppc-aix amd64-linux arm-linux arm64-linux ppc64-linux x86-linux ppc-macos x86-macos x64-macos m68k-mint sparc-solaris sparc64-solaris x64-solaris x86-solaris x86-winnt x64-cygwin x86-cygwin}.freeze
- ARCHLIST = (ARCHLIST_BASE+ARCHLIST_FBSD+ARCHLIST_PREFIX).freeze
- ARCHLIST_REGEX = %r{(?:#{ARCHLIST.join('|')})}.freeze
-
- # Model properties
- belongs_to :revision
- validates :comp, :inclusion => { :in => COMP_MAP.keys }
- validates :arch, :format => { :with => /\A(\*|(#{ARCHLIST_REGEX} )*#{ARCHLIST_REGEX})\z/ }
-
- # Returns the comparator in the format needed for the XML
- def xml_comp
- COMP_MAP[self.comp]
- end
-
- def self.reverse_comp(cmp)
- COMP_MAP.invert[cmp]
- end
-end
diff --git a/app/models/reference.rb b/app/models/reference.rb
deleted file mode 100644
index f378cd4..0000000
--- a/app/models/reference.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Reference model
-class Reference < ActiveRecord::Base
- belongs_to :revision
-end
diff --git a/app/models/revision.rb b/app/models/revision.rb
deleted file mode 100644
index 26cfd82..0000000
--- a/app/models/revision.rb
+++ /dev/null
@@ -1,103 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'rexml/document'
-
-# Revision model
-class Revision < ActiveRecord::Base
- belongs_to :glsa, :class_name => "Glsa", :foreign_key => "glsa_id"
- has_many :bugs, :dependent => :destroy
- has_many :references, :dependent => :destroy
- has_many :packages, :dependent => :destroy
- has_many :vulnerable_packages, -> { where :my_type => "vulnerable" }, :class_name => "Package"
- has_many :unaffected_packages, -> { where :my_type => "unaffected" }, :class_name => "Package"
- belongs_to :user
-
- validates_numericality_of :user_id, :message => "user id needed"
- validates_presence_of :title
-
-=begin
- validates_each :description, :resolution do |record, attr, value|
- # XML well-formedness test
- begin
- REXML::Document.new("<?xml version='1.0'?><root>#{value}</root>")
- rescue REXML::ParseException => e
- record.errors.add attr, "is not well-formed XML"
- end
- end
-=end
-
- # Returns an Array of Integers of the bugs linked to this revision
- def get_linked_bugs
- self.bugs.map do |bug|
- bug.bug_id.to_i
- end
- end
-
- # Checks all assigned bugs for bug ready status
- def bug_ready?
- self.bugs.each do |b|
- return false unless b.bug_ready?
- end
-
- return true
- end
-
- # Updates the cached metadata of all assigned bugs
- def update_cached_bug_metadata
- self.bugs.each do |b|
- b.update_cached_metadata
- end
- end
-
- # Creates a deep copy of a previous revision, copying all bugs, references and packages,
- # incrementing the revision ID by one.
- # <b>The caller must take care of deleting this revision again in case any error occurs later.</b>
- def deep_copy
- new_rev = dup
- new_rev.revid = glsa.next_revid
-
- references.each {|reference| new_rev.references << reference.dup }
- packages.each {|package| new_rev.packages << package.dup }
- bugs.each {|bug| new_rev.bugs << bug.dup }
-
- new_rev.save!
- new_rev
- end
-
- # Returns the packages linked to this revision grouped by atoms
- def packages_by_atom
- packages_list = {}
- self.packages.each do |p|
- packages_list[p[:atom]] ||= {}
- (packages_list[p[:atom]][p[:my_type]] ||= []) << p
- end
-
- packages_list
- end
-
- def to_s
- s = "r#{self.revid}"
- if self.is_release?
- s << " (release #{self.release_revision})"
- end
-
- s
- end
-
- def release_access
- if self.access == "both"
- "local, remote"
- else
- self.access
- end
- end
-end
diff --git a/app/models/template.rb b/app/models/template.rb
deleted file mode 100644
index d974347..0000000
--- a/app/models/template.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-class Template < ActiveRecord::Base
-end
diff --git a/app/models/user.rb b/app/models/user.rb
deleted file mode 100644
index 88d5eff..0000000
--- a/app/models/user.rb
+++ /dev/null
@@ -1,65 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# =Access levels
-#
-# [<b>0 (Contributor)</b>] Can see own drafts, can fill in requests
-# [<b>1 (Padawan)</b>] all of the above, plus see and edit all drafts
-# [<b>2 (Full member)</b>] all of the above, plus voting
-# [<b>3 (Confidential member)</b>] all of the above, including restricted drafts
-class User < ActiveRecord::Base
- has_many :submitted_glsas, :class_name => "Glsa", :foreign_key => "submitter"
- has_many :requested_glsas, :class_name => "Glsa", :foreign_key => "requester"
- has_many :bugreadymade_glsas, :class_name => "Glsa", :foreign_key => "bugreadymaker"
- has_many :cve_changes, :class_name => "CveChange", :foreign_key => "user_id"
-
- has_many :revisions
-
- serialize :preferences
-
- validates_uniqueness_of :login, :message => "User name must be unique"
- validates_presence_of :login, :message => "User name can't be blank"
-
- validates_presence_of :name, :message => "Name can't be blank"
-
- validates_presence_of :access, :message => "Access level needed"
- validates_numericality_of :access, :greater_than_or_equal_to => 0, :less_than_or_equal_to => 3, :message => "Access level must be between 0 and 3"
-
- validates_format_of :email, :with => /[\w.%+-]+?@[\w.-]+?\.\w{2,6}\z/, :message => "Invalid Email address format"
-
- scope :active, -> { where(:disabled => false).where('id > ?', 0) }
-
- # Is the user an admin? ;)
- def is_el_jefe?
- self.jefe
- end
-
- # Checks access to a given GLSA
- def can_access?(glsa)
- return false if disabled?
- return false if access == 0 and not glsa.is_owner? self
- return false if access < 3 and glsa.restricted
-
- true
- end
-
- def to_s
- "#{name} (#{login})"
- end
-
- # Returns a certain category form the user's preferences
- # or an empty hash if that category does not exist
- def get_pref_category(category)
- return {} if self.preferences == nil or self.preferences[category] == nil
-
- self.preferences[category]
- end
-end
diff --git a/app/views/admin/index/index.html.erb b/app/views/admin/index/index.html.erb
deleted file mode 100644
index 2313d16..0000000
--- a/app/views/admin/index/index.html.erb
+++ /dev/null
@@ -1,6 +0,0 @@
-<h1>GLSAMaker Administration</h1>
-
-<ul>
- <li><%= link_to 'User Management', admin_users_path %></li>
- <li><%= link_to 'Template Management', admin_templates_path %></li>
-</ul> \ No newline at end of file
diff --git a/app/views/admin/templates/_form.html.erb b/app/views/admin/templates/_form.html.erb
deleted file mode 100644
index 9984673..0000000
--- a/app/views/admin/templates/_form.html.erb
+++ /dev/null
@@ -1,35 +0,0 @@
-<%= form_for([:admin, @template]) do |f| %>
- <% if @template.errors.any? %>
- <div id="error_explanation">
- <h2><%= pluralize(@template.errors.count, "error") %> prohibited this template from being saved:</h2>
-
- <ul>
- <% @template.errors.full_messages.each do |msg| %>
- <li><%= msg %></li>
- <% end %>
- </ul>
- </div>
- <% end %>
-
- <table>
- <tr>
- <th><%= f.label :name %></th>
- <td><%= f.text_field :name %></td>
- </tr>
- <tr>
- <th><%= f.label :text %></th>
- <td><%= f.text_area :text, :rows => 10 %></td>
- </tr>
- <tr>
- <th><%= f.label :target, 'Target Field' %></th>
- <td><%= select('template', 'target', target_list) %></td>
- </tr>
- <tr>
- <th><%= f.label :enabled %></th>
- <td><%= f.check_box :enabled %></td>
- </tr>
- </table>
- <div class="actions">
- <%= f.submit %>
- </div>
-<% end %>
diff --git a/app/views/admin/templates/edit.html.erb b/app/views/admin/templates/edit.html.erb
deleted file mode 100644
index 3c72272..0000000
--- a/app/views/admin/templates/edit.html.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="box w40em">
- <h2>Edit user</h2>
-
- <%= render 'form' %>
-</div>
-
-<%= link_to 'Show', @admin_template %> |
-<%= link_to 'Back', admin_templates_path %> \ No newline at end of file
diff --git a/app/views/admin/templates/index.html.erb b/app/views/admin/templates/index.html.erb
deleted file mode 100644
index 32edfbb..0000000
--- a/app/views/admin/templates/index.html.erb
+++ /dev/null
@@ -1,23 +0,0 @@
-<h1>Templates</h1>
-
-<table class="glsamaker-table">
- <tr>
- <th>Name</th>
- <th>Text</th>
- <th>Field</th>
- <th>Enabled</th>
- </tr>
-
-<% @templates.each do |admin_template| %>
- <tr>
- <td><%= link_to admin_template.name, admin_template_path(admin_template) %></td>
- <td><tt><%= admin_template.text %></tt></td>
- <td><%= admin_template.target %></td>
- <td><%= admin_template.enabled %></td>
- </tr>
-<% end %>
-</table>
-
-<br />
-
-<%= link_to 'New Template', new_admin_template_path %>
diff --git a/app/views/admin/templates/new.html.erb b/app/views/admin/templates/new.html.erb
deleted file mode 100644
index 78e25fb..0000000
--- a/app/views/admin/templates/new.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="box w40em">
- <h2>New Template</h2>
-
- <%= render 'form' %>
-</div>
-
-<%= link_to 'Back', admin_templates_path %> \ No newline at end of file
diff --git a/app/views/admin/templates/show.html.erb b/app/views/admin/templates/show.html.erb
deleted file mode 100644
index e406071..0000000
--- a/app/views/admin/templates/show.html.erb
+++ /dev/null
@@ -1,26 +0,0 @@
-<div class="box">
- <h2><%= @template.name %></h2>
-
- <table>
- <tr>
- <th>Name:</th>
- <td><%= @template.name %></td>
- </tr>
- <tr>
- <th>Text:</th>
- <td><pre><%= @template.text %></pre></td>
- </tr>
- <tr>
- <th>Field:</th>
- <td><%= @template.target.titleize %></td>
- </tr>
- <tr>
- <th>Enabled:</th>
- <td><%= @template.enabled %></td>
- </tr>
- </table>
-</div>
-
-<%= link_to 'Edit', edit_admin_template_path(@template) %> |
-<%= link_to 'Delete', admin_template_path(@template), :confirm => 'Are you sure?', :method => :delete %> |
-<%= link_to 'Back', admin_templates_path %> \ No newline at end of file
diff --git a/app/views/admin/users/_user.html.erb b/app/views/admin/users/_user.html.erb
deleted file mode 100644
index 3461591..0000000
--- a/app/views/admin/users/_user.html.erb
+++ /dev/null
@@ -1,9 +0,0 @@
-<tr class="<%= cycle 'even', 'odd' %>">
- <td><%= user.id %></td>
- <td><strong><%= user.login %></strong></td>
- <td><%= link_to user.name, admin_user_path(user) %></td>
- <td><%= user.email %></td>
- <td><%= access_string user.access %></td>
- <td><%= user.disabled %></td>
- <td><%= user.jefe %></td>
-</tr>
diff --git a/app/views/admin/users/create.html.erb b/app/views/admin/users/create.html.erb
deleted file mode 100644
index 34cd1ba..0000000
--- a/app/views/admin/users/create.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Admin::User#create</h1>
-<p>Find me in app/views/admin/user/create.html.erb</p>
diff --git a/app/views/admin/users/destroy.html.erb b/app/views/admin/users/destroy.html.erb
deleted file mode 100644
index d77622c..0000000
--- a/app/views/admin/users/destroy.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Admin::User#destroy</h1>
-<p>Find me in app/views/admin/user/destroy.html.erb</p>
diff --git a/app/views/admin/users/edit.html.erb b/app/views/admin/users/edit.html.erb
deleted file mode 100644
index aa5c7b5..0000000
--- a/app/views/admin/users/edit.html.erb
+++ /dev/null
@@ -1,50 +0,0 @@
-<div class="box w40em">
- <h2>Edit user</h2>
- <%= form_for([:admin, @user]) do |f| %>
- <% if @user.errors.any? %>
- <div id="errorExplanation" class="errorExplanation">
- <h2><%= pluralize(@user.errors.count, "error") %> prohibited this record from being saved:</h2>
- <ul>
- <% @user.errors.full_messages.each do |msg| %>
- <li><%= msg %></li>
- <% end %>
- </ul>
- </div>
- <% end %>
-
- <table>
- <tr>
- <th>ID</th>
- <td><%= @user.id %></td>
- </tr>
- <tr>
- <th>Login</th>
- <td><%= f.text_field :login %></td>
- </tr>
- <tr>
- <th>Name</th>
- <td><%= f.text_field :name %></td>
- </tr>
- <tr>
- <th>Email</th>
- <td><%= f.text_field :email %></td>
- </tr>
- <tr>
- <th>Access Level</th>
- <td><%= select('user', 'access', access_list) %></td>
- </tr>
- <tr>
- <th>Disabled flag</th>
- <td><%= f.check_box :disabled %></td>
- </tr>
- <tr>
- <th>Admin flag</th>
- <td><%= f.check_box :jefe %></td>
- </tr>
-</table>
-<p>
-<%= f.submit 'Update' %>
-</p>
-</div>
-<% end %>
-<%= link_to 'Back', admin_user_path(@user) %> \ No newline at end of file
diff --git a/app/views/admin/users/index.html.erb b/app/views/admin/users/index.html.erb
deleted file mode 100644
index 97bfed7..0000000
--- a/app/views/admin/users/index.html.erb
+++ /dev/null
@@ -1,19 +0,0 @@
-<h1>Users</h1>
-
-<table class="glsamaker-table">
-<tr align="left">
- <th>ID</th>
- <th>Login</th>
- <th>Name</th>
- <th>Email</th>
- <th>Access Level</th>
- <th>Disabled</th>
- <th>Administrator</th>
-</tr>
-
-<%= render :partial => "user", :collection => @users, :as => :user %>
-</table>
-
-<p>
- <%= link_to 'New User', new_admin_user_path(@user) %>
-</p> \ No newline at end of file
diff --git a/app/views/admin/users/new.html.erb b/app/views/admin/users/new.html.erb
deleted file mode 100644
index 276cc61..0000000
--- a/app/views/admin/users/new.html.erb
+++ /dev/null
@@ -1,47 +0,0 @@
-<div class="box w40em">
- <h2>New user</h2>
-
- <%= form_for([:admin, @user]) do |f| %>
- <% if @user.errors.any? %>
- <div id="errorExplanation" class="errorExplanation">
- <h2><%= pluralize(@user.errors.count, "error") %> prohibited this record from being saved:</h2>
- <ul>
- <% @user.errors.full_messages.each do |msg| %>
- <li><%= msg %></li>
- <% end %>
- </ul>
- </div>
- <% end %>
-
- <table>
- <tr>
- <th>Login</th>
- <td><%= f.text_field :login %></td>
- </tr>
- <tr>
- <th>Name</th>
- <td><%= f.text_field :name %></td>
- </tr>
- <tr>
- <th>Email</th>
- <td><%= f.text_field :email %></td>
- </tr>
- <tr>
- <th>Access Level</th>
- <td><%= select('user', 'access', access_list) %></td>
- </tr>
- <tr>
- <th>Disabled flag</th>
- <td><%= f.check_box :disabled %></td>
- </tr>
- <tr>
- <th>Admin flag</th>
- <td><%= f.check_box :jefe %></td>
- </tr>
-</table>
-<p>
-<%= f.submit 'Update' %>
-</p>
-</div>
-<% end %>
-<%= link_to 'Back', admin_users_path %> \ No newline at end of file
diff --git a/app/views/admin/users/show.html.erb b/app/views/admin/users/show.html.erb
deleted file mode 100644
index c009610..0000000
--- a/app/views/admin/users/show.html.erb
+++ /dev/null
@@ -1,34 +0,0 @@
-<div class="box w40em">
- <h2><%= @user.login %></h2>
-
- <table>
- <tr>
- <th>ID</th>
- <td><%= @user.id %></td>
- </tr>
- <tr>
- <th>Name</th>
- <td><%= @user.name %></td>
- </tr>
- <tr>
- <th>Email</th>
- <td><%= mail_to @user.email %></td>
- </tr>
- <tr>
- <th>Access Level</th>
- <td><%= access_string @user.access %></td>
- </tr>
- <tr>
- <th>Disabled flag</th>
- <td><%= @user.disabled %></td>
- </tr>
- <tr>
- <th>Admin flag</th>
- <td><%= @user.jefe %></td>
- </tr>
-</table>
-</div>
-
-<%= link_to 'Edit', edit_admin_user_path(@user) %> |
-<%= link_to 'Delete', admin_user_path(@user), :confirm => 'Are you sure?', :method => :delete %> |
-<%= link_to 'Back', admin_users_path %> \ No newline at end of file
diff --git a/app/views/admin/users/update.html.erb b/app/views/admin/users/update.html.erb
deleted file mode 100644
index 90396aa..0000000
--- a/app/views/admin/users/update.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Admin::User#update</h1>
-<p>Find me in app/views/admin/user/update.html.erb</p>
diff --git a/app/views/bug/bug.html.erb b/app/views/bug/bug.html.erb
deleted file mode 100644
index 67f709b..0000000
--- a/app/views/bug/bug.html.erb
+++ /dev/null
@@ -1,58 +0,0 @@
-<% if @bug == nil %>
-
-<h2 style="margin-top: 0;"><%= error_msg("Invalid Bug ID") %></h2>
-<p>There is no such bug on Gentoo's Bugzilla.</p>
-
-<% elsif (@bug.is_a? String and @bug == "down") %>
-
-<h2 style="margin-top: 0;"><%= error_msg("Bugzilla is unreachable") %></h2>
-<p>Sorry, but the Gentoo Bugzilla is unreachable at the moment.</p>
-
-<% elsif @bug.restricted %>
-
-<h2 style="margin-top: 0;"><%= image_tag('icons/restricted.png') %> This bug is restricted</h2>
-
-<p>Currently, GLSAMaker cannot process restricted bugs. :(</p>
-<p>Try to <a href="<%= @bug.url %>" class="button" target="_blank"><%= image_tag 'icons/bug.png' %> <strong>Open bug <%= @bug.bug_id %> in Bugzilla</strong></a> instead.</p>
-
-<% else %>
-
-<h2 style="margin-top: 0;"><%= @bug.summary %></h2>
-
-<div style="margin-bottom: 1.5em;">
- <a href="<%= @bug.url %>" class="button" target="_blank"><%= image_tag 'icons/bug.png' %> <strong>Open bug <%= @bug.bug_id %> in Bugzilla</strong></a>
- <a href="javascript:///" onclick="Modalbox.show('<%= bughistory_url(:id => @bug.bug_id) %>');" class="button"><%= image_tag 'icons/pending.png' %>> <strong>Show History</strong></a>
-</div>
-
-<div style="float: right; width: 49%;">
- Status/Resolution: <strong><%= @bug.status %> <%= @bug.resolution %></strong><br />
- Status Whiteboard: <strong style="color: #3E3550;"><%= @bug.status_whiteboard %></strong><br />
- <% arches = @bug.arch_cc %> Arches (<%= arches.size %>): <% arches = @bug.arch_cc %><strong><%= arches.map {|a| a.gsub("@gentoo.org", "") }.join(", ") %></strong><br /><br />
-
- CC: <small><%= (@bug.cc - arches).map {|a| a.gsub("@gentoo.org", "@g.o")}.join(", ") %></small>
-</div>
-
-<div style="width: 50%">
- Assigned to: <strong><%= @bug.assigned_to %></strong><br />
- Reported: <strong><%= @bug.reporter %></strong> <small><%= @bug.created_at %></small><br /><br />
-
- Depends on: <strong><% @bug.depends.each do |d| %><a href="javascript://" onclick="buginfo('<%= d %>');"><%= d %></a> <% end %></strong><br />
- Blocks: <strong><% @bug.blocks.each do |d| %><a href="javascript://" onclick="buginfo('<%= d %>');"><%= d %></a> <% end %></strong><br />
-</div>
-<br style="clear: both;" />
-
-<h3>Comments</h3>
-<ol class="comments" style="height: 300px; overflow-y: scroll; padding-right: 1em;">
-<% commentID = 1 ; @bug.comments.each do |comment| %>
- <li id="comment-<%= commentID %>">
- <p style="background-color: #D3CFE5; padding: 3px; color: #3E3550;">
- <span style="float: right; font-size: 80%;"><a href="<%= @bug.url %>#c<%= commentID %>" target="_blank">&rarr; Bugzilla</a></span>
- <strong><%= comment.author %></strong>
- <small>at <%= comment.date %></small>
- </p>
- <p><code><%= simple_format_without_paragraph(linkify_comment(comment.text)).html_safe %></code></p>
- </li>
-<% commentID +=1 ; end %>
-</ol>
-
-<% end %> \ No newline at end of file
diff --git a/app/views/bug/history.html.erb b/app/views/bug/history.html.erb
deleted file mode 100644
index 24cf004..0000000
--- a/app/views/bug/history.html.erb
+++ /dev/null
@@ -1,43 +0,0 @@
-<% if @bug == nil %>
-
-<h2 style="margin-top: 0;"><%= error_msg("Invalid Bug ID") %></h2>
-<p>There is no such bug on Gentoo's Bugzilla.</p>
-
-<% elsif (@bug.is_a? String and @bug == "down") %>
-
-<h2 style="margin-top: 0;"><%= error_msg("Bugzilla is unreachable") %></h2>
-<p>Sorry, but the Gentoo Bugzilla is unreachable at the moment.</p>
-
-<% elsif @bug.restricted %>
-
-<h2 style="margin-top: 0;"><%= image_tag('icons/restricted.png') %> This bug is restricted</h2>
-
-<p>Currently, GLSAMaker cannot process restricted bugs. :(</p>
-<p>Try to <a href="<%= @bug.url %>" class="button" target="_blank"><%= image_tag 'icons/bug.png' %> <strong>Open bug <%= @bug.bug_id %> in Bugzilla</strong></a> instead.</p>
-
-<% else %>
-
-
-<h2 style="margin-top: 0;"><%= @bug.summary %></h2>
-<div style="margin-top: 1.5em;">
- <a href="<%= @bug.url %>" class="button" target="_blank"><%= image_tag 'icons/bug.png' %> <strong>Open bug <%= @bug.bug_id %> in Bugzilla</strong></a>
- <a href="javascript:///" onclick="Modalbox.show('<%= bug_url(:id => @bug.bug_id) %>');" class="button"><%= image_tag 'icons/larr.png' %> <strong>Back to overview</strong></a>
-</div>
-
-<h3>History</h3>
-<ol class="comments" style="height: 300px; overflow-y: scroll; padding-right: 1em;">
-<% @bug.history.changes.each do |change| %>
- <li>
- <p style="background-color: #D3CFE5; padding: 3px; color: #3E3550;">
- <strong><%= h(change.user) %></strong> <small>at <%= change.time %></small>
- </p>
- <p>
- <% change.changes.each do |where, what| %>
- <strong><%= where.to_s.capitalize %>:</strong> <code><%= what[0] %> &rarr; <%= what[1] %></code><br />
- <% end %>
- </p>
- </li>
-<% end %>
-</ol>
-
-<% end %> \ No newline at end of file
diff --git a/app/views/bugs/create.html.erb b/app/views/bugs/create.html.erb
deleted file mode 100644
index aa3490b..0000000
--- a/app/views/bugs/create.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Bugs#create</h1>
-<p>Find me in app/views/bugs/create.html.erb</p>
diff --git a/app/views/bugs/create.js.erb b/app/views/bugs/create.js.erb
deleted file mode 100644
index 13a466b..0000000
--- a/app/views/bugs/create.js.erb
+++ /dev/null
@@ -1,6 +0,0 @@
-<% if @error == nil %>
-Element.insert('bugtable', { bottom: '<%= escape_javascript(@bugs_text).html_safe %>'});
-Modalbox.hide();
-<% else %>
-alert('<%= escape_javascript(@error).html_safe %>');
-<% end %> \ No newline at end of file
diff --git a/app/views/bugs/destroy.html.erb b/app/views/bugs/destroy.html.erb
deleted file mode 100644
index b08c545..0000000
--- a/app/views/bugs/destroy.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Bugs#destroy</h1>
-<p>Find me in app/views/bugs/destroy.html.erb</p>
diff --git a/app/views/bugs/new.html.erb b/app/views/bugs/new.html.erb
deleted file mode 100644
index 63ca3c8..0000000
--- a/app/views/bugs/new.html.erb
+++ /dev/null
@@ -1,34 +0,0 @@
-<% if @glsa.nil? %>
-<p>No or invalid GLSA ID specified.</p>
-<% else %>
-<%= form_tag(glsa_bugs_path(@glsa, @bug), :remote => true) do -%>
-<%# form_remote_tag(
- :url => { :controller => :glsa, :action => :addbugsave, :id => @glsa_id.to_s },
- :update => {:success => 'bugtable'},
- :position => :bottom,
- :before => '$("addbugsubmit").value="Loading...";',
- :after => '$("addbugsubmit").value="Add bugs";',
- :success => 'Modalbox.hide();',
- :failure => 'alert(request.responseText);') do -%>
-<p><label for="addbugs">
- <%= image_tag 'icons/bug.png' %>
- Please enter the relevant bug ID(s), separate more than one bug with a comma:</label>
-</p>
-
-<p><input type="text" name="addbugs" id="addbugs" class="hugetext nice"/></p>
-<script language="javascript">
-new Form.Element.Observer('addbugs', 4, function(element, value) {
- new Ajax.Request("<%= url_for :controller => 'tools', :action => 'bugs_ajax_info' %>", {
- method: 'get',
- parameters: { bugs: $('addbugs').getValue() },
- onComplete : function(transport) {
- $('ajaxbugs').update(transport.responseJSON.buginfo);
- Modalbox.resizeToContent();
- }
- });
-});
-</script>
-<div id="ajaxbugs"></div>
-<p style="text-align: right;"><input type="submit" class="button" value="Add bugs" id="addbugsubmit" /></p>
-<% end -%>
-<% end %> \ No newline at end of file
diff --git a/app/views/bugs/show.html.erb b/app/views/bugs/show.html.erb
deleted file mode 100644
index 736728a..0000000
--- a/app/views/bugs/show.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Bugs#show</h1>
-<p>Find me in app/views/bugs/show.html.erb</p>
diff --git a/app/views/comments/create.js.erb b/app/views/comments/create.js.erb
deleted file mode 100644
index 482b6ff..0000000
--- a/app/views/comments/create.js.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<% if @error == nil %>
-Element.insert('commentslist', { bottom: '<%= escape_javascript(@comment_text).html_safe %>'});
-Modalbox.hide();
-<% else %>
-<% if @error.is_a? ActiveModel::Errors %>
-alert('<%= escape_javascript(@error.full_messages.join "\n").html_safe %>');
-<% else %>
-alert('<%= escape_javascript(@error).html_safe %>');
-<% end %>
-<% end %> \ No newline at end of file
diff --git a/app/views/comments/destroy.html.erb b/app/views/comments/destroy.html.erb
deleted file mode 100644
index 9dcdf77..0000000
--- a/app/views/comments/destroy.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Comment#destroy</h1>
-<p>Find me in app/views/comment/destroy.html.erb</p>
diff --git a/app/views/comments/new.html.erb b/app/views/comments/new.html.erb
deleted file mode 100644
index 87d836f..0000000
--- a/app/views/comments/new.html.erb
+++ /dev/null
@@ -1,25 +0,0 @@
-<% if @glsa.nil? %>
-<p>No or invalid GLSA ID specified.</p>
-<% else %>
-<%= form_tag(glsa_comments_path(@glsa, @comment), :remote => true, :class => "popupform") do -%>
- <%= fields_for :newcomment do |f| %>
- <p>
- <%= f.text_area :text, :class => "nice", :rows => 4 %>
- </p>
-
- <p style="text-align: right;">
- <% if current_user.access >= 2 and not @glsa.is_owner? current_user %>
- <span class="left">
- Rating:
- <%= f.radio_button :rating, "approval" %><label for="newcomment_rating_approval"><%= image_tag 'icons/approval.png', :alt => 'Approval', :title => 'Approval' %></label>&nbsp;
- <%= f.radio_button :rating, "rejection" %><label for="newcomment_rating_rejection"><%= image_tag 'icons/rejection.png', :alt => 'Rejection', :title => 'Rejection' %></label>&nbsp;
- <%= f.radio_button :rating, "neutral", :checked => true %><label for="newcomment_rating_neutral"><%= image_tag 'icons/comment.png', :alt => 'Neutral', :title => 'Neutral' %></label>
- </span>
- <% else %>
- <%= f.hidden_field :rating, :value => 'neutral' %>
- <% end %>
- <% end %>
- <input type="submit" class="button" value="Add comment" id="addcommentsubmit" />
- </p>
-<% end -%>
-<% end %> \ No newline at end of file
diff --git a/app/views/comments/show.html.erb b/app/views/comments/show.html.erb
deleted file mode 100644
index b66469d..0000000
--- a/app/views/comments/show.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Comment#show</h1>
-<p>Find me in app/views/comment/show.html.erb</p>
diff --git a/app/views/cve/_assigning.js.erb b/app/views/cve/_assigning.js.erb
deleted file mode 100644
index 6a25248..0000000
--- a/app/views/cve/_assigning.js.erb
+++ /dev/null
@@ -1,94 +0,0 @@
-/** Assigning **/
-uki(
- { view: 'Popup', rect: '650 400', anchors: 'left top', id: 'assign-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 630 20', anchors: 'top', text: '', id: 'cve-assign-title' },
- { view: 'ScrollPane', rect: '10 30 635 320', anchors: 'top left right bottom', id: 'cve-assign-scroll', scrollableV: true, scrollableH: false, childViews: [
- { view: 'Label', rect: '10 20 600 200', anchors: 'top', text: '', id: 'cve-assign-text', textSelectable: true, multiline: true},
- ] },
- { view: 'Button', rect: '495 365 70 24', anchors: 'bottom right', id: 'cve-assign-cancel', text: 'Cancel' },
- { view: 'Button', rect: '570 365 70 24', anchors: 'bottom right', id: 'cve-assign-go', text: 'Assign' }
- ]
- }
-);
-
-uki('#assign-bug-nr').keypress(
- function(e) {
- if (e.charCode == 13) {
- uki('#cve-assign').click();
- }
- }
-);
-
-uki("#cve-assign").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length < 1) {
- alert("Please select at least one CVE.");
- return false;
- }
-
- var popup = uki('#assign-popup');
- var bugnr = uki('#assign-bug-nr').value();
-
- if (!(bugnr == parseInt(bugnr)) || bugnr.length == 0) {
- alert("Please enter a numeric bug #.");
- return false;
- }
-
- cve_assign_data = new Array();
- for (var i = 0; i < sel.length; i++) {
- cve_assign_data.push(sel[i][0]);
- }
-
- new Ajax.Request('/cve/assign_preview', {
- parameters: { cves: cve_assign_data.join(','), bug: bugnr },
- onSuccess: function(response) {
- uki('#cve-assign-text').html(response.responseText);
- uki('#cve-assign-text').resizeToContents('height');
-
- uki('#cve-assign-title').html("<strong>The following changes will be made to bug " + bugnr + ":</strong>");
- popup.show();
- uki('#cve-assign-go').disabled(false);
- uki('#cve-assign-go').focus();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#cve-assign-cancel').click(
- function() {
- uki('#assign-popup').hide();
- }
-);
-
-uki('#cve-assign-go').click(
- function() {
- uki('#cve-assign-go').disabled(true);
- var bugnr = uki('#assign-bug-nr').value();
-
- if (cve_assign_data < 1) {
- alert("Error. Internal CVE list empty.");
- uki('#assign-popup').hide();
- return;
- }
-
- new Ajax.Request('/cve/assign', {
- parameters: { cves: cve_assign_data.join(','), bug: bugnr, comment: $('add_comment').checked, summary: $('change_summary').checked },
- onSuccess: function(response) {
- uki('#assign-popup').hide();
- uki('#assign-bug-nr').value('');
- reloadTable();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- uki('#cve-assign-go').disabled(false);
- }
- });
- }
-);
-/** Assigning end **/
diff --git a/app/views/cve/_filing.js.erb b/app/views/cve/_filing.js.erb
deleted file mode 100644
index dc80767..0000000
--- a/app/views/cve/_filing.js.erb
+++ /dev/null
@@ -1,170 +0,0 @@
-/** Filing **/
-uki(
- { view: 'Popup', rect: '500 300', anchors: 'left top', id: 'file-1-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 480 20', anchors: 'top', text: 'Select a package to file this bug against:', id: 'cve-file-1-title' },
- { view: 'ScrollableList', rect: '10 35 480 170', anchors: 'top left right bottom', id: 'cve-file-1-list' },
- { view: 'Label', rect: '10 210 480 20', anchors: 'top', text: 'Or manually enter a package atom:', id: 'cve-file-1-title2' },
- { view: 'TextField', rect: '10 235 480 22', anchors: 'left top right', placeholder: 'package atom', id: 'cve-file-1-atom' },
- { view: 'Button', rect: '345 265 70 24', anchors: 'bottom right', id: 'cve-file-1-cancel', text: 'Cancel' },
- { view: 'Button', rect: '420 265 70 24', anchors: 'bottom right', id: 'cve-file-1-go', text: 'Next' }
- ]
- }
-);
-
-uki(
- { view: 'Popup', rect: '650 400', anchors: 'left top', id: 'file-2-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 630 20', anchors: 'top', text: 'Enter the information for filing the bug:', id: 'cve-file-2-title' },
- { view: 'ScrollPane', rect: '10 30 635 320', anchors: 'top left right bottom', id: 'cve-file-2-scroll', scrollableV: true, scrollableH: false, childViews: [
- { view: 'Label', rect: '10 10 600 400', anchors: 'top', text: '', id: 'cve-file-2-text', textSelectable: true, multiline: true},
- ] },
- { view: 'Button', rect: '495 365 70 24', anchors: 'bottom right', id: 'cve-file-2-cancel', text: 'Cancel' },
- { view: 'Button', rect: '570 365 70 24', anchors: 'bottom right', id: 'cve-file-2-go', text: 'File bug' }
- ]
- }
-);
-
-uki("#cve-file").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length < 1) {
- alert("Please select at least one CVE.");
- return false;
- }
-
- // TODO: Avoid DoS'ing the package search by limiting the # of package to search for
-
- var popup = uki('#file-1-popup');
-
- // yes, this wants to be a global var
- cve_file_data = new Array();
- for (var i = 0; i < sel.length; i++) {
- cve_file_data.push(sel[i][0]);
- }
-
- new Ajax.Request('/cve/bug_package', {
- parameters: { cves: cve_file_data.join(',')},
- onSuccess: function(response) {
- uki('#cve-file-1-list').data(response.responseJSON['package_hints']);
- uki('#cve-file-1-atom').value('');
- uki('#cve-file-1-atom').focus();
- disableMainView();
- popup.show();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#cve-file-1-cancel').click(
- function() {
- uki('#file-1-popup').hide();
- enableMainView();
- }
-);
-
-uki('#cve-file-1-go').click(
- function() {
- var package_name = "";
-
- if (uki('#cve-file-1-list').selectedIndex() > 0 && uki('#cve-file-1-atom').value() != '') {
- alert('Either select a package or enter something');
- return false;
- }
-
- if (uki('#cve-file-1-list').selectedIndex() < 0) {
- package_name = uki('#cve-file-1-atom').value();
- } else {
- package_name = uki('#cve-file-1-list').selectedRow();
- }
-
- if (package_name == undefined || package_name == "") {
- alert("Please select a package.");
- return false;
- }
-
- if (cve_file_data < 1) {
- alert("Error. Internal CVE list empty.");
- uki('#file-1-popup').hide();
- return;
- }
-
- new Ajax.Request('/cve/bug_preview', {
- parameters: { package: package_name, cves: cve_file_data.join(',') },
- onSuccess: function(response) {
- uki('#cve-file-2-text').html(response.responseText);
- uki('#cve-file-2-text').resizeToContents('height');
-
- uki('#file-1-popup').hide();
- uki('#file-2-popup').show();
- $('bug_title').focus();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#cve-file-2-cancel').click(
- function() {
- uki('#file-2-popup').hide();
- }
-);
-
-uki('#cve-file-2-go').click(
- function() {
- if (cve_file_data < 1) {
- alert("Error. Internal CVE list empty.");
- uki('#file-2-popup').hide();
- return;
- }
-
- if ($('wb_1').value == '--') {
- alert('Please select a whiteboard setting. If unsure use "??" instead.');
- $('wb_1').focus();
- return;
- }
-
- if (!($('add_comment').checked || $('add_cves').checked)) {
- alert("Adding the CVE description is strongly suggested!\n\nIf you do not want to add it, then you need at least to add a comment.");
- $('comment').focus();
- return;
- }
-
- uki('#cve-file-2-go').disabled(true);
-
- var params = {
- bug_title: $('bug_title').value,
- bug_type: $('type_1').checked,
- cc_maint: $('cc_maint').checked,
- cc_custom: $('custom_cc').value,
- wb_1: $('wb_1').value,
- wb_2: $('wb_2').value,
- wb_ext: $('wb_ext').value,
- add_comment: $('add_comment').checked,
- comment: $('comment').value,
- add_cves: $('add_cves').checked,
- package: $('package').value,
- cves: cve_file_data.join(',')
- };
-
- new Ajax.Request('/cve/bug', {
- parameters: params,
- onSuccess: function(response) {
- uki('#file-2-popup').hide();
- uki('#cve-file-2-go').disabled(false);
- reloadTable();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- uki('#cve-file-2-go').disabled(false);
- }
- });
- }
-);
-/** Filing end **/
diff --git a/app/views/cve/_invalidate.js.erb b/app/views/cve/_invalidate.js.erb
deleted file mode 100644
index 6cb031d..0000000
--- a/app/views/cve/_invalidate.js.erb
+++ /dev/null
@@ -1,71 +0,0 @@
-/** Invalidating **/
-uki(
- { view: 'Popup', rect: '500 300', anchors: 'left top', id: 'inva-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 480 20', anchors: 'top', html: '<strong>The following CVEs will be marked as INVALID:</strong>', id: 'cve-inva-title'},
- { view: 'ScrollableList', rect: '10 35 480 190', anchors: 'top left right bottom', id: 'cve-inva-list' },
- { view: 'TextField', rect: '10 235 480 22', anchors: 'left top right', id: 'inva-comment' },
- { view: 'Button', rect: '345 265 70 24', anchors: 'bottom right', id: 'cve-inva-cancel', text: 'Cancel' },
- { view: 'Button', rect: '420 265 70 24', anchors: 'bottom right', id: 'cve-inva-go', text: 'Commit' }
- ]
- }
-);
-
-uki("#cve-mark-invalid").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length < 1) {
- alert("Please select at least one CVE.");
- return false;
- }
-
- var data = new Array();
- cve_inva_data = new Array();
-
- for (var i = 0; i < sel.length; i++) {
- data.push("(" + sel[i][1] + ") " + sel[i][2]);
- cve_inva_data.push(sel[i][0]);
- }
-
- uki('#cve-inva-list').data(data);
-
- uki('#inva-comment').value('');
- uki('#inva-popup').show();
-
- uki('#cve-inva-go').focus();
- }
-);
-
-uki('#cve-inva-go').click(
- function() {
- if (cve_inva_data < 1) {
- alert("Error. Internal CVE list empty.");
- return;
- uki('#inva-popup').hide();
- }
-
- if (uki('#inva-comment').value() == "") {
- alert("You need to provide a reason.");
- uki('#inva-comment').focus();
- return;
- }
-
- new Ajax.Request('/cve/invalid', {
- parameters: { cves: cve_inva_data.join(','), reason: uki('#inva-comment').value() },
- onSuccess: function(response) {
- uki('#inva-popup').hide();
- reloadTable();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- }
- });
- }
-);
-
-uki('#cve-inva-cancel').click(
- function() {
- uki('#inva-popup').hide();
- }
-);
-/** Invalidating end **/ \ No newline at end of file
diff --git a/app/views/cve/_key_events.js.erb b/app/views/cve/_key_events.js.erb
deleted file mode 100644
index 9bdf740..0000000
--- a/app/views/cve/_key_events.js.erb
+++ /dev/null
@@ -1,71 +0,0 @@
-/** Keyboard events **/
-document.onkeyup = function(e){
- var keycode;
-
- if (e == null) { // ie
- keycode = event.keyCode;
- } else { // mozilla
- keycode = e.which;
- }
-
- if (keycode == 27) {
- if (uki('#nfu-popup').visible())
- uki('#nfu-popup').hide();
- if (uki('#assign-popup').visible())
- uki('#assign-popup').hide();
- if (uki('#file-1-popup').visible())
- uki('#file-1-popup').hide();
- if (uki('#file-2-popup').visible())
- uki('#file-2-popup').hide();
-
- enableMainView();
- uki('Table').focus();
- } else if (keycode == 13 && e.ctrlKey) {
- if (uki('#nfu-popup').visible())
- uki('#cve-nfu-go').click();
- if (uki('#assign-popup').visible())
- uki('#cve-assign-go').click();
- if (uki('#file-1-popup').visible())
- uki('#cve-file-1-go').click();
- if (uki('#file-2-popup').visible())
- uki('#cve-file-2-go').click();
- }
-};
-
-uki('Table').keyup(
- function(e) {
- var c = e.keyCode;
- //alert(c);
-
- if (c == 110 || c == 78) { // n;N
- uki('#cve-mark-nfu').click();
- return;
- }
-
- if (c == 108 || c == 76) { // l;L
- uki('#cve-mark-later').click();
- return;
- }
-
- if (c == 105 || c == 73) { // i;I
- uki('#cve-mark-invalid').click();
- return;
- }
-
- if (c == 97 || c == 65 || c == 51) { // a;A;#
- uki('#assign-bug-nr').focus();
- return;
- }
-
- if (c == 102 || c == 70 || c == 98 || c == 66) { // f;F;b;B
- uki('#cve-file').click();
- return;
- }
-
- if (c == 13) { // enter key
- uki('#cve-details').click();
- return;
- }
- }
-);
-/** Keyboard events end **/ \ No newline at end of file
diff --git a/app/views/cve/_later.js.erb b/app/views/cve/_later.js.erb
deleted file mode 100644
index 0be1726..0000000
--- a/app/views/cve/_later.js.erb
+++ /dev/null
@@ -1,65 +0,0 @@
-/** Latering **/
-uki(
- { view: 'Popup', rect: '500 300', anchors: 'left top', id: 'later-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 480 20', anchors: 'top', html: '<strong>The following CVEs will be marked as LATER:</strong>', id: 'cve-later-title'},
- { view: 'ScrollableList', rect: '10 35 480 190', anchors: 'top left right bottom', id: 'cve-later-list' },
- { view: 'TextField', rect: '10 235 480 22', anchors: 'left top right', placeholder: 'Add a (public) comment', id: 'later-comment' },
- { view: 'Button', rect: '345 265 70 24', anchors: 'bottom right', id: 'cve-later-cancel', text: 'Cancel' },
- { view: 'Button', rect: '420 265 70 24', anchors: 'bottom right', id: 'cve-later-go', text: 'Commit' }
- ]
- }
-);
-
-uki("#cve-mark-later").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length < 1) {
- alert("Please select at least one CVE.");
- return false;
- }
-
- var data = new Array();
- cve_later_data = new Array();
-
- for (var i = 0; i < sel.length; i++) {
- data.push("(" + sel[i][1] + ") " + sel[i][2]);
- cve_later_data.push(sel[i][0]);
- }
-
- uki('#cve-later-list').data(data);
-
- uki('#later-comment').value('');
- uki('#later-popup').show();
-
- uki('#cve-later-go').focus();
- }
-);
-
-uki('#cve-later-go').click(
- function() {
- if (cve_later_data < 1) {
- alert("Error. Internal CVE list empty.");
- return;
- uki('#later-popup').hide();
- }
-
- new Ajax.Request('/cve/later', {
- parameters: { cves: cve_later_data.join(','), reason: uki('#later-comment').value() },
- onSuccess: function(response) {
- uki('#later-popup').hide();
- reloadTable();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- }
- });
- }
-);
-
-uki('#cve-later-cancel').click(
- function() {
- uki('#later-popup').hide();
- }
-);
-/** Latering end **/ \ No newline at end of file
diff --git a/app/views/cve/_new.js.erb b/app/views/cve/_new.js.erb
deleted file mode 100644
index 7f8c49b..0000000
--- a/app/views/cve/_new.js.erb
+++ /dev/null
@@ -1,75 +0,0 @@
-/** New CVE **/
-uki(
- { view: 'Popup', rect: '650 300', anchors: 'left top', id: 'new-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 630 20', anchors: 'top', text: '', id: 'cve-new-title' },
- { view: 'ScrollPane', rect: '10 30 635 220', anchors: 'top left right bottom', id: 'cve-new-scroll', scrollableV: true, scrollableH: false, childViews: [
- { view: 'Label', rect: '10 20 600 100', anchors: 'top', text: '', id: 'cve-new-text', textSelectable: true, multiline: true },
- ] },
- { view: 'Button', rect: '495 265 70 24', anchors: 'bottom right', id: 'cve-new-cancel', text: 'Cancel' },
- { view: 'Button', rect: '570 265 70 24', anchors: 'bottom right', id: 'cve-new-go', text: 'Create' }
- ]
- }
-);
-
-uki("#cve-new").click(
- function() {
- var popup = uki('#new-popup');
-
- new Ajax.Request('/cve/new_preview', {
- onSuccess: function(response) {
- uki('#cve-new-text').html(response.responseText);
- uki('#cve-new-text').resizeToContents('height');
-
- uki('#cve-new-title').html("<strong>Please provide the following CVE information:</strong>");
- popup.show();
- uki('#cve-new-go').disabled(false);
- uki('#cve-new-go').focus();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.response.Text);
- return false;
- }
- });
- }
-);
-
-uki('#cve-new-cancel').click(
- function() {
- uki('#new-popup').hide();
- enableMainView();
- }
-);
-
-uki('#cve-new-go').click(
- function() {
- if ($('cve_id').value.length < 13) {
- alert("Please enter a valid 13 digit CVE identifier.");
- return false;
- }
- if ($('summary').value.length < 1) {
- alert("Please enter a CVE summary.");
- return false;
- }
-
- uki('#cve-new-go').disabled(true);
- var params = {
- cve_id: $('cve_id').value,
- summary: $('summary').value
- };
-
- new Ajax.Request('new', {
- parameters: params,
- onSuccess: function(message) {
- uki('#new-popup').hide();
- uki('#cve-new-go').disabled(false);
- reloadTable();
- },
- onFailure: function(request, textStatus, errorThrown) {
- var message = (request.status == 403) ? request.responseText : "Filing the CVE failed. Is this a duplicate?";
- alert(message);
- uki('#cve-new-go').disabled(false);
- }
- });
- }
-);
-/** New CVE end **/
diff --git a/app/views/cve/_nfu.js.erb b/app/views/cve/_nfu.js.erb
deleted file mode 100644
index b73723f..0000000
--- a/app/views/cve/_nfu.js.erb
+++ /dev/null
@@ -1,65 +0,0 @@
-/** NFU **/
-uki(
- { view: 'Popup', rect: '500 300', anchors: 'left top', id: 'nfu-popup', hideOnClick: false, relativeTo: uki('#popup'), childViews: [
- { view: 'Label', rect: '10 10 480 20', anchors: 'top', html: '<strong>The following CVEs will be marked as NFU:</strong>', id: 'cve-nfu-title'},
- { view: 'ScrollableList', rect: '10 35 480 190', anchors: 'top left right bottom', id: 'cve-nfu-list' },
- { view: 'TextField', rect: '10 235 480 22', anchors: 'left top right', placeholder: 'Add a (public) comment', id: 'nfu-comment' },
- { view: 'Button', rect: '345 265 70 24', anchors: 'bottom right', id: 'cve-nfu-cancel', text: 'Cancel' },
- { view: 'Button', rect: '420 265 70 24', anchors: 'bottom right', id: 'cve-nfu-go', text: 'Commit' }
- ]
- }
-);
-
-uki("#cve-mark-nfu").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length < 1) {
- alert("Please select at least one CVE.");
- return false;
- }
-
- var data = new Array();
- cve_nfu_data = new Array();
-
- for (var i = 0; i < sel.length; i++) {
- data.push("(" + sel[i][1] + ") " + sel[i][2]);
- cve_nfu_data.push(sel[i][0]);
- }
-
- uki('#cve-nfu-list').data(data);
-
- uki('#nfu-comment').value('');
- uki('#nfu-popup').show();
-
- uki('#cve-nfu-go').focus();
- }
-);
-
-uki('#cve-nfu-go').click(
- function() {
- if (cve_nfu_data < 1) {
- alert("Error. Internal CVE list empty.");
- return;
- uki('#nfu-popup').hide();
- }
-
- new Ajax.Request('/cve/nfu', {
- parameters: { cves: cve_nfu_data.join(','), reason: uki('#nfu-comment').value() },
- onSuccess: function(response) {
- uki('#nfu-popup').hide();
- reloadTable();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- }
- });
- }
-);
-
-uki('#cve-nfu-cancel').click(
- function() {
- uki('#nfu-popup').hide();
- }
-);
-/** NFU end **/ \ No newline at end of file
diff --git a/app/views/cve/_toolbar.js.erb b/app/views/cve/_toolbar.js.erb
deleted file mode 100644
index 2616bf6..0000000
--- a/app/views/cve/_toolbar.js.erb
+++ /dev/null
@@ -1,54 +0,0 @@
-/** Toolbar begin **/
-function toolbar() {
- var years = [{ value: 0, text: 'ALL' }, { value: 2010, text: '2010' }, { value: 2009, text: '2009' }, { value: 2009, text: '2009' },
- { value: 2008, text: '2008' }, { value: 2007, text: '2007' }, { value: 2006, text: '2006' }, { value: 2005, text: '2005' },
- { value: 2004, text: '2004' }];
-
- return [
- { view: 'Image', rect: '0 0 220 57', anchors: 'left top', src: '<%= asset_path 'cvetool-logo.png' %>', id: 'logo' },
- // view settings
- { view: 'Image', rect: '5 57 16 16', anchors: 'left top', src: '<%= asset_path 'icons/switch.png' %>' },
- { view: 'Label', rect: '25 54 100 24', anchors: 'left top right', text: 'View settings' },
- { view: 'uki.more.view.ToggleButton', rect: '5 80 36 22', anchors: 'top', text: 'NEW', id: 'toggle-new', checked: true },
- { view: 'uki.more.view.ToggleButton', rect: '43 80 36 22', anchors: 'top', text: 'ASS', id: 'toggle-assigned' },
- { view: 'uki.more.view.ToggleButton', rect: '82 80 36 22', anchors: 'top', text: 'LAT', id: 'toggle-later' },
- { view: 'uki.more.view.ToggleButton', rect: '121 80 36 22', anchors: 'top', text: 'NFU', id: 'toggle-nfu' },
- { view: 'uki.more.view.ToggleButton', rect: '159 80 36 22', anchors: 'top', text: 'INV', id: 'toggle-invalid' },
-
- // searching and filtering
- { view: 'TextField', rect: '5 105 135 22', anchors: 'left top right', placeholder: 'quicksearch', id: 'quicksearch' },
- { view: 'Button', rect: '145 105 50 22', anchors: 'top right', text: 'Filter…', id: 'filter', disabled: true },
-
- { view: 'Label', rect: '100 85 10 10', anchors: 'left top right', text: '', id: 'popup'},
- // assign
- { view: 'Image', rect: '5 140 16 16', anchors: 'left top', src: '<%= asset_path 'icons/bug_add.png' %>' },
- { view: 'Label', rect: '25 137 188 24', anchors: 'left top right', text: 'Assign selected CVEs to bug' },
- { view: 'TextField', rect: '5 165 135 22', anchors: 'left top right', placeholder: 'bug', id: 'assign-bug-nr' },
- { view: 'Button', rect: '145 164 50 24', anchors: 'top right', text: 'Assign', id: 'cve-assign' },
- // file-new-bug
- { view: 'Image', rect: '5 200 16 16', anchors: 'left top', src: '<%= asset_path 'icons/bug_new.png' %>' },
- { view: 'Label', rect: '25 198 188 24', anchors: 'left top right', text: 'New bug from selected CVEs' },
- { view: 'Button', rect: '5 225 188 24', anchors: 'left top right', text: 'File a new bug', id: 'cve-file' },
- // mark-as
- { view: 'Image', rect: '5 265 16 16', anchors: 'left top', src: '<%= asset_path 'icons/stamp.png' %>' },
- { view: 'Label', rect: '25 262 188 24', anchors: 'left top right', text: 'Mark selected CVEs as…' },
- { view: 'Button', rect: '5 290 60 24', anchors: 'left top' , text: 'NFU', id: 'cve-mark-nfu' },
- { view: 'Button', rect: '70 290 60 24', anchors: 'left top', text: 'LATER', id: 'cve-mark-later' },
- { view: 'Button', rect: '135 290 60 24', anchors: 'left top', text: 'INVALID', id: 'cve-mark-invalid' },
- // add-a-note
- { view: 'Image', rect: '5 330 16 16', anchors: 'left top', src: '<%= asset_path 'icons/note.png' %>' },
- { view: 'Label', rect: '25 327 188 24', anchors: 'left top right', text: 'Add a note to selected CVEs' },
- { view: 'MultilineTextField', rect: '5 350 189 50', anchors: 'left top right', placeholder: 'Note', id: 'cve-note-text' },
- { view: 'Button', rect: '135 405 60 24', anchors: 'right top', text: 'Add note', id: 'cve-add-note' },
- // mark-as
- { view: 'Image', rect: '5 445 16 16', anchors: 'left top', src: '<%= asset_path 'icons/info.png' %>' },
- { view: 'Button', rect: '25 442 170 24', anchors: 'left top' , text: 'Info about selected CVEs', id: 'cve-details' },
- // New CVE
- { view: 'Button', rect: '5 475 190 24', anchors: 'left top right', text: 'Add a new CVE', id: 'cve-new' },
-
- // bottom stuff
- { view: 'Button', rect: '5 940 190 24', anchors: 'left bottom right', text: 'Reload table', id: 'reload-table' },
- { view: 'Button', rect: '5 970 190 24', anchors: 'left bottom right', text: 'Back to GLSAMaker', id: 'close' }
- ];
-}
-/** Toolbar end **/
diff --git a/app/views/cve/_ui_misc.js.erb b/app/views/cve/_ui_misc.js.erb
deleted file mode 100644
index 135f653..0000000
--- a/app/views/cve/_ui_misc.js.erb
+++ /dev/null
@@ -1,115 +0,0 @@
-/** UI misc **/
-uki("#reload-table").click(
- function() { reloadTable(); }
-);
-
-uki("#cve-details").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length > 15) {
- alert("I'm not opening more than 15 windows...");
- return false;
- }
-
- for(var i = 0; i < sel.length; i++) {
- cvepopup(sel[i][1]);
- }
- }
-);
-
-uki("#close").click(
- function() {
- window.location = "/";
- }
-);
-
-uki('Table').bind('dblclick', function() {
- cvepopup(uki('Table').selectedRow()[1]);
-});
-
-// View settings
-uki("#toggle-new").click(
- function() {
- if (this.checked())
- view |= 1;
- else
- view ^= 1;
-
- reloadTable();
- }
-);
-
-uki("#toggle-assigned").click(
- function() {
- if (this.checked())
- view |= 2;
- else
- view ^= 2;
-
- reloadTable();
- }
-);
-
-uki("#toggle-later").click(
- function() {
- if (this.checked())
- view |= 4;
- else
- view ^= 4;
-
- reloadTable();
- }
-);
-
-uki("#toggle-nfu").click(
- function() {
- if (this.checked())
- view |= 8;
- else
- view ^= 8;
-
- reloadTable();
- }
-);
-
-uki("#toggle-invalid").click(
- function() {
- if (this.checked())
- view |= 16;
- else
- view ^= 16;
-
- reloadTable();
- }
-);
-
-uki("#cve-add-note").click(
- function() {
- var sel = uki('Table').selectedRows();
-
- if (sel.length < 1) {
- alert("Please select at least one CVE.");
- return false;
- }
-
- var data = new Array();
-
- for (var i = 0; i < sel.length; i++) {
- data.push(sel[i][0]);
- }
-
- new Ajax.Request('/cve/note', {
- parameters: { cves: data.join(','), note: uki('#cve-note-text').value() },
- onSuccess: function(response) {
- uki('#cve-note-text').value('');
- reloadTable();
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- }
- });
- }
-);
-
-/** UI misc end **/ \ No newline at end of file
diff --git a/app/views/cve/actions.html.erb b/app/views/cve/actions.html.erb
deleted file mode 100644
index 139bcab..0000000
--- a/app/views/cve/actions.html.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<h2 style="margin-top: 0;">Actions</h2>
-
-<button onclick="new Ajax.Request('/cve/mark_new/', {parameters: { cve_id: cve_id }, onSuccess: function(response) { window.location.reload(); }, onFailure: function(response) { alert('Could not process your request:\n\n' + response.responseText); }});">Mark as NEW</button>
-
-<p>For all other actions, please use the table view.</p> \ No newline at end of file
diff --git a/app/views/cve/assign_preview.html.erb b/app/views/cve/assign_preview.html.erb
deleted file mode 100644
index 3fff283..0000000
--- a/app/views/cve/assign_preview.html.erb
+++ /dev/null
@@ -1,17 +0,0 @@
-<strong>
- <input type="checkbox" id="change_summary" value="1" checked="checked" />
- <label for="change_summary">Change summary</label>
-</strong>
-
-<p><tt><%= @summary %></tt></p>
-<p><small>was:</small><br />
- <tt><%= @bug.summary %></tt>
-</p>
-
-<br />
-<strong>
- <input type="checkbox" id="add_comment" value="1" checked="checked" />
- <label for="add_comment">Add comment</label>
-</strong>
-
-<p><pre><%= @cve_txt %></pre></p> \ No newline at end of file
diff --git a/app/views/cve/bug_preview.html.erb b/app/views/cve/bug_preview.html.erb
deleted file mode 100644
index 74d172f..0000000
--- a/app/views/cve/bug_preview.html.erb
+++ /dev/null
@@ -1,81 +0,0 @@
-<form>
-<label for="bug_title"><strong>Bug title:</strong></label><br />
-<input type="text" id="bug_title" value="<%= @package %>: Unspecified vulnerability (<%= bugs_unify_cvenames(@cve_ids) %>)" style="width: 100%; font-size: 115%;" />
-<br /><br />
-<strong>File in:</strong>
-<input type="radio" name="bug_type" id="type_1" value="vuln" checked="checked" />
-<label for="type_1">Vulnerabilities</label>&nbsp;&nbsp;&nbsp;
-<input type="radio" name="bug_type" id="type_2" value="kernel" />
-<label for="type_2">Kernel</label>
-<br /><br />
-
-<input type="checkbox" id="cc_maint" value="1" checked="checked" />
-<label for="cc_maint"><strong>CC the maintainers:</strong></label> <%= @maintainers.join ', ' %>
-<br /><br />
-<label for="custom_cc"><strong>Add other people to CC:</strong> (comma separated)</label><br />
-<input type="text" id="custom_cc" style="width: 100%" />
-<br /><br />
-
-<strong>Whiteboard:</strong><br />
-<select id="wb_1">
- <option>--</option>
- <option>A0</option>
- <option>A1</option>
- <option>A2</option>
- <option>A3</option>
- <option>A4</option>
- <option>A?</option>
- <option>B0</option>
- <option>B1</option>
- <option>B2</option>
- <option>B3</option>
- <option>B4</option>
- <option>B?</option>
- <option>C0</option>
- <option>C1</option>
- <option>C2</option>
- <option>C3</option>
- <option>C4</option>
- <option>C?</option>
- <option>~0</option>
- <option>~1</option>
- <option>~2</option>
- <option>~3</option>
- <option>~4</option>
- <option>~?</option>
- <option>?0</option>
- <option>?1</option>
- <option>?2</option>
- <option>?3</option>
- <option>?4</option>
- <option>??</option>
-</select>
-
-<select id="wb_2">
- <option>[ebuild cve]</option>
- <option>[upstream cve]</option>
- <option>[upstream/ebuild cve]</option>
- <option>[stable cve]</option>
- <option>[stable? cve]</option>
- <option>[cleanup cve]</option>
- <option>[?]</option>
-</select>
-
-<input type="text" id="wb_ext" />
-
-<br /><br />
-<input type="checkbox" id="add_comment" value="1" />
-<label for="add_comment"><strong>Add a comment:</strong> (appears after the CVE descriptions)</label>
-
-<textarea id="comment" rows="5" style="width: 100%;" onchange="$('add_comment').checked = true;"></textarea>
-
-<br /><br />
-<strong>
- <input type="checkbox" id="add_cves" value="1" checked="checked" />
- <label for="add_cves">Add CVE descriptions:</label>
-</strong>
-
-<p><pre><%= @cve_txt %></pre></p>
-
-<input type="hidden" name="package" id="package" value="<%= @package %>" />
-</form> \ No newline at end of file
diff --git a/app/views/cve/changes.html.erb b/app/views/cve/changes.html.erb
deleted file mode 100644
index 00de2a7..0000000
--- a/app/views/cve/changes.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<h2 style="margin-top: 0;">Changes</h2>
-
-<ul>
-<% @cve.cve_changes.each do |change| %>
- <li>
- <strong><%= change.action %>:</strong> <%= change.object %><br />
- <em>&mdash;<%= change.user.login %></em> @ <%= change.created_at.rfc2822 %>
- </li>
-<% end %>
-</ul> \ No newline at end of file
diff --git a/app/views/cve/comments.html.erb b/app/views/cve/comments.html.erb
deleted file mode 100644
index 36311bf..0000000
--- a/app/views/cve/comments.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<h2 style="margin-top: 0;">Comments</h2>
-
-<ul>
-<% @cve.comments.each do |comment| %>
- <li>
- <%= simple_format_without_paragraph(comment.comment) %><br />
- <em>&mdash;<%= comment.user.login %></em> @ <%= comment.created_at.rfc2822 %>
- </li>
-<% end %>
-</ul> \ No newline at end of file
diff --git a/app/views/cve/general_info.html.erb b/app/views/cve/general_info.html.erb
deleted file mode 100644
index 5179ce9..0000000
--- a/app/views/cve/general_info.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<h2 style="margin-top: 0;">Info</h2>
-
-<h3>Assigned bugs</h3>
-
-<ul>
-<% @cve.assignments.each do |ass| %>
- <li>
- <a href="https://<%= GLSAMAKER_BUGZIE_HOST %>/<%= ass.bug %>" target="_blank"><%= ass.bug %></a>
- </li>
-<% end %>
-</ul>
diff --git a/app/views/cve/index.html.erb b/app/views/cve/index.html.erb
deleted file mode 100644
index e69de29..0000000
--- a/app/views/cve/index.html.erb
+++ /dev/null
diff --git a/app/views/cve/info.html.erb b/app/views/cve/info.html.erb
deleted file mode 100644
index 33a9383..0000000
--- a/app/views/cve/info.html.erb
+++ /dev/null
@@ -1,140 +0,0 @@
-<% if @cve == nil %>
-
-<h2 style="margin-top: 0;"><%= error_msg("Invalid CVE ID") %></h2>
-<p>There is no such CVE.</p>
-
-<% else %>
-<script language="JavaScript" type="text/javascript">
-cve_id = "<%= escape_javascript @cve.cve_id %>";
-
-// page layout
-uki({ view: 'VSplitPane', rect: '500 600', anchors: 'left top right bottom', topMin: 120, handlePosition: 120,
- topChildViews: [
- { view: 'Box', rect: '0 0 500 30', anchors: 'top right left', background: 'cssBox(background:#D3CFE5;border-bottom:1px solid #999)', childViews: [
- { view: 'Label', rect: '5 5 400 20', html: "<h2 style='margin: 0;'><%= @cve.colorize.html_safe %> <small>(<%= @cve.state %>)</small></h2>", anchors: 'top left'},
- { view: 'Button', rect: '440 4 50 20', text: 'Close', anchors: 'top right', id: 'close' }
- ] },
- { view: 'Label', rect: '5 35 490 50', anchors: 'left top right', html: '<%= escape_javascript(simple_format_without_paragraph(@cve.summary)).gsub(/\n/, '') %>', textSelectable: true, multiline: true}
- ],
- bottomPane: { background: '#FFF', childViews: [
- { view: 'ScrollPane', rect: '0 0 500 445', anchors: 'top left right bottom', id: 'info-scroll', scrollableV: true, scrollableH: false, childViews: [
- { view: 'Label', rect: '5 5 495 445', anchors: 'top left right bottom', html: '', id: 'content', textSelectable: true, multiline: true},
- ] },
-
- { view: 'Box', rect: '0 445 500 28', anchors: 'left bottom right', background: 'cssBox(background:#CCC;border-top:1px solid #999;padding:1px;)', childViews: [
- { view: 'Button', rect: '5 4 40 20', text: 'Info', anchors: 'bottom left', id: 'info' },
- { view: 'Button', rect: '50 4 80 20', text: 'References', anchors: 'bottom left', id: 'references' },
- { view: 'Button', rect: '135 4 70 20', text: 'Packages', anchors: 'bottom left', id: 'packages' },
- { view: 'Button', rect: '210 4 80 20', text: 'Comments', anchors: 'bottom left', id: 'comments' },
- { view: 'Button', rect: '295 4 60 20', text: 'Changes', anchors: 'bottom left', id: 'changes' },
- <% if current_user.access >= 2 %>{ view: 'Button', rect: '430 4 60 20', text: 'Actions', anchors: 'bottom right', id: 'actions' },<% end %>
- ] }
- ]}
-}).attachTo(window, '500 600');
-
-uki('#close').click(
- function() {
- window.close();
- }
-);
-
-uki('#info').click(
- function() {
- new Ajax.Request('/cve/general_info', {
- parameters: { cve_id: cve_id },
- onSuccess: function(response) {
- uki('#content').html(response.responseText);
- uki('#content').resizeToContents('height');
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#info').click();
-
-uki('#references').click(
- function() {
- new Ajax.Request('/cve/references', {
- parameters: { cve_id: cve_id },
- onSuccess: function(response) {
- uki('#content').html(response.responseText);
- uki('#content').resizeToContents('height');
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#packages').click(
- function() {
- new Ajax.Request('/cve/packages', {
- parameters: { cve_id: cve_id },
- onSuccess: function(response) {
- uki('#content').html(response.responseText);
- uki('#content').resizeToContents('height');
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#comments').click(
- function() {
- new Ajax.Request('/cve/comments', {
- parameters: { cve_id: cve_id },
- onSuccess: function(response) {
- uki('#content').html(response.responseText);
- uki('#content').resizeToContents('height');
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#changes').click(
- function() {
- new Ajax.Request('/cve/changes', {
- parameters: { cve_id: cve_id },
- onSuccess: function(response) {
- uki('#content').html(response.responseText);
- uki('#content').resizeToContents('height');
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-
-uki('#actions').click(
- function() {
- new Ajax.Request('/cve/actions', {
- parameters: { cve_id: cve_id },
- onSuccess: function(response) {
- uki('#content').html(response.responseText);
- uki('#content').resizeToContents('height');
- },
- onFailure: function(response) {
- alert("Could not process your request:\n\n" + response.responseText);
- return false;
- }
- });
- }
-);
-</script>
-
-<% end %>
diff --git a/app/views/cve/info.json.jbuilder b/app/views/cve/info.json.jbuilder
deleted file mode 100644
index 31408a0..0000000
--- a/app/views/cve/info.json.jbuilder
+++ /dev/null
@@ -1,5 +0,0 @@
-json.extract! @cve, :id, :cve_id, :summary, :cvss, :state, :published_at
-
-json.references @cve.references, :source, :title, :uri
-
-json.bugs @cve.assignments.map { |a| a.bug }
diff --git a/app/views/cve/list.html.erb b/app/views/cve/list.html.erb
deleted file mode 100644
index 9a5fad6..0000000
--- a/app/views/cve/list.html.erb
+++ /dev/null
@@ -1,135 +0,0 @@
-<h1>CVE List</h1>
-
-<script language="JavaScript" type="text/javascript">
-
-var view = 1; // NEW by default
-
-// formatter for highlighted strings
-var hlt = '';
-function formatHlted (t) {
- return hlt ? (t || '').replace(hlt, '<strong>' + hlt + '</strong>') : t;
-}
-
-<%= render :partial => 'toolbar.js' %>
-
-uki(
- { view: 'HSplitPane', rect: '1000 1000', anchors: 'left top right bottom', handleWidth: 1, handlePosition: 199, leftMin: 199, rightMin: 400,
- leftPane: { background: '#D3CFE5', childViews: toolbar() },
- rightChildViews: [
- { view: 'Table', rect: '0 0 800 1000', minSize: '0 200', anchors: 'left top right bottom', columns: [
- { view: 'table.NumberColumn', label: 'ID', width: 50 },
- { view: 'table.CustomColumn', label: 'CVE ID', width: 125, formatter: formatHlted, sort: 'DESC' },
- { view: 'table.CustomColumn', label: 'Summary', resizable: true, minWidth: 300, width: (window.innerWidth - 200 - 50 - 125 - 80 - 15), formatter: formatHlted },
- { view: 'table.CustomColumn', label: 'State', width: 80, formatter: formatHlted },
- ], multiselect: true, style: {fontSize: '12px', lineHeight: '12px'} }
- ]
- }
-).attachTo(window, '1000 1000');
-
-uki(
- { view: 'Popup', rect: '100 20', id: 'loading', anchors: '', relativeTo: uki('#logo'), hideOnClick: false, childViews: [
- { view: 'Label', rect: '20 2 98 18', anchors: 'top', text: 'LOADING...', textAlign: 'center', id: 'loading-text'},
- ]
- }
-).show();
-
-<%= render :partial => 'key_events.js' %>
-
-<%= render :partial => 'ui_misc.js' %>
-
-<%= render :partial => 'filing.js' %>
-
-<%= render :partial => 'assigning.js' %>
-
-<%= render :partial => 'new.js' %>
-
-<%= render :partial => 'nfu.js' %>
-
-<%= render :partial => 'later.js' %>
-
-<%= render :partial => 'invalidate.js' %>
-
-// searchable model
-window.DummyModel = uki.newClass(Searchable, new function() {
- this.init = function(data) {
- this.items = data;
- uki.each(this.items, function(i, row) {
- row.searchIndex = escapeHTML(row[1].toLowerCase()) + ' ' + row[2].toLowerCase();
- })
- };
-
- this.matchRow = function(row, iterator) {
- return row.searchIndex.indexOf(iterator.query) > -1;
- };
-});
-
-// dinamicly load library json
-initCVETable = function(data) {
- uki('#loading').visible(false);
- var model = new DummyModel(data),
- lastQuery = '',
- table = uki('Table');
-
- model.bind('search.foundInChunk', function(chunk) {
- table.data(table.data().concat(chunk)).layout();
- });
-
- table.find('Header').bind('columnClick', function(e) {
- var header = this;
-
- if (e.column.sort() == 'ASC') e.column.sort('DESC');
- else e.column.sort('ASC');
-
- header.redrawColumn(e.columnIndex);
- uki.each(header.columns(), function(i, col) {
- if (col != e.column && col.sort()) {
- col.sort('');
- header.redrawColumn(i);
- }
- });
- model.items = e.column.sortData(model.items);
- table.data(model.items);
- });
-
- table.data(model.items);
-
- uki('#quicksearch').unbind('keyup click');
-
- uki('#quicksearch').bind('keyup click', function() {
- if (this.value().toLowerCase() == lastQuery) return;
- lastQuery = this.value().toLowerCase();
- if (lastQuery.match(/\S/)) {
- hlt = lastQuery;
- table.data([]);
- model.search(lastQuery);
- } else {
- hlt = '';
- table.data(model.items);
- }
- });
- document.body.className += '';
-};
-
-function reloadTable() {
- uki('#loading').visible(true);
- new Ajax.Request('/cve/list.json', {
- parameters: { view_map: view, year: uki('#year-select').value() },
- onSuccess: function(response) {
- initCVETable(response.responseJSON);
- },
- onFailure: function(response) {
- alert("Could not load CVE data.");
- uki('#loading').text("Loading CVE data failed. Please try again later.");
- }
- });
- uki('#quicksearch').click();
-}
-
-function disableMainView() {
-}
-
-function enableMainView() {
-}
-
-reloadTable();
-</script>
diff --git a/app/views/cve/new_preview.html.erb b/app/views/cve/new_preview.html.erb
deleted file mode 100644
index 4841c3f..0000000
--- a/app/views/cve/new_preview.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<form>
-<label for="cve_num"><strong>CVE Identifier:</strong></label><br />
-<input type="text" id="cve_id" value="CVE-" style="width: 20%; font-size: 115%;" />
-<br /><br />
-<label for="summary"><strong>CVE Summary:</strong></label><br />
-<textarea id="summary" rows="5" style="width: 100%;"></textarea>
-<end>
diff --git a/app/views/cve/packages.html.erb b/app/views/cve/packages.html.erb
deleted file mode 100644
index 85d37a5..0000000
--- a/app/views/cve/packages.html.erb
+++ /dev/null
@@ -1,22 +0,0 @@
-<h2 style="margin-top: 0;">Possibly affected Ebuilds</h2>
-
-<ul>
-<% @package_hints.each do |package| %>
- <li>
- <strong><tt><%= package %></tt></strong><br />
- <%= Glsamaker::Portage.get_metadata(package)[:description] %><br />
- [<a href="http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/<%= package %>" target="_blank">sources.g.o</a>]
- [<a href="https://<%= GLSAMAKER_BUGZIE_HOST %>/buglist.cgi?quicksearch=<%= package %>" target="_blank">bugs.g.o</a>]
- [<a href="https://<%= GLSAMAKER_BUGZIE_HOST %>/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=<%= package %>&product=Gentoo+Security&long_desc_type=substring&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&status_whiteboard_type=allwordssubstr&status_whiteboard=&keywords_type=allwords&keywords=&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=IN_PROGRESS&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&emailassigned_to1=1&emailtype1=substring&email1=&emailassigned_to2=1&emailreporter2=1&emailcc2=1&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0=" target="_blank">Secbug history</a>]
- </li>
-<% end %>
-</ul>
-
-<h2 style="margin-top: 0;">Raw CPE data</h2>
-<ul>
-<% @cve.cpes.each do |cpe| %>
- <li>
- <tt><%= cpe.cpe %></tt>
- </li>
-<% end %>
-</ul>
diff --git a/app/views/cve/references.html.erb b/app/views/cve/references.html.erb
deleted file mode 100644
index df59e94..0000000
--- a/app/views/cve/references.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<h2 style="margin-top: 0;">References</h2>
-
-<ul>
-<% @cve.references.each do |ref| %>
- <li>
- (<%= ref.source %>) <strong><%= ref.title %></strong><br />
- <a href="<%= ref.uri %>" target="_blank"><%= ref.uri %></a>
- </li>
-<% end %>
-</ul> \ No newline at end of file
diff --git a/app/views/glsa/_approval_row.erb b/app/views/glsa/_approval_row.erb
deleted file mode 100644
index 1949db0..0000000
--- a/app/views/glsa/_approval_row.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<tr>
- <td><%= is_approval_icon(comment.rating == 'approval') %></td>
- <td><%= comment.user.name %> (<%= comment.user.login %>)</td>
- <td><%= comment.created_at %></td>
-</tr> \ No newline at end of file
diff --git a/app/views/glsa/_close_msg.txt.erb b/app/views/glsa/_close_msg.txt.erb
deleted file mode 100644
index a07f975..0000000
--- a/app/views/glsa/_close_msg.txt.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-This issue was resolved and addressed in
- GLSA <%= @glsa.glsa_id %> at <%= @glsa.to_url %>
-by GLSA coordinator <%= current_user.to_s %>.
diff --git a/app/views/glsa/_comment.html.erb b/app/views/glsa/_comment.html.erb
deleted file mode 100644
index 059f4a0..0000000
--- a/app/views/glsa/_comment.html.erb
+++ /dev/null
@@ -1,27 +0,0 @@
-<li class="comment <%= @css_class || cycle("odd-bright", "") %>">
- <input type="hidden" name="commentread-<%= comment.id %>" id="commentread-<%= comment.id %>" value="<%= comment.read ? "true" : "false" %>" />
- <span class="comment-toolbox">
- <%= link_to_function(comment.read ? image_tag("icons/flag-green.png", :title => 'done') : image_tag("icons/flag.png", :title => 'todo'),
- "toggleCommentRead(#{comment.id})",
- :title => 'Toggle read status',
- :id => "commentflag-#{comment.id}") %>
- </span>
- <div class="comment-header">
- <%= case comment.rating
- when "approval"
- image_tag('icons/approval.png', :title => 'Approval')
- when "rejection"
- image_tag('icons/rejection.png', :title => 'Rejection')
- else
- image_tag('icons/comment.png', :title => 'Neutral')
- end -%>
- </div>
-
- <div class="comment-text"><%= Kramdown::Document.new(h(comment.text)).to_html.html_safe %></div>
- <div class="comment-author">
- <span class="comment-number">#<strong><%= @comment_number ||= 1 %></strong></span>
- &mdash;<strong><%= comment.user.name %></strong>, <%= comment.created_at %>
- </div>
-</li>
-
-<% @comment_number += 1 -%> \ No newline at end of file
diff --git a/app/views/glsa/_comments.html.erb b/app/views/glsa/_comments.html.erb
deleted file mode 100644
index 65cac94..0000000
--- a/app/views/glsa/_comments.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
- <div class="box" id="comments" style="margin-bottom: 4em;">
- <%= box_title('Comments', :icon => 'icons/comment.png',
- :toolbar => [
- {:title => 'Add comment', :uri => "javascript:addCommentDialog(#{@glsa.id})", :icon => 'icons/plus.png'},
- {:title => 'Dock right', :uri => "javascript:GLSAMaker.misc.ui.dock($('comments'))", :icon => 'icons/dock-right.png'}
- ]
- ) %>
- <ul id="commentslist">
- <%= render :partial => "comment", :collection => @glsa.comments.order("created_at ASC") %>
- </ul>
- </div>
diff --git a/app/views/glsa/_edit_bug_row.html.erb b/app/views/glsa/_edit_bug_row.html.erb
deleted file mode 100644
index 4fcee0e..0000000
--- a/app/views/glsa/_edit_bug_row.html.erb
+++ /dev/null
@@ -1,13 +0,0 @@
-<tr id="bug-<%= bug.bug_id %>">
- <input type="hidden" name="glsa[bugs][]" value="<%= bug.bug_id %>" />
- <td><%= bugready_icon(bug.bug_ready?) %></td>
- <td>
- <a href="javascript:///" onclick="buginfo(<%= bug.bug_id %>);"><strong><%= bug.bug_id %></strong></a> <small><a href="<%= bug.bug_url %>">[BZ]</a></small></td>
- <td><%= truncate(bug.title, :length => 60) %></td>
- <td>
- <%= link_to_function(
- image_tag('icons/minus.png', :alt => 'Mark as deleted'),
- "GLSAMaker.editing.bugs.del(#{bug.bug_id});"
- ) %>
- </td>
-</tr>
diff --git a/app/views/glsa/_email_headers.txt.erb b/app/views/glsa/_email_headers.txt.erb
deleted file mode 100644
index 3a750e6..0000000
--- a/app/views/glsa/_email_headers.txt.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-To: gentoo-announce@lists.gentoo.org
-Subject: [ GLSA <%= @glsa.glsa_id %> ] <%= @rev.title %>
-
diff --git a/app/views/glsa/_glsa.xml.builder b/app/views/glsa/_glsa.xml.builder
deleted file mode 100644
index 9eeee69..0000000
--- a/app/views/glsa/_glsa.xml.builder
+++ /dev/null
@@ -1,74 +0,0 @@
-xml.instruct!
-xml.declare! :DOCTYPE, :glsa, :SYSTEM, "http://www.gentoo.org/dtd/glsa.dtd"
-
-xml.glsa :id => glsa.glsa_id do
- xml.title rev.title
- xml.synopsis rev.synopsis
- xml.product({:type => "ebuild"}, rev.product)
- xml.announced glsa.release_date.strftime '%Y-%m-%d'
- xml.revised({:count => "#{rev.release_revision || 'draft'}"}, glsa.revised_date.strftime('%Y-%m-%d'))
-
- rev.bugs.each do |bug|
- xml.bug bug.bug_id
- end
-
- xml.access rev.release_access
- logger.debug rev.packages_by_atom.inspect
- xml.affected do
- rev.packages_by_atom.each_pair do |package, atoms|
- xml.package({:name => package, :auto => (atoms['unaffected'] || []).select {|a| !a.automatic}.length == 0 ? 'yes' : 'no',
- :arch => (atoms['vulnerable'].nil? || atoms['vulnerable'].length == 0) ? '*' : atoms['vulnerable'].first.arch}) do
- (atoms['unaffected'] || []).each do |a|
- if a.slot != '*'
- xml.unaffected({:range => a.xml_comp, :slot => a.slot}, a.version)
- else
- xml.unaffected({:range => a.xml_comp}, a.version)
- end
- end
- (atoms['vulnerable'] || []).each do |a|
- if a.slot != '*'
- xml.vulnerable({:range => a.xml_comp, :slot => a.slot}, a.version)
- else
- xml.vulnerable({:range => a.xml_comp}, a.version)
- end
- end
- end
- end
- end
-
- xml.background do
- xml << xml_format(rev.background || "")
- end
-
- xml.description do
- xml << xml_format(rev.description || "")
- end
-
- xml.impact({:type => rev.severity}) do
- xml << xml_format(rev.impact || "")
- end
-
- xml.workaround do
- xml << xml_format(rev.workaround || "")
- end
-
- xml.resolution do
- xml << xml_format(rev.resolution || "")
- end
-
- xml.references do
- rev.references.each do |ref|
- xml.uri({:link => ref.url}, ref.title)
- end
- end
-
- xml.metadata({:tag => 'requester', :timestamp => glsa.created_at.iso8601}, glsa.requester.login)
-
- if glsa.submitter
- xml.metadata({:tag => 'submitter', :timestamp => rev.created_at.iso8601}, glsa.submitter.login)
- end
-
- if glsa.bugreadymaker
- xml.metadata({:tag => 'bugReady', :timestamp => Time.now.iso8601}, glsa.bugreadymaker.login)
- end
-end
diff --git a/app/views/glsa/_glsa_row.html.erb b/app/views/glsa/_glsa_row.html.erb
deleted file mode 100644
index 5c12adf..0000000
--- a/app/views/glsa/_glsa_row.html.erb
+++ /dev/null
@@ -1,31 +0,0 @@
-<% if current_user.can_access? glsa %>
-<tr class="<%= 'restricted' if glsa.restricted %> <%= cycle 'even', 'odd' %>">
- <td>
- <%= status_icon glsa.status %>
- <strong><tt><%= glsa.glsa_id %></tt></strong>
- </td>
- <td>
- <%= bugready_icon glsa.last_revision.bug_ready? %>
- <%= approval_icon glsa.approval_status %>
- <%= workflow_icon(glsa.workflow_status(current_user)) %>
- <%= restricted_icon glsa.restricted %>
- </td>
- <% if view == :requests %>
- <td><strong><%= link_to(glsa.last_revision.title, {:controller => 'glsa', :action => 'edit', :id => glsa}, {:title => "Draft this GLSA"}) %></strong></td>
- <td><%= glsa.created_at %>, <%= glsa.requester.name %> (<em><%= glsa.requester.login %></em>)</td>
- <% else %>
- <td><strong><%= link_to(glsa.last_revision.title, {:controller => 'glsa', :action => 'show', :id => glsa}, {:title => "Show this GLSA"}) %></strong></td>
- <td><%= glsa.created_at %>, <%= glsa.submitter.name %> (<em><%= glsa.submitter.login %></em>)</td>
- <% end %>
- <!--<td>
- <% if glsa.last_revision; glsa.last_revision.bugs.each do |b| %>
- <%= link_to_function b.bug_id, "buginfo('#{b.bug_id}')" %>
- <% end ; end %>
- </td>-->
- <% if current_user.is_el_jefe? %>
- <td>
- <%= link_to(image_tag('icons/delete.png'), glsa_path(glsa), :confirm => "Are you sure you want to delete this draft?", :method => :delete) %>
- </td>
- <% end %>
-</tr>
-<% end %> \ No newline at end of file
diff --git a/app/views/glsa/_package.html.erb b/app/views/glsa/_package.html.erb
deleted file mode 100644
index 5e3d115..0000000
--- a/app/views/glsa/_package.html.erb
+++ /dev/null
@@ -1,16 +0,0 @@
-<% comps = %w{ >= > *>= *> <= < *<= *< = } -%>
-<tr class="entry <%= 'invalid' if package.invalid? %>">
-<%= fields_for "glsa[package][]", package do |pf| %>
- <td><%= pf.text_field :atom, :class => :nice, :index => nil %></td>
- <td class="odd"><%= pf.select :comp, comps, {}, :index => nil %></td>
- <td class="odd"><%= pf.text_field :version, :class => :nice, :size => 10, :index => nil %></td>
- <td class="odd"><%= pf.text_field :slot, :class => :nice, :size => 5, :index => nil %></td>
- <td><%= pf.text_field :arch, :class => :nice, :size => 7, :index => nil %></td>
- <td class="odd"><%= pf.select :automatic, [["yes", true], ["no", false]], {}, :index => nil %></td>
- <td><%= link_to_function(
- image_tag('icons/package-remove.png', :alt => 'Remove package'),
- "GLSAMaker.editing.packages.del(this)",
- :title => 'Remove package') %>
- <%= pf.hidden_field :my_type, :index => nil %></td>
-<% end %>
-</tr>
diff --git a/app/views/glsa/_reference.html.erb b/app/views/glsa/_reference.html.erb
deleted file mode 100644
index 8726060..0000000
--- a/app/views/glsa/_reference.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<tr class="entry">
-<%= fields_for "glsa[reference][]", reference do |rf| %>
- <td><%= rf.text_field :title, :class => :nice, :size => 18, :index => nil %></td>
- <td><%= rf.text_field :url, :class => :nice, :index => nil %></td>
- <td><%= link_to_function(
- image_tag('icons/reference-remove.png', :alt => 'Remove reference'),
- "GLSAMaker.editing.references.del(this)",
- :title => 'Remove reference') %></td>
-<% end %>
-</tr>
diff --git a/app/views/glsa/_show_bug_row.html.erb b/app/views/glsa/_show_bug_row.html.erb
deleted file mode 100644
index 7eaad0c..0000000
--- a/app/views/glsa/_show_bug_row.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<tr id="bug-<%= bug.bug_id %>">
- <td><%= bugready_icon(bug.bug_ready?) %></td>
- <td>
- <a href="javascript:///" onclick="buginfo(<%= bug.bug_id %>);"><strong><%= bug.bug_id %></strong></a>
- <small><a href="<%= bug.bug_url %>">[BZ]</a></small></td>
- <td><%= truncate(bug.title, :length => 60) %></td>
-</tr> \ No newline at end of file
diff --git a/app/views/glsa/_show_package_row.txt.erb b/app/views/glsa/_show_package_row.txt.erb
deleted file mode 100644
index 1ec0f95..0000000
--- a/app/views/glsa/_show_package_row.txt.erb
+++ /dev/null
@@ -1,49 +0,0 @@
-<%= (@packages_count += 1).to_s.rjust(3) + " " -%>
-<%= if package.length <= 23
- package.ljust(23)
- else
- package + "\n" + ' ' * 28
- end -%>
-<%=
-
-vulnerable_versions = (items['vulnerable'].sort_by { |p| p.version.to_i } if items.has_key? 'vulnerable') || []
-unaffected_versions = (items['unaffected'].sort_by { |p| p.version.to_i } if items.has_key? 'unaffected') || []
-
-versions = []
-
-print_vulnerable = (unaffected_versions.size == 0 ? true : false)
-@print_vulnerable = true if print_vulnerable
-
-while vulnerable_versions.size > 0 or unaffected_versions.size > 0
- v = (vulnerable_versions.shift if vulnerable_versions.size > 0) || nil
- print_slot = (v and v.slot != '*' ? true : false)
- if print_slot
- line = (v ? "#{v.comp} #{v.version}:#{v.slot}" : "").center(20)
- else
- line = (v ? "#{v.comp} #{v.version}" : "").center(20)
- end
-
- if v and v.arch != '*'
- @arches[@packages_count] ||= []
- @arches[@packages_count] += v.arch.split(' ')
- end
-
- if print_vulnerable
- line += "Vulnerable!".rjust(22)
- print_vulnerable = false
- else
- v = (unaffected_versions.shift if unaffected_versions.size > 0) || nil
- print_slot = (v and v.slot != '*' ? true : false)
- if print_slot
- line += (v ? "#{v.comp} #{v.version}:#{v.slot} #{v.automatic ? "" : (@print_noauto = true && "*")}" : "").rjust(22)
- else
- line += (v ? "#{v.comp} #{v.version} #{v.automatic ? "" : (@print_noauto = true && "*")}" : "").rjust(22)
- end
- end
- versions << line
-end
-
-versions.join("\n" + ' ' * 28).html_safe
-
--%>
-
diff --git a/app/views/glsa/_show_reference.txt.erb b/app/views/glsa/_show_reference.txt.erb
deleted file mode 100644
index c29db6a..0000000
--- a/app/views/glsa/_show_reference.txt.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<%= prefixed_item("[ " + (@reference_number += 1).to_s.rjust(@max_digits_of_references) + " ]", reference.title) %>
-<%= prefixed_item(" " * (@max_digits_of_references + 4), reference.url) %>
diff --git a/app/views/glsa/_status_legend.html.erb b/app/views/glsa/_status_legend.html.erb
deleted file mode 100644
index 070ac5d..0000000
--- a/app/views/glsa/_status_legend.html.erb
+++ /dev/null
@@ -1,38 +0,0 @@
-<div class="legend box">
- <h2>Legend</h2>
- <span class="column">
- <strong>Status</strong><br />
- <%= status_icon "request" %> Request<br />
- <%= status_icon "draft" %> Draft<br />
- <%= status_icon "release" %> Sent GLSA<br /><br />
- </span>
-
- <span class="column">
- <strong>Bugs</strong><br />
- <%= bugready_icon true %> All bugs ready<br />
- <%= bugready_icon false %> Not ready<br /><br /><br />
- </span>
-
- <span class="column">
- <strong>Approval</strong><br />
- <%= approval_icon :approved %> Approved<br />
- <%= approval_icon :comments_pending %> Comments pending<br />
- <%= approval_icon :commented %> Commented<br />
- <%= approval_icon :none %> None
- </span>
-
- <span class="column">
- <strong>Workflow</strong><br />
- <%= workflow_icon :own %> Own draft<br />
- <%= workflow_icon :todo %> TODO items pending<br />
- <%= workflow_icon :commented %> You have commented<br />
- <%= workflow_icon :approved %> You have approved
- </span>
-
- <span class="column last">
- <strong>Embargo</strong><br />
- <%= restricted_icon false %> public<br />
- <%= restricted_icon true %> confidential
- </span>
- <br class="clear" />
-</div> \ No newline at end of file
diff --git a/app/views/glsa/_template_popups.html.erb b/app/views/glsa/_template_popups.html.erb
deleted file mode 100644
index 8abedfc..0000000
--- a/app/views/glsa/_template_popups.html.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<% GLSAMAKER_TEMPLATE_TARGETS.each do |target| %>
-<div id="templates-<%= target %>" style="display: none;" class="popup">
- <%= form_tag({:controller => 'tools', :action => 'template'}, :remote => true) do -%>
- <%= hidden_field('template', 'target', :value => target) %>
- <%= select('template', 'id', (@templates[target] || []).collect {|template| [template.name, template.id]}) %><%= image_submit_tag 'icons/next.png', :style => 'margin-top: .3em; vertical-align: top;' %>
- <% end -%>
-</div>
-<% end %> \ No newline at end of file
diff --git a/app/views/glsa/archive.html.erb b/app/views/glsa/archive.html.erb
deleted file mode 100644
index b8980be..0000000
--- a/app/views/glsa/archive.html.erb
+++ /dev/null
@@ -1,26 +0,0 @@
-<h1>
- <span class="floatright">
- <%= form_tag(archive_glsas_path, :remote => true) do -%>
- <%= image_tag 'icons/calendar-select-month.png' %>
- <%= date_select('view', 'month', :discard_day => true, :order => [:month, :year], :start_year => 2003, :end_year => Time.now.year + 1) %>
- <%= image_submit_tag 'icons/next.png' %>
- <% end -%>
- </span>
- Released GLSAs <span id="date">in <%= Date::MONTHNAMES[@month] %> <%= @year %></span>
-</h1>
-
-<table class="glsamaker-table">
-<tr align="left">
- <th>ID</th>
- <th>State</th>
- <th>Title</th>
- <th>Last changed at/by</th>
- <!--<th>Bug IDs</th>-->
- <% if current_user.is_el_jefe? %><th>Admin</th><% end %>
-</tr>
-<tbody id="list">
-<%= render :partial => "glsa_row", :collection => @glsas, :as => :glsa, :locals => { :view => :drafts } %>
-</tbody>
-</table>
-
-<%= render :partial => "status_legend" %>
diff --git a/app/views/glsa/archive.js.erb b/app/views/glsa/archive.js.erb
deleted file mode 100644
index 182e202..0000000
--- a/app/views/glsa/archive.js.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-Element.update('date', 'in <%= escape_javascript(Date::MONTHNAMES[@month] + " " + @year.to_s) %>');
-Element.update('list', '<%= escape_javascript(@table.html_safe) %>'); \ No newline at end of file
diff --git a/app/views/glsa/comment.html.erb b/app/views/glsa/comment.html.erb
deleted file mode 100644
index 0faa416..0000000
--- a/app/views/glsa/comment.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Glsa#comment</h1>
-<p>Find me in app/views/glsa/comment.html.erb</p>
diff --git a/app/views/glsa/create.html.erb b/app/views/glsa/create.html.erb
deleted file mode 100644
index b347c52..0000000
--- a/app/views/glsa/create.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Glsa#create</h1>
-<p>Find me in app/views/glsa/create.html.erb</p>
diff --git a/app/views/glsa/destroy.html.erb b/app/views/glsa/destroy.html.erb
deleted file mode 100644
index e49b31d..0000000
--- a/app/views/glsa/destroy.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Glsa#destroy</h1>
-<p>Find me in app/views/glsa/destroy.html.erb</p>
diff --git a/app/views/glsa/diff.html.erb b/app/views/glsa/diff.html.erb
deleted file mode 100644
index 1280084..0000000
--- a/app/views/glsa/diff.html.erb
+++ /dev/null
@@ -1,19 +0,0 @@
-<h1>Comparing revisions <%= params[:old] %> and <%= params[:new] %></h1>
-
-<div class="box buttons">
- <span class="floatright">
- <%= link_to "#{image_tag 'icons/draft.png'} Back".html_safe, {:controller => 'glsa', :action => 'show', :id => @glsa}, {:class => 'button'} %>
- </span>
- <%= form_tag(:action => :diff, :id => @glsa.id) do %>
- <%= submit_tag 'Compare' %> revisions
- <%= select_tag :old,
- options_from_collection_for_select(@glsa.revisions, :revid, :revid) %> (old)
- and
- <%= select_tag :new,
- options_from_collection_for_select(@glsa.revisions, :revid, :revid) %> (new).
- <% end %>
-</div>
-
-<pre>
-<%= @diff %>
-</pre> \ No newline at end of file
diff --git a/app/views/glsa/drafts.html.erb b/app/views/glsa/drafts.html.erb
deleted file mode 100644
index e727bd2..0000000
--- a/app/views/glsa/drafts.html.erb
+++ /dev/null
@@ -1,16 +0,0 @@
-<h1>Pooled GLSA drafts</h1>
-
-<table class="glsamaker-table">
-<tr align="left">
- <th>ID</th>
- <th>State</th>
- <th>Title</th>
- <th>Submitted at/by</th>
- <!--<th>Bug IDs</th>-->
- <% if current_user.is_el_jefe? %><th>Admin</th><% end %>
-</tr>
-
-<%= render :partial => "glsa_row", :collection => @glsas, :as => :glsa, :locals => { :view => :drafts } %>
-</table>
-
-<%= render :partial => "status_legend" %> \ No newline at end of file
diff --git a/app/views/glsa/edit.html.erb b/app/views/glsa/edit.html.erb
deleted file mode 100644
index 000d1be..0000000
--- a/app/views/glsa/edit.html.erb
+++ /dev/null
@@ -1,177 +0,0 @@
-<h1>
- Edit GLSA <code><%= @glsa.glsa_id %></code>
-</h1>
-
-<%= form_for @glsa do |f| -%>
-<div style="float: right; width: 44%;">
- <div class="box">
- <%= box_title('Permissions', :icon => 'icons/permission.png') %>
- <p><label for="permissions">This GLSA is</label>:
- <select name="glsa[restricted]" id="permissions">
- <%= options_for_select %w{ public confidential }, @glsa.restricted ? "confidential" : "public" %>
- </select>
- </p>
- </div>
-
- <div class="box">
- <%= box_title('Metadata', :icon => 'icons/metadata.png') %>
- <p style="float: left; width: 50%;"><label for="access"><%= image_tag 'icons/access.png' %> Access:</label>
- <select name="glsa[access]" id="access">
- <%= options_for_select [['local', 'local'], ['remote', 'remote'], ['local, remote', 'both']], lastrev_content(@glsa, 'access') %>
- </select>
- </p>
- <p><label for="severity"><%= image_tag 'icons/severity.png' %> Severity:</label>
- <select name="glsa[severity]" id="severity">
- <%= options_for_select %w{ low normal high }, lastrev_content(@glsa, 'severity') %>
- </select>
- </p>
- <p><label for="keyword"><%= image_tag 'icons/keyword.png' %> GLSA Keyword:</label>
- <%= text_field_tag "glsa[product]", lastrev_content(@glsa, 'product'), :class => "nice" %>
- </p>
- </div>
-
- <div class="box">
- <%= box_title('Background', :icon => 'icons/background.png', :label => 'background') %>
- <p>
- <textarea name="glsa[background]" id="background" class="nice" rows="3"><%= lastrev_content(@glsa, 'background') %></textarea>
- </p>
- </div>
-
- <div class="box">
- <%= box_title('Bugs', :icon => 'icons/bug.png',
- :toolbar => [{:uri => "javascript:GLSAMaker.editing.bugs.add_dialog(#{@glsa.id})", :title => 'Add bug', :icon => 'icons/plus.png'}]) %>
- <table id="bugtable">
- <%= render :partial => "edit_bug_row", :collection => @bugs, :as => :bug %>
- </table>
- </div>
-
- <%= render :partial => "comments" %>
-
- <div style="text-align: right;">
- <input type="submit" class="button" style="font-size: 150%;" value="Save &rarr;" />
- </div>
-</div>
-
-<div id="left">
- <div class="box">
- <%= box_title('Title', :icon => 'icons/title.png',
- :toolbar => [{:title => 'Add template', :uri => "javascript:GLSAMaker.editing.templates.dropdown(this, 'title');", :icon => 'icons/template.png'}]) %>
- <p><textarea name="glsa[title]" id="title" class="largetext nice" rows="1"><%= lastrev_content(@glsa, 'title') %></textarea></p>
- </div>
-
- <div class="box">
- <%= box_title('Synopsis', :icon => 'icons/synopsis.png', :label => 'synopsis',
- :toolbar => [
- {:title => 'Add template', :uri => "javascript:GLSAMaker.editing.templates.dropdown(this, 'synopsis');", :icon => 'icons/template.png'}
- ]
- ) %>
- <p><textarea name="glsa[synopsis]" id="synopsis" class="nice" rows="1"><%= lastrev_content(@glsa, 'synopsis') %></textarea></p>
- </div>
-
- <div class="box">
- <%= box_title('Packages', :icon => 'icons/package.png') %>
-
- <table class="padcells swap centercells" id="packages_table_vulnerable">
- <tr>
- <th><%= image_tag 'icons/atom.png' %> Atom</th>
- <th class="odd" colspan="2">Version</th>
- <th title="* or slot">Slot</th>
- <th title="* or space-separated list of arches"><%= image_tag 'icons/arch.png' %> Arch</th>
- <th class="odd"><%= image_tag 'icons/auto.png' %> Auto</th>
- </tr>
-
- <tr>
- <td><%= image_tag 'icons/affected.png' %> Vulnerable
- (<%= add_vulnerable_package_link(image_tag('icons/package-add.png')) %>)</td>
- </tr>
- <%= render :partial => 'package', :collection => @vulnerable_packages %>
- </table>
-
- <table class="padcells swap centercells" id="packages_table_unaffected">
- <tr>
- <td><%= image_tag 'icons/unaffected.png' %> Unaffected
- (<%= add_unaffected_package_link(image_tag('icons/package-add.png')) %>)</td>
- </tr>
- <%= render :partial => 'package', :collection => @unaffected_packages %>
-
- </table>
- </div>
-
- <div class="box" id="desc-box">
- <%= box_title('Description', :icon => 'icons/document.png', :label => 'description',
- :toolbar => [
- {:title => 'Add template', :uri => "javascript:GLSAMaker.editing.templates.dropdown(this, 'description');", :icon => 'icons/template.png'},
- {:title => 'Set default description', :uri => "javascript:generateDescription()", :icon => 'icons/document-go.png'},
- :sep,
- {:title => 'Fewer lines', :uri => "javascript:lines('description', -5)", :icon => 'icons/zoom_out.png'},
- {:title => 'Reset lines', :uri => "javascript:$('description').rows = 15", :icon => 'icons/zoom_100.png'},
- {:title => 'More lines', :uri => "javascript:lines('description', 5)", :icon => 'icons/zoom_in.png'}
- ]
- ) %>
- <p><textarea name="glsa[description]" id="description" class="nice" rows="15"><%= lastrev_content(@glsa, 'description') %></textarea></p>
- </div>
-
- <div class="box">
- <%= box_title('Impact', :icon => 'icons/impact.png', :label => 'impact',
- :toolbar => [
- {:title => 'Add template', :uri => "javascript:GLSAMaker.editing.templates.dropdown(this, 'impact');", :icon => 'icons/template.png'},
- :sep,
- {:title => 'Fewer lines', :uri => "javascript:lines('impact', -5)", :icon => 'icons/zoom_out.png'},
- {:title => 'Reset lines', :uri => "javascript:$('impact').rows = 15", :icon => 'icons/zoom_100.png'},
- {:title => 'More lines', :uri => "javascript:lines('impact', 5)", :icon => 'icons/zoom_in.png'}
- ]
- ) %>
- <p><textarea name="glsa[impact]" id="impact" class="nice" rows="5"><%= lastrev_content(@glsa, 'impact') %></textarea></p>
- </div>
-
- <div class="box">
- <%= box_title('Workaround', :icon => 'icons/workaround.png', :label => 'workaround',
- :toolbar => [
- {:title => 'Add template', :uri => "javascript:GLSAMaker.editing.templates.dropdown(this, 'workaround');", :icon => 'icons/template.png'},
- {:title => 'No known workaround', :uri => "javascript:$('workaround').value = 'There is no known workaround at this time.'", :icon => 'icons/workaround-no.png'}
- ]
- ) %>
- <p><textarea name="glsa[workaround]" id="workaround" class="nice" rows="2"><%= lastrev_content(@glsa, 'workaround') %></textarea></p>
- </div>
-
- <div class="box">
- <%= box_title('Resolution', :icon => 'icons/resolution.png', :label => 'resolution',
- :toolbar => [
- {:title => 'Add template', :uri => "javascript:GLSAMaker.editing.templates.dropdown(this, 'resolution');", :icon => 'icons/template.png'},
- {:title => 'Set default resolution', :uri => "javascript:generateResolution()", :icon => 'icons/resolution-go.png'}
- ]
- ) %>
- <p><textarea name="glsa[resolution]" id="resolution" class="nice" rows="5"><%= lastrev_content(@glsa, 'resolution') %></textarea></p>
- </div>
-
- <div class="box">
- <%= box_title('References', :icon => 'icons/reference.png',
- :toolbar => [
- {:title => 'Add reference', :uri => "javascript:Element.insert('references_table', { bottom: '#{escape_javascript(render(:partial => 'reference', :object => Reference.new))}' })", :icon => 'icons/reference-add.png'}
- ]
- ) %>
- <table class="padcells swap centercells" id="references_table">
- <tr>
- <th><%= image_tag 'icons/atom.png' %> Title</th>
- <th><%= image_tag 'icons/reference.png' %> URL</th>
- <th></th>
- </tr>
-
- <%= render :partial => 'reference', :collection => @references %>
- </table>
- </div>
-
-</div>
-
-<%- end -%>
-
-<%= template_popups %>
-
-<script language="JavaScript" type="text/javascript">
- GLSAMaker.editing.templates.observeClick($('title'));
- GLSAMaker.editing.templates.observeClick($('synopsis'));
- GLSAMaker.editing.templates.observeClick($('description'));
- GLSAMaker.editing.templates.observeClick($('impact'));
- GLSAMaker.editing.templates.observeClick($('workaround'));
- GLSAMaker.editing.templates.observeClick($('resolution'));
-</script>
diff --git a/app/views/glsa/finalize_release.html.erb b/app/views/glsa/finalize_release.html.erb
deleted file mode 100644
index 57bf2c6..0000000
--- a/app/views/glsa/finalize_release.html.erb
+++ /dev/null
@@ -1,29 +0,0 @@
-<h1>Release finished</h1>
-
-<div class="box w40em">
- <h2>Release information</h2>
-
- <table>
- <tr>
- <td>Official ID</td>
- <td><strong>GLSA <%= @glsa.glsa_id %></strong></td>
- </tr>
- <tr>
- <td>Title</td>
- <td><strong><%= @glsa.last_revision.title %></strong></td>
- </tr>
- </table>
-</div>
-
-<div class="box w40em">
- <h2>Closed bugs</h2>
-
- <table>
- <% @glsa.last_revision.bugs.each do |bug| %>
- <tr>
- <td><%= bug.bug_id %></td>
- <td><%= bug.title %></td>
- </tr>
- <% end %>
- </table>
-</div> \ No newline at end of file
diff --git a/app/views/glsa/import_references.html.erb b/app/views/glsa/import_references.html.erb
deleted file mode 100644
index 63a0d30..0000000
--- a/app/views/glsa/import_references.html.erb
+++ /dev/null
@@ -1,16 +0,0 @@
-<p>Please select the references to import:</p>
-
-<%= form_tag(:go => '1') do -%>
-<div style="height: 500px; overflow-y: scroll; overflow-x: hidden;">
- <table>
- <% @cves.each do |cve| %>
- <tr>
- <td><input type="checkbox" value="1" name="import[cve][<%= cve.cve_id %>]" checked="checked" /></td>
- <td><%= render :partial => '/tools/cve', :object => cve %></td>
- </tr>
- <% end %>
- </table>
-</div>
-
-<p style="text-align: right;"><input type="submit" class="button" value="Import selected references" id="importsubmit" /></p>
-<% end -%> \ No newline at end of file
diff --git a/app/views/glsa/new-draft.html.erb b/app/views/glsa/new-draft.html.erb
deleted file mode 100644
index 1c69b66..0000000
--- a/app/views/glsa/new-draft.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<h1>New draft...</h1> \ No newline at end of file
diff --git a/app/views/glsa/new-request.html.erb b/app/views/glsa/new-request.html.erb
deleted file mode 100644
index 1b0c845..0000000
--- a/app/views/glsa/new-request.html.erb
+++ /dev/null
@@ -1,60 +0,0 @@
-<h1>New GLSA request</h1>
-
-<%= form_tag(:action => "create") do %>
-<div class="box w40em">
- <input type="hidden" name="what" value="request" />
- <%= box_title('Bugs', :icon => 'icons/bug.png') %>
- <p><label for="bugs">Please enter the relevant bug ID(s), separate more than one bug with a comma:</label></p>
-
- <p><input type="text" name="bugs" id="bugs" class="hugetext nice" value="<%= params[:bugs] %>"/></p>
- <script language="javascript">
- $("bugs").observe('change', function(event) {
- new Ajax.Request("<%= url_for :controller => 'tools', :action => 'bugs_ajax_info' %>", {
- method: 'get',
- parameters: { bugs: $('bugs').getValue() },
- onSuccess : function(transport) {
- $('ajaxbugs').update(transport.responseJSON.buginfo);
- $('suggesteddescr').update(transport.responseJSON.title);
- }
- });
- });
- </script>
- <div id="ajaxbugs"></div>
-</div>
-<br />
-<div class="box w40em">
- <%= box_title('Title', :icon => 'icons/edit.png') %>
- <p><label for="title">Either take the suggested title or enter a new custom one:</label></p>
- <div id="suggesteddescr"></div>
- <p><textarea name="title" id="title" class="largetext nice" rows="2"><%= params[:title] %></textarea></p>
-</div>
-<br />
-<!--<div class="box w40em">
- <%= box_title('Comment ' << content_tag('small', '(optional)'), :icon => 'icons/comment.png', :escape => false) %>
- <p><label for="comment">If you want to add a comment, enter it here:</label></p>
- <p><textarea name="comment" id="comment" class="nice" rows="4"><%= params[:comment] %></textarea></p>
-</div>
-<br />-->
-<div class="box w40em">
- <%= box_title('References', :icon => 'icons/reference.png') %>
- <p>
- <input type="checkbox" name="import_references" id="import_references" value="1" checked="checked" />
- <label for="import_references">Import all references from linked bugs</label>
- </p>
-</div>
-<br />
-<%- if current_user.access >= 1 -%>
-<div class="box w40em">
- <%= box_title('Permissions', :icon => 'icons/permission.png') %>
- <p><label for="access">Mark this request as</label>:
- <select name="access" id="access">
- <%= options_for_select %w{ public confidential }, params[:access] || "public" %>
- </select>
- </p>
-</div>
-<br />
-<%- end -%>
-<div style="width: 40em; text-align: right; display: inline-block;">
- <input type="submit" class="button" value="File request &raquo;"/>
-</div>
-<% end -%> \ No newline at end of file
diff --git a/app/views/glsa/new.html.erb b/app/views/glsa/new.html.erb
deleted file mode 100644
index d7bb6a2..0000000
--- a/app/views/glsa/new.html.erb
+++ /dev/null
@@ -1,11 +0,0 @@
-<h1>New&hellip;</h1>
-
-<div class="buttons" style="padding: 1em; display: inline-block;">
-<p>File a request for others to draft&hellip;</p>
-<p style="margin-bottom: 5em;"><a href="/glsa/new/request" class="button" style="padding: .4em; margin: .5em; font-size: 150%">
- <img src="/images/icons/glsa_request.png" alt="Requests" style="vertical-align: middle;" /> File a new request</a></p>
-
-<p>&hellip; or start drafting right away:</p>
- <p><a href="/glsa/new/draft" class="button" style="padding: .4em; margin: .5em; font-size: 150%">
- <img src="/images/icons/glsa_draft.png" alt="Draft" style="vertical-align: middle;" /> File a new draft</a></p>
-</div> \ No newline at end of file
diff --git a/app/views/glsa/prepare_release.html.erb b/app/views/glsa/prepare_release.html.erb
deleted file mode 100644
index 3a2d5dc..0000000
--- a/app/views/glsa/prepare_release.html.erb
+++ /dev/null
@@ -1,112 +0,0 @@
-<h1>Prepare release</h1>
-
-<div class="box w40em">
- <h2>Advisory information</h2>
-
- <table>
- <% if @glsa.status == 'draft' %>
- <tr>
- <td>Current ID</td>
- <td><strong>GLSA <%= @glsa.glsa_id %></strong></td>
- </tr>
- <tr>
- <td>Final ID</td>
- <td><strong>GLSA <%= Glsa.next_id %> (preliminary)</strong></td>
- </tr>
- <% elsif @glsa.status == 'release' %>
- <tr>
- <td>Release ID</td>
- <td><strong>GLSA <%= @glsa.glsa_id %></strong> (this will be a re-release)</td>
- </tr>
- <% end %>
- <tr>
- <td>Advisory title</td>
- <td><strong><%= @rev.title %></strong></td>
- </tr>
- </table>
-</div>
-
-<div class="box w40em">
- <h2>
- <span class="toolbar">
- <%= check_icon(@rev.bug_ready?) %>
- </span>
- <%= image_tag 'icons/bug.png' %> Bug Status
- </h2>
- <table class="list">
- <%= render :partial => "show_bug_row", :collection => @rev.bugs, :as => :bug %>
- </table>
-
- <% if not @rev.bug_ready? %>
- <div class="error">
- <p>
- <strong>You cannot release this draft unless all bugs are in a bug ready state.</strong><br />
- Visit Bugzilla and check the status of each bug marked with a <%= bugready_icon(false) %>, and set it to <tt>[glsa]</tt> if every arch is done.
- Then, refresh the bug caches.
- </p>
- <div class="actions">
- <%= button_to "Refresh bug caches and retry", { :action => 'update_cache', :id => @glsa.id, :redirect => request.url }, :method => 'get' %>
- </div>
- </div>
- <% end %>
-</div>
-
-<div class="box w40em">
- <h2>
- <span class="toolbar">
- <%= check_icon((@glsa.is_approved? or @comments_override)) %>
- </span>
- <%= image_tag 'icons/comment.png' %> Review Status
- (<%= @glsa.approvals.length %> <%= image_tag 'icons/approval.png' %>, <%= @glsa.rejections.length %> <%= image_tag 'icons/rejection.png' %>)
- </h2>
- <table class="list">
- <%= render :partial => "approval_row", :collection => @glsa.approvals, :as => :comment %>
- <%= render :partial => "approval_row", :collection => @glsa.rejections, :as => :comment %>
- </table>
-
- <% if not (@glsa.is_approved? or @comments_override) %>
- <div class="error">
- <p>
- <strong>You cannot release this draft unless it has at least two approvals.</strong><br />
- Ask other Security members to review your draft. (Team leads can override this check.)
- Then, refresh this page.
- </p>
- <% if current_user.is_el_jefe? %>
- <div class="actions">
- <%= button_to "Override this check (team leads only)", prepare_release_glsa_path(@glsa, :override_approvals => 1) %>
- </div>
- <% end %>
- </div>
- <% elsif @comments_override %>
- <p>
- <strong>Approval override used.</strong>
- </p>
- <% end %>
-</div>
-
-<div class="box w40em">
- <h2>
- <%= image_tag 'icons/sent.png', :alt => 'release' %> Release
- </h2>
- <% if @rev.bug_ready? and (@glsa.is_approved? or @comments_override) %>
- <p>
- All checks passed. You can release this advisory now.
- </p>
- <%= form_tag(release_glsa_path(@glsa)) do %>
- <table>
- <tr>
- <td><%= check_box_tag 'email' %></td>
- <td><label for='email'>Send me the final version via email.</label></td>
- </tr>
- </table>
- <div class='box-actions'>
- <%= submit_tag 'Release >', :class => 'largetext' %>
- </div>
- <% end %>
- <% else %>
- <p>
- At least one check failed. Please see the red boxes above.<br />
- You cannot release this draft at the moment.
- </p>
- <% end %>
-</div> \ No newline at end of file
diff --git a/app/views/glsa/release.html.erb b/app/views/glsa/release.html.erb
deleted file mode 100644
index eede6d2..0000000
--- a/app/views/glsa/release.html.erb
+++ /dev/null
@@ -1,31 +0,0 @@
-<h1>GLSA released</h1>
-
-<div class="box w40em">
- <h2>Release information</h2>
-
- <table>
- <tr>
- <td>Official ID</td>
- <td><strong>GLSA <%= @glsa.glsa_id %></strong></td>
- </tr>
- <tr>
- <td>Title</td>
- <td><strong><%= @rev.title %></strong></td>
- </tr>
- </table>
-</div>
-
-<div class="box w40em">
- <h2>Next steps</h2>
-
- <p>
- Now, download the advisory XML and publish it in Git.<br />
- Then you can send the advisory email and close the relevant bugs in Bugzilla.
- </p>
-
- <div class='box-actions'>
- <button onclick="document.location = '<%= escape_javascript(download_glsa_path(@glsa, :format => 'xml')) %>'">Download XML</button>
- <button onclick="window.open('<%= escape_javascript(download_glsa_path(@glsa, :format => 'txt')) %>'); return false;">Show text</button>
- <%= button_to "Close bugs", finalize_release_glsa_path(@glsa, :close_bugs => '1'), :method => :post %>
- </div>
-</div>
diff --git a/app/views/glsa/requests.html.erb b/app/views/glsa/requests.html.erb
deleted file mode 100644
index 05b02fd..0000000
--- a/app/views/glsa/requests.html.erb
+++ /dev/null
@@ -1,16 +0,0 @@
-<h1>Pooled GLSA requests</h1>
-
-<table class="glsamaker-table">
-<tr align="left">
- <th>ID</th>
- <th>State</th>
- <th>Title</th>
- <th>Requested at/by</th>
- <!--<th>Bug IDs</th>-->
- <% if current_user.is_el_jefe? %><th>Admin</th><% end %>
-</tr>
-
-<%= render :partial => "glsa_row", :collection => @glsas, :as => :glsa, :locals => { :view => :requests } %>
-</table>
-
-<%= render :partial => "status_legend" %> \ No newline at end of file
diff --git a/app/views/glsa/show.html.erb b/app/views/glsa/show.html.erb
deleted file mode 100644
index 1da1a94..0000000
--- a/app/views/glsa/show.html.erb
+++ /dev/null
@@ -1,158 +0,0 @@
-<h1>
- <%= sanitize(spelling(@rev.title), :tags => %w[span]) %>
- <% if @glsa.restricted? %><span class="red">(CONFIDENTIAL)</span><% end %>
-</h1>
-
-<div class="box buttons">
- <span class="floatright">
- Show revision:
- <%= select_tag :revid,
- options_from_collection_for_select(@glsa.revisions, :revid, :to_s, @rev.revid),
- :onchange => "document.location = '#{url_for :controller=> :glsa, :action => :show, :id => @glsa}?rev_id=' + this.value" %>
- </span>
- <%= link_to "#{image_tag 'icons/edit.png'} Edit this draft".html_safe, edit_glsa_path(@glsa), {:class => 'button'} %>
- <%= link_to "#{image_tag 'icons/xml.png'} View as XML".html_safe, glsa_path(@glsa, :format => 'xml'), {:class => 'button'} %>
- <%= link_to "#{image_tag 'icons/txt.png'} View as Text".html_safe, glsa_path(@glsa, :format => 'txt'), {:class => 'button'} %>
- <%= link_to_function "#{image_tag 'icons/reference.png'} Import references".html_safe, "GLSAMaker.editing.references.import_dialog(#{@glsa.id})", {:class => 'button'} %>
- <%= link_to "#{image_tag 'icons/diff.png'} Compare revisions".html_safe, diff_glsa_path(@glsa, :old => @glsa.last_revision.revid - 1, :new => @glsa.last_revision.revid), {:class => 'button'} %>
- <%= link_to "#{image_tag 'icons/sent.png'} Release advisory".html_safe, prepare_release_glsa_path(@glsa), {:class => 'button'} if current_user.access >= 2 %>
- <%= link_to "#{image_tag 'icons/delete.png'} Delete".html_safe, glsa_path(@glsa), :method => :delete, :confirm => "Do you really want to delete this item?", :class => 'button' if current_user.is_el_jefe? %>
- <%= link_to "#{image_tag 'icons/bug.png'} Close bugs".html_safe, finalize_release_glsa_path(@glsa, :close_bugs => '1'), :method => :post, :class => 'button' if @glsa.status == 'release' %>
-</div>
-
-<div style="float: right; width: 40%;">
- <div class="box pmargin">
- <h2>
- GLSA <%= status_icon @glsa.status %> <tt><%= @glsa.glsa_id %>:r<%= @rev.revid %></tt>
- <%= bugready_icon @rev.bug_ready? %>
- <%= approval_icon @glsa.approval_status %>
- <%= workflow_icon(@glsa.workflow_status(current_user)) %>
- <%= restricted_icon @glsa.restricted %>
- </h2><br />
- <% if @glsa.is_approved? and @glsa.last_revision.bug_ready? %>
- <p><%= image_tag 'icons/ok.png' %> This draft is <strong>ready for sending</strong>.</p>
- <% else %>
- <p><%= image_tag 'icons/pending.png' %> This draft is <strong>not ready for sending.</strong></p>
- <% end %>
- <p>
- <span style="float: right; font-size: 90%;"><%= @glsa.created_at.to_s %></span>
- Requester: <strong><%= @glsa.requester.to_s %></strong>
- </p>
- <% if @glsa.submitter %>
- <p>
- <span style="float: right; font-size: 90%;"><%= @glsa.updated_at.to_s %></span>
- Submitter: <strong><%= @glsa.submitter.to_s %></strong>
- </p>
- <% end %>
- <p>
- <span style="float: right; font-size: 90%;"><%= @glsa.updated_at.to_s %></span>
- Editor: <strong><%= @rev.user.to_s %></strong>
- </p>
- </div>
-
- <div class="box">
- <%= box_title("Bugs (#{@rev.bugs.count})", :icon => 'icons/bug.png',
- :toolbar => [{:title => 'Update all cached metadata', :icon => 'icons/refresh.png', :uri => "/glsa/update_cache/#{@glsa.id}"}])
- %>
- <table id="bugtable">
- <%= render :partial => "show_bug_row", :collection => @rev.bugs, :as => :bug %>
- </table>
- </div>
-
- <%= render :partial => "comments" %>
-</div>
-
-<table class="glsamaker-table code-preserve-ws nopadding" style="width: 59%;">
- <tr>
- <th>Field</th>
- <th>Content</th>
- </tr>
- <tr>
- <th class="left"><%= image_tag 'icons/access.png' %> Access</th>
- <td>
- <%= @rev.access %>
- </td>
- </tr>
- <tr class="odd">
- <th class="left"><%= image_tag 'icons/severity.png' %> Severity</th>
- <td>
- <%= @rev.severity %>
- </td>
- </tr>
- <tr>
- <th class="left"><%= image_tag 'icons/synopsis.png' %> Synopsis</th>
- <td>
- <%= field_content(@rev.synopsis) %>
- </td>
- </tr>
- <tr class="odd">
- <th class="left"><%= image_tag 'icons/unaffected.png' %> Unaffected packages</th>
- <td>
- <ul>
- <% @rev.packages.each do |pkg| ; next unless pkg.my_type == "unaffected" %>
- <li><%= pkg.comp %><strong><%= pkg.atom %></strong>-<%= pkg.version %>:<%= pkg.slot %> on <%= pkg.arch %> (auto: <%= pkg.automatic %>)</li>
- <% end %>
- </ul>
- </td>
- </tr>
- <tr>
- <th class="left"><%= image_tag 'icons/affected.png' %> Vulnerable packages</th>
- <td>
- <ul>
- <% @rev.packages.each do |pkg| ; next unless pkg.my_type == "vulnerable" %>
- <li><%= pkg.comp %><strong><%= pkg.atom %></strong>-<%= pkg.version %>:<%= pkg.slot %> on <%= pkg.arch %> (auto: <%= pkg.automatic %>)</li>
- <% end %>
- </ul>
- </td>
- </tr>
- <tr class="odd">
- <th class="left"><%= image_tag 'icons/background.png' %> Background</th>
- <td>
- <%= field_content(@rev.background) %>
- </td>
- </tr>
- <tr>
- <th class="left"><%= image_tag 'icons/document.png' %> Description</th>
- <td>
- <%= field_content(@rev.description) %>
- </td>
- </tr>
- <tr class="odd">
- <th class="left"><%= image_tag 'icons/impact.png' %> Impact</th>
- <td>
- <%= field_content(@rev.impact) %>
- </td>
- </tr>
- <tr>
- <th class="left"><%= image_tag 'icons/workaround.png' %> Workaround</th>
- <td>
- <%= field_content(@rev.workaround) %>
- </td>
- </tr>
- <tr class="odd">
- <th class="left"><%= image_tag 'icons/resolution.png' %> Resolution</th>
- <td>
- <%= field_content(@rev.resolution) %>
- </td>
- </tr>
- <tr>
- <th class="left"><%= image_tag 'icons/reference.png' %> References</th>
- <td>
- <ul>
- <% @rev.references.each do |r| %>
- <li><%= link_to r.title, r.url -%>
- <% if r.title.start_with? 'CVE' %> <br />
- <% if (cve = Cve.where(:cve_id => r.title).first) != nil %>
- <small><%= cve.summary %></small>
- <% else %>
- <small class="red">CVE not found in CVETool database. <strong>Double-check manually!</strong></small>
- <% end %>
- <% end %>
- </li>
- <% end %>
- </ul>
- </td>
- </tr>
-</table>
-
-<br style="break: both;" />
diff --git a/app/views/glsa/show.txt.erb b/app/views/glsa/show.txt.erb
deleted file mode 100644
index 91e570e..0000000
--- a/app/views/glsa/show.txt.erb
+++ /dev/null
@@ -1,116 +0,0 @@
-<%- @packages = @rev.packages_by_atom
- @packages_count = 0
- @tf = ::Text::Format.new
- @arches = {} -%>
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-Gentoo Linux Security Advisory GLSA <%= @glsa.glsa_id %>
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- https://security.gentoo.org/
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-<%= prefixed_item(" Severity:", @rev.severity.capitalize.html_safe) %>
-<%= prefixed_item(" Title:", @rev.title.html_safe) %>
-<%= prefixed_item(" Date:", @glsa.release_date.strftime('%B %d, %Y')) %>
-<%= prefixed_item(" Bugs:", @rev.bugs.map {|b| "\##{b.bug_id}" }.join(', ')) %>
-<%= prefixed_item(" ID:", @glsa.glsa_id) %>
-
-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-Synopsis
-========
-
-<%= adv_wrap(@rev.synopsis).html_safe %>
-
-Background
-==========
-
-<%= adv_wrap(@rev.background).html_safe %>
-
-Affected packages
-=================
-
- -------------------------------------------------------------------
- Package / Vulnerable / Unaffected
- -------------------------------------------------------------------
-<%- @packages.each do |package, items| -%>
-<%= render :partial => "show_package_row", :locals => {:items => items, :package => package} -%>
-<%- end -%>
-<% if @print_vulnerable -%>
- -------------------------------------------------------------------
- NOTE: Certain packages are still vulnerable. Users should migrate
- to another package if one is available or wait for the
- existing packages to be marked stable by their
- architecture maintainers.
-<% end -%>
-<% if @print_noauto -%>
- -------------------------------------------------------------------
- NOTE: Packages marked with asterisks require manual intervention!
-<% end -%>
-<% if @packages_count > 1 -%>
- -------------------------------------------------------------------
- <%= @packages_count %> affected packages
-<% end -%>
-<% if @arches != {} -%>
- -------------------------------------------------------------------
- <% @arches.each_pair do |num, arches| -%>
- # Package <%= num %> only applies to users of these architectures:
- <%= arches.sort.join ", " %>
- <% end -%>
-<% end -%>
-
-Description
-===========
-
-<%= adv_wrap(@rev.description).html_safe %>
-
-Impact
-======
-
-<%= adv_wrap(@rev.impact).html_safe %>
-
-Workaround
-==========
-
-<%= adv_wrap(@rev.workaround).html_safe %>
-
-Resolution
-==========
-
-<%= adv_wrap(@rev.resolution, true).html_safe %>
-
-References
-==========
-
-<% @reference_number = 0
- @max_digits_of_references = @rev.references.size.to_s.size
-
- -%>
-<%= render :partial => "show_reference", :as => :reference, :collection => @rev.references -%>
-
-Availability
-============
-
-This GLSA and any updates to it are available for viewing at
-the Gentoo Security Website:
-
- https://security.gentoo.org/glsa/<%= @glsa.glsa_id %>
-
-Concerns?
-=========
-
-Security is a primary focus of Gentoo Linux and ensuring the
-confidentiality and security of our users' machines is of utmost
-importance to us. Any security concerns should be addressed to
-security@gentoo.org or alternatively, you may file a bug at
-https://bugs.gentoo.org.
-
-License
-=======
-
-Copyright <%= Time.now.year %> Gentoo Foundation, Inc; referenced text
-belongs to its owner(s).
-
-The contents of this document are licensed under the
-Creative Commons - Attribution / Share Alike license.
-
-https://creativecommons.org/licenses/by-sa/2.5
diff --git a/app/views/glsa/show.xml.erb b/app/views/glsa/show.xml.erb
deleted file mode 100644
index 58ece79..0000000
--- a/app/views/glsa/show.xml.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= Glsamaker::XML.indent(render(:partial => 'glsa', :locals => {:glsa => @glsa, :rev => @rev}), {:indent => 2, :maxcols => 80}).html_safe %> \ No newline at end of file
diff --git a/app/views/glsa/update.html.erb b/app/views/glsa/update.html.erb
deleted file mode 100644
index 0a886cd..0000000
--- a/app/views/glsa/update.html.erb
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Glsa#update</h1>
-<p>Find me in app/views/glsa/update.html.erb</p>
diff --git a/app/views/glsa_mailer/approval.text.erb b/app/views/glsa_mailer/approval.text.erb
deleted file mode 100644
index 939e07c..0000000
--- a/app/views/glsa_mailer/approval.text.erb
+++ /dev/null
@@ -1,23 +0,0 @@
-Your draft is now approved.
-
-Approval overview
------------------
-<% @glsa.approvals.each do |approval| -%>
-<%= approval.created_at.rfc2822 %> by <%= approval.user.to_s %>
-<% end -%>
-
-<% if @glsa.rejections.count > 0 -%>
-Rejection overview
-------------------
-<% @glsa.rejections.each do |rejection| -%>
-<%= rejection.created_at.rfc2822 %> by <%= rejection.user.to_s %>
-<% end -%>
-<% end -%>
-
-You should check whether all bugs linked in the draft are in a bug ready state.
-Then, you can release the advisory at <%= prepare_release_glsa_url(@glsa) %>
-
-Thanks for your work!
-
---
-This email notification is brought to you by GLSAMaker 2. \ No newline at end of file
diff --git a/app/views/glsa_mailer/comment.text.erb b/app/views/glsa_mailer/comment.text.erb
deleted file mode 100644
index 901eede..0000000
--- a/app/views/glsa_mailer/comment.text.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-Your draft received a comment (<%= @comment.rating %>) from <%= @commentator.to_s %> @ <%= @comment.created_at.rfc2822 %>:
-
-<%= glsa_url(@glsa) %>
-
-<%= @comment.text %>
-
---
-This email notification is brought to you by GLSAMaker 2. \ No newline at end of file
diff --git a/app/views/glsa_mailer/edit.text.erb b/app/views/glsa_mailer/edit.text.erb
deleted file mode 100644
index cf45a06..0000000
--- a/app/views/glsa_mailer/edit.text.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-The draft was edited by <%= @editor.to_s %> @ <%= @glsa.last_revision.created_at.rfc2822 %>:
-
-<%= glsa_url(@glsa) %>
-
-<%= @diff.html_safe %>
-
---
-This email notification is brought to you by GLSAMaker 2. \ No newline at end of file
diff --git a/app/views/glsa_mailer/new_request.text.erb b/app/views/glsa_mailer/new_request.text.erb
deleted file mode 100644
index dadb8d0..0000000
--- a/app/views/glsa_mailer/new_request.text.erb
+++ /dev/null
@@ -1,13 +0,0 @@
-A new request was filed by <%= @requestor.to_s %> @ <%= @glsa.last_revision.created_at.rfc2822 %>:
-
-<%= @glsa.last_revision.title %>
-<%= "-" * @glsa.last_revision.title.length %>
-
-<%= glsa_url(@glsa) %>
-
-Bugs:
-<% @glsa.last_revision.bugs.each do |bug| %>
- * <%= bug.bug_id %><%= " (#{bug.title})" if bug.title %>
-<% end %>
---
-This email notification is brought to you by GLSAMaker 2. \ No newline at end of file
diff --git a/app/views/glsa_mailer/text.text.erb b/app/views/glsa_mailer/text.text.erb
deleted file mode 100644
index 8279bb9..0000000
--- a/app/views/glsa_mailer/text.text.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<%= @text %>
-<% if @footer %>
---
-This email notification is brought to you by GLSAMaker 2.<% end %> \ No newline at end of file
diff --git a/app/views/index/about.html.erb b/app/views/index/about.html.erb
deleted file mode 100644
index bf2cbcc..0000000
--- a/app/views/index/about.html.erb
+++ /dev/null
@@ -1,29 +0,0 @@
-<div style="text-align: center"><%= image_tag('biglogo.png', :alt => "GLSAMaker 2 Logo'") %></div>
-
-<div class="box2">
- <h2 style="margin: 0;"><%= image_tag('icons/user.png') %> Brought to you by&hellip;</h2>
-<ul>
- <li><a href="mailto:a3li@gentoo.org">Alex Legler</a></li>
- <li><a href="mailto:py@gentoo.org">Pierre-Yves Rofes</a></li>
- <li><a href="mailto:keytoaster@gentoo.org">Tobias Heinlein</a></li>
-</ul>
-</div>
-
-<div class="box2">
-<h2 style="margin: 0;"><%= image_tag('icons/reference.png') %> License</h2>
-<p>Copyright &copy; 2009&ndash;15 Alex Legler</p>
-<p>Copyright &copy; 2009 Pierre-Yves Rofes</p>
-<p>Copyright &copy; 2010 Tobias Heinlein</p>
-<p>GLSAMaker 2 is free software: you can redistribute it and/or modify it under the terms of the <strong>GNU Affero General Public License</strong>
- as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.</p>
-</div>
-
-<div class="box2">
- <h2 style="margin: 0;"><%= image_tag('icons/comment.png') %> Acknowledgements</h2>
-
-<p>The CVETool uses the <a href="http://ukijs.org/">UKI</a> Javascript UI Toolkit by Vladimir Kolesnikov. Licensed under the MIT License.</p>
-<p>GLSAMaker2 uses the <a href="http://www.famfamfam.com/lab/icons/silk">"Silk" iconset</a> by Mark James. Licensed under the CC Attribution 3.0 License.</p>
-<p>GLSAMaker2 uses the <a href="http://www.pinvoke.com/">"Fugue" iconset</a> by Yusuke Kamiyamane. Licensed under the CC Attribution 3.0 License.</p>
-<p>The header uses portions of <a href="http://www.redmine.org">Redmine</a>. &copy; Jean-Philippe Lang. Licensed under the GPL.</p>
-
-</div>
diff --git a/app/views/index/error-access.html.erb b/app/views/index/error-access.html.erb
deleted file mode 100644
index f183064..0000000
--- a/app/views/index/error-access.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<h1>Access Denied</h1>
-
-<p><strong>You do not have sufficient permissions to perform this action.</strong></p>
-<p>The administrator has been notified.</p>
-<br /><br /><br />
-<p>You can get in touch with the administrative contact at
-<em><%= GLSAMAKER_ADMIN_EMAIL %></em></p> \ No newline at end of file
diff --git a/app/views/index/error-disabled.html.erb b/app/views/index/error-disabled.html.erb
deleted file mode 100644
index 53a8f44..0000000
--- a/app/views/index/error-disabled.html.erb
+++ /dev/null
@@ -1,5 +0,0 @@
-<h1>Access Denied</h1>
-
-<p><strong>Your account has been disabled.</strong></p>
-<p>You can get in touch with the administrative contact at
-<em><%= GLSAMAKER_ADMIN_EMAIL %></em></p>
diff --git a/app/views/index/error-system.html.erb b/app/views/index/error-system.html.erb
deleted file mode 100644
index e6fafa2..0000000
--- a/app/views/index/error-system.html.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<h1>Fatal error</h1>
-
-<p><strong>Couldn't get user authentication data.</strong></p>
-<p><small>Ruby on Rails is running in the <em>production</em> environment.<br />
-In this environment, GLSAMaker receives the name of the logged in user via the
-REMOTE_USER or HTTP_AUTHORIZATION variables which <strong>both are empty.</strong></small></p>
-<p>Please get in touch with the administrative contact
-(<%= GLSAMAKER_ADMIN_EMAIL %>) to fix this issue.</p> \ No newline at end of file
diff --git a/app/views/index/error-user.html.erb b/app/views/index/error-user.html.erb
deleted file mode 100644
index 54c8032..0000000
--- a/app/views/index/error-user.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<h1>Welcome to GLSAMaker!</h1>
-
-<p>This is most likely your first visit.</p>
-<p>While your user name and password were entered into the HTTP authentication database,
-your account was not yet populated to the internal GLSAMaker database.</p>
-<p>Either retry in a few minutes or get in touch with the administrative contact
-(<%= GLSAMAKER_ADMIN_EMAIL %>) to fix this issue.</p> \ No newline at end of file
diff --git a/app/views/index/index.html.erb b/app/views/index/index.html.erb
deleted file mode 100644
index dd0a2b0..0000000
--- a/app/views/index/index.html.erb
+++ /dev/null
@@ -1,18 +0,0 @@
-<h1>Welcome to GLSAMaker2!</h1>
-
-<div class="box">
- <h2>My last 10 drafts</h2>
-
- <table class="glsamaker-table">
- <tr align="left">
- <th>ID</th>
- <th>State</th>
- <th>Title</th>
- <th>Submitted at/by</th>
- <!--<th>Bug IDs</th>-->
- <% if current_user.is_el_jefe? %><th>Admin</th><% end %>
- </tr>
-
- <%= render :partial => "glsa/glsa_row", :collection => @my_drafts, :as => :glsa, :locals => { :view => :drafts } %>
- </table>
-</div> \ No newline at end of file
diff --git a/app/views/index/profile.html.erb b/app/views/index/profile.html.erb
deleted file mode 100644
index d346647..0000000
--- a/app/views/index/profile.html.erb
+++ /dev/null
@@ -1,34 +0,0 @@
-<h1>My Profile</h1>
-
-<% form_tag :action => 'update' do |f| -%>
-<h2>Email preferences</h2>
-
-<table>
- <tr>
- <th></th>
- <th style="text-align: left;">Send me an Email when...</th>
- </th>
- <tr class="odd">
- <td><input type="checkbox" value="1" name="preferences[new_req]" id="new_req" <%= 'checked="checked"' if @prefs[:mail] and @prefs[:mail][:new_req] %>/></td>
- <td><label for="new_req"> when a <strong>new request</strong> is filed</label></td>
- </tr>
- <tr class="even">
- <td><input type="checkbox" value="1" name="preferences[edit]" id="edit" <%= 'checked="checked"' if @prefs[:mail] and @prefs[:mail][:edit] %>/></td>
- <td><label for="edit"> when a draft was <strong>edited</strong></label></td>
- </tr>
- <tr class="odd">
- <td><input type="checkbox" value="1" name="preferences[own_comment]" id="own_comment" <%= 'checked="checked"' if @prefs[:mail] and @prefs[:mail][:own_comment] %>/></td>
- <td><label for="own_comment"> when a <strong>draft I have submitted</strong> has recieved a <strong>comment</strong></label></td>
- </tr>
- <tr class="even">
- <td><input type="checkbox" value="1" name="preferences[own_ready]" id="own_ready" <%= 'checked="checked"' if @prefs[:mail] and @prefs[:mail][:own_ready] %>/></td>
- <td><label for="own_ready"> when a draft <strong>I have submitted</strong> is <strong>ready for sending</strong></label></td>
- </tr>
- <tr class="odd">
- <td><input type="checkbox" value="1" name="preferences[not_me]" id="not_me" <%= 'checked="checked"' if @prefs[:mail] and @prefs[:mail][:not_me] %>/></td>
- <td><label for="not_me"> <strong>BUT NOT</strong> If I have done it (overrides all of the above)</label></td>
- </tr>
-</table>
-
-<p><input type="submit" value="Save" /></p>
-<% end %> \ No newline at end of file
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
deleted file mode 100644
index 4120f34..0000000
--- a/app/views/layouts/application.html.erb
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
- <title><% if @pageTitle%><%= @pageTitle %> &mdash; <% end %>GLSAMaker 2</title>
- <%= stylesheet_link_tag "application" %>
- <%= javascript_include_tag "application" %>
- <%= csrf_meta_tags %>
-</head>
-<body id="<%= @pageID if @pageID %>">
- <div id="top-menu">
- <div class="floatright">
- <ul>
- <!--<li><a href="/my/account" class="my-account">My account</a></li>-->
- </ul>
- </div>
- <div id="loggedas">Logged in as <a href="#"><%= current_user.login %> (<%= current_user.name %>)</a></div>
- <ul>
- <li><a href="/" class="home">Home</a></li>
- <% if current_user.is_el_jefe? %><li><a href="/admin" class="administration">Administration</a></li><% end %>
- <!--<li><a href="#" class="help">Help</a></li>-->
- </ul>
- </div>
-
- <div id="menu">
- <img src="<%= asset_path 'logo.png' %>" alt="Home" class="logo" usemap="#m_logo" />
- <map name="m_logo" id="m_logo">
- <area shape="rect" coords="95,0,252,42" href="#" alt="Home" />
- </map>
- <div id="search">
- <%= form_tag(search_path, :method => 'get') do -%>
- <label for="q">Search:</label>
- <input accesskey="f" class="small" id="q" name="q" size="20" type="text" value="<%= params[:q] %>" />
-
- <select name="at">
- <option value="everywhere" selected="selected">Everywhere</option>
- <!--<optgroup label="Advisories">
- <option value="glsa">All GLSAs</option>
- <option value="glsa-requests">Requests</option>
- <option value="glsa-drafts">Drafts</option>
- <option value="glsa-archive">Archive</option>
- </optgroup>
- <optgroup label="Vulnerability Intelligence">
- <option value="cve">CVEs</option>
- <option value="cve-assigned">Assigned CVEs</option>
- <option value="cve-new">New CVEs</option>
- </optgroup>-->
- </select>
- <% end -%>
- </div>
- <ul>
- <li><%= link_to "New…", new_glsa_path, :class => 'new' %></li>
- <li style="margin-right: 2em;">&nbsp;</li>
- <li><%= link_to "Requests", requests_glsas_path, :class => 'requests' %></li>
- <li><%= link_to "Drafts", drafts_glsas_path, :class => 'drafts' %></li>
- <li><%= link_to "Archive", archive_glsas_path, :class => 'archive' %></li>
-
- <% if current_user.access >= 2 %>
- <li style="margin-right: 2em;">&nbsp;</li>
- <li><a href="/cve/list" class="cve">CVETool</a></li>
- <% if Module.constants.include? "Secunia" %>
- <li style="margin-right: 2em;">&nbsp;</li>
- <li><a href="/" class="secunia">Secunia Advisories</a></li>
- <% end %>
- <% end %>
- </ul>
- </div>
-
- <%- if flash[:notice] or flash[:error] -%>
- <div id="flash" class="<%= flash[:error] ? "error" : "notice" %>">
- <%= link_to_function(image_tag('icons/close.png'), {:style => 'float: right;', :alt => 'Hide the notification'}) do |page|
- page[:flash].drop_out
- end %>
- <%- if flash[:error] -%>
- <%= image_tag 'icons/error.png', :style => 'vertical-align: middle' %>
- <%- else -%>
- <%= image_tag 'icons/info.png', :style => 'vertical-align: middle' %>
- <%- end -%>
- <%= flash[:error] ? flash[:error] : flash[:notice] %>
- </div>
- <%- end -%>
- <div id="content">
-<%= yield %>
- </div>
- <div id="footer">
- <span><strong>GLSAMaker <%= `git describe --tags` %></strong></span>
- <span><strong>CVE Data current as of: <%= last_import_start ? last_import_start : 'unknown' %></strong></span>
- <span><%= link_to "About&hellip;".html_safe, :controller => 'index', :action => 'about' %></span>
-
- <span class="floatright"><strong>Administrative contact: <a href="mailto:<%= GLSAMAKER_ADMIN_EMAIL%>"><%= GLSAMAKER_ADMIN_EMAIL%></a></strong></span>
- </div>
- <br class="clear" />
-</body>
-</html>
diff --git a/app/views/layouts/cve.html.erb b/app/views/layouts/cve.html.erb
deleted file mode 100644
index 14f7922..0000000
--- a/app/views/layouts/cve.html.erb
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
- <title><%= @pageTitle + " &mdash; "if @pageTitle%> GLSAMaker 2 &mdash; CVETool</title>
- <%= javascript_include_tag 'jsui' %>
- <%= stylesheet_link_tag "cve" %>
-
- <style type="text/css">body, html { margin: 0; padding: 0; overflow:hidden; };</style>
-</head>
-<body id="<%= @pageID if @pageID %>">
- <%= yield %>
-</body>
-</html> \ No newline at end of file
diff --git a/app/views/layouts/none.html.erb b/app/views/layouts/none.html.erb
deleted file mode 100644
index cd9bb66..0000000
--- a/app/views/layouts/none.html.erb
+++ /dev/null
@@ -1 +0,0 @@
-<%= yield %> \ No newline at end of file
diff --git a/app/views/layouts/notice.html.erb b/app/views/layouts/notice.html.erb
deleted file mode 100644
index 38b9b33..0000000
--- a/app/views/layouts/notice.html.erb
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
- <title><% if @pageTitle%><%= @pageTitle %> &mdash; <% end %>GLSAMaker 2</title>
- <%= stylesheet_link_tag "login" %>
- <%= csrf_meta_tags %>
-</head>
-<body>
-<div id="outer">
- <div id="middle">
- <div id="inner">
- <div id="login-form">
- <div>
- <%= yield %>
- </div>
- </div>
- </div>
- </div>
-</div>
-</body>
-</html> \ No newline at end of file
diff --git a/app/views/search/_cve_row.html.erb b/app/views/search/_cve_row.html.erb
deleted file mode 100644
index 71a5eee..0000000
--- a/app/views/search/_cve_row.html.erb
+++ /dev/null
@@ -1,6 +0,0 @@
-<tr>
- <td class="nowrap"><%= link_to_function cve.colorize(:cve_id).html_safe, "cvepopup('#{cve.cve_id}')" %></td>
- <td><%= cve.state %></td>
- <td><%= sanitize(cve.excerpts.summary, :tags => %w[span], :attributes => %w[class]) %></td>
- <td><%= cve.cvss %></td>
-</tr> \ No newline at end of file
diff --git a/app/views/search/_cves.html.erb b/app/views/search/_cves.html.erb
deleted file mode 100644
index e3f66ab..0000000
--- a/app/views/search/_cves.html.erb
+++ /dev/null
@@ -1,13 +0,0 @@
-<div class="box">
- <h2>CVEs</h2>
-
- <table class="glsamaker-table">
- <tr align="left">
- <th>ID</th>
- <th>State</th>
- <th>Summary</th>
- <th>CVSS Score</th>
- </tr>
- <%= render :partial => "cve_row", :collection => results, :as => :cve %>
- </table>
-</div> \ No newline at end of file
diff --git a/app/views/search/_glsas.html.erb b/app/views/search/_glsas.html.erb
deleted file mode 100644
index 28855b0..0000000
--- a/app/views/search/_glsas.html.erb
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="box">
- <h2>GLSAs</h2>
-
- <table class="glsamaker-table">
- <tr align="left">
- <th>ID</th>
- <th>State</th>
- <th>Title</th>
- <th>Last changed at/by</th>
- <% if current_user.is_el_jefe? %><th>Admin</th><% end %>
- </tr>
- <%= render :partial => "/glsa/glsa_row", :collection => results, :as => :glsa, :locals => { :view => :requests } %>
- </table>
-</div> \ No newline at end of file
diff --git a/app/views/search/results.html.erb b/app/views/search/results.html.erb
deleted file mode 100644
index c8c6cb2..0000000
--- a/app/views/search/results.html.erb
+++ /dev/null
@@ -1,19 +0,0 @@
-<h1>Search results for "<%= params[:q] %>"</h1>
-
-<%- if @error -%>
-<%= error_msg("The search daemon is currently not available. Please contact " + GLSAMAKER_ADMIN_EMAIL) %>
-<%- else -%>
-
- <%- if @results.include? 'Glsa' -%>
-<%= render :partial => "glsas", :locals => {:results => @results['Glsa']} %>
-<%- end -%>
-
-<%- if @results.include? 'Cve' -%>
-<%= render :partial => "cves", :locals => {:results => @results['Cve']} %>
-<%- end -%>
-
-<%- if @results.empty? -%>
-<%= image_tag 'icons/error.png' %> No results found. :(
-<%- end -%>
-
-<%- end -%> \ No newline at end of file
diff --git a/app/views/tools/_cve.html.erb b/app/views/tools/_cve.html.erb
deleted file mode 100644
index 25ccde7..0000000
--- a/app/views/tools/_cve.html.erb
+++ /dev/null
@@ -1,4 +0,0 @@
-<p>
- <strong><a href="/cve/info/<%= cve.cve_id %>" target="_blank"><%= cve.cve_id%></a>:</strong>
- <%= cve.summary%>
-</p> \ No newline at end of file
diff --git a/app/views/tools/ajaxbugs.html.erb b/app/views/tools/ajaxbugs.html.erb
deleted file mode 100644
index 493c4d9..0000000
--- a/app/views/tools/ajaxbugs.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<ul class="ajaxbugs">
- <% @bugs.each do |bug| %>
- <% if bug.is_a?(String) %>
- <li class="ajaxbugs-error"><%= bug %></li>
- <% else %>
- <li><%= link_to_function bug.bug_id, "buginfo('#{bug.bug_id}')" %>:
- <%= truncate(bug.summary, :length => 50) %></li>
- <% end %>
- <% end %>
-</ul> \ No newline at end of file
diff --git a/app/views/tools/ajaxdescr.html.erb b/app/views/tools/ajaxdescr.html.erb
deleted file mode 100644
index d63bcc7..0000000
--- a/app/views/tools/ajaxdescr.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<a href="javascript:///" onclick="$('title').value = $('suggesd').firstChild.data; $('suggesteddescr').innerHTML = '';" title="Use suggested description">
-<img src="/assets/icons/paste.png" style="float: right; margin: .5em;" />
-<span id="suggesd"><%= @text %></span> </a> \ No newline at end of file
diff --git a/app/views/tools/background.html.erb b/app/views/tools/background.html.erb
deleted file mode 100644
index 4136f3b..0000000
--- a/app/views/tools/background.html.erb
+++ /dev/null
@@ -1,3 +0,0 @@
-<p>Using <code><%= params[:id] %></code>.</p>
-
-<%= Glsamaker::Portage.get_description(params[:id]) %> \ No newline at end of file
diff --git a/app/views/tools/template.js.erb b/app/views/tools/template.js.erb
deleted file mode 100644
index 77fabdb..0000000
--- a/app/views/tools/template.js.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<% if @error.nil? -%>
-GLSAMaker.editing.templates.close($('templates-<%= @target %>'));
-var target = $('<%= @target %>');
-target.setValue(target.getValue() + "<%= escape_javascript(@template.text).html_safe %>");
-<% else -%>
-alert("<%= escape_javascript(@error) %>");
-<% end -%>
diff --git a/app/mailers/.gitkeep b/assets/.keep
index e69de29..e69de29 100644
--- a/app/mailers/.gitkeep
+++ b/assets/.keep
diff --git a/app/models/.gitkeep b/bin/.keep
index e69de29..e69de29 100644
--- a/app/models/.gitkeep
+++ b/bin/.keep
diff --git a/bin/bundle b/bin/bundle
deleted file mode 100755
index 66e9889..0000000
--- a/bin/bundle
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env ruby
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-load Gem.bin_path('bundler', 'bundle')
diff --git a/bin/rails b/bin/rails
deleted file mode 100755
index 5191e69..0000000
--- a/bin/rails
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require_relative '../config/boot'
-require 'rails/commands'
diff --git a/bin/rake b/bin/rake
deleted file mode 100755
index 1724048..0000000
--- a/bin/rake
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/env ruby
-require_relative '../config/boot'
-require 'rake'
-Rake.application.run
diff --git a/bin/setup b/bin/setup
deleted file mode 100755
index acdb2c1..0000000
--- a/bin/setup
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env ruby
-require 'pathname'
-
-# path to your application root.
-APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
-
-Dir.chdir APP_ROOT do
- # This script is a starting point to setup your application.
- # Add necessary setup steps to this file:
-
- puts "== Installing dependencies =="
- system "gem install bundler --conservative"
- system "bundle check || bundle install"
-
- # puts "\n== Copying sample files =="
- # unless File.exist?("config/database.yml")
- # system "cp config/database.yml.sample config/database.yml"
- # end
-
- puts "\n== Preparing database =="
- system "bin/rake db:setup"
-
- puts "\n== Removing old logs and tempfiles =="
- system "rm -f log/*"
- system "rm -rf tmp/cache"
-
- puts "\n== Restarting application server =="
- system "touch tmp/restart.txt"
-end
diff --git a/config.ru b/config.ru
deleted file mode 100644
index 1afbd55..0000000
--- a/config.ru
+++ /dev/null
@@ -1,4 +0,0 @@
-# This file is used by Rack-based servers to start the application.
-
-require ::File.expand_path('../config/environment', __FILE__)
-run Glsamaker::Application
diff --git a/config/application.rb b/config/application.rb
deleted file mode 100644
index a860bbf..0000000
--- a/config/application.rb
+++ /dev/null
@@ -1,38 +0,0 @@
-require File.expand_path('../boot', __FILE__)
-
-require 'rails/all'
-
-# Require the gems listed in Gemfile, including any gems
-# you've limited to :test, :development, or :production.
-Bundler.require(:default, Rails.env)
-
-module Glsamaker
- class Application < Rails::Application
- # Settings in config/environments/* take precedence over those specified here.
- # Application configuration should go into files in config/initializers
- # -- all .rb files in that directory are automatically loaded.
- config.autoload_paths += ["#{config.root}/lib"]
-
- config.assets.precompile += %w( cve.css jsui.js )
-
- # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
- # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
- # config.time_zone = 'Central Time (US & Canada)'
-
- # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
- # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
- # config.i18n.default_locale = :de
-
- # Configure the default encoding used in templates for Ruby 1.9.
- config.encoding = "utf-8"
-
- # Configure sensitive parameters which will be filtered from the log file.
- config.filter_parameters += [:password]
-
- # This will become standard in Rails 5.0
- config.active_record.raise_in_transactional_callbacks = true
- end
-end
-
-# Manually load the kramdown extensions
-require_relative '../lib/kramdown_ext'
diff --git a/config/boot.rb b/config/boot.rb
deleted file mode 100644
index 6b750f0..0000000
--- a/config/boot.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
-
-require 'bundler/setup' # Set up gems listed in the Gemfile.
diff --git a/config/database.yml.mysql b/config/database.yml.mysql
deleted file mode 100644
index 0a0610d..0000000
--- a/config/database.yml.mysql
+++ /dev/null
@@ -1,42 +0,0 @@
-# MySQL. Versions 4.1 and 5.0 are recommended.
-#
-# Install the MYSQL driver
-# gem install mysql2
-#
-# Ensure the MySQL gem is defined in your Gemfile
-# gem 'mysql2'
-#
-# And be sure to use new-style password hashing:
-# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
-development:
- adapter: mysql2
- encoding: utf8
- reconnect: false
- database: glsamaker_development
- pool: 5
-# username: root
-# password:
-# socket: /tmp/mysql.sock
-
-# Warning: The database defined as "test" will be erased and
-# re-generated from your development database when you run "rake".
-# Do not set this db to the same as development or production.
-test:
- adapter: mysql2
- encoding: utf8
- reconnect: false
- database: glsamaker_test
- pool: 5
-# username: root
-# password:
-# socket: /tmp/mysql.sock
-
-production:
- adapter: mysql2
- encoding: utf8
- reconnect: false
- database: glsamaker_production
- pool: 5
-# username: root
-# password:
-# socket: /tmp/mysql.sock
diff --git a/config/deploy.rb b/config/deploy.rb
deleted file mode 100644
index 654a641..0000000
--- a/config/deploy.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-require 'thinking_sphinx/deploy/capistrano'
-require 'bundler/capistrano'
-
-set :application, "glsamaker"
-set :repository, "git://git.overlays.gentoo.org/proj/glsamaker.git"
-
-set :use_sudo, false
-
-set :scm, :git
-
-role :web, "pitaya.gentoo-ev.org"
-role :app, "pitaya.gentoo-ev.org"
-role :db, "pitaya.gentoo-ev.org", :primary => true
-
-set :user, 'glsamaker'
-set :deploy_to, "/var/www/glsamaker"
-
-namespace :deploy do
- task :start do ; end
- task :stop do ; end
- task :restart, :roles => :app, :except => { :no_release => true } do
- run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
- end
-
- task :init do
- top.upload("config/deploy.private.rb", "#{deploy_to}/current/tmp/deploy.private.rb", {:mode => '0600'})
- run "cd #{deploy_to}/current/ && ./script/config_init"
- end
-
- desc "precompile the assets"
- task :precompile_assets, :roles => :web, :except => { :no_release => true } do
- run "cd #{current_path}; rm -rf public/assets/*"
- run "cd #{current_path}; RAILS_ENV=production bundle exec rake assets:precompile"
- end
-
- after "deploy:symlink", "deploy:init", "deploy:precompile_assets"
-end
diff --git a/config/environment.rb b/config/environment.rb
deleted file mode 100644
index 8ec6d35..0000000
--- a/config/environment.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# Load the rails Rpplication
-require File.expand_path('../application', __FILE__)
-
-# Initialize the Rails application
-Rails.application.initialize!
-
-GLSAMAKER_VERSION = '2.1.18'
-
-require 'digest/md5'
diff --git a/config/environments/development.rb b/config/environments/development.rb
deleted file mode 100644
index b55e214..0000000
--- a/config/environments/development.rb
+++ /dev/null
@@ -1,41 +0,0 @@
-Rails.application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
-
- # In the development environment your application's code is reloaded on
- # every request. This slows down response time but is perfect for development
- # since you don't have to restart the web server when you make code changes.
- config.cache_classes = false
-
- # Do not eager load code on boot.
- config.eager_load = false
-
- # Show full error reports and disable caching.
- config.consider_all_requests_local = true
- config.action_controller.perform_caching = false
-
- # Don't care if the mailer can't send.
- config.action_mailer.raise_delivery_errors = false
-
- # Print deprecation notices to the Rails logger.
- config.active_support.deprecation = :log
-
- # Raise an error on page load if there are pending migrations.
- config.active_record.migration_error = :page_load
-
- # Debug mode disables concatenation and preprocessing of assets.
- # This option may cause significant delays in view rendering with a large
- # number of complex assets.
- config.assets.debug = true
-
- # Asset digests allow you to set far-future HTTP expiration dates on all assets,
- # yet still be able to expire them through the digest params.
- config.assets.digest = true
-
- # Adds additional error checking when serving assets at runtime.
- # Checks for improperly declared sprockets dependencies.
- # Raises helpful error messages.
- config.assets.raise_runtime_errors = true
-
- # Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
-end
diff --git a/config/environments/production.rb b/config/environments/production.rb
deleted file mode 100644
index 8e8a630..0000000
--- a/config/environments/production.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-Rails.application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
-
- # Code is not reloaded between requests.
- config.cache_classes = true
-
- # Eager load code on boot. This eager loads most of Rails and
- # your application in memory, allowing both threaded web servers
- # and those relying on copy on write to perform better.
- # Rake tasks automatically ignore this option for performance.
- config.eager_load = true
-
- # Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
- config.action_controller.perform_caching = true
-
- # Enable Rack::Cache to put a simple HTTP cache in front of your application
- # Add `rack-cache` to your Gemfile before enabling this.
- # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
- # config.action_dispatch.rack_cache = true
-
- # Disable Rails's static asset server (Apache or nginx will already do this).
- config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
-
- # Compress JavaScripts and CSS.
- config.assets.compress = false
- # config.assets.js_compressor = :uglifier
- # config.assets.css_compressor = :sass
-
- # Do not fallback to assets pipeline if a precompiled asset is missed.
- config.assets.compile = true
-
- # Generate digests for assets URLs.
- config.assets.digest = true
-
- # Specifies the header that your server uses for sending files.
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
- config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
-
- # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- config.force_ssl = true
-
- # Set to :debug to see everything in the log.
- config.log_level = :info
-
- # Prepend all log lines with the following tags.
- # config.log_tags = [ :subdomain, :uuid ]
-
- # Use a different logger for distributed setups.
- # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
-
- # Use a different cache store in production.
- # config.cache_store = :mem_cache_store
-
- # Enable serving of images, stylesheets, and JavaScripts from an asset server.
- # config.action_controller.asset_host = "http://assets.example.com"
-
- # Precompile additional assets.
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
- # config.assets.precompile += %w( cve.css jsui.js )
-
- # Ignore bad email addresses and do not raise email delivery errors.
- # Set this to true and configure the email server for immediate delivery to raise delivery errors.
- config.action_mailer.raise_delivery_errors = true
-
- # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
- # the I18n.default_locale when a translation can not be found).
- config.i18n.fallbacks = true
-
- # Send deprecation notices to registered listeners.
- config.active_support.deprecation = :notify
-
- # Disable automatic flushing of the log to improve performance.
- # config.autoflush_log = false
-
- # Use default logging formatter so that PID and timestamp are not suppressed.
- config.log_formatter = ::Logger::Formatter.new
-
- # Other Sendmail config
- config.action_mailer.delivery_method = :sendmail
- config.action_mailer.sendmail_settings = { :location => '/usr/sbin/sendmail', :arguments => '-i -t -f glsamaker@gentoo.org' }
-
-end
diff --git a/config/environments/test.rb b/config/environments/test.rb
deleted file mode 100644
index 1c19f08..0000000
--- a/config/environments/test.rb
+++ /dev/null
@@ -1,42 +0,0 @@
-Rails.application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
-
- # The test environment is used exclusively to run your application's
- # test suite. You never need to work with it otherwise. Remember that
- # your test database is "scratch space" for the test suite and is wiped
- # and recreated between test runs. Don't rely on the data there!
- config.cache_classes = true
-
- # Do not eager load code on boot. This avoids loading your whole application
- # just for the purpose of running a single test. If you are using a tool that
- # preloads Rails for running tests, you may have to set it to true.
- config.eager_load = false
-
- # Configure static file server for tests with Cache-Control for performance.
- config.serve_static_files = true
- config.static_cache_control = 'public, max-age=3600'
-
- # Show full error reports and disable caching.
- config.consider_all_requests_local = true
- config.action_controller.perform_caching = false
-
- # Raise exceptions instead of rendering exception templates.
- config.action_dispatch.show_exceptions = false
-
- # Disable request forgery protection in test environment.
- config.action_controller.allow_forgery_protection = false
-
- # Tell Action Mailer not to deliver emails to the real world.
- # The :test delivery method accumulates sent emails in the
- # ActionMailer::Base.deliveries array.
- config.action_mailer.delivery_method = :test
-
- # Randomize the order test cases are executed.
- config.active_support.test_order = :random
-
- # Print deprecation notices to the stderr.
- config.active_support.deprecation = :stderr
-
- # Raises error for missing translations
- # config.action_view.raise_on_missing_translations = true
-end
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
deleted file mode 100644
index 01ef3e6..0000000
--- a/config/initializers/assets.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Version of your assets, change this if you want to expire all your assets.
-Rails.application.config.assets.version = '1.0'
-
-# Add additional assets to the asset load path
-# Rails.application.config.assets.paths << Emoji.images_path
-
-# Precompile additional assets.
-# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
-# Rails.application.config.assets.precompile += %w( search.js )
diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb
deleted file mode 100644
index 59385cd..0000000
--- a/config/initializers/backtrace_silencers.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
-# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
-
-# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
-# Rails.backtrace_cleaner.remove_silencers!
diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb
deleted file mode 100644
index ac5f8b6..0000000
--- a/config/initializers/cookies_serializer.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-Rails.application.config.action_dispatch.cookies_serializer = :marshal
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
deleted file mode 100644
index 4a994e1..0000000
--- a/config/initializers/filter_parameter_logging.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Configure sensitive parameters which will be filtered from the log file.
-Rails.application.config.filter_parameters += [:password]
diff --git a/config/initializers/glsamaker-global.rb b/config/initializers/glsamaker-global.rb
deleted file mode 100644
index 8f85b00..0000000
--- a/config/initializers/glsamaker-global.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-# The fields that templates can be applied on
-GLSAMAKER_TEMPLATE_TARGETS = %w[ title synopsis description impact workaround resolution ]
diff --git a/config/initializers/glsamaker.rb.sample b/config/initializers/glsamaker.rb.sample
deleted file mode 100644
index 7282279..0000000
--- a/config/initializers/glsamaker.rb.sample
+++ /dev/null
@@ -1,48 +0,0 @@
-# GLSAMaker local configuration
-# rename this file to glsamaker.rb
-
-# The development environment uses self-issued HTTP basic authentication
-# Since GLSAMaker doesn't track passwords, set a password here for usage e.g.
-# in ./script/server testing environments. The password applies to every user
-GLSAMAKER_DEVEL_PASSWORD = "changeme"
-
-# If you want to force GLSAMaker to use production-style auth in all
-# environments, set this to true
-GLSAMAKER_FORCE_PRODUCTION_AUTH = false
-
-# Email address of the administrative contact
-GLSAMAKER_ADMIN_EMAIL = "security@gentoo.org"
-
-# Email address to send email from
-GLSAMAKER_FROM_EMAIL = "glsamaker@gentoo.org"
-
-# Do not send any emails (for development)
-GLSAMAKER_NO_EMAIL = false
-
-# Where does the app live?
-GLSAMAKER_HOST = "localhost:3000"
-
-# Location of the Portage tree, that can be a full gentoo tree, or what this gets you:
-#
-# rsync -av rsync://rsync1.de.gentoo.org/gentoo-portage --include 'metadata' \
-# --include 'metadata/**' --include '*/*/metadata.xml' --exclude '*/*/*' \
-# --exclude scripts --exclude eclass --exclude profiles --exclude 'skel.*' \
-# --exclude 'header.txt' --exclude 'licenses' /target
-#
-GLSAMAKER_PORTDIR = "/usr/portage/"
-
-# Bugzilla login info
-GLSAMAKER_BUGZIE_SKIP = false
-GLSAMAKER_BUGZIE_HOST = 'bugs.gentoo.org'
-GLSAMAKER_BUGZIE_USER = nil
-GLSAMAKER_BUGZIE_PW = nil
-
-# Location of xmlindent(1)
-GLSAMAKER_XMLINDENT = "/usr/bin/xmlindent"
-
-# Your secret key for verifying the integrity of signed cookies.
-# If you change this key, all old signed cookies will become invalid!
-# Make sure the secret is at least 30 characters and all random,
-# no regular words or you'll be exposed to dictionary attacks.
-# Yes, this is referencing an undefined variable on purpose.
-Glsamaker::Application.config.secret_token = i_forgot_to_set_this
diff --git a/config/initializers/glsamaker_constants.rb b/config/initializers/glsamaker_constants.rb
deleted file mode 100644
index 6476c7d..0000000
--- a/config/initializers/glsamaker_constants.rb
+++ /dev/null
@@ -1 +0,0 @@
-CVE_CACHE_LAST_IMPORT = 'cve/last-import'
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
deleted file mode 100644
index dfb5df0..0000000
--- a/config/initializers/inflections.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new inflection rules using the following format. Inflections
-# are locale specific, and you may define rules for as many different
-# locales as you wish. All of these examples are active by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-# inflect.plural /^(ox)$/i, '\1en'
-# inflect.singular /^(ox)en/i, '\1'
-# inflect.irregular 'person', 'people'
-# inflect.uncountable %w( fish sheep )
-# end
-
-ActiveSupport::Inflector.inflections(:en) do |inflect|
- inflect.singular 'cves', 'cve'
-end
-
-# These inflection rules are supported but not enabled by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-# inflect.acronym 'RESTful'
-# end
diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb
deleted file mode 100644
index 5f94d03..0000000
--- a/config/initializers/mime_types.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new mime types for use in respond_to blocks:
-# Mime::Type.register "text/richtext", :rtf
-# Mime::Type.register_alias "text/html", :iphone
-
-Mime::Type.register "text/plain", :txt
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
deleted file mode 100644
index df488ac..0000000
--- a/config/initializers/session_store.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-Rails.application.config.session_store :cookie_store, key: '_glsamaker_session'
diff --git a/config/initializers/time_formats.rb b/config/initializers/time_formats.rb
deleted file mode 100644
index 2f75d0b..0000000
--- a/config/initializers/time_formats.rb
+++ /dev/null
@@ -1 +0,0 @@
-Time::DATE_FORMATS[:default] = "%a, %d %b %y %H:%M"
diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb
deleted file mode 100644
index 33725e9..0000000
--- a/config/initializers/wrap_parameters.rb
+++ /dev/null
@@ -1,14 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# This file contains settings for ActionController::ParamsWrapper which
-# is enabled by default.
-
-# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
-ActiveSupport.on_load(:action_controller) do
- wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
-end
-
-# To enable root element in JSON for ActiveRecord objects.
-# ActiveSupport.on_load(:active_record) do
-# self.include_root_in_json = true
-# end
diff --git a/config/locales/en.yml b/config/locales/en.yml
deleted file mode 100644
index 0653957..0000000
--- a/config/locales/en.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-# Files in the config/locales directory are used for internationalization
-# and are automatically loaded by Rails. If you want to use locales other
-# than English, add the necessary files in this directory.
-#
-# To use the locales, use `I18n.t`:
-#
-# I18n.t 'hello'
-#
-# In views, this is aliased to just `t`:
-#
-# <%= t('hello') %>
-#
-# To use a different locale, set it with `I18n.locale`:
-#
-# I18n.locale = :es
-#
-# This would use the information in config/locales/es.yml.
-#
-# To learn more, please read the Rails Internationalization guide
-# available at http://guides.rubyonrails.org/i18n.html.
-
-en:
- hello: "Hello world"
diff --git a/config/routes.rb b/config/routes.rb
deleted file mode 100644
index 2a28e0e..0000000
--- a/config/routes.rb
+++ /dev/null
@@ -1,96 +0,0 @@
-Glsamaker::Application.routes.draw do
-
- match 'bug/:id' => 'bug#bug', :as => :bug, :via => :get
- match 'bug/:id/history' => 'bug#history', :as => :bughistory, :via => :get
-
- match 'cve/list.:format' => 'cve#list', :as => :cve, :via => [:get, :post]
-
- match 'search/results' => 'search#results', :as => :search, :via => :get
-
- match 'admin' => 'admin/index#index', :via => :get
-
- resources :glsas, :controller => 'glsa' do
- resources :comments
- resources :bugs
-
- get 'requests', :on => :collection
- get 'drafts' , :on => :collection
- get 'archive', :on => :collection
- post 'archive', :on => :collection
-
- get 'diff', :on => :member
- post 'diff', :on => :member
- get 'download', :on => :member
- get 'import_references', :on => :member
- post 'import_references', :on => :member
- get 'prepare_release', :on => :member
- post 'prepare_release', :on => :member
- post 'release', :on => :member
- get 'update_cache', :on => :member
- get 'finalize_release', :on => :member
- post 'finalize_release', :on => :member
- end
-
- # The priority is based upon order of creation:
- # first created -> highest priority.
-
- # Sample of regular route:
- # match 'products/:id' => 'catalog#view'
- # Keep in mind you can assign values other than :controller and :action
-
- # Sample of named route:
- # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
- # This route can be invoked with purchase_url(:id => product.id)
-
- # Sample resource route (maps HTTP verbs to controller actions automatically):
- # resources :products
-
- # Sample resource route with options:
- # resources :products do
- # member do
- # get 'short'
- # post 'toggle'
- # end
- #
- # collection do
- # get 'sold'
- # end
- # end
-
- # Sample resource route with sub-resources:
- # resources :products do
- # resources :comments, :sales
- # resource :seller
- # end
-
- # Sample resource route with more complex sub-resources
- # resources :products do
- # resources :comments
- # resources :sales do
- # get 'recent', :on => :collection
- # end
- # end
-
- # Sample resource route within a namespace:
- # namespace :admin do
- # # Directs /admin/products/* to Admin::ProductsController
- # # (app/controllers/admin/products_controller.rb)
- # resources :products
- # end
-
- namespace :admin do
- resources :users
- resources :templates
- end
-
- # You can have the root of your site routed with "root"
- # just remember to delete public/index.html.
- root :to => 'index#index'
-
- # See how all your routes lay out with "rake routes"
-
- # This is a legacy wild controller route that's not recommended for RESTful applications.
- # Note: This route will make all actions in every controller accessible via GET requests.
- match ':controller(/:action(/:id(.:format)))', :via => [:get, :post]
- #
-end
diff --git a/config/secrets.yml b/config/secrets.yml
deleted file mode 100644
index a98e48f..0000000
--- a/config/secrets.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# Be sure to restart your server when you modify this file.
-
-# Your secret key is used for verifying the integrity of signed cookies.
-# If you change this key, all old signed cookies will become invalid!
-
-# Make sure the secret is at least 30 characters and all random,
-# no regular words or you'll be exposed to dictionary attacks.
-# You can use `rake secret` to generate a secure secret key.
-
-# Make sure the secrets in this file are kept private
-# if you're sharing your code publicly.
-
-development:
- secret_key_base: 865902986d47e642f24b044ba251bfa4bc1b180c15a83ed6727b7a18931aa5452cf0d221fb0519c945de1b1828c46fb484eb7c792b213a2530f1f605cf465b60
-
-test:
- secret_key_base: 7b16cf2278f7afa09663e09c8043579e1ed7d4df18a48f60d878b810824a89ec8ddbe7b948b10701f3636e78c44f0baa3bdbd7b38e2ed6afa669bb2bd197f5e3
-
-# Do not keep production secrets in the repository,
-# instead read values from the environment.
-production:
- secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
diff --git a/config/thinking_sphinx.yml b/config/thinking_sphinx.yml
deleted file mode 100644
index d866a5a..0000000
--- a/config/thinking_sphinx.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-development:
- enable_star: true
- min_infix_len: 3
-test:
- enable_star: true
- min_infix_len: 3
-production:
- enable_star: true
- min_infix_len: 3 \ No newline at end of file
diff --git a/db/migrate/20090314092539_create_users.rb b/db/migrate/20090314092539_create_users.rb
deleted file mode 100644
index c7eff5f..0000000
--- a/db/migrate/20090314092539_create_users.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class CreateUsers < ActiveRecord::Migration
- def self.up
- create_table :users do |t|
- t.string :login
- t.string :name
- t.string :email
- t.boolean :disabled, :default => false
- t.boolean :jefe, :default => false
- t.text :preferences
- t.integer :access
- t.timestamps
- end
-
- add_index :users, :login, :unique => true
- end
-
- def self.down
- remove_index :users, :column => :login
- drop_table :users
- end
-end
diff --git a/db/migrate/20090314191650_create_glsas.rb b/db/migrate/20090314191650_create_glsas.rb
deleted file mode 100644
index fd88029..0000000
--- a/db/migrate/20090314191650_create_glsas.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-class CreateGlsas < ActiveRecord::Migration
- def self.up
- create_table :glsas do |t|
- t.string :glsa_id
- t.integer :requester
- t.integer :submitter
- t.integer :bugreadymaker
- t.string :status
- t.boolean :restricted, :default => false
- t.timestamps
- end
-
- add_index :glsas, :glsa_id, :unique => true
- add_index :glsas, :status
- end
-
- def self.down
- remove_index :glsas, :status
- remove_index :glsas, :glsa_id
- drop_table :glsas
- end
-end
diff --git a/db/migrate/20090314194257_add_glsa_user_constraints.rb b/db/migrate/20090314194257_add_glsa_user_constraints.rb
deleted file mode 100644
index 51c35ac..0000000
--- a/db/migrate/20090314194257_add_glsa_user_constraints.rb
+++ /dev/null
@@ -1,13 +0,0 @@
-class AddGlsaUserConstraints < ActiveRecord::Migration
- def self.up
- execute "ALTER TABLE glsas ADD CONSTRAINT glsas_users_requesters FOREIGN KEY (requester) REFERENCES users (id)"
- execute "ALTER TABLE glsas ADD CONSTRAINT glsas_users_submitters FOREIGN KEY (submitter) REFERENCES users (id)"
- execute "ALTER TABLE glsas ADD CONSTRAINT glsas_users_bugreadymakers FOREIGN KEY (bugreadymaker) REFERENCES users (id)"
- end
-
- def self.down
- execute "ALTER TABLE glsas DROP FOREIGN KEY glsas_users_requesters"
- execute "ALTER TABLE glsas DROP FOREIGN KEY glsas_users_submitters"
- execute "ALTER TABLE glsas DROP FOREIGN KEY glsas_users_bugreadymakers"
- end
-end
diff --git a/db/migrate/20090314194659_create_revisions.rb b/db/migrate/20090314194659_create_revisions.rb
deleted file mode 100644
index dbea6ba..0000000
--- a/db/migrate/20090314194659_create_revisions.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-class CreateRevisions < ActiveRecord::Migration
- def self.up
- create_table :revisions do |t|
- t.integer :glsa_id
- t.integer :revid
- t.string :title
- t.string :access, :default => "remote"
- t.string :product
- t.string :category
- t.string :severity, :default => "normal"
- t.text :synopsis
- t.text :background
- t.text :description
- t.text :impact
- t.text :workaround
- t.text :resolution
- t.timestamps
- end
-
- add_index :revisions, :glsa_id
- add_index :revisions, :revid
- add_index :revisions, :title
- end
-
- def self.down
- remove_index :revisions, :synopsis
- remove_index :revisions, :title
- remove_index :revisions, :revid
- remove_index :revisions, :glsa_id
- drop_table :revisions
- end
-end
diff --git a/db/migrate/20090314230516_create_references.rb b/db/migrate/20090314230516_create_references.rb
deleted file mode 100644
index c7fff76..0000000
--- a/db/migrate/20090314230516_create_references.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-class CreateReferences < ActiveRecord::Migration
- def self.up
- create_table :references do |t|
- t.integer :revision_id
- t.text :title
- t.text :url
- t.string :type
- t.timestamps
- end
-
- add_index :references, :revision_id
- end
-
- def self.down
- remove_index :references, :revision_id
- drop_table :references
- end
-end
diff --git a/db/migrate/20090315105049_create_bugs.rb b/db/migrate/20090315105049_create_bugs.rb
deleted file mode 100644
index 21d6641..0000000
--- a/db/migrate/20090315105049_create_bugs.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class CreateBugs < ActiveRecord::Migration
- def self.up
- create_table :bugs do |t|
- t.integer :bug_id
- t.text :title
- t.integer :revision_id
- t.timestamps
- end
-
- add_index :bugs, :revision_id
- add_index :bugs, :bug_id
- end
-
- def self.down
- remove_index :bugs, :column => :revision_id
- remove_index :bugs, :column => :bug_id
- drop_table :bugs
- end
-end
diff --git a/db/migrate/20090315105326_add_references_revisions_constraint.rb b/db/migrate/20090315105326_add_references_revisions_constraint.rb
deleted file mode 100644
index 1fa4800..0000000
--- a/db/migrate/20090315105326_add_references_revisions_constraint.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class AddReferencesRevisionsConstraint < ActiveRecord::Migration
- def self.up
- execute "ALTER TABLE `references` ADD CONSTRAINT references_revisions_revisionid FOREIGN KEY (revision_id) REFERENCES revisions (id)"
- end
-
- def self.down
- execute "ALTER TABLE `references` DROP FOREIGN KEY references_revisions_revisionid"
- end
-end
diff --git a/db/migrate/20090315110025_create_comments.rb b/db/migrate/20090315110025_create_comments.rb
deleted file mode 100644
index bebb968..0000000
--- a/db/migrate/20090315110025_create_comments.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-class CreateComments < ActiveRecord::Migration
- def self.up
- create_table :comments do |t|
- t.integer :user_id
- t.integer :glsa_id
- t.text :text
- t.string :type
- t.boolean :read, :default => false
- t.timestamps
- end
-
- add_index :comments, :glsa_id
- end
-
- def self.down
- drop_table :comments
- end
-end
diff --git a/db/migrate/20090315110119_add_comment_constraints.rb b/db/migrate/20090315110119_add_comment_constraints.rb
deleted file mode 100644
index 49eabd4..0000000
--- a/db/migrate/20090315110119_add_comment_constraints.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class AddCommentConstraints < ActiveRecord::Migration
- def self.up
- execute "ALTER TABLE comments ADD CONSTRAINT comments_users_userid FOREIGN KEY (user_id) REFERENCES users (id)"
- execute "ALTER TABLE comments ADD CONSTRAINT comments_glsas_glsaid FOREIGN KEY (glsa_id) REFERENCES glsas (id)"
- end
-
- def self.down
- execute "ALTER TABLE comments DROP FOREIGN KEY comments_users_userid"
- execute "ALTER TABLE comments DROP FOREIGN KEY comments_glsas_glsaid"
- end
-end
diff --git a/db/migrate/20090410212514_add_user_id_to_revisions.rb b/db/migrate/20090410212514_add_user_id_to_revisions.rb
deleted file mode 100644
index f6c0254..0000000
--- a/db/migrate/20090410212514_add_user_id_to_revisions.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class AddUserIdToRevisions < ActiveRecord::Migration
- def self.up
- add_column :revisions, :user_id, :integer
- end
-
- def self.down
- remove_column :revisions, :user_id
- end
-end
diff --git a/db/migrate/20090410212600_add_revisions_user_id_constraint.rb b/db/migrate/20090410212600_add_revisions_user_id_constraint.rb
deleted file mode 100644
index 18597cb..0000000
--- a/db/migrate/20090410212600_add_revisions_user_id_constraint.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class AddRevisionsUserIdConstraint < ActiveRecord::Migration
- def self.up
- execute "ALTER TABLE `revisions` ADD CONSTRAINT revisions_user_userid FOREIGN KEY (user_id) REFERENCES users (id)"
- end
-
- def self.down
- execute "ALTER TABLE `revisions` DROP FOREIGN KEY revisions_user_userid"
- end
-end
diff --git a/db/migrate/20090419140216_create_sessions.rb b/db/migrate/20090419140216_create_sessions.rb
deleted file mode 100644
index 4ccc353..0000000
--- a/db/migrate/20090419140216_create_sessions.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-class CreateSessions < ActiveRecord::Migration
- def self.up
- create_table :sessions do |t|
- t.string :session_id, :null => false
- t.text :data
- t.timestamps
- end
-
- add_index :sessions, :session_id
- add_index :sessions, :updated_at
- end
-
- def self.down
- drop_table :sessions
- end
-end
diff --git a/db/migrate/20090501114107_add_status_cache_to_bugs.rb b/db/migrate/20090501114107_add_status_cache_to_bugs.rb
deleted file mode 100644
index 1600049..0000000
--- a/db/migrate/20090501114107_add_status_cache_to_bugs.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class AddStatusCacheToBugs < ActiveRecord::Migration
- def self.up
- add_column :bugs, :whiteboard, :string
- add_column :bugs, :arches, :string
- end
-
- def self.down
- remove_column :bugs, :arches
- remove_column :bugs, :whiteboard
- end
-end
diff --git a/db/migrate/20100511192546_change_comment_type_to_rating.rb b/db/migrate/20100511192546_change_comment_type_to_rating.rb
deleted file mode 100644
index c3ab83a..0000000
--- a/db/migrate/20100511192546_change_comment_type_to_rating.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class ChangeCommentTypeToRating < ActiveRecord::Migration
- def self.up
- rename_column :comments, :type, :rating
- end
-
- def self.down
- rename_column :comments, :rating, :type
- end
-end
diff --git a/db/migrate/20100513183324_create_packages.rb b/db/migrate/20100513183324_create_packages.rb
deleted file mode 100644
index 11ed193..0000000
--- a/db/migrate/20100513183324_create_packages.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class CreatePackages < ActiveRecord::Migration
- def self.up
- create_table :packages do |t|
- t.integer :revision_id
- t.string :my_type
- t.string :atom
- t.string :version
- t.string :comp
- t.string :arch
- t.boolean :automatic, :default => true
- t.timestamps
- end
-
- add_index :packages, :revision_id
- end
-
- def self.down
- remove_index :packages, :column => :revision_id
- drop_table :packages
- end
-end
diff --git a/db/migrate/20100813183543_create_cves.rb b/db/migrate/20100813183543_create_cves.rb
deleted file mode 100644
index 473e165..0000000
--- a/db/migrate/20100813183543_create_cves.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class CreateCves < ActiveRecord::Migration
- def self.up
- create_table :cves do |t|
- t.string :cve_id
- t.text :summary
- t.string :cvss
- t.string :state
- t.datetime :published_at
- t.datetime :last_changed_at
- t.timestamps
- end
-
- add_index :cves, :cve_id, :unique => true
- end
-
- def self.down
- drop_table :cves
- end
-end
diff --git a/db/migrate/20100814103856_create_cve_references.rb b/db/migrate/20100814103856_create_cve_references.rb
deleted file mode 100644
index ef3ef9b..0000000
--- a/db/migrate/20100814103856_create_cve_references.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-class CreateCveReferences < ActiveRecord::Migration
- def self.up
- create_table :cve_references do |t|
- t.string :source
- t.text :title
- t.text :uri
- t.integer :cve_id
- t.timestamps
- end
-
- add_index :cve_references, :cve_id
- execute "ALTER TABLE cve_references ADD CONSTRAINT cve_references_cve_id FOREIGN KEY (cve_id) REFERENCES cves (id)"
- end
-
- def self.down
- execute "ALTER TABLE cve_references DROP FOREIGN KEY cve_references_cve_id"
- drop_table :cve_references
- end
-end
diff --git a/db/migrate/20100814105152_create_cve_comments.rb b/db/migrate/20100814105152_create_cve_comments.rb
deleted file mode 100644
index 73b1424..0000000
--- a/db/migrate/20100814105152_create_cve_comments.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-class CreateCveComments < ActiveRecord::Migration
- def self.up
- create_table :cve_comments do |t|
- t.integer :cve_id
- t.integer :user_id
- t.boolean :confidential, :default => false
- t.text :comment
- t.timestamps
- end
-
- add_index :cve_comments, :cve_id
- execute "ALTER TABLE cve_comments ADD CONSTRAINT cve_comments_cve_id FOREIGN KEY (cve_id) REFERENCES cves (id)"
- execute "ALTER TABLE cve_comments ADD CONSTRAINT cve_comments_user_id FOREIGN KEY (user_id) REFERENCES users (id)"
- end
-
- def self.down
- execute "ALTER TABLE cve_comments DROP FOREIGN KEY cve_comments_cve_id"
- execute "ALTER TABLE cve_comments DROP FOREIGN KEY cve_comments_user_id"
- drop_table :cve_comments
- end
-end
diff --git a/db/migrate/20100814105345_create_cve_changes.rb b/db/migrate/20100814105345_create_cve_changes.rb
deleted file mode 100644
index 80e7db9..0000000
--- a/db/migrate/20100814105345_create_cve_changes.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-class CreateCveChanges < ActiveRecord::Migration
- def self.up
- create_table :cve_changes do |t|
- t.integer :cve_id
- t.integer :user_id
- t.string :action
- t.string :object
- t.timestamps
- end
-
- execute "ALTER TABLE cve_changes ADD CONSTRAINT cve_changes_cve_id FOREIGN KEY (cve_id) REFERENCES cves (id)"
- execute "ALTER TABLE cve_changes ADD CONSTRAINT cve_changes_user_id FOREIGN KEY (user_id) REFERENCES users (id)"
- end
-
- def self.down
- execute "ALTER TABLE cve_changes DROP FOREIGN KEY cve_changes_cve_id"
- execute "ALTER TABLE cve_changes DROP FOREIGN KEY cve_changes_user_id"
- drop_table :cve_changes
- end
-end
diff --git a/db/migrate/20100814142647_create_cpes.rb b/db/migrate/20100814142647_create_cpes.rb
deleted file mode 100644
index 439360a..0000000
--- a/db/migrate/20100814142647_create_cpes.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-class CreateCpes < ActiveRecord::Migration
- def self.up
- create_table :cpes do |t|
- t.string :cpe
- t.timestamps
- end
-
- create_table :cpes_cves, :id => false do |t|
- t.integer :cpe_id
- t.integer :cve_id
- t.timestamps
- end
-
- add_index :cpes_cves, [:cve_id, :cpe_id]
- add_index :cpes, :cpe, :unique => true
-
- execute "ALTER TABLE cpes_cves ADD CONSTRAINT cpes_cves_cpe_id FOREIGN KEY (cpe_id) REFERENCES cpes (id)"
- execute "ALTER TABLE cpes_cves ADD CONSTRAINT cpes_cves_cve_id FOREIGN KEY (cve_id) REFERENCES cves (id)"
- end
-
- def self.down
- execute "ALTER TABLE cpes_cves DROP FOREIGN KEY cpes_cves_cpe_id"
- execute "ALTER TABLE cpes_cves DROP FOREIGN KEY cpes_cves_cve_id"
- drop_table :cpes_cves
- drop_table :cpes
- end
-end
diff --git a/db/migrate/20100902093457_create_cve_assignments.rb b/db/migrate/20100902093457_create_cve_assignments.rb
deleted file mode 100644
index 0950574..0000000
--- a/db/migrate/20100902093457_create_cve_assignments.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-class CreateCveAssignments < ActiveRecord::Migration
- def self.up
- create_table :cve_assignments do |t|
- t.integer :cve_id
- t.integer :bug
- t.timestamps
- end
-
- add_index :cve_assignments, :cve_id
- add_index :cve_assignments, :bug
-
- execute "ALTER TABLE cve_assignments ADD CONSTRAINT cve_assignments_cve_id FOREIGN KEY (cve_id) REFERENCES cves (id)"
- end
-
- def self.down
- execute "ALTER TABLE cve_assignments DROP FOREIGN KEY cve_assignments_cve_id"
-
- remove_index :cve_assignments, :bug
- remove_index :cve_assignments, :cve_id
-
- drop_table :cve_assignments
- end
-end
diff --git a/db/migrate/20100918223549_add_system_user.rb b/db/migrate/20100918223549_add_system_user.rb
deleted file mode 100644
index b6058c9..0000000
--- a/db/migrate/20100918223549_add_system_user.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class AddSystemUser < ActiveRecord::Migration
- def self.up
- execute "INSERT INTO users (id, login, name, email, access, disabled, jefe) VALUES" +
- "(1, 'system', 'Sytem Account', 'glsamaker@gentoo.org', 0, 0, 0)"
- execute "UPDATE users SET id = 0 WHERE id = 1"
- execute "ALTER TABLE users AUTO_INCREMENT = 1"
- end
-
- def self.down
- execute "DELETE FROM users WHERE id = 0"
- end
-end
diff --git a/db/migrate/20110226204724_add_release_flag_to_revisions.rb b/db/migrate/20110226204724_add_release_flag_to_revisions.rb
deleted file mode 100644
index 43d0b6d..0000000
--- a/db/migrate/20110226204724_add_release_flag_to_revisions.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class AddReleaseFlagToRevisions < ActiveRecord::Migration
- def self.up
- add_column :revisions, :is_release, :boolean, :default => false
- add_column :revisions, :release_revision, :integer
- end
-
- def self.down
- remove_column :revisions, :release_revision
- remove_column :revisions, :is_release
- end
-end
diff --git a/db/migrate/20110827143514_create_templates.rb b/db/migrate/20110827143514_create_templates.rb
deleted file mode 100644
index ef9729a..0000000
--- a/db/migrate/20110827143514_create_templates.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-class CreateTemplates < ActiveRecord::Migration
- def change
- create_table :templates do |t|
- t.string :name
- t.text :text
- t.string :target
- t.boolean :enabled, :default => true
-
- t.timestamps
- end
- end
-end
diff --git a/db/migrate/20110829174909_add_first_release_date_to_glsa.rb b/db/migrate/20110829174909_add_first_release_date_to_glsa.rb
deleted file mode 100644
index 74fb219..0000000
--- a/db/migrate/20110829174909_add_first_release_date_to_glsa.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-class AddFirstReleaseDateToGlsa < ActiveRecord::Migration
- def change
- add_column :glsas, :first_released_at, :datetime
- end
-end
diff --git a/db/migrate/20170418102638_add_slots_to_packages.rb b/db/migrate/20170418102638_add_slots_to_packages.rb
deleted file mode 100644
index 73e21e9..0000000
--- a/db/migrate/20170418102638_add_slots_to_packages.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-class AddSlotsToPackages < ActiveRecord::Migration
- def change
- add_column :packages, :slot, :string
- Package.find_each do |package|
- if package.slot.nil?
- package.slot = '*'
- package.save!
- end
- end
- end
-end
diff --git a/db/schema.rb b/db/schema.rb
deleted file mode 100644
index 1d2a6e1..0000000
--- a/db/schema.rb
+++ /dev/null
@@ -1,239 +0,0 @@
-# encoding: UTF-8
-# This file is auto-generated from the current state of the database. Instead
-# of editing this file, please use the migrations feature of Active Record to
-# incrementally modify your database, and then regenerate this schema definition.
-#
-# Note that this schema.rb definition is the authoritative source for your
-# database schema. If you need to create the application database on another
-# system, you should be using db:schema:load, not running all the migrations
-# from scratch. The latter is a flawed and unsustainable approach (the more migrations
-# you'll amass, the slower it'll run and the greater likelihood for issues).
-#
-# It's strongly recommended that you check this file into your version control system.
-
-ActiveRecord::Schema.define(version: 20170418102638) do
-
- create_table "bugs", force: :cascade do |t|
- t.integer "bug_id", limit: 4
- t.text "title", limit: 65535
- t.integer "revision_id", limit: 4
- t.datetime "created_at"
- t.datetime "updated_at"
- t.string "whiteboard", limit: 255
- t.string "arches", limit: 255
- end
-
- add_index "bugs", ["bug_id"], name: "index_bugs_on_bug_id", using: :btree
- add_index "bugs", ["revision_id"], name: "index_bugs_on_revision_id", using: :btree
-
- create_table "comments", force: :cascade do |t|
- t.integer "user_id", limit: 4
- t.integer "glsa_id", limit: 4
- t.text "text", limit: 65535
- t.string "rating", limit: 255
- t.boolean "read", limit: 1, default: false
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "comments", ["glsa_id"], name: "index_comments_on_glsa_id", using: :btree
- add_index "comments", ["user_id"], name: "comments_users_userid", using: :btree
-
- create_table "cpes", force: :cascade do |t|
- t.string "cpe", limit: 255
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cpes", ["cpe"], name: "index_cpes_on_cpe", unique: true, using: :btree
-
- create_table "cpes_cves", id: false, force: :cascade do |t|
- t.integer "cpe_id", limit: 4
- t.integer "cve_id", limit: 4
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cpes_cves", ["cpe_id"], name: "cpes_cves_cpe_id", using: :btree
- add_index "cpes_cves", ["cve_id", "cpe_id"], name: "index_cpes_cves_on_cve_id_and_cpe_id", using: :btree
-
- create_table "cve_assignments", force: :cascade do |t|
- t.integer "cve_id", limit: 4
- t.integer "bug", limit: 4
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cve_assignments", ["bug"], name: "index_cve_assignments_on_bug", using: :btree
- add_index "cve_assignments", ["cve_id"], name: "index_cve_assignments_on_cve_id", using: :btree
-
- create_table "cve_changes", force: :cascade do |t|
- t.integer "cve_id", limit: 4
- t.integer "user_id", limit: 4
- t.string "action", limit: 255
- t.string "object", limit: 255
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cve_changes", ["cve_id"], name: "cve_changes_cve_id", using: :btree
- add_index "cve_changes", ["user_id"], name: "cve_changes_user_id", using: :btree
-
- create_table "cve_comments", force: :cascade do |t|
- t.integer "cve_id", limit: 4
- t.integer "user_id", limit: 4
- t.boolean "confidential", limit: 1, default: false
- t.text "comment", limit: 65535
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cve_comments", ["cve_id"], name: "index_cve_comments_on_cve_id", using: :btree
- add_index "cve_comments", ["user_id"], name: "cve_comments_user_id", using: :btree
-
- create_table "cve_references", force: :cascade do |t|
- t.string "source", limit: 255
- t.text "title", limit: 65535
- t.text "uri", limit: 65535
- t.integer "cve_id", limit: 4
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cve_references", ["cve_id"], name: "index_cve_references_on_cve_id", using: :btree
-
- create_table "cves", force: :cascade do |t|
- t.string "cve_id", limit: 255
- t.text "summary", limit: 65535
- t.string "cvss", limit: 255
- t.string "state", limit: 255
- t.datetime "published_at"
- t.datetime "last_changed_at"
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "cves", ["cve_id"], name: "index_cves_on_cve_id", unique: true, using: :btree
-
- create_table "glsas", force: :cascade do |t|
- t.string "glsa_id", limit: 255
- t.integer "requester", limit: 4
- t.integer "submitter", limit: 4
- t.integer "bugreadymaker", limit: 4
- t.string "status", limit: 255
- t.boolean "restricted", limit: 1, default: false
- t.datetime "created_at"
- t.datetime "updated_at"
- t.datetime "first_released_at"
- end
-
- add_index "glsas", ["bugreadymaker"], name: "glsas_users_bugreadymakers", using: :btree
- add_index "glsas", ["glsa_id"], name: "index_glsas_on_glsa_id", unique: true, using: :btree
- add_index "glsas", ["requester"], name: "glsas_users_requesters", using: :btree
- add_index "glsas", ["status"], name: "index_glsas_on_status", using: :btree
- add_index "glsas", ["submitter"], name: "glsas_users_submitters", using: :btree
-
- create_table "packages", force: :cascade do |t|
- t.integer "revision_id", limit: 4
- t.string "my_type", limit: 255
- t.string "atom", limit: 255
- t.string "version", limit: 255
- t.string "comp", limit: 255
- t.string "arch", limit: 255
- t.boolean "automatic", limit: 1, default: true
- t.datetime "created_at"
- t.datetime "updated_at"
- t.string "slot", limit: 255
- end
-
- add_index "packages", ["atom"], name: "atom", using: :btree
- add_index "packages", ["comp"], name: "comp", using: :btree
- add_index "packages", ["revision_id"], name: "index_packages_on_revision_id", using: :btree
- add_index "packages", ["slot"], name: "slot", using: :btree
-
- create_table "references", force: :cascade do |t|
- t.integer "revision_id", limit: 4
- t.text "title", limit: 65535
- t.text "url", limit: 65535
- t.string "type", limit: 255
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "references", ["revision_id"], name: "index_references_on_revision_id", using: :btree
-
- create_table "revisions", force: :cascade do |t|
- t.integer "glsa_id", limit: 4
- t.integer "revid", limit: 4
- t.string "title", limit: 255
- t.string "access", limit: 255, default: "remote"
- t.string "product", limit: 255
- t.string "category", limit: 255
- t.string "severity", limit: 255, default: "normal"
- t.text "synopsis", limit: 65535
- t.text "background", limit: 65535
- t.text "description", limit: 65535
- t.text "impact", limit: 65535
- t.text "workaround", limit: 65535
- t.text "resolution", limit: 65535
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "user_id", limit: 4
- t.boolean "is_release", limit: 1, default: false
- t.integer "release_revision", limit: 4
- end
-
- add_index "revisions", ["glsa_id"], name: "index_revisions_on_glsa_id", using: :btree
- add_index "revisions", ["revid"], name: "index_revisions_on_revid", using: :btree
- add_index "revisions", ["title"], name: "index_revisions_on_title", using: :btree
- add_index "revisions", ["user_id"], name: "revisions_user_userid", using: :btree
-
- create_table "sessions", force: :cascade do |t|
- t.string "session_id", limit: 255, null: false
- t.text "data", limit: 65535
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "sessions", ["session_id"], name: "index_sessions_on_session_id", using: :btree
- add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at", using: :btree
-
- create_table "templates", force: :cascade do |t|
- t.string "name", limit: 255
- t.text "text", limit: 65535
- t.string "target", limit: 255
- t.boolean "enabled", limit: 1, default: true
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- create_table "users", force: :cascade do |t|
- t.string "login", limit: 255
- t.string "name", limit: 255
- t.string "email", limit: 255
- t.boolean "disabled", limit: 1, default: false
- t.boolean "jefe", limit: 1, default: false
- t.text "preferences", limit: 65535
- t.integer "access", limit: 4
- t.datetime "created_at"
- t.datetime "updated_at"
- end
-
- add_index "users", ["login"], name: "index_users_on_login", unique: true, using: :btree
-
- add_foreign_key "comments", "glsas", name: "comments_glsas_glsaid"
- add_foreign_key "comments", "users", name: "comments_users_userid"
- add_foreign_key "cpes_cves", "cpes", name: "cpes_cves_cpe_id"
- add_foreign_key "cpes_cves", "cves", name: "cpes_cves_cve_id"
- add_foreign_key "cve_assignments", "cves", name: "cve_assignments_cve_id"
- add_foreign_key "cve_changes", "cves", name: "cve_changes_cve_id"
- add_foreign_key "cve_changes", "users", name: "cve_changes_user_id"
- add_foreign_key "cve_comments", "cves", name: "cve_comments_cve_id"
- add_foreign_key "cve_comments", "users", name: "cve_comments_user_id"
- add_foreign_key "cve_references", "cves", name: "cve_references_cve_id"
- add_foreign_key "glsas", "users", column: "bugreadymaker", name: "glsas_users_bugreadymakers"
- add_foreign_key "glsas", "users", column: "requester", name: "glsas_users_requesters"
- add_foreign_key "glsas", "users", column: "submitter", name: "glsas_users_submitters"
- add_foreign_key "references", "revisions", name: "references_revisions_revisionid"
- add_foreign_key "revisions", "users", name: "revisions_user_userid"
-end
diff --git a/db/seeds.rb b/db/seeds.rb
deleted file mode 100644
index d34dfa0..0000000
--- a/db/seeds.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file should contain all the record creation needed to seed the database with its default values.
-# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
-#
-# Examples:
-#
-# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
-# Mayor.create(:name => 'Emanuel', :city => cities.first)
diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP
deleted file mode 100644
index 164a90c..0000000
--- a/doc/README_FOR_APP
+++ /dev/null
@@ -1,29 +0,0 @@
-=GLSAMaker v2
-
-GLSAMaker is a core tool for the Gentoo Security Team.
-It is used to track, create, edit and review Security announcements and drafts.
-
-Project website: https://redmine.a3li.li/projects/glsamaker2
-
-==Needed libraries
-* Rails 3.1
-* Nokogiri
-* JSON
-* Rcov
-* text-format
-* xmlindent
-* Sphinx
-* Sparklines
-
-==Copyright
- Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
- Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
- Portions Copyright (C) 2006-2007 Jean-Philippe Lang
-
-==License
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-For more information, see the LICENSE file.
diff --git a/doc/app/Admin.html b/doc/app/Admin.html
deleted file mode 100644
index b5cdb87..0000000
--- a/doc/app/Admin.html
+++ /dev/null
@@ -1,278 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Admin</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">MODULE</span> <a href="Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><span class="type">MODULE</span> <a href="Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><span class="type">MODULE</span> <a href="Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><span class="type">CLASS</span> <a href="Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><span class="type">CLASS</span> <a href="Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><span class="type">CLASS</span> <a href="Admin/UsersController.html">Admin::UsersController</a></li>
-
- </ul>
- </div>
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Admin</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Admin/IndexController.html b/doc/app/Admin/IndexController.html
deleted file mode 100644
index c9a5c28..0000000
--- a/doc/app/Admin/IndexController.html
+++ /dev/null
@@ -1,317 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Admin::IndexController</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/controllers/admin/index_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/admin/index_controller.rb">app/controllers/admin/index_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="../ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-index">#index</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Admin::IndexController</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="index-method" class="method-detail ">
- <a name="method-i-index"></a>
-
-
- <div class="method-heading">
- <span class="method-name">index</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="index-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/index_controller.rb, line 4</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- index-source -->
-
- </div>
-
-
-
-
- </div><!-- index-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Admin/IndexHelper.html b/doc/app/Admin/IndexHelper.html
deleted file mode 100644
index 9fbac05..0000000
--- a/doc/app/Admin/IndexHelper.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Admin::IndexHelper</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/helpers/admin/index_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/admin/index_helper.rb">app/helpers/admin/index_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Admin::IndexHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Admin/TemplatesController.html b/doc/app/Admin/TemplatesController.html
deleted file mode 100644
index aa5903e..0000000
--- a/doc/app/Admin/TemplatesController.html
+++ /dev/null
@@ -1,569 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Admin::TemplatesController</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/controllers/admin/templates_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/admin/templates_controller.rb">app/controllers/admin/templates_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="../ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-create">#create</a></li>
-
- <li><a href="#method-i-destroy">#destroy</a></li>
-
- <li><a href="#method-i-edit">#edit</a></li>
-
- <li><a href="#method-i-index">#index</a></li>
-
- <li><a href="#method-i-new">#new</a></li>
-
- <li><a href="#method-i-show">#show</a></li>
-
- <li><a href="#method-i-update">#update</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Admin::TemplatesController</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="create-method" class="method-detail ">
- <a name="method-i-create"></a>
-
-
- <div class="method-heading">
- <span class="method-name">create</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>POST /admin/templates POST /admin/templates.json</p>
-
-
-
- <div class="method-source-code" id="create-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 44</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">create</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:template</span>])
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">admin_template_path</span>(<span class="ruby-ivar">@template</span>), <span class="ruby-value">:notice</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'Template was successfully created.'</span> }
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@template</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:created</span>, <span class="ruby-value">:location</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@template</span> }
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;new&quot;</span> }
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">errors</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:unprocessable_entity</span> }
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- create-source -->
-
- </div>
-
-
-
-
- </div><!-- create-method -->
-
-
- <div id="destroy-method" class="method-detail ">
- <a name="method-i-destroy"></a>
-
-
- <div class="method-heading">
- <span class="method-name">destroy</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>DELETE /admin/templates/1 DELETE /admin/templates/1.json</p>
-
-
-
- <div class="method-source-code" id="destroy-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 76</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">destroy</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">destroy</span>
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">admin_templates_url</span> }
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">head</span> <span class="ruby-value">:ok</span> }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- destroy-source -->
-
- </div>
-
-
-
-
- </div><!-- destroy-method -->
-
-
- <div id="edit-method" class="method-detail ">
- <a name="method-i-edit"></a>
-
-
- <div class="method-heading">
- <span class="method-name">edit</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>GET /admin/templates/1/edit</p>
-
-
-
- <div class="method-source-code" id="edit-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 38</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">edit</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-<span class="ruby-keyword">end</span></pre>
- </div><!-- edit-source -->
-
- </div>
-
-
-
-
- </div><!-- edit-method -->
-
-
- <div id="index-method" class="method-detail ">
- <a name="method-i-index"></a>
-
-
- <div class="method-heading">
- <span class="method-name">index</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>GET /admin/templates GET /admin/templates.json</p>
-
-
-
- <div class="method-source-code" id="index-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 6</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index</span>
- <span class="ruby-ivar">@templates</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">all</span>
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> <span class="ruby-comment"># index.html.erb</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@templates</span> }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- index-source -->
-
- </div>
-
-
-
-
- </div><!-- index-method -->
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-i-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>GET /admin/templates/new GET /admin/templates/new.json</p>
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 28</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">new</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">new</span>
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> <span class="ruby-comment"># new.html.erb</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@template</span> }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- <div id="show-method" class="method-detail ">
- <a name="method-i-show"></a>
-
-
- <div class="method-heading">
- <span class="method-name">show</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>GET /admin/templates/1 GET /admin/templates/1.json</p>
-
-
-
- <div class="method-source-code" id="show-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 17</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">show</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> <span class="ruby-comment"># show.html.erb</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@template</span> }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- show-source -->
-
- </div>
-
-
-
-
- </div><!-- show-method -->
-
-
- <div id="update-method" class="method-detail ">
- <a name="method-i-update"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>PUT /admin/templates/1 PUT /admin/templates/1.json</p>
-
-
-
- <div class="method-source-code" id="update-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/templates_controller.rb, line 60</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">update_attributes</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:template</span>])
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">admin_template_path</span>(<span class="ruby-ivar">@template</span>), <span class="ruby-value">:notice</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'Template was successfully updated.'</span> }
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">head</span> <span class="ruby-value">:ok</span> }
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;edit&quot;</span> }
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@template</span>.<span class="ruby-identifier">errors</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:unprocessable_entity</span> }
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update-source -->
-
- </div>
-
-
-
-
- </div><!-- update-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Admin/TemplatesHelper.html b/doc/app/Admin/TemplatesHelper.html
deleted file mode 100644
index 0bb6028..0000000
--- a/doc/app/Admin/TemplatesHelper.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Admin::TemplatesHelper</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/helpers/admin/templates_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/admin/templates_helper.rb">app/helpers/admin/templates_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-target_list">#target_list</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Admin::TemplatesHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="target_list-method" class="method-detail ">
- <a name="method-i-target_list"></a>
-
-
- <div class="method-heading">
- <span class="method-name">target_list</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Generates a list of targets</p>
-
-
-
- <div class="method-source-code" id="target_list-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/admin/templates_helper.rb, line 3</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">target_list</span>
- <span class="ruby-constant">GLSAMAKER_TEMPLATE_TARGETS</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">x</span>.<span class="ruby-identifier">titleize</span>, <span class="ruby-identifier">x</span>]}
-<span class="ruby-keyword">end</span></pre>
- </div><!-- target_list-source -->
-
- </div>
-
-
-
-
- </div><!-- target_list-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Admin/UsersController.html b/doc/app/Admin/UsersController.html
deleted file mode 100644
index a313b89..0000000
--- a/doc/app/Admin/UsersController.html
+++ /dev/null
@@ -1,568 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Admin::UsersController</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/controllers/admin/users_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/admin/users_controller.rb">app/controllers/admin/users_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="../ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-create">#create</a></li>
-
- <li><a href="#method-i-destroy">#destroy</a></li>
-
- <li><a href="#method-i-edit">#edit</a></li>
-
- <li><a href="#method-i-index">#index</a></li>
-
- <li><a href="#method-i-new">#new</a></li>
-
- <li><a href="#method-i-show">#show</a></li>
-
- <li><a href="#method-i-update">#update</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Admin::UsersController</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="create-method" class="method-detail ">
- <a name="method-i-create"></a>
-
-
- <div class="method-heading">
- <span class="method-name">create</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="create-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 18</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">create</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:user</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_user_path</span>(<span class="ruby-ivar">@user</span>), <span class="ruby-value">:notice</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'User was successfully created.'</span>)
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;new&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- create-source -->
-
- </div>
-
-
-
-
- </div><!-- create-method -->
-
-
- <div id="destroy-method" class="method-detail ">
- <a name="method-i-destroy"></a>
-
-
- <div class="method-heading">
- <span class="method-name">destroy</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="destroy-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 58</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">destroy</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;That's the system account.&quot;</span>
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_users_path</span>)
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">destroy</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-string">&quot;User was successfully deleted.&quot;</span>
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_users_path</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- destroy-source -->
-
- </div>
-
-
-
-
- </div><!-- destroy-method -->
-
-
- <div id="edit-method" class="method-detail ">
- <a name="method-i-edit"></a>
-
-
- <div class="method-heading">
- <span class="method-name">edit</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="edit-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 32</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">edit</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;That's the system account.&quot;</span>
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_users_path</span>)
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- edit-source -->
-
- </div>
-
-
-
-
- </div><!-- edit-method -->
-
-
- <div id="index-method" class="method-detail ">
- <a name="method-i-index"></a>
-
-
- <div class="method-heading">
- <span class="method-name">index</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="index-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 4</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index</span>
- <span class="ruby-ivar">@users</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">'id &gt; 0'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- index-source -->
-
- </div>
-
-
-
-
- </div><!-- index-method -->
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-i-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 28</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">new</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">new</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- <div id="show-method" class="method-detail ">
- <a name="method-i-show"></a>
-
-
- <div class="method-heading">
- <span class="method-name">show</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="show-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 8</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">show</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;That's the system account.&quot;</span>
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_users_path</span>)
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- show-source -->
-
- </div>
-
-
-
-
- </div><!-- show-method -->
-
-
- <div id="update-method" class="method-detail ">
- <a name="method-i-update"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="update-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/admin/users_controller.rb, line 42</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;That's the system account.&quot;</span>
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_users_path</span>)
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">update_attributes</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:user</span>])
- <span class="ruby-identifier">redirect_to</span>(<span class="ruby-identifier">admin_user_path</span>(<span class="ruby-ivar">@user</span>), <span class="ruby-value">:notice</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'User was successfully updated.'</span>)
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;edit&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update-source -->
-
- </div>
-
-
-
-
- </div><!-- update-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Admin/UsersHelper.html b/doc/app/Admin/UsersHelper.html
deleted file mode 100644
index 5c4a519..0000000
--- a/doc/app/Admin/UsersHelper.html
+++ /dev/null
@@ -1,354 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Admin::UsersHelper</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/helpers/admin/users_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/admin/users_helper.rb">app/helpers/admin/users_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-access_list">#access_list</a></li>
-
- <li><a href="#method-i-access_string">#access_string</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Admin::UsersHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="access_list-method" class="method-detail ">
- <a name="method-i-access_list"></a>
-
-
- <div class="method-heading">
- <span class="method-name">access_list</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="access_list-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/admin/users_helper.rb, line 15</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">access_list</span>
- [<span class="ruby-value">0</span>, <span class="ruby-value">1</span>, <span class="ruby-value">2</span>, <span class="ruby-value">3</span>].<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">x</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">access_string</span>(<span class="ruby-identifier">x</span>), <span class="ruby-identifier">x</span>]}
-<span class="ruby-keyword">end</span></pre>
- </div><!-- access_list-source -->
-
- </div>
-
-
-
-
- </div><!-- access_list-method -->
-
-
- <div id="access_string-method" class="method-detail ">
- <a name="method-i-access_string"></a>
-
-
- <div class="method-heading">
- <span class="method-name">access_string</span><span
- class="method-args">(lvl)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="access_string-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/admin/users_helper.rb, line 2</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">access_string</span>(<span class="ruby-identifier">lvl</span>)
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">lvl</span>
- <span class="ruby-keyword">when</span> <span class="ruby-value">0</span>
- <span class="ruby-string">&quot;Contributor&quot;</span>
- <span class="ruby-keyword">when</span> <span class="ruby-value">1</span>
- <span class="ruby-string">&quot;Padawan&quot;</span>
- <span class="ruby-keyword">when</span> <span class="ruby-value">2</span>
- <span class="ruby-string">&quot;Full member&quot;</span>
- <span class="ruby-keyword">when</span> <span class="ruby-value">3</span>
- <span class="ruby-string">&quot;Confidential member&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- access_string-source -->
-
- </div>
-
-
-
-
- </div><!-- access_string-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/ApplicationController.html b/doc/app/ApplicationController.html
deleted file mode 100644
index 5637b50..0000000
--- a/doc/app/ApplicationController.html
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: ApplicationController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/application_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/application_controller.rb">app/controllers/application_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActionController::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-log_error">#log_error</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><a class="include" href="Authentication.html">Authentication</a></li>
-
-
-
- <li><a class="include" href="Authorization.html">Authorization</a></li>
-
-
-
- <li><a class="include" href="ApplicationHelper.html">ApplicationHelper</a></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">ApplicationController</h1>
-
- <div id="description" class="description">
-
-<p>Filters added to this controller apply to all controllers in the
-application. Likewise, all the methods added will be available for all
-controllers.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="protected-instance-method-details" class="method-section section">
- <h3 class="section-header">Protected Instance Methods</h3>
-
-
- <div id="log_error-method" class="method-detail ">
- <a name="method-i-log_error"></a>
-
-
- <div class="method-heading">
- <span class="method-name">log_error</span><span
- class="method-args">(error)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="log_error-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/application_controller.rb, line 29</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">log_error</span>(<span class="ruby-identifier">error</span>)
- <span class="ruby-identifier">caller</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp">/`([^']*)'/</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">where</span> = <span class="ruby-node">$1</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">error</span> <span class="ruby-node">&quot;[#{where}] #{error.class}: #{error.to_s}&quot;</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-identifier">error</span>.<span class="ruby-identifier">backtrace</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- log_error-source -->
-
- </div>
-
-
-
-
- </div><!-- log_error-method -->
-
-
- </div><!-- protected-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/ApplicationHelper.html b/doc/app/ApplicationHelper.html
deleted file mode 100644
index fd36f36..0000000
--- a/doc/app/ApplicationHelper.html
+++ /dev/null
@@ -1,661 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: ApplicationHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/application_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/application_helper.rb">app/helpers/application_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-box_title">#box_title</a></li>
-
- <li><a href="#method-i-bugs_unify_cvenames">#bugs_unify_cvenames</a></li>
-
- <li><a href="#method-i-cveify_bug_title">#cveify_bug_title</a></li>
-
- <li><a href="#method-i-error_msg">#error_msg</a></li>
-
- <li><a href="#method-i-get_bug_cves">#get_bug_cves</a></li>
-
- <li><a href="#method-i-simple_format_without_paragraph">#simple_format_without_paragraph</a></li>
-
- <li><a href="#method-i-whiteboard_to_severity">#whiteboard_to_severity</a></li>
-
- <li><a href="#method-i-with_format">#with_format</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">ApplicationHelper</h1>
-
- <div id="description" class="description">
-
-<p>Methods added to this helper will be available to all templates in the
-application.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="box_title-method" class="method-detail ">
- <a name="method-i-box_title"></a>
-
-
- <div class="method-heading">
- <span class="method-name">box_title</span><span
- class="method-args">(title, options = {})</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Renders a title bar for our boxes</p>
-
-
-
- <div class="method-source-code" id="box_title-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 104</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">box_title</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">options</span> = {})
- <span class="ruby-identifier">content</span> = <span class="ruby-string">&quot;&quot;</span>.<span class="ruby-identifier">html_safe</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-value">:toolbar</span>
- <span class="ruby-identifier">span_content</span> = <span class="ruby-string">&quot;&quot;</span>.<span class="ruby-identifier">html_safe</span>
-
- <span class="ruby-identifier">options</span>[<span class="ruby-value">:toolbar</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">toolbar_item</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">toolbar_item</span> <span class="ruby-operator">==</span> <span class="ruby-value">:sep</span>
- <span class="ruby-identifier">span_content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">image_tag</span>(<span class="ruby-string">'separator.png'</span>)
- <span class="ruby-keyword">else</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">toolbar_item</span>[<span class="ruby-value">:uri</span>].<span class="ruby-identifier">start_with?</span> <span class="ruby-string">'javascript:'</span>
- <span class="ruby-identifier">span_content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">link_to_function</span>(
- <span class="ruby-identifier">image_tag</span>(<span class="ruby-identifier">toolbar_item</span>[<span class="ruby-value">:icon</span>]),
- <span class="ruby-identifier">toolbar_item</span>[<span class="ruby-value">:uri</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/^javascript:/</span>, <span class="ruby-string">''</span>),
- <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">toolbar_item</span>[<span class="ruby-value">:title</span>]
- ) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">' '</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">span_content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">link_to</span>(<span class="ruby-identifier">image_tag</span>(<span class="ruby-identifier">toolbar_item</span>[<span class="ruby-value">:icon</span>]), <span class="ruby-identifier">toolbar_item</span>[<span class="ruby-value">:uri</span>]) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">' '</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">content_tag</span>(<span class="ruby-string">&quot;span&quot;</span>, <span class="ruby-identifier">span_content</span>, <span class="ruby-value">:class</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'toolbar'</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-value">:icon</span>
- <span class="ruby-identifier">content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">image_tag</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:icon</span>]) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">title2</span> = <span class="ruby-identifier">title</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-value">:escape</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:escape</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span>
- <span class="ruby-identifier">title2</span> = <span class="ruby-identifier">title2</span>.<span class="ruby-identifier">html_safe</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-value">:label</span>
- <span class="ruby-identifier">content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">content_tag</span>(<span class="ruby-string">'label'</span>, <span class="ruby-identifier">title2</span>, <span class="ruby-value">:for</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:label</span>])
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">title2</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">content_tag</span>(<span class="ruby-string">&quot;h2&quot;</span>, <span class="ruby-identifier">content</span>, <span class="ruby-value">:class</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;boxtitle&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- box_title-source -->
-
- </div>
-
-
-
-
- </div><!-- box_title-method -->
-
-
- <div id="bugs_unify_cvenames-method" class="method-detail ">
- <a name="method-i-bugs_unify_cvenames"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bugs_unify_cvenames</span><span
- class="method-args">(cves)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Groups an array of CVE names into groups</p>
-
-
-
- <div class="method-source-code" id="bugs_unify_cvenames-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 41</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bugs_unify_cvenames</span>(<span class="ruby-identifier">cves</span>)
- <span class="ruby-identifier">cve_r</span> = <span class="ruby-regexp">/CVE-(\d{4})-(\d+)/</span>
-
- <span class="ruby-identifier">years</span> = {}
- <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">uniq</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">cve_r</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">cve</span>
- <span class="ruby-identifier">years</span>[<span class="ruby-node">$1</span>] <span class="ruby-operator">||=</span> []
- <span class="ruby-identifier">years</span>[<span class="ruby-node">$1</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">$2</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">title</span> = <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-identifier">years</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">year</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">title</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;CVE-%s&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">year</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">years</span>[<span class="ruby-identifier">year</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
- <span class="ruby-identifier">title</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;-%s,&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">years</span>[<span class="ruby-identifier">year</span>].<span class="ruby-identifier">first</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">title</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;-{%s},&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">years</span>[<span class="ruby-identifier">year</span>].<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">','</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">title</span>[<span class="ruby-value">0</span>, <span class="ruby-identifier">title</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bugs_unify_cvenames-source -->
-
- </div>
-
-
-
-
- </div><!-- bugs_unify_cvenames-method -->
-
-
- <div id="cveify_bug_title-method" class="method-detail ">
- <a name="method-i-cveify_bug_title"></a>
-
-
- <div class="method-heading">
- <span class="method-name">cveify_bug_title</span><span
- class="method-args">(summary, cve_ids)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Updates a bug string with the cve_ids</p>
-
-
-
- <div class="method-source-code" id="cveify_bug_title-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 65</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">cveify_bug_title</span>(<span class="ruby-identifier">summary</span>, <span class="ruby-identifier">cve_ids</span>)
- <span class="ruby-identifier">cve_str</span> = <span class="ruby-identifier">bugs_unify_cvenames</span>(<span class="ruby-identifier">get_bug_cves</span>(<span class="ruby-identifier">summary</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">cve_ids</span>)
- <span class="ruby-identifier">summary</span> = <span class="ruby-identifier">summary</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[ (]*CVE-(\d{4})([-,(){}|, \d]+)/</span>, <span class="ruby-string">''</span>)
- <span class="ruby-identifier">summary</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/\(?CVEs? requested\)?/</span>, <span class="ruby-string">''</span>)
- <span class="ruby-node">&quot;#{summary} (#{cve_str})&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- cveify_bug_title-source -->
-
- </div>
-
-
-
-
- </div><!-- cveify_bug_title-method -->
-
-
- <div id="error_msg-method" class="method-detail ">
- <a name="method-i-error_msg"></a>
-
-
- <div class="method-heading">
- <span class="method-name">error_msg</span><span
- class="method-args">(msg)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Simplistic helper for rendering an error message. Shows a little icon
-before the message</p>
-
-
-
- <div class="method-source-code" id="error_msg-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 97</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">error_msg</span>(<span class="ruby-identifier">msg</span>)
- <span class="ruby-identifier">content</span> = <span class="ruby-identifier">image_tag</span>(<span class="ruby-string">'icons/error.png'</span>)
- <span class="ruby-identifier">content</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot; &quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">msg</span>
- <span class="ruby-identifier">content</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- error_msg-source -->
-
- </div>
-
-
-
-
- </div><!-- error_msg-method -->
-
-
- <div id="get_bug_cves-method" class="method-detail ">
- <a name="method-i-get_bug_cves"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get_bug_cves</span><span
- class="method-args">(str)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>shamelessly stolen from the old cvetools.py Extracts all CVEs from a string
-into an array</p>
-
-
-
- <div class="method-source-code" id="get_bug_cves-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 25</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get_bug_cves</span>(<span class="ruby-identifier">str</span>)
- <span class="ruby-identifier">cve_group_all</span> = <span class="ruby-regexp">/[ (]*CVE-(\d{4})([-,(){}|, \d]+)/</span>
- <span class="ruby-identifier">cve_group_split</span> = <span class="ruby-regexp">/(\d{4})(?:\D|$)/</span>
-
- <span class="ruby-identifier">bug_cves</span> = []
-
- <span class="ruby-identifier">str</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">cve_group_all</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">cve_group_split</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">bug_cves</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;CVE-%s-%s&quot;</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">n</span>[<span class="ruby-value">0</span>]]
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">bug_cves</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get_bug_cves-source -->
-
- </div>
-
-
-
-
- </div><!-- get_bug_cves-method -->
-
-
- <div id="simple_format_without_paragraph-method" class="method-detail ">
- <a name="method-i-simple_format_without_paragraph"></a>
-
-
- <div class="method-heading">
- <span class="method-name">simple_format_without_paragraph</span><span
- class="method-args">(text)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Same as Rails’ simple_format helper without using paragraphs</p>
-
-
-
- <div class="method-source-code" id="simple_format_without_paragraph-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 16</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">simple_format_without_paragraph</span>(<span class="ruby-identifier">text</span>)
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">to_s</span>.
- <span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\r\n?/</span>, <span class="ruby-string">&quot;\n&quot;</span>). <span class="ruby-comment"># \r\n and \r -&gt; \n</span>
- <span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\n\n+/</span>, <span class="ruby-string">&quot;&lt;br /&gt;&lt;br /&gt;&quot;</span>). <span class="ruby-comment"># 2+ newline -&gt; 2 br</span>
- <span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/([^\n]\n)(?=[^\n])/</span>, <span class="ruby-string">'\1&lt;br /&gt;'</span>) <span class="ruby-comment"># 1 newline -&gt; br</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- simple_format_without_paragraph-source -->
-
- </div>
-
-
-
-
- </div><!-- simple_format_without_paragraph-method -->
-
-
- <div id="whiteboard_to_severity-method" class="method-detail ">
- <a name="method-i-whiteboard_to_severity"></a>
-
-
- <div class="method-heading">
- <span class="method-name">whiteboard_to_severity</span><span
- class="method-args">(wb)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the appropriate severity setting for a given whiteboard string</p>
-
-
-
- <div class="method-source-code" id="whiteboard_to_severity-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 73</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">whiteboard_to_severity</span>(<span class="ruby-identifier">wb</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-string">'normal'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">wb</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
-
- <span class="ruby-identifier">ev</span> = <span class="ruby-identifier">wb</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">1</span>]
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">ev</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'A0'</span>, <span class="ruby-string">'B0'</span>
- <span class="ruby-string">'blocker'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'A1'</span>, <span class="ruby-string">'C0'</span>
- <span class="ruby-string">'critical'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'A2'</span>, <span class="ruby-string">'B2'</span>, <span class="ruby-string">'C1'</span>
- <span class="ruby-string">'major'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'A3'</span>, <span class="ruby-string">'B3'</span>, <span class="ruby-string">'C2'</span>
- <span class="ruby-string">'normal'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'A4'</span>, <span class="ruby-string">'B4'</span>, <span class="ruby-string">'C3'</span>
- <span class="ruby-string">'minor'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'C4'</span>, <span class="ruby-string">'~0'</span>, <span class="ruby-string">'~1'</span>, <span class="ruby-string">'~2'</span>, <span class="ruby-string">'~3'</span>, <span class="ruby-string">'~4'</span>
- <span class="ruby-string">'trivial'</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-string">'normal'</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- whiteboard_to_severity-source -->
-
- </div>
-
-
-
-
- </div><!-- whiteboard_to_severity-method -->
-
-
- <div id="with_format-method" class="method-detail ">
- <a name="method-i-with_format"></a>
-
-
- <div class="method-heading">
- <span class="method-name">with_format</span><span
- class="method-args">(format, &block)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="with_format-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/application_helper.rb, line 147</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">with_format</span>(<span class="ruby-identifier">format</span>, &amp;<span class="ruby-identifier">block</span>)
- <span class="ruby-identifier">old_formats</span> = <span class="ruby-identifier">formats</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">formats</span> = [<span class="ruby-identifier">format</span>]
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>
- <span class="ruby-keyword">ensure</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">formats</span> = <span class="ruby-identifier">old_formats</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- with_format-source -->
-
- </div>
-
-
-
-
- </div><!-- with_format-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Authentication.html b/doc/app/Authentication.html
deleted file mode 100644
index e7184d2..0000000
--- a/doc/app/Authentication.html
+++ /dev/null
@@ -1,464 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Authentication</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./lib/authentication_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/authentication.rb">lib/authentication.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-included">::included</a></li>
-
- <li><a href="#method-i-admin_access_required">#admin_access_required</a></li>
-
- <li><a href="#method-i-current_user">#current_user</a></li>
-
- <li><a href="#method-i-login_required">#login_required</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Authentication</h1>
-
- <div id="description" class="description">
-
-<p><a href="Authentication.html">Authentication</a> module</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="protected-class-method-details" class="method-section section">
- <h3 class="section-header">Protected Class Methods</h3>
-
-
- <div id="included-method" class="method-detail ">
- <a name="method-c-included"></a>
-
-
- <div class="method-heading">
- <span class="method-name">included</span><span
- class="method-args">(base)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Populate user to views, shamelessly stolen from restful auth. ;)</p>
-
-
-
- <div class="method-source-code" id="included-source">
-<pre>
-<span class="ruby-comment"># File lib/authentication.rb, line 72</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">included</span>(<span class="ruby-identifier">base</span>)
- <span class="ruby-identifier">base</span>.<span class="ruby-identifier">send</span> <span class="ruby-value">:helper_method</span>, <span class="ruby-value">:current_user</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">base</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-value">:helper_method</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- included-source -->
-
- </div>
-
-
-
-
- </div><!-- included-method -->
-
-
- </div><!-- protected-class-method-details -->
-
- <div id="protected-instance-method-details" class="method-section section">
- <h3 class="section-header">Protected Instance Methods</h3>
-
-
- <div id="admin_access_required-method" class="method-detail ">
- <a name="method-i-admin_access_required"></a>
-
-
- <div class="method-heading">
- <span class="method-name">admin_access_required</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Filter for admin pages</p>
-
-
-
- <div class="method-source-code" id="admin_access_required-source">
-<pre>
-<span class="ruby-comment"># File lib/authentication.rb, line 59</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">admin_access_required</span>
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">is_el_jefe?</span>
- <span class="ruby-identifier">deny_access</span> <span class="ruby-string">&quot;Admin interface&quot;</span>
- <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- admin_access_required-source -->
-
- </div>
-
-
-
-
- </div><!-- admin_access_required-method -->
-
-
- <div id="current_user-method" class="method-detail ">
- <a name="method-i-current_user"></a>
-
-
- <div class="method-heading">
- <span class="method-name">current_user</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the ActiveRecord object of the currently logged in user</p>
-
-
-
- <div class="method-source-code" id="current_user-source">
-<pre>
-<span class="ruby-comment"># File lib/authentication.rb, line 67</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">current_user</span>
- <span class="ruby-constant">User</span>.<span class="ruby-identifier">find_by_login</span>(<span class="ruby-identifier">user_name</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- current_user-source -->
-
- </div>
-
-
-
-
- </div><!-- current_user-method -->
-
-
- <div id="login_required-method" class="method-detail ">
- <a name="method-i-login_required"></a>
-
-
- <div class="method-heading">
- <span class="method-name">login_required</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Login filter to be applied to <b>all</b> pages on GLSAMaker</p>
-
-
-
- <div class="method-source-code" id="login_required-source">
-<pre>
-<span class="ruby-comment"># File lib/authentication.rb, line 16</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">login_required</span>
- <span class="ruby-comment"># Production authentication via REMOTE_USER</span>
- <span class="ruby-keyword">if</span> <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">env</span>.<span class="ruby-identifier">production?</span> <span class="ruby-keyword">or</span> <span class="ruby-constant">GLSAMAKER_FORCE_PRODUCTION_AUTH</span>
- <span class="ruby-comment"># REMOTE_USER should be there in FCGI or Passenger</span>
- <span class="ruby-identifier">env_user_name</span> = <span class="ruby-identifier">user_name</span>
-
- <span class="ruby-comment"># Autentication system most likely broken</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">env_user_name</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-string">&quot;Neither REMOTE_USER nor HTTP_AUTHORIZATION set in environment.&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:controller</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index'</span>, <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'error'</span>, <span class="ruby-value">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'system'</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">user</span> = <span class="ruby-constant">User</span>.<span class="ruby-identifier">find_by_login</span>(<span class="ruby-identifier">env_user_name</span>)
-
- <span class="ruby-comment"># User not known to GLSAMaker</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">user</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;Unknown user #{env_user_name} tried to log in from #{request.remote_ip}&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:controller</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index'</span>, <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'error'</span>, <span class="ruby-value">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'user'</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># User is marked as disabled in the DB</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">user</span>.<span class="ruby-identifier">disabled</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;Disabled user #{env_user_name} tried to log in from #{request.remote_ip}&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:controller</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index'</span>, <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'error'</span>, <span class="ruby-value">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'disabled'</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># Auth is fine now.</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;Environment username: #{env_user_name}&quot;</span>
-
- <span class="ruby-comment"># For all other environments request, HTTP auth by ourselves</span>
- <span class="ruby-comment"># The password can be set in config/initializers/glsamaker.rb</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">authenticate_or_request_with_http_basic</span>(<span class="ruby-string">&quot;GLSAMaker testing environment&quot;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">username</span>, <span class="ruby-identifier">password</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;Environment username: #{username}&quot;</span>
- <span class="ruby-identifier">check_auth</span>(<span class="ruby-identifier">username</span>, <span class="ruby-identifier">password</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- login_required-source -->
-
- </div>
-
-
-
-
- </div><!-- login_required-method -->
-
-
- </div><!-- protected-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Authorization.html b/doc/app/Authorization.html
deleted file mode 100644
index b30f20e..0000000
--- a/doc/app/Authorization.html
+++ /dev/null
@@ -1,435 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Authorization</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./lib/authorization_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/authorization.rb">lib/authorization.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-check_object_access">#check_object_access</a></li>
-
- <li><a href="#method-i-check_object_access-21">#check_object_access!</a></li>
-
- <li><a href="#method-i-deny_access">#deny_access</a></li>
-
- <li><a href="#method-i-log_unauthorized_access">#log_unauthorized_access</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Authorization</h1>
-
- <div id="description" class="description">
-
-<p><a href="Authorization.html">Authorization</a> module</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="check_object_access-method" class="method-detail ">
- <a name="method-i-check_object_access"></a>
-
-
- <div class="method-heading">
- <span class="method-name">check_object_access</span><span
- class="method-args">(glsa)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Checks access to a given GLSA</p>
-
-
-
- <div class="method-source-code" id="check_object_access-source">
-<pre>
-<span class="ruby-comment"># File lib/authorization.rb, line 14</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">check_object_access</span>(<span class="ruby-identifier">glsa</span>)
- <span class="ruby-comment"># Contributor, no foreign drafts</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">access</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">is_owner?</span> <span class="ruby-identifier">current_user</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">access</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">3</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">restricted</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">true</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- check_object_access-source -->
-
- </div>
-
-
-
-
- </div><!-- check_object_access-method -->
-
-
- <div id="check_object_access-21-method" class="method-detail ">
- <a name="method-i-check_object_access-21"></a>
-
-
- <div class="method-heading">
- <span class="method-name">check_object_access!</span><span
- class="method-args">(glsa)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Checks access to a given GLSA, and aborts the request if the user does not
-have sufficient permissions</p>
-
-
-
- <div class="method-source-code" id="check_object_access-21-source">
-<pre>
-<span class="ruby-comment"># File lib/authorization.rb, line 30</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-identifier">glsa</span>)
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access</span>(<span class="ruby-identifier">glsa</span>)
- <span class="ruby-identifier">deny_access</span> <span class="ruby-node">&quot;Access to restricted GLSA #{glsa.id} (#{params[:action]})&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">true</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- check_object_access-21-source -->
-
- </div>
-
-
-
-
- </div><!-- check_object_access-21-method -->
-
-
- <div id="deny_access-method" class="method-detail ">
- <a name="method-i-deny_access"></a>
-
-
- <div class="method-heading">
- <span class="method-name">deny_access</span><span
- class="method-args">(msg)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Redirects the user to a ‘Access Denied’ screen and logs the incident</p>
-
-
-
- <div class="method-source-code" id="deny_access-source">
-<pre>
-<span class="ruby-comment"># File lib/authorization.rb, line 40</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">deny_access</span>(<span class="ruby-identifier">msg</span>)
- <span class="ruby-identifier">log_unauthorized_access</span> <span class="ruby-identifier">msg</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:controller</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'/index'</span>, <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'error'</span>, <span class="ruby-value">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'access'</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- deny_access-source -->
-
- </div>
-
-
-
-
- </div><!-- deny_access-method -->
-
-
- <div id="log_unauthorized_access-method" class="method-detail ">
- <a name="method-i-log_unauthorized_access"></a>
-
-
- <div class="method-heading">
- <span class="method-name">log_unauthorized_access</span><span
- class="method-args">(msg)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Logs an unauthorized access attempt</p>
-
-
-
- <div class="method-source-code" id="log_unauthorized_access-source">
-<pre>
-<span class="ruby-comment"># File lib/authorization.rb, line 46</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">log_unauthorized_access</span>(<span class="ruby-identifier">msg</span>)
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;[#{Time.now.rfc2822}] UNAUTHORIZED ACCESS by #{current_user.login} from #{request.remote_ip} to #{request.url}: #{msg}&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- log_unauthorized_access-source -->
-
- </div>
-
-
-
-
- </div><!-- log_unauthorized_access-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bug.html b/doc/app/Bug.html
deleted file mode 100644
index 1c2d6e8..0000000
--- a/doc/app/Bug.html
+++ /dev/null
@@ -1,423 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Bug</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/bug_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/bug.rb">app/models/bug.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-bug_url">#bug_url</a></li>
-
- <li><a href="#method-i-cc">#cc</a></li>
-
- <li><a href="#method-i-update_cached_metadata">#update_cached_metadata</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><a class="include" href="Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
-
-
- <li><a class="include" href="Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
-
-
- <li><a class="include" href="Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Bug</h1>
-
- <div id="description" class="description">
-
-<p><a href="Bug.html">Bug</a> model</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="bug_url-method" class="method-detail ">
- <a name="method-i-bug_url"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug_url</span><span
- class="method-args">(secure = true)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the Gentoo <a href="Bugzilla.html">Bugzilla</a> URI for the bug.
-Set <tt>secure</tt> to false to get a HTTP instead of a HTTPS URI</p>
-
-
-
- <div class="method-source-code" id="bug_url-source">
-<pre>
-<span class="ruby-comment"># File app/models/bug.rb, line 32</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug_url</span>(<span class="ruby-identifier">secure</span> = <span class="ruby-keyword">true</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">secure</span>
- <span class="ruby-node">&quot;https://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{self.bug_id}&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-node">&quot;http://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{self.bug_id}&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug_url-source -->
-
- </div>
-
-
-
-
- </div><!-- bug_url-method -->
-
-
- <div id="cc-method" class="method-detail ">
- <a name="method-i-cc"></a>
-
-
- <div class="method-heading">
- <span class="method-name">cc</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="cc-source">
-<pre>
-<span class="ruby-comment"># File app/models/bug.rb, line 22</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">cc</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">arches</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- cc-source -->
-
- </div>
-
-
-
-
- </div><!-- cc-method -->
-
-
- <div id="update_cached_metadata-method" class="method-detail ">
- <a name="method-i-update_cached_metadata"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update_cached_metadata</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Updates the cached bug metadata</p>
-
-
-
- <div class="method-source-code" id="update_cached_metadata-source">
-<pre>
-<span class="ruby-comment"># File app/models/bug.rb, line 41</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update_cached_metadata</span>
- <span class="ruby-identifier">b</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bug_id</span>)
-
- <span class="ruby-identifier">update_attributes!</span>(
- <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">summary</span>,
- <span class="ruby-value">:whiteboard</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">status_whiteboard</span>,
- <span class="ruby-value">:arches</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">arch_cc</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">', '</span>)
- )
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Could not update cached metadata: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update_cached_metadata-source -->
-
- </div>
-
-
-
-
- </div><!-- update_cached_metadata-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/BugController.html b/doc/app/BugController.html
deleted file mode 100644
index e6aecc9..0000000
--- a/doc/app/BugController.html
+++ /dev/null
@@ -1,383 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: BugController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/bug_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/bug_controller.rb">app/controllers/bug_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-bug">#bug</a></li>
-
- <li><a href="#method-i-history">#history</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">BugController</h1>
-
- <div id="description" class="description">
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="bug-method" class="method-detail ">
- <a name="method-i-bug"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="bug-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/bug_controller.rb, line 13</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@bug</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>].<span class="ruby-identifier">to_i</span>)
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">SocketError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@bug</span> = <span class="ruby-string">&quot;down&quot;</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">ArgumentError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@bug</span> = <span class="ruby-keyword">nil</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug-source -->
-
- </div>
-
-
-
-
- </div><!-- bug-method -->
-
-
- <div id="history-method" class="method-detail ">
- <a name="method-i-history"></a>
-
-
- <div class="method-heading">
- <span class="method-name">history</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="history-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/bug_controller.rb, line 27</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">history</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@bug</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>].<span class="ruby-identifier">to_i</span>)
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">SocketError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@bug</span> = <span class="ruby-string">&quot;down&quot;</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">ArgumentError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@bug</span> = <span class="ruby-keyword">nil</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- history-source -->
-
- </div>
-
-
-
-
- </div><!-- history-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/BugHelper.html b/doc/app/BugHelper.html
deleted file mode 100644
index 2c61ef9..0000000
--- a/doc/app/BugHelper.html
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: BugHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/bug_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/bug_helper.rb">app/helpers/bug_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-linkify_comment">#linkify_comment</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">BugHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="linkify_comment-method" class="method-detail ">
- <a name="method-i-linkify_comment"></a>
-
-
- <div class="method-heading">
- <span class="method-name">linkify_comment</span><span
- class="method-args">(text)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Creates links around common phrases like <tt>Bug 12345</tt> or <tt>Comment
-234</tt></p>
-
-
-
- <div class="method-source-code" id="linkify_comment-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/bug_helper.rb, line 5</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">linkify_comment</span>(<span class="ruby-identifier">text</span>)
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/bug (\d+)/</span>, <span class="ruby-identifier">link_to_function</span>(<span class="ruby-string">'bug \1'</span>, <span class="ruby-string">'buginfo(\1);'</span>))
-<span class="ruby-keyword">end</span></pre>
- </div><!-- linkify_comment-source -->
-
- </div>
-
-
-
-
- </div><!-- linkify_comment-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/BugsController.html b/doc/app/BugsController.html
deleted file mode 100644
index 88b04d3..0000000
--- a/doc/app/BugsController.html
+++ /dev/null
@@ -1,449 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: BugsController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/bugs_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/bugs_controller.rb">app/controllers/bugs_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-create">#create</a></li>
-
- <li><a href="#method-i-destroy">#destroy</a></li>
-
- <li><a href="#method-i-new">#new</a></li>
-
- <li><a href="#method-i-show">#show</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">BugsController</h1>
-
- <div id="description" class="description">
-
-<p><a href="BugsController.html">BugsController</a> handles bugs attached to
-GLSAs</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="create-method" class="method-detail ">
- <a name="method-i-create"></a>
-
-
- <div class="method-heading">
- <span class="method-name">create</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="create-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/bugs_controller.rb, line 24</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">create</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa_id</span>].<span class="ruby-identifier">to_i</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
-
- <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-ivar">@added_bugs</span> = []
- <span class="ruby-constant">Bugzilla</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">str2bugIDs</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:addbugs</span>]).<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bugid</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@added_bugs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bugid</span>)
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-comment"># Silently ignore invalid bugs</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@bugs_text</span> = <span class="ruby-identifier">render_to_string</span> <span class="ruby-value">:partial</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'/glsa/edit_bug_row'</span>, <span class="ruby-value">:collection</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@added_bugs</span>, <span class="ruby-value">:as</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:bug</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-node">&quot;Error: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-string">&quot;Cannot find GLSA&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- create-source -->
-
- </div>
-
-
-
-
- </div><!-- create-method -->
-
-
- <div id="destroy-method" class="method-detail ">
- <a name="method-i-destroy"></a>
-
-
- <div class="method-heading">
- <span class="method-name">destroy</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="destroy-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/bugs_controller.rb, line 48</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">destroy</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- destroy-source -->
-
- </div>
-
-
-
-
- </div><!-- destroy-method -->
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-i-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/bugs_controller.rb, line 15</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">new</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-constant">Integer</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa_id</span>]))
- <span class="ruby-ivar">@bug</span> = <span class="ruby-constant">Bug</span>.<span class="ruby-identifier">new</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-keyword">nil</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- <div id="show-method" class="method-detail ">
- <a name="method-i-show"></a>
-
-
- <div class="method-heading">
- <span class="method-name">show</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="show-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/bugs_controller.rb, line 51</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">show</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- show-source -->
-
- </div>
-
-
-
-
- </div><!-- show-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/BugsHelper.html b/doc/app/BugsHelper.html
deleted file mode 100644
index 43597ab..0000000
--- a/doc/app/BugsHelper.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: BugsHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/bugs_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/bugs_helper.rb">app/helpers/bugs_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">BugsHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla.html b/doc/app/Bugzilla.html
deleted file mode 100644
index 6a47185..0000000
--- a/doc/app/Bugzilla.html
+++ /dev/null
@@ -1,619 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Bugzilla</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./lib/bugzilla_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla.rb">lib/bugzilla.rb</a></li>
-
- <li><a href="./lib/bugzilla/bug_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/bug.rb">lib/bugzilla/bug.rb</a></li>
-
- <li><a href="./lib/bugzilla/history_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/history.rb">lib/bugzilla/history.rb</a></li>
-
- <li><a href="./lib/bugzilla/comment_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/comment.rb">lib/bugzilla/comment.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">MODULE</span> <a href="Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><span class="type">CLASS</span> <a href="Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><span class="type">CLASS</span> <a href="Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><span class="type">CLASS</span> <a href="Bugzilla/History.html">Bugzilla::History</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-add_comment">#add_comment</a></li>
-
- <li><a href="#method-i-file_bug">#file_bug</a></li>
-
- <li><a href="#method-i-log_in">#log_in</a></li>
-
- <li><a href="#method-i-update_bug">#update_bug</a></li>
-
- <li><a href="#method-i-xmlrpc_client">#xmlrpc_client</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Bugzilla</h1>
-
- <div id="description" class="description">
-
-<p><a href="Bugzilla/Bugzilla.html">Bugzilla</a> module</p>
-<hr style="height: 1px">
-
-<p>Encapsulates a <a href="Bugzilla/Bugzilla.html">Bugzilla</a> <a
-href="Bugzilla/Bug.html">Bug</a></p>
-<hr style="height: 1px">
-
-<p>Encapsulates a bug’s history</p>
-<hr style="height: 1px">
-
-<p>Encapsulates a comment to a <a href="Bugzilla/Bug.html">Bug</a></p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="add_comment-method" class="method-detail ">
- <a name="method-i-add_comment"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_comment</span><span
- class="method-args">(bug, comment)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Adds a comment to a bug. Returns the comment id on success, raises an
-exception on failure.</p>
-
-
-
- <div class="method-source-code" id="add_comment-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla.rb, line 25</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_comment</span>(<span class="ruby-identifier">bug</span>, <span class="ruby-identifier">comment</span>)
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">'Called Bugzilla.add_comment'</span>
- <span class="ruby-identifier">did_retry</span> = <span class="ruby-keyword">false</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">client</span> = <span class="ruby-identifier">xmlrpc_client</span>
-
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">client</span>.<span class="ruby-identifier">call</span>(<span class="ruby-string">'Bug.add_comment'</span>, {
- <span class="ruby-string">'id'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">to_i</span>,
- <span class="ruby-string">'comment'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">comment</span>
- })
- <span class="ruby-identifier">result</span>[<span class="ruby-string">'id'</span>]
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">XMLRPC</span><span class="ruby-operator">::</span><span class="ruby-constant">FaultException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">did_retry</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not add the comment: #{e.faultString} (code #{e.faultCode})&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># If we need to log in first</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">faultCode</span> <span class="ruby-operator">==</span> <span class="ruby-value">410</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">&quot;Not logged in, doing that now.&quot;</span>
- <span class="ruby-identifier">log_in</span>
- <span class="ruby-identifier">did_retry</span> = <span class="ruby-keyword">true</span>
- <span class="ruby-keyword">retry</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not add the comment: #{e.faultString} (code #{e.faultCode})&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_comment-source -->
-
- </div>
-
-
-
-
- </div><!-- add_comment-method -->
-
-
- <div id="file_bug-method" class="method-detail ">
- <a name="method-i-file_bug"></a>
-
-
- <div class="method-heading">
- <span class="method-name">file_bug</span><span
- class="method-args">(data)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Files a bug, and returns the id of the filed bug</p>
-
-
-
- <div class="method-source-code" id="file_bug-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla.rb, line 100</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">file_bug</span>(<span class="ruby-identifier">data</span>)
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">'Called Bugzilla.file_bug'</span>
- <span class="ruby-identifier">did_retry</span> = <span class="ruby-keyword">false</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">client</span> = <span class="ruby-identifier">xmlrpc_client</span>
-
- <span class="ruby-identifier">rpc_data</span> = {}
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'component'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:component</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:component</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'product'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:product</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:product</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'summary'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:summary</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:summary</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'version'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:version</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:version</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'description'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:comment</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:comment</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'priority'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:priority</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:priority</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'severity'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:severity</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:severity</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'alias'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:alias</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:alias</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'assigned_to'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:assignee</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:assignee</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'cc'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:cc</span>].<span class="ruby-identifier">to_a</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:cc</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'status'</span>] = <span class="ruby-identifier">data</span>[<span class="ruby-value">:status</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">data</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:status</span>)
-
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">client</span>.<span class="ruby-identifier">call</span>(<span class="ruby-string">'Bug.create'</span>, <span class="ruby-identifier">rpc_data</span>)
- <span class="ruby-identifier">result</span>[<span class="ruby-string">'id'</span>]
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">XMLRPC</span><span class="ruby-operator">::</span><span class="ruby-constant">FaultException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">did_retry</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not file the bug: #{e.faultString} (code #{e.faultCode})&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># If we need to log in first</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">faultCode</span> <span class="ruby-operator">==</span> <span class="ruby-value">410</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">&quot;Not logged in, doing that now.&quot;</span>
- <span class="ruby-identifier">log_in</span>
- <span class="ruby-identifier">did_retry</span> = <span class="ruby-keyword">true</span>
- <span class="ruby-keyword">retry</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not file the bug: #{e.faultString} (code #{e.faultCode})&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- file_bug-source -->
-
- </div>
-
-
-
-
- </div><!-- file_bug-method -->
-
-
- <div id="log_in-method" class="method-detail ">
- <a name="method-i-log_in"></a>
-
-
- <div class="method-heading">
- <span class="method-name">log_in</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="log_in-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla.rb, line 139</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">log_in</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">&quot;Called Bugzilla.log_in&quot;</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-keyword">unless</span> <span class="ruby-constant">GLSAMAKER_BUGZIE_USER</span> <span class="ruby-keyword">and</span> <span class="ruby-constant">GLSAMAKER_BUGZIE_PW</span>
-
- <span class="ruby-identifier">client</span> = <span class="ruby-identifier">xmlrpc_client</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">client</span>.<span class="ruby-identifier">call</span>(<span class="ruby-string">'User.login'</span>, {
- <span class="ruby-string">'login'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">GLSAMAKER_BUGZIE_USER</span>,
- <span class="ruby-string">'password'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">GLSAMAKER_BUGZIE_PW</span>
- })
-
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;Successfully logged in. UID: #{result['id']}&quot;</span>
-
- <span class="ruby-identifier">cookie_file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Rails</span>.<span class="ruby-identifier">root</span>, <span class="ruby-string">'tmp'</span>, <span class="ruby-string">'bugzie-cookies.txt'</span>)
- <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">cookie_file</span>) <span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">cookie_file</span>)
- <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">touch</span>(<span class="ruby-identifier">cookie_file</span>)
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">chmod</span>(<span class="ruby-value">0600</span>, <span class="ruby-identifier">cookie_file</span>)
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">cookie_file</span>, <span class="ruby-string">'w'</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">client</span>.<span class="ruby-identifier">cookie</span> }
-
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">XMLRPC</span><span class="ruby-operator">::</span><span class="ruby-constant">FaultException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;Failure logging in: #{e.message}&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- log_in-source -->
-
- </div>
-
-
-
-
- </div><!-- log_in-method -->
-
-
- <div id="update_bug-method" class="method-detail ">
- <a name="method-i-update_bug"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update_bug</span><span
- class="method-args">(bug, changes = {})</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Updates a bug. Returns an array of changes that were done on the bug.</p>
-
-
-
- <div class="method-source-code" id="update_bug-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla.rb, line 56</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update_bug</span>(<span class="ruby-identifier">bug</span>, <span class="ruby-identifier">changes</span> = {})
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">'Called Bugzilla.update_bug'</span>
- <span class="ruby-identifier">did_retry</span> = <span class="ruby-keyword">false</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">client</span> = <span class="ruby-identifier">xmlrpc_client</span>
-
- <span class="ruby-identifier">rpc_data</span> = {}
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'ids'</span>] = [<span class="ruby-identifier">bug</span>]
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'component'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:component</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:component</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'product'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:product</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:product</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'summary'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:summary</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:summary</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'version'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:version</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:version</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'comment'</span>] = {<span class="ruby-string">'body'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">changes</span>[<span class="ruby-value">:comment</span>]} <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:comment</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'priority'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:priority</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:priority</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'severity'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:severity</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:severity</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'alias'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:alias</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:alias</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'assigned_to'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:assignee</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:assignee</span>)
- <span class="ruby-comment">#rpc_data['cc'] = changes[:cc].to_a if changes.has_key?(:cc) TODO: add and remove</span>
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'status'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:status</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:status</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'whiteboard'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:whiteboard</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:whiteboard</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'url'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:url</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:url</span>)
- <span class="ruby-identifier">rpc_data</span>[<span class="ruby-string">'resolution'</span>] = <span class="ruby-identifier">changes</span>[<span class="ruby-value">:resolution</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-value">:resolution</span>)
-
- <span class="ruby-identifier">result</span> = <span class="ruby-identifier">client</span>.<span class="ruby-identifier">call</span>(<span class="ruby-string">'Bug.update'</span>, <span class="ruby-identifier">rpc_data</span>)
- <span class="ruby-identifier">result</span>[<span class="ruby-string">'bugs'</span>].<span class="ruby-identifier">first</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">XMLRPC</span><span class="ruby-operator">::</span><span class="ruby-constant">FaultException</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">did_retry</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not file the bug: #{e.faultString} (code #{e.faultCode})&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># If we need to log in first</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">faultCode</span> <span class="ruby-operator">==</span> <span class="ruby-value">410</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-string">&quot;Not logged in, doing that now.&quot;</span>
- <span class="ruby-identifier">log_in</span>
- <span class="ruby-identifier">did_retry</span> = <span class="ruby-keyword">true</span>
- <span class="ruby-keyword">retry</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not file the bug: #{e.faultString} (code #{e.faultCode})&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update_bug-source -->
-
- </div>
-
-
-
-
- </div><!-- update_bug-method -->
-
-
- <div id="xmlrpc_client-method" class="method-detail ">
- <a name="method-i-xmlrpc_client"></a>
-
-
- <div class="method-heading">
- <span class="method-name">xmlrpc_client</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="xmlrpc_client-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla.rb, line 166</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">xmlrpc_client</span>
- <span class="ruby-identifier">client</span> = <span class="ruby-constant">XMLRPC</span><span class="ruby-operator">::</span><span class="ruby-constant">Client</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">GLSAMAKER_BUGZIE_HOST</span>, <span class="ruby-string">'/xmlrpc.cgi'</span>, <span class="ruby-value">443</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">true</span>)
- <span class="ruby-identifier">client</span>.<span class="ruby-identifier">http_header_extra</span> = {<span class="ruby-string">'User-Agent'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;GLSAMaker/#{GLSAMAKER_VERSION} (http://security.gentoo.org/)&quot;</span>}
-
- <span class="ruby-identifier">cookie_file</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Rails</span>.<span class="ruby-identifier">root</span>, <span class="ruby-string">'tmp'</span>, <span class="ruby-string">'bugzie-cookies.txt'</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">readable?</span> <span class="ruby-identifier">cookie_file</span>
- <span class="ruby-identifier">client</span>.<span class="ruby-identifier">cookie</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">cookie_file</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">client</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- xmlrpc_client-source -->
-
- </div>
-
-
-
-
- </div><!-- xmlrpc_client-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla/Bug.html b/doc/app/Bugzilla/Bug.html
deleted file mode 100644
index 5271ac6..0000000
--- a/doc/app/Bugzilla/Bug.html
+++ /dev/null
@@ -1,859 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Bugzilla::Bug</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/bugzilla/bug_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/bug.rb">lib/bugzilla/bug.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-load_from_id">::load_from_id</a></li>
-
- <li><a href="#method-c-new">::new</a></li>
-
- <li><a href="#method-c-str2bugIDs">::str2bugIDs</a></li>
-
- <li><a href="#method-i-description">#description</a></li>
-
- <li><a href="#method-i-history">#history</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Bugzilla::Bug</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
- <!-- Attributes -->
- <div id="attribute-method-details" class="method-section section">
- <h3 class="section-header">Attributes</h3>
-
-
- <div id="alias-attribute-method" class="method-detail">
- <a name="alias"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">alias</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="assigned_to-attribute-method" class="method-detail">
- <a name="assigned_to"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">assigned_to</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="blocks-attribute-method" class="method-detail">
- <a name="blocks"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">blocks</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="bug_id-attribute-method" class="method-detail">
- <a name="bug_id"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">bug_id</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="cc-attribute-method" class="method-detail">
- <a name="cc"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">cc</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="comments-attribute-method" class="method-detail">
- <a name="comments"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">comments</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="component-attribute-method" class="method-detail">
- <a name="component"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">component</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="created_at-attribute-method" class="method-detail">
- <a name="created_at"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">created_at</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="depends-attribute-method" class="method-detail">
- <a name="depends"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">depends</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="priority-attribute-method" class="method-detail">
- <a name="priority"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">priority</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="product-attribute-method" class="method-detail">
- <a name="product"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">product</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="reporter-attribute-method" class="method-detail">
- <a name="reporter"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">reporter</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="resolution-attribute-method" class="method-detail">
- <a name="resolution"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">resolution</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="restricted-attribute-method" class="method-detail">
- <a name="restricted"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">restricted</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="severity-attribute-method" class="method-detail">
- <a name="severity"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">severity</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="status-attribute-method" class="method-detail">
- <a name="status"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">status</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="status_whiteboard-attribute-method" class="method-detail">
- <a name="status_whiteboard"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">status_whiteboard</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="summary-attribute-method" class="method-detail">
- <a name="summary"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">summary</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="title-attribute-method" class="method-detail">
- <a name="title"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">title</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="url-attribute-method" class="method-detail">
- <a name="url"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">url</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- </div><!-- attribute-method-details -->
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="load_from_id-method" class="method-detail ">
- <a name="method-c-load_from_id"></a>
-
-
- <div class="method-heading">
- <span class="method-name">load_from_id</span><span
- class="method-args">(bugid)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Creates a new <tt>Bug</tt> object from the Gentoo bug referenced as
-#<tt>bugid</tt></p>
-
-
-
- <div class="method-source-code" id="load_from_id-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/bug.rb, line 21</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bugid</span>)
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">id</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">bugid</span>)
-
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">id</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">ArgumentError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid Bug ID&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">xml</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>(<span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-node">&quot;https://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?ctype=xml&amp;id=#{id}&quot;</span>))
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">SocketError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">SocketError</span>, <span class="ruby-node">&quot;Bugzilla is unreachable: #{e.message}&quot;</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;Couldn't load bug: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">xml</span>.<span class="ruby-identifier">root</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">&quot;bug&quot;</span>).<span class="ruby-identifier">first</span>, <span class="ruby-identifier">bugid</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- load_from_id-source -->
-
- </div>
-
-
-
-
- </div><!-- load_from_id-method -->
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-c-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">(bug, id)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/bug.rb, line 54</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">bug</span>, <span class="ruby-identifier">id</span>)
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span><span class="ruby-operator">::</span><span class="ruby-constant">Element</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Nokogiri failure&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">bug</span>[<span class="ruby-string">&quot;error&quot;</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;NotFound&quot;</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Bug not found&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">bug</span>[<span class="ruby-string">&quot;error&quot;</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;NotPermitted&quot;</span>
- <span class="ruby-ivar">@bug_id</span> = <span class="ruby-identifier">id</span>
- <span class="ruby-ivar">@restricted</span> = <span class="ruby-keyword">true</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@restricted</span> = <span class="ruby-keyword">false</span>
- <span class="ruby-ivar">@cc</span> = []
- <span class="ruby-ivar">@depends</span> = []
- <span class="ruby-ivar">@blocks</span> = []
- <span class="ruby-ivar">@comments</span> = []
-
- <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">node</span><span class="ruby-operator">|</span>
- <span class="ruby-comment"># Ignore whitespace</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span><span class="ruby-operator">::</span><span class="ruby-constant">Node</span><span class="ruby-operator">::</span><span class="ruby-constant">TEXT_NODE</span>
- <span class="ruby-comment"># Ignore empty nodes</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
-
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">name</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;bug_id&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@bug_id</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;short_desc&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@summary</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;creation_ts&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@created_at</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">content_in</span>(<span class="ruby-identifier">node</span>))
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;reporter&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@reporter</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;alias&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@alias</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;assigned_to&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@assigned_to</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;cc&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@cc</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">content_in</span>(<span class="ruby-identifier">node</span>)
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;status_whiteboard&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@status_whiteboard</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;product&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@product</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;component&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@component</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;bug_status&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@status</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;resolution&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@resolution</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;bug_file_loc&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@url</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;bug_severity&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@severity</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;priority&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@priority</span> = <span class="ruby-identifier">content_in</span> <span class="ruby-identifier">node</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;dependson&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@depends</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">content_in</span>(<span class="ruby-identifier">node</span>)
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;blocked&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@blocks</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">content_in</span>(<span class="ruby-identifier">node</span>)
- <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;long_desc&quot;</span> <span class="ruby-keyword">then</span>
- <span class="ruby-ivar">@comments</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Bugzilla</span><span class="ruby-operator">::</span><span class="ruby-constant">Comment</span>.<span class="ruby-identifier">new</span>(
- <span class="ruby-identifier">node</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">&quot;who&quot;</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">to_s</span>,
- <span class="ruby-identifier">node</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">&quot;thetext&quot;</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">to_s</span>,
- <span class="ruby-identifier">node</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">&quot;bug_when&quot;</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">to_s</span>
- )
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- <div id="str2bugIDs-method" class="method-detail ">
- <a name="method-c-str2bugIDs"></a>
-
-
- <div class="method-heading">
- <span class="method-name">str2bugIDs</span><span
- class="method-args">(str)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Splits a <a href="../String.html">String</a> <tt>str</tt> into an array of
-valid bug IDs</p>
-
-
-
- <div class="method-source-code" id="str2bugIDs-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/bug.rb, line 130</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">str2bugIDs</span>(<span class="ruby-identifier">str</span>)
- <span class="ruby-identifier">bug_ids</span> = <span class="ruby-identifier">str</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/,\s*/</span>)
-
- <span class="ruby-identifier">bug_ids</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\D/</span>, <span class="ruby-string">''</span>)
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- str2bugIDs-source -->
-
- </div>
-
-
-
-
- </div><!-- str2bugIDs-method -->
-
-
- </div><!-- public-class-method-details -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="description-method" class="method-detail ">
- <a name="method-i-description"></a>
-
-
- <div class="method-heading">
- <span class="method-name">description</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the initial bug description</p>
-
-
-
- <div class="method-source-code" id="description-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/bug.rb, line 125</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">description</span>
- <span class="ruby-ivar">@comments</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">text</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- description-source -->
-
- </div>
-
-
-
-
- </div><!-- description-method -->
-
-
- <div id="history-method" class="method-detail ">
- <a name="method-i-history"></a>
-
-
- <div class="method-heading">
- <span class="method-name">history</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="history-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/bug.rb, line 50</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">history</span>()
- <span class="ruby-ivar">@history</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">History</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword">self</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- history-source -->
-
- </div>
-
-
-
-
- </div><!-- history-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla/Bugzilla.html b/doc/app/Bugzilla/Bugzilla.html
deleted file mode 100644
index eb7b038..0000000
--- a/doc/app/Bugzilla/Bugzilla.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Bugzilla::Bugzilla</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">MODULE</span> <a href="Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- </ul>
- </div>
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Bugzilla::Bugzilla</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla/Bugzilla/Bugzilla.html b/doc/app/Bugzilla/Bugzilla/Bugzilla.html
deleted file mode 100644
index e9973d4..0000000
--- a/doc/app/Bugzilla/Bugzilla/Bugzilla.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Bugzilla::Bugzilla::Bugzilla</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">CLASS</span> <a href="Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- </ul>
- </div>
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Bugzilla::Bugzilla::Bugzilla</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla/Bugzilla/Bugzilla/Change.html b/doc/app/Bugzilla/Bugzilla/Bugzilla/Change.html
deleted file mode 100644
index b80192d..0000000
--- a/doc/app/Bugzilla/Bugzilla/Bugzilla/Change.html
+++ /dev/null
@@ -1,461 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Bugzilla::Bugzilla::Bugzilla::Change</title>
-
- <link rel="stylesheet" href="../../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../../index.html">Home</a>
- <a href="../../../index.html#classes">Classes</a>
- <a href="../../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../../lib/bugzilla/history_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/history.rb">lib/bugzilla/history.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-new">::new</a></li>
-
- <li><a href="#method-i-add_change">#add_change</a></li>
-
- <li><a href="#method-i-to_s">#to_s</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../../Admin.html">Admin</a></li>
-
- <li><a href="../../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../../Comment.html">Comment</a></li>
-
- <li><a href="../../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../../Bug.html">Bug</a></li>
-
- <li><a href="../../../BugController.html">BugController</a></li>
-
- <li><a href="../../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../../Cve.html">Cve</a></li>
-
- <li><a href="../../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../../CveController.html">CveController</a></li>
-
- <li><a href="../../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../../Package.html">Package</a></li>
-
- <li><a href="../../../Reference.html">Reference</a></li>
-
- <li><a href="../../../Revision.html">Revision</a></li>
-
- <li><a href="../../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../../String.html">String</a></li>
-
- <li><a href="../../../Template.html">Template</a></li>
-
- <li><a href="../../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Bugzilla::Bugzilla::Bugzilla::Change</h1>
-
- <div id="description" class="description">
-
-<p>This represents a single <a href="Change.html">Change</a> made to a <a
-href="../../Bug.html">Bug</a></p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
- <!-- Attributes -->
- <div id="attribute-method-details" class="method-section section">
- <h3 class="section-header">Attributes</h3>
-
-
- <div id="changes-attribute-method" class="method-detail">
- <a name="changes"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">changes</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="time-attribute-method" class="method-detail">
- <a name="time"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">time</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="user-attribute-method" class="method-detail">
- <a name="user"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">user</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- </div><!-- attribute-method-details -->
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-c-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">(user, time)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Creates a new <a href="Change.html">Change</a> made by <tt>user</tt> at
-<tt>time</tt>.</p>
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/history.rb, line 80</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">time</span>)
- <span class="ruby-ivar">@user</span> = <span class="ruby-identifier">user</span> <span class="ruby-operator">||</span> <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-ivar">@time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">time</span>)
- <span class="ruby-ivar">@changes</span> = {}
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- </div><!-- public-class-method-details -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="add_change-method" class="method-detail ">
- <a name="method-i-add_change"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_change</span><span
- class="method-args">(field, removed, added)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Adds a changed <tt>field</tt> to the <a href="Change.html">Change</a>
-object. <tt>removed</tt> denotes the removed text and <tt>added</tt> is the
-new text</p>
-
-
-
- <div class="method-source-code" id="add_change-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/history.rb, line 88</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_change</span>(<span class="ruby-identifier">field</span>, <span class="ruby-identifier">removed</span>, <span class="ruby-identifier">added</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;field has to be a symbol&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Symbol</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">field</span>)
- <span class="ruby-ivar">@changes</span>[<span class="ruby-identifier">field</span>][<span class="ruby-value">0</span>] <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; #{removed}&quot;</span>
- <span class="ruby-ivar">@changes</span>[<span class="ruby-identifier">field</span>][<span class="ruby-value">1</span>] <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; #{added}&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@changes</span>[<span class="ruby-identifier">field</span>] = [<span class="ruby-identifier">removed</span>, <span class="ruby-identifier">added</span>]
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_change-source -->
-
- </div>
-
-
-
-
- </div><!-- add_change-method -->
-
-
- <div id="to_s-method" class="method-detail ">
- <a name="method-i-to_s"></a>
-
-
- <div class="method-heading">
- <span class="method-name">to_s</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns a string representation</p>
-
-
-
- <div class="method-source-code" id="to_s-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/history.rb, line 100</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
- <span class="ruby-node">&quot;#{@user} changed at #{@time.to_s}: #{@changes.inspect}&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- to_s-source -->
-
- </div>
-
-
-
-
- </div><!-- to_s-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla/Comment.html b/doc/app/Bugzilla/Comment.html
deleted file mode 100644
index 3db75d2..0000000
--- a/doc/app/Bugzilla/Comment.html
+++ /dev/null
@@ -1,372 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Bugzilla::Comment</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/bugzilla/comment_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/comment.rb">lib/bugzilla/comment.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-new">::new</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Bugzilla::Comment</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
- <!-- Attributes -->
- <div id="attribute-method-details" class="method-section section">
- <h3 class="section-header">Attributes</h3>
-
-
- <div id="author-attribute-method" class="method-detail">
- <a name="author"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">author</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="date-attribute-method" class="method-detail">
- <a name="date"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">date</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- <div id="text-attribute-method" class="method-detail">
- <a name="text"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">text</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- </div><!-- attribute-method-details -->
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-c-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">(by, text, date)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/comment.rb, line 16</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">by</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">date</span>)
- <span class="ruby-ivar">@author</span> = <span class="ruby-identifier">by</span>
- <span class="ruby-ivar">@text</span> = <span class="ruby-identifier">text</span>
- <span class="ruby-ivar">@date</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">date</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- </div><!-- public-class-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Bugzilla/History.html b/doc/app/Bugzilla/History.html
deleted file mode 100644
index b4b5d04..0000000
--- a/doc/app/Bugzilla/History.html
+++ /dev/null
@@ -1,470 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Bugzilla::History</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/bugzilla/history_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/bugzilla/history.rb">lib/bugzilla/history.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-new">::new</a></li>
-
- <li><a href="#method-i-by_field">#by_field</a></li>
-
- <li><a href="#method-i-by_user">#by_user</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Bugzilla::History</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
- <!-- Attributes -->
- <div id="attribute-method-details" class="method-section section">
- <h3 class="section-header">Attributes</h3>
-
-
- <div id="changes-attribute-method" class="method-detail">
- <a name="changes"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">changes</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- </div><!-- attribute-method-details -->
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-c-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">(bug)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Creates a new <a href="History.html">History</a> for the <a
-href="Bug.html">Bug</a> object <tt>bug</tt>.</p>
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/history.rb, line 7</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">bug</span>)
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-value">:bug_id</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Need a bug (or something that at least looks like a bug)&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">html</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">HTML</span>(<span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-node">&quot;https://bugs.gentoo.org/show_activity.cgi?id=#{bug.bug_id}&quot;</span>))
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;Couldn't load the bug history: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@changes</span> = []
- <span class="ruby-identifier">change_cache</span> = <span class="ruby-keyword">nil</span>
-
- <span class="ruby-identifier">html</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">&quot;/html/body/table/tr&quot;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">change</span><span class="ruby-operator">|</span>
- <span class="ruby-comment"># ignore header line</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;th&quot;</span>
-
- <span class="ruby-comment"># First line in a multi-change set</span>
- <span class="ruby-keyword">unless</span> (<span class="ruby-identifier">chcount</span> = <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>[<span class="ruby-string">&quot;rowspan&quot;</span>]) <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">change_cache</span> = <span class="ruby-constant">Change</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>, <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>)
-
- <span class="ruby-identifier">change_cache</span>.<span class="ruby-identifier">add_change</span>(
- <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span>,
- <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">6</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>,
- <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">8</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>
- )
-
- <span class="ruby-ivar">@changes</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">change_cache</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">change_cache</span>.<span class="ruby-identifier">add_change</span>(
- <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span>,
- <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>,
- <span class="ruby-identifier">change</span>.<span class="ruby-identifier">children</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">content</span>.<span class="ruby-identifier">strip</span>
- )
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- </div><!-- public-class-method-details -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="by_field-method" class="method-detail ">
- <a name="method-i-by_field"></a>
-
-
- <div class="method-heading">
- <span class="method-name">by_field</span><span
- class="method-args">(field)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns an Array of Changes made to the field <tt>field</tt></p>
-
-
-
- <div class="method-source-code" id="by_field-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/history.rb, line 47</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">by_field</span>(<span class="ruby-identifier">field</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Symbol expected&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">field</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Symbol</span>
-
- <span class="ruby-identifier">changes</span> = []
-
- <span class="ruby-ivar">@changes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">change</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">change</span>.<span class="ruby-identifier">changes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">field</span>)
- <span class="ruby-identifier">changes</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">change</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">changes</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- by_field-source -->
-
- </div>
-
-
-
-
- </div><!-- by_field-method -->
-
-
- <div id="by_user-method" class="method-detail ">
- <a name="method-i-by_user"></a>
-
-
- <div class="method-heading">
- <span class="method-name">by_user</span><span
- class="method-args">(user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns an Array of Changes made by the user <tt>user</tt></p>
-
-
-
- <div class="method-source-code" id="by_user-source">
-<pre>
-<span class="ruby-comment"># File lib/bugzilla/history.rb, line 62</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">by_user</span>(<span class="ruby-identifier">user</span>)
- <span class="ruby-identifier">changes</span> = []
-
- <span class="ruby-ivar">@changes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">change</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">change</span>.<span class="ruby-identifier">user</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">user</span>
- <span class="ruby-identifier">changes</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">change</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">changes</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- by_user-source -->
-
- </div>
-
-
-
-
- </div><!-- by_user-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Comment.html b/doc/app/Comment.html
deleted file mode 100644
index 912a6d8..0000000
--- a/doc/app/Comment.html
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Comment</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/comment_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/comment.rb">app/models/comment.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">CLASS</span> <a href="Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- </ul>
- </div>
-
-
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><span class="include">ActiveModel::Validations</span></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Comment</h1>
-
- <div id="description" class="description">
-
-<p><a href="Comment.html">Comment</a> model</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Comment/CommentValidator.html b/doc/app/Comment/CommentValidator.html
deleted file mode 100644
index e2895ab..0000000
--- a/doc/app/Comment/CommentValidator.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Comment::CommentValidator</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../app/models/comment_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/comment.rb">app/models/comment.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveModel::Validator</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-validate">#validate</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Comment::CommentValidator</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="validate-method" class="method-detail ">
- <a name="method-i-validate"></a>
-
-
- <div class="method-heading">
- <span class="method-name">validate</span><span
- class="method-args">(record)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="validate-source">
-<pre>
-<span class="ruby-comment"># File app/models/comment.rb, line 24</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">validate</span>(<span class="ruby-identifier">record</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">is_owner?</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">user</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">rating</span> <span class="ruby-operator">!=</span> <span class="ruby-string">'neutral'</span>
- <span class="ruby-identifier">record</span>.<span class="ruby-identifier">errors</span>[<span class="ruby-value">:rating</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'The owner of a draft cannot make approvals or rejections'</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">user</span>.<span class="ruby-identifier">access</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">rating</span> <span class="ruby-operator">!=</span> <span class="ruby-string">'neutral'</span>
- <span class="ruby-identifier">record</span>.<span class="ruby-identifier">errors</span>[<span class="ruby-value">:rating</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'You may not approve or reject drafts'</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- validate-source -->
-
- </div>
-
-
-
-
- </div><!-- validate-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CommentsController.html b/doc/app/CommentsController.html
deleted file mode 100644
index 91da088..0000000
--- a/doc/app/CommentsController.html
+++ /dev/null
@@ -1,459 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: CommentsController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/comments_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/comments_controller.rb">app/controllers/comments_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-create">#create</a></li>
-
- <li><a href="#method-i-destroy">#destroy</a></li>
-
- <li><a href="#method-i-new">#new</a></li>
-
- <li><a href="#method-i-show">#show</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">CommentsController</h1>
-
- <div id="description" class="description">
-
-<p>CommentController handles comments made for GLSAs</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="create-method" class="method-detail ">
- <a name="method-i-create"></a>
-
-
- <div class="method-heading">
- <span class="method-name">create</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="create-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/comments_controller.rb, line 24</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">create</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa_id</span>].<span class="ruby-identifier">to_i</span>)
-
- <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-identifier">comment_data</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:newcomment</span>]
- <span class="ruby-identifier">comment</span> = <span class="ruby-keyword">nil</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">comment_data</span>[<span class="ruby-string">'text'</span>].<span class="ruby-identifier">strip</span> <span class="ruby-operator">!=</span> <span class="ruby-string">''</span>
- <span class="ruby-identifier">comment</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">comments</span>.<span class="ruby-identifier">build</span>(<span class="ruby-identifier">comment_data</span>)
- <span class="ruby-identifier">comment</span>.<span class="ruby-identifier">user</span> = <span class="ruby-identifier">current_user</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">comment</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Mail</span>.<span class="ruby-identifier">comment_notification</span>(<span class="ruby-ivar">@glsa</span>, <span class="ruby-identifier">comment</span>, <span class="ruby-identifier">current_user</span>)
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">is_approved?</span> <span class="ruby-keyword">and</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">approvals</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">rejections</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">+</span> <span class="ruby-value">2</span>
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Mail</span>.<span class="ruby-identifier">approval_notification</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-identifier">comment</span>.<span class="ruby-identifier">errors</span>
- <span class="ruby-identifier">render</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@comment_number</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">comments</span>.<span class="ruby-identifier">count</span>
- <span class="ruby-ivar">@comment_text</span> = <span class="ruby-identifier">render_to_string</span> <span class="ruby-value">:partial</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;/glsa/comment&quot;</span>, <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">comment</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-node">&quot;Error: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-string">&quot;Error: Cannot find GLSA&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- create-source -->
-
- </div>
-
-
-
-
- </div><!-- create-method -->
-
-
- <div id="destroy-method" class="method-detail ">
- <a name="method-i-destroy"></a>
-
-
- <div class="method-heading">
- <span class="method-name">destroy</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="destroy-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/comments_controller.rb, line 62</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">destroy</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- destroy-source -->
-
- </div>
-
-
-
-
- </div><!-- destroy-method -->
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-i-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/comments_controller.rb, line 15</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">new</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-constant">Integer</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa_id</span>]))
- <span class="ruby-ivar">@comment</span> = <span class="ruby-constant">Comment</span>.<span class="ruby-identifier">new</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-keyword">nil</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- <div id="show-method" class="method-detail ">
- <a name="method-i-show"></a>
-
-
- <div class="method-heading">
- <span class="method-name">show</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="show-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/comments_controller.rb, line 59</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">show</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- show-source -->
-
- </div>
-
-
-
-
- </div><!-- show-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CommentsHelper.html b/doc/app/CommentsHelper.html
deleted file mode 100644
index 8207f2d..0000000
--- a/doc/app/CommentsHelper.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: CommentsHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/comments_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/comments_helper.rb">app/helpers/comments_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">CommentsHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Cpe.html b/doc/app/Cpe.html
deleted file mode 100644
index 21965be..0000000
--- a/doc/app/Cpe.html
+++ /dev/null
@@ -1,434 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Cpe</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/cpe_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/cpe.rb">app/models/cpe.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-product">#product</a></li>
-
- <li><a href="#method-i-split">#split</a></li>
-
- <li><a href="#method-i-vendor">#vendor</a></li>
-
- <li><a href="#method-i-version">#version</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Cpe</h1>
-
- <div id="description" class="description">
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="product-method" class="method-detail ">
- <a name="method-i-product"></a>
-
-
- <div class="method-heading">
- <span class="method-name">product</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="product-source">
-<pre>
-<span class="ruby-comment"># File app/models/cpe.rb, line 22</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">product</span>
- <span class="ruby-identifier">split</span>[<span class="ruby-value">3</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- product-source -->
-
- </div>
-
-
-
-
- </div><!-- product-method -->
-
-
- <div id="split-method" class="method-detail ">
- <a name="method-i-split"></a>
-
-
- <div class="method-heading">
- <span class="method-name">split</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="split-source">
-<pre>
-<span class="ruby-comment"># File app/models/cpe.rb, line 14</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">split</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cpe</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">':'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- split-source -->
-
- </div>
-
-
-
-
- </div><!-- split-method -->
-
-
- <div id="vendor-method" class="method-detail ">
- <a name="method-i-vendor"></a>
-
-
- <div class="method-heading">
- <span class="method-name">vendor</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="vendor-source">
-<pre>
-<span class="ruby-comment"># File app/models/cpe.rb, line 18</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">vendor</span>
- <span class="ruby-identifier">split</span>[<span class="ruby-value">2</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- vendor-source -->
-
- </div>
-
-
-
-
- </div><!-- vendor-method -->
-
-
- <div id="version-method" class="method-detail ">
- <a name="method-i-version"></a>
-
-
- <div class="method-heading">
- <span class="method-name">version</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="version-source">
-<pre>
-<span class="ruby-comment"># File app/models/cpe.rb, line 26</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">version</span>
- <span class="ruby-identifier">split</span>[<span class="ruby-value">4</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- version-source -->
-
- </div>
-
-
-
-
- </div><!-- version-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Cve.html b/doc/app/Cve.html
deleted file mode 100644
index 1d325de..0000000
--- a/doc/app/Cve.html
+++ /dev/null
@@ -1,821 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Cve</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/cve_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/cve.rb">app/models/cve.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-concat">::concat</a></li>
-
- <li><a href="#method-i-add_comment">#add_comment</a></li>
-
- <li><a href="#method-i-assign">#assign</a></li>
-
- <li><a href="#method-i-colorize">#colorize</a></li>
-
- <li><a href="#method-i-invalidate">#invalidate</a></li>
-
- <li><a href="#method-i-later">#later</a></li>
-
- <li><a href="#method-i-mark_new">#mark_new</a></li>
-
- <li><a href="#method-i-nfu">#nfu</a></li>
-
- <li><a href="#method-i-package_hints">#package_hints</a></li>
-
- <li><a href="#method-i-search">#search</a></li>
-
- <li><a href="#method-i-to_s">#to_s</a></li>
-
- <li><a href="#method-i-url">#url</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Cve</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="concat-method" class="method-detail ">
- <a name="method-c-concat"></a>
-
-
- <div class="method-heading">
- <span class="method-name">concat</span><span
- class="method-args">(cves, separator = "\n\n")</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Concatenates the CVE descriptions of many cves, separated by separator</p>
-
-
-
- <div class="method-source-code" id="concat-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 45</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">cves</span>, <span class="ruby-identifier">separator</span> = <span class="ruby-string">&quot;\n\n&quot;</span>)
- <span class="ruby-identifier">txt</span> = <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">txt</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">cve</span>).<span class="ruby-identifier">to_s</span>
- <span class="ruby-identifier">txt</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">separator</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-identifier">txt</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- concat-source -->
-
- </div>
-
-
-
-
- </div><!-- concat-method -->
-
-
- </div><!-- public-class-method-details -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="add_comment-method" class="method-detail ">
- <a name="method-i-add_comment"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_comment</span><span
- class="method-args">(user, comment, confidential = false)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="add_comment-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 125</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_comment</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">comment</span>, <span class="ruby-identifier">confidential</span> = <span class="ruby-keyword">false</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">comments</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">CveComment</span>.<span class="ruby-identifier">create!</span>(
- <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>,
- <span class="ruby-value">:confidential</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">confidential</span>,
- <span class="ruby-value">:comment</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">comment</span>
- )
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_comment-source -->
-
- </div>
-
-
-
-
- </div><!-- add_comment-method -->
-
-
- <div id="assign-method" class="method-detail ">
- <a name="method-i-assign"></a>
-
-
- <div class="method-heading">
- <span class="method-name">assign</span><span
- class="method-args">(bugnr, user, action = 'assign')</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Assigns the CVE to a certain bug, creating a history entry</p>
-
-
-
- <div class="method-source-code" id="assign-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 55</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">assign</span>(<span class="ruby-identifier">bugnr</span>, <span class="ruby-identifier">user</span>, <span class="ruby-identifier">action</span> = <span class="ruby-string">'assign'</span>)
- <span class="ruby-identifier">bugnr</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">bugnr</span>)
-
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">action</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'assign'</span>, <span class="ruby-value">:assign</span>
- <span class="ruby-identifier">act</span> = <span class="ruby-string">'assign'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-string">'file'</span>, <span class="ruby-value">:file</span>
- <span class="ruby-identifier">act</span> = <span class="ruby-string">'file'</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid action specified&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">a</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">assignments</span>.<span class="ruby-identifier">create!</span>(<span class="ruby-value">:bug</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bugnr</span>)
-
- <span class="ruby-identifier">ch</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_changes</span>.<span class="ruby-identifier">create!</span>(
- <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>,
- <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">act</span>,
- <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">id</span>
- )
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">state</span> = <span class="ruby-string">'ASSIGNED'</span>
- <span class="ruby-identifier">save!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- assign-source -->
-
- </div>
-
-
-
-
- </div><!-- assign-method -->
-
-
- <div id="colorize-method" class="method-detail ">
- <a name="method-i-colorize"></a>
-
-
- <div class="method-heading">
- <span class="method-name">colorize</span><span
- class="method-args">(field = :cve_id)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Decorates the output of field with a color, depending on the status</p>
-
-
-
- <div class="method-source-code" id="colorize-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 134</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">field</span> = <span class="ruby-value">:cve_id</span>)
- <span class="ruby-string">&quot;&lt;span class='cvename cve-%s'&gt;%s&lt;/span&gt;&quot;</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">state</span>.<span class="ruby-identifier">downcase</span>, <span class="ruby-keyword">self</span>[<span class="ruby-identifier">field</span>]]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- colorize-source -->
-
- </div>
-
-
-
-
- </div><!-- colorize-method -->
-
-
- <div id="invalidate-method" class="method-detail ">
- <a name="method-i-invalidate"></a>
-
-
- <div class="method-heading">
- <span class="method-name">invalidate</span><span
- class="method-args">(user, reason = nil)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Mark the CVE as INVALID, creating a history entry</p>
-
-
-
- <div class="method-source-code" id="invalidate-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 92</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">invalidate</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">reason</span> = <span class="ruby-keyword">nil</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_changes</span>.<span class="ruby-identifier">create!</span>(
- <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>,
- <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'invalid'</span>,
- <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">reason</span>
- )
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">state</span> = <span class="ruby-string">'INVALID'</span>
- <span class="ruby-identifier">save!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- invalidate-source -->
-
- </div>
-
-
-
-
- </div><!-- invalidate-method -->
-
-
- <div id="later-method" class="method-detail ">
- <a name="method-i-later"></a>
-
-
- <div class="method-heading">
- <span class="method-name">later</span><span
- class="method-args">(user, reason = nil)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="later-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 103</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">later</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">reason</span> = <span class="ruby-keyword">nil</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_changes</span>.<span class="ruby-identifier">create!</span>(
- <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>,
- <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'later'</span>,
- <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">reason</span>
- )
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">state</span> = <span class="ruby-string">'LATER'</span>
- <span class="ruby-identifier">save!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- later-source -->
-
- </div>
-
-
-
-
- </div><!-- later-method -->
-
-
- <div id="mark_new-method" class="method-detail ">
- <a name="method-i-mark_new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">mark_new</span><span
- class="method-args">(user, reason = nil)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="mark_new-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 114</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">mark_new</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">reason</span> = <span class="ruby-keyword">nil</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_changes</span>.<span class="ruby-identifier">create!</span>(
- <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>,
- <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'new'</span>,
- <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">reason</span>
- )
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">state</span> = <span class="ruby-string">'NEW'</span>
- <span class="ruby-identifier">save!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- mark_new-source -->
-
- </div>
-
-
-
-
- </div><!-- mark_new-method -->
-
-
- <div id="nfu-method" class="method-detail ">
- <a name="method-i-nfu"></a>
-
-
- <div class="method-heading">
- <span class="method-name">nfu</span><span
- class="method-args">(user, reason = nil)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Mark the CVE as Not-For-Us, creating a history entry</p>
-
-
-
- <div class="method-source-code" id="nfu-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 80</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">nfu</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">reason</span> = <span class="ruby-keyword">nil</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_changes</span>.<span class="ruby-identifier">create!</span>(
- <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>,
- <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'nfu'</span>,
- <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">reason</span>
- )
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">state</span> = <span class="ruby-string">'NFU'</span>
- <span class="ruby-identifier">save!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- nfu-source -->
-
- </div>
-
-
-
-
- </div><!-- nfu-method -->
-
-
- <div id="package_hints-method" class="method-detail ">
- <a name="method-i-package_hints"></a>
-
-
- <div class="method-heading">
- <span class="method-name">package_hints</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Looks for Gentoo packages that might be affected by this CVE</p>
-
-
-
- <div class="method-source-code" id="package_hints-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 139</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">package_hints</span>
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">s</span>)
- <span class="ruby-keyword">return</span> [] <span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
-
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Portage</span>.<span class="ruby-identifier">find_packages</span>(
- <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">compile</span>(<span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[^a-zA-Z0-9]/</span>, <span class="ruby-string">'.*?'</span>), <span class="ruby-constant">Regexp</span><span class="ruby-operator">::</span><span class="ruby-constant">IGNORECASE</span>)
- )
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">package_hints</span> = []
- <span class="ruby-identifier">my_cpes</span> = <span class="ruby-identifier">cpes</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">product</span> }.<span class="ruby-identifier">uniq</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">my_cpes</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">search</span> <span class="ruby-identifier">c</span> }.<span class="ruby-identifier">flatten</span>
-
- <span class="ruby-comment"># stolen from the old cvetools.py</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">summary</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/ in (\S+\.\S+) in (?:the )?(?:a )?(\D+) \d+/</span>
- <span class="ruby-identifier">match</span> = <span class="ruby-node">$2</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end_with?</span> <span class="ruby-string">'before'</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">match</span>[<span class="ruby-value">0</span>, <span class="ruby-identifier">match</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">7</span>])
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">match</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">summary</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/ in (?:the )?(?:a )?(\D+) \d+/</span>
- <span class="ruby-identifier">match</span> = <span class="ruby-node">$1</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">match</span>.<span class="ruby-identifier">end_with?</span> <span class="ruby-string">'before'</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">match</span>[<span class="ruby-value">0</span>, <span class="ruby-identifier">match</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">7</span>])
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">match</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">summary</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/ in (\S+\.\S+) in (?:the )?(?:a )?(\S+) /</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-node">$1</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">summary</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/ in (?:the )?(?:a )?(\S+) /</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-node">$1</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">summary</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/(?:The )?(\S+) /</span>
- <span class="ruby-identifier">package_hints</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">search</span>(<span class="ruby-node">$1</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">package_hints</span>.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- package_hints-source -->
-
- </div>
-
-
-
-
- </div><!-- package_hints-method -->
-
-
- <div id="search-method" class="method-detail ">
- <a name="method-i-search"></a>
-
-
- <div class="method-heading">
- <span class="method-name">search</span><span
- class="method-args">(s)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="search-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 140</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">search</span>(<span class="ruby-identifier">s</span>)
- <span class="ruby-keyword">return</span> [] <span class="ruby-keyword">if</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
-
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Portage</span>.<span class="ruby-identifier">find_packages</span>(
- <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">compile</span>(<span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">escape</span>(<span class="ruby-identifier">s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/[^a-zA-Z0-9]/</span>, <span class="ruby-string">'.*?'</span>), <span class="ruby-constant">Regexp</span><span class="ruby-operator">::</span><span class="ruby-constant">IGNORECASE</span>)
- )
-<span class="ruby-keyword">end</span></pre>
- </div><!-- search-source -->
-
- </div>
-
-
-
-
- </div><!-- search-method -->
-
-
- <div id="to_s-method" class="method-detail ">
- <a name="method-i-to_s"></a>
-
-
- <div class="method-heading">
- <span class="method-name">to_s</span><span
- class="method-args">(line_length = 78)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="to_s-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 28</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">line_length</span> = <span class="ruby-value">78</span>)
- <span class="ruby-identifier">str</span> = <span class="ruby-node">&quot;#{self.cve_id} #{&quot;(%s):&quot; % url}\n&quot;</span>
- <span class="ruby-identifier">str</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot; &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-identifier">help</span>.<span class="ruby-identifier">word_wrap</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">summary</span>, <span class="ruby-identifier">line_length</span><span class="ruby-operator">-</span><span class="ruby-value">2</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\n/</span>, <span class="ruby-string">&quot;\n &quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- to_s-source -->
-
- </div>
-
-
-
-
- </div><!-- to_s-method -->
-
-
- <div id="url-method" class="method-detail ">
- <a name="method-i-url"></a>
-
-
- <div class="method-heading">
- <span class="method-name">url</span><span
- class="method-args">(site = :nvd)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the URL for this CVE at NVD (<tt>:nvd</tt>, default) or MITRE
-(<tt>:mitre</tt>)</p>
-
-
-
- <div class="method-source-code" id="url-source">
-<pre>
-<span class="ruby-comment"># File app/models/cve.rb, line 34</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">url</span>(<span class="ruby-identifier">site</span> = <span class="ruby-value">:nvd</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">site</span> <span class="ruby-operator">==</span> <span class="ruby-value">:nvd</span>
- <span class="ruby-string">&quot;http://nvd.nist.gov/nvd.cfm?cvename=%s&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_id</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">site</span> <span class="ruby-operator">==</span> <span class="ruby-value">:mitre</span>
- <span class="ruby-string">&quot;http://cve.mitre.org/cgi-bin/cvename.cgi?name=%s&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">cve_id</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">'Invalid site'</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- url-source -->
-
- </div>
-
-
-
-
- </div><!-- url-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CveAssignment.html b/doc/app/CveAssignment.html
deleted file mode 100644
index 3a8b58f..0000000
--- a/doc/app/CveAssignment.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: CveAssignment</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/cve_assignment_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/cve_assignment.rb">app/models/cve_assignment.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">CveAssignment</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CveChange.html b/doc/app/CveChange.html
deleted file mode 100644
index 1e4f8e2..0000000
--- a/doc/app/CveChange.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: CveChange</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/cve_change_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/cve_change.rb">app/models/cve_change.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">CveChange</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CveComment.html b/doc/app/CveComment.html
deleted file mode 100644
index b8a009e..0000000
--- a/doc/app/CveComment.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: CveComment</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/cve_comment_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/cve_comment.rb">app/models/cve_comment.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">CveComment</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CveController.html b/doc/app/CveController.html
deleted file mode 100644
index 84b8448..0000000
--- a/doc/app/CveController.html
+++ /dev/null
@@ -1,1175 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: CveController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/cve_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/cve_controller.rb">app/controllers/cve_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-actions">#actions</a></li>
-
- <li><a href="#method-i-assign">#assign</a></li>
-
- <li><a href="#method-i-assign_preview">#assign_preview</a></li>
-
- <li><a href="#method-i-bug">#bug</a></li>
-
- <li><a href="#method-i-bug_package">#bug_package</a></li>
-
- <li><a href="#method-i-bug_preview">#bug_preview</a></li>
-
- <li><a href="#method-i-changes">#changes</a></li>
-
- <li><a href="#method-i-comments">#comments</a></li>
-
- <li><a href="#method-i-general_info">#general_info</a></li>
-
- <li><a href="#method-i-index">#index</a></li>
-
- <li><a href="#method-i-info">#info</a></li>
-
- <li><a href="#method-i-invalid">#invalid</a></li>
-
- <li><a href="#method-i-later">#later</a></li>
-
- <li><a href="#method-i-list">#list</a></li>
-
- <li><a href="#method-i-mark_new">#mark_new</a></li>
-
- <li><a href="#method-i-nfu">#nfu</a></li>
-
- <li><a href="#method-i-note">#note</a></li>
-
- <li><a href="#method-i-packages">#packages</a></li>
-
- <li><a href="#method-i-references">#references</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><a class="include" href="ApplicationHelper.html">ApplicationHelper</a></li>
-
-
-
- <li><a class="include" href="CveHelper.html">CveHelper</a></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">CveController</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="actions-method" class="method-detail ">
- <a name="method-i-actions"></a>
-
-
- <div class="method-heading">
- <span class="method-name">actions</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="actions-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 273</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">actions</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Cannot find CVE&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@cve</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- actions-source -->
-
- </div>
-
-
-
-
- </div><!-- actions-method -->
-
-
- <div id="assign-method" class="method-detail ">
- <a name="method-i-assign"></a>
-
-
- <div class="method-heading">
- <span class="method-name">assign</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="assign-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 136</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">assign</span>
- <span class="ruby-identifier">bug_id</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:bug</span>])
- <span class="ruby-identifier">cves</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-node">&quot;Assign Bug: #{bug_id} CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:comment</span>] <span class="ruby-keyword">or</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:summary</span>]
- <span class="ruby-identifier">bug</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bug_id</span>)
- <span class="ruby-identifier">cve_ids</span> = <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">cve_id</span> }
- <span class="ruby-identifier">changes</span> = {}
-
- <span class="ruby-identifier">changes</span>[<span class="ruby-value">:comment</span>] = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">cves</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:comment</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span>
- <span class="ruby-identifier">changes</span>[<span class="ruby-value">:summary</span>] = <span class="ruby-identifier">cveify_bug_title</span>(<span class="ruby-identifier">bug</span>.<span class="ruby-identifier">summary</span>, <span class="ruby-identifier">cve_ids</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:summary</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span>
- <span class="ruby-constant">Bugzilla</span>.<span class="ruby-identifier">update_bug</span>(<span class="ruby-identifier">bug_id</span>, <span class="ruby-identifier">changes</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">cve_id</span><span class="ruby-operator">|</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">cve_id</span>).<span class="ruby-identifier">assign</span>(<span class="ruby-identifier">bug_id</span>, <span class="ruby-identifier">current_user</span>, <span class="ruby-value">:assign</span>) }
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;ok&quot;</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- assign-source -->
-
- </div>
-
-
-
-
- </div><!-- assign-method -->
-
-
- <div id="assign_preview-method" class="method-detail ">
- <a name="method-i-assign_preview"></a>
-
-
- <div class="method-heading">
- <span class="method-name">assign_preview</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="assign_preview-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 118</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">assign_preview</span>
- <span class="ruby-identifier">bug_id</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:bug</span>])
- <span class="ruby-identifier">cves</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-node">&quot;Assign Bug: #{bug_id} CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-identifier">cve_ids</span> = <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">cve_id</span> }
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-identifier">cve_ids</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-ivar">@cve_txt</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">cves</span>)
- <span class="ruby-ivar">@bug</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bug_id</span>)
- <span class="ruby-ivar">@summary</span> = <span class="ruby-identifier">cveify_bug_title</span>(<span class="ruby-ivar">@bug</span>.<span class="ruby-identifier">summary</span>, <span class="ruby-identifier">cve_ids</span>)
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- assign_preview-source -->
-
- </div>
-
-
-
-
- </div><!-- assign_preview-method -->
-
-
- <div id="bug-method" class="method-detail ">
- <a name="method-i-bug"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="bug-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 55</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug</span>
- <span class="ruby-identifier">cve_nums</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;File new Bug (final); CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cve_nums</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-identifier">cves</span> = <span class="ruby-identifier">cve_nums</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">c</span>) }
-
- <span class="ruby-identifier">data</span> = {
- <span class="ruby-value">:product</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'Gentoo Security'</span>,
- <span class="ruby-value">:component</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:bug_type</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span> <span class="ruby-operator">?</span> <span class="ruby-string">'Vulnerabilities'</span> <span class="ruby-operator">:</span> <span class="ruby-string">'Kernel'</span>,
- <span class="ruby-value">:summary</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:bug_title</span>],
- <span class="ruby-value">:assignee</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'security@gentoo.org'</span>
- }
-
- <span class="ruby-identifier">cc</span> = []
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cc_maint</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span>
- <span class="ruby-identifier">cc</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Portage</span>.<span class="ruby-identifier">get_maintainers</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:package</span>])
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">cc</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cc_custom</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>)
- <span class="ruby-identifier">data</span>[<span class="ruby-value">:cc</span>] = <span class="ruby-identifier">cc</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-string">''</span>}
-
- <span class="ruby-identifier">comment</span> = <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:add_cves</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span>
- <span class="ruby-identifier">comment</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">cve_nums</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:add_comment</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span>
- <span class="ruby-identifier">comment</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;\n&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:add_cves</span>]
- <span class="ruby-identifier">comment</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:comment</span>]
- <span class="ruby-keyword">end</span>
- <span class="ruby-identifier">data</span>[<span class="ruby-value">:comment</span>] = <span class="ruby-identifier">comment</span>
-
- <span class="ruby-identifier">whiteboard</span> = <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:bug_type</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'true'</span> <span class="ruby-comment"># If the bug is not a kernel issue</span>
- <span class="ruby-identifier">whiteboard</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot;%s %s&quot;</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">params</span>[<span class="ruby-value">:wb_1</span>], <span class="ruby-identifier">params</span>[<span class="ruby-value">:wb_2</span>]]
- <span class="ruby-identifier">whiteboard</span> <span class="ruby-operator">+=</span> <span class="ruby-string">&quot; %s&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:wb_ext</span>] <span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:wb_ext</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">whiteboard</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:wb_ext</span>]
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">data</span>[<span class="ruby-value">:severity</span>] = <span class="ruby-identifier">whiteboard_to_severity</span>(<span class="ruby-identifier">whiteboard</span>)
- <span class="ruby-identifier">data</span>[<span class="ruby-value">:version</span>] = <span class="ruby-string">'unspecified'</span>
- <span class="ruby-identifier">data</span>[<span class="ruby-value">:status</span>] = <span class="ruby-string">'IN_PROGRESS'</span>
-
- <span class="ruby-identifier">bugnr</span> = <span class="ruby-value">-1</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">bugnr</span> = <span class="ruby-constant">Bugzilla</span>.<span class="ruby-identifier">file_bug</span>(<span class="ruby-identifier">data</span>)
- <span class="ruby-constant">Bugzilla</span>.<span class="ruby-identifier">update_bug</span>(<span class="ruby-identifier">bugnr</span>, {<span class="ruby-value">:whiteboard</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">whiteboard</span>})
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Filing the bug failed. Check if the accounts in CC actually exist.&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-node">&quot;Filed bug #{bugnr} on behalf of user #{current_user.login}.&quot;</span>
-
- <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">assign</span>(<span class="ruby-identifier">bugnr</span>, <span class="ruby-identifier">current_user</span>, <span class="ruby-value">:file</span>) }
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'ok'</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug-source -->
-
- </div>
-
-
-
-
- </div><!-- bug-method -->
-
-
- <div id="bug_package-method" class="method-detail ">
- <a name="method-i-bug_package"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug_package</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="bug_package-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 23</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug_package</span>
- <span class="ruby-identifier">cve_nums</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;File new Bug; CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cve_nums</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-identifier">cves</span> = <span class="ruby-identifier">cve_nums</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">c</span>) }
- <span class="ruby-identifier">cpes</span> = <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">cpes</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cpe</span><span class="ruby-operator">|</span> <span class="ruby-identifier">cpe</span>.<span class="ruby-identifier">product</span> } }.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>
-
- <span class="ruby-identifier">package_hints</span> = <span class="ruby-identifier">cves</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">package_hints</span> }.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>.<span class="ruby-identifier">sort</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;CPE Products: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cpes</span>.<span class="ruby-identifier">inspect</span> }
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;Package hints: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">package_hints</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { {<span class="ruby-value">:package_hints</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">package_hints</span>}.<span class="ruby-identifier">to_json</span> }
- <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value">:package_hints</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">package_hints</span>}.<span class="ruby-identifier">to_json</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug_package-source -->
-
- </div>
-
-
-
-
- </div><!-- bug_package-method -->
-
-
- <div id="bug_preview-method" class="method-detail ">
- <a name="method-i-bug_preview"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug_preview</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="bug_preview-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 41</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug_preview</span>
- <span class="ruby-identifier">cve_nums</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;File new Bug (preview); CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">cve_nums</span>.<span class="ruby-identifier">inspect</span> }
-
- <span class="ruby-ivar">@cve_ids</span> = <span class="ruby-identifier">cve_nums</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">c</span>).<span class="ruby-identifier">cve_id</span> }
- <span class="ruby-ivar">@cve_txt</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">cve_nums</span>)
- <span class="ruby-ivar">@package</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:package</span>]
- <span class="ruby-ivar">@maintainers</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Portage</span>.<span class="ruby-identifier">get_maintainers</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:package</span>])
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug_preview-source -->
-
- </div>
-
-
-
-
- </div><!-- bug_preview-method -->
-
-
- <div id="changes-method" class="method-detail ">
- <a name="method-i-changes"></a>
-
-
- <div class="method-heading">
- <span class="method-name">changes</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="changes-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 263</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">changes</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Cannot find CVE&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@cve</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- changes-source -->
-
- </div>
-
-
-
-
- </div><!-- changes-method -->
-
-
- <div id="comments-method" class="method-detail ">
- <a name="method-i-comments"></a>
-
-
- <div class="method-heading">
- <span class="method-name">comments</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="comments-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 253</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">comments</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Cannot find CVE&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@cve</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- comments-source -->
-
- </div>
-
-
-
-
- </div><!-- comments-method -->
-
-
- <div id="general_info-method" class="method-detail ">
- <a name="method-i-general_info"></a>
-
-
- <div class="method-heading">
- <span class="method-name">general_info</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="general_info-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 220</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">general_info</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- general_info-source -->
-
- </div>
-
-
-
-
- </div><!-- general_info-method -->
-
-
- <div id="index-method" class="method-detail ">
- <a name="method-i-index"></a>
-
-
- <div class="method-heading">
- <span class="method-name">index</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="index-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 5</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index</span>
- <span class="ruby-ivar">@pageID</span> = <span class="ruby-string">'cve'</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- index-source -->
-
- </div>
-
-
-
-
- </div><!-- index-method -->
-
-
- <div id="info-method" class="method-detail ">
- <a name="method-i-info"></a>
-
-
- <div class="method-heading">
- <span class="method-name">info</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Popup methods</p>
-
-
-
- <div class="method-source-code" id="info-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 216</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">info</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>]).<span class="ruby-identifier">first</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- info-source -->
-
- </div>
-
-
-
-
- </div><!-- info-method -->
-
-
- <div id="invalid-method" class="method-detail ">
- <a name="method-i-invalid"></a>
-
-
- <div class="method-heading">
- <span class="method-name">invalid</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="invalid-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 187</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">invalid</span>
- <span class="ruby-ivar">@cves</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;Invalid CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">inspect</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; Reason: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:reason</span>] }
-
- <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve_id</span><span class="ruby-operator">|</span>
- <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">cve_id</span>).<span class="ruby-identifier">invalidate</span>(<span class="ruby-identifier">current_user</span>, <span class="ruby-identifier">params</span>[<span class="ruby-value">:reason</span>])
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;ok&quot;</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- invalid-source -->
-
- </div>
-
-
-
-
- </div><!-- invalid-method -->
-
-
- <div id="later-method" class="method-detail ">
- <a name="method-i-later"></a>
-
-
- <div class="method-heading">
- <span class="method-name">later</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="later-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 201</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">later</span>
- <span class="ruby-ivar">@cves</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;LATER CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">inspect</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; Reason: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:reason</span>] }
-
- <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve_id</span><span class="ruby-operator">|</span>
- <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">cve_id</span>).<span class="ruby-identifier">later</span>(<span class="ruby-identifier">current_user</span>, <span class="ruby-identifier">params</span>[<span class="ruby-value">:reason</span>])
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;ok&quot;</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- later-source -->
-
- </div>
-
-
-
-
- </div><!-- later-method -->
-
-
- <div id="list-method" class="method-detail ">
- <a name="method-i-list"></a>
-
-
- <div class="method-heading">
- <span class="method-name">list</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="list-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 9</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">list</span>
- <span class="ruby-ivar">@pageID</span> = <span class="ruby-string">'cve'</span>
-
- <span class="ruby-identifier">condition</span> = <span class="ruby-identifier">view_mask_to_condition</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:view_map</span>].<span class="ruby-identifier">to_i</span>)
- <span class="ruby-ivar">@cves</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-identifier">condition</span>).<span class="ruby-identifier">limit</span>(<span class="ruby-value">500</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'cve_id DESC'</span>)
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">json</span> {
- <span class="ruby-identifier">x</span> = <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">cve</span>.<span class="ruby-identifier">id</span>, <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-value">:cve_id</span>), <span class="ruby-constant">CGI</span>.<span class="ruby-identifier">escapeHTML</span>(<span class="ruby-identifier">cve</span>.<span class="ruby-identifier">summary</span>), <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">state</span>]}
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_json</span> }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- list-source -->
-
- </div>
-
-
-
-
- </div><!-- list-method -->
-
-
- <div id="mark_new-method" class="method-detail ">
- <a name="method-i-mark_new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">mark_new</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="mark_new-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 283</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">mark_new</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
-
- <span class="ruby-ivar">@cve</span>.<span class="ruby-identifier">mark_new</span>(<span class="ruby-identifier">current_user</span>)
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;ok&quot;</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- mark_new-source -->
-
- </div>
-
-
-
-
- </div><!-- mark_new-method -->
-
-
- <div id="nfu-method" class="method-detail ">
- <a name="method-i-nfu"></a>
-
-
- <div class="method-heading">
- <span class="method-name">nfu</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="nfu-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 159</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">nfu</span>
- <span class="ruby-ivar">@cves</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;NFU CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">inspect</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; Reason: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:reason</span>] }
-
- <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve_id</span><span class="ruby-operator">|</span>
- <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">cve_id</span>).<span class="ruby-identifier">nfu</span>(<span class="ruby-identifier">current_user</span>, <span class="ruby-identifier">params</span>[<span class="ruby-value">:reason</span>])
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;ok&quot;</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- nfu-source -->
-
- </div>
-
-
-
-
- </div><!-- nfu-method -->
-
-
- <div id="note-method" class="method-detail ">
- <a name="method-i-note"></a>
-
-
- <div class="method-heading">
- <span class="method-name">note</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="note-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 173</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">note</span>
- <span class="ruby-ivar">@cves</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:cves</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">','</span>).<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span> <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">cve</span>)}
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;Note CVElist: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">inspect</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; Note: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:note</span>] }
-
- <span class="ruby-ivar">@cves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve_id</span><span class="ruby-operator">|</span>
- <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">cve_id</span>).<span class="ruby-identifier">add_comment</span>(<span class="ruby-identifier">current_user</span>, <span class="ruby-identifier">params</span>[<span class="ruby-value">:note</span>])
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;ok&quot;</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- note-source -->
-
- </div>
-
-
-
-
- </div><!-- note-method -->
-
-
- <div id="packages-method" class="method-detail ">
- <a name="method-i-packages"></a>
-
-
- <div class="method-heading">
- <span class="method-name">packages</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="packages-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 239</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">packages</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Cannot find CVE&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@cve</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
-
- <span class="ruby-ivar">@package_hints</span> = <span class="ruby-ivar">@cve</span>.<span class="ruby-identifier">package_hints</span>
-
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-ivar">@package_hints</span>.<span class="ruby-identifier">inspect</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- packages-source -->
-
- </div>
-
-
-
-
- </div><!-- packages-method -->
-
-
- <div id="references-method" class="method-detail ">
- <a name="method-i-references"></a>
-
-
- <div class="method-heading">
- <span class="method-name">references</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="references-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/cve_controller.rb, line 229</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">references</span>
- <span class="ruby-ivar">@cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:cve_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:cve_id</span>]).<span class="ruby-identifier">first</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Cannot find CVE&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@cve</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- references-source -->
-
- </div>
-
-
-
-
- </div><!-- references-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CveHelper.html b/doc/app/CveHelper.html
deleted file mode 100644
index 99ef12a..0000000
--- a/doc/app/CveHelper.html
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: CveHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/cve_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/cve_helper.rb">app/helpers/cve_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-view_mask_to_condition">#view_mask_to_condition</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">CveHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="view_mask_to_condition-method" class="method-detail ">
- <a name="method-i-view_mask_to_condition"></a>
-
-
- <div class="method-heading">
- <span class="method-name">view_mask_to_condition</span><span
- class="method-args">(mask)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Converts a bit mask to a condition usable by AR</p>
-
-
-
- <div class="method-source-code" id="view_mask_to_condition-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/cve_helper.rb, line 3</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">view_mask_to_condition</span>(<span class="ruby-identifier">mask</span>)
- <span class="ruby-identifier">conditions</span> = []
-
- <span class="ruby-identifier">conditions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'state = &quot;NEW&quot;'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mask</span> &amp; <span class="ruby-value">1</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
- <span class="ruby-identifier">conditions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'state = &quot;ASSIGNED&quot;'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mask</span> &amp; <span class="ruby-value">2</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
- <span class="ruby-identifier">conditions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'state = &quot;LATER&quot;'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mask</span> &amp; <span class="ruby-value">4</span> <span class="ruby-operator">==</span> <span class="ruby-value">4</span>
- <span class="ruby-identifier">conditions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'state = &quot;NFU&quot;'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mask</span> &amp; <span class="ruby-value">8</span> <span class="ruby-operator">==</span> <span class="ruby-value">8</span>
- <span class="ruby-identifier">conditions</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">'state = &quot;INVALID&quot;'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mask</span> &amp; <span class="ruby-value">16</span> <span class="ruby-operator">==</span> <span class="ruby-value">16</span>
-
- <span class="ruby-identifier">conditions</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">' OR '</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- view_mask_to_condition-source -->
-
- </div>
-
-
-
-
- </div><!-- view_mask_to_condition-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/CveReference.html b/doc/app/CveReference.html
deleted file mode 100644
index 4bbcf6d..0000000
--- a/doc/app/CveReference.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: CveReference</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/cve_reference_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/cve_reference.rb">app/models/cve_reference.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">CveReference</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/GLSAReleaseError.html b/doc/app/GLSAReleaseError.html
deleted file mode 100644
index e72d841..0000000
--- a/doc/app/GLSAReleaseError.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: GLSAReleaseError</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/glsa_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/glsa.rb">app/models/glsa.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">StandardError</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">GLSAReleaseError</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsa.html b/doc/app/Glsa.html
deleted file mode 100644
index de38479..0000000
--- a/doc/app/Glsa.html
+++ /dev/null
@@ -1,1086 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Glsa</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/glsa_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/glsa.rb">app/models/glsa.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-new_request">::new_request</a></li>
-
- <li><a href="#method-c-next_id">::next_id</a></li>
-
- <li><a href="#method-i-add_references">#add_references</a></li>
-
- <li><a href="#method-i-approval_status">#approval_status</a></li>
-
- <li><a href="#method-i-approvals">#approvals</a></li>
-
- <li><a href="#method-i-has_comments-3F">#has_comments?</a></li>
-
- <li><a href="#method-i-has_pending_comments-3F">#has_pending_comments?</a></li>
-
- <li><a href="#method-i-invalidate_last_revision_cache">#invalidate_last_revision_cache</a></li>
-
- <li><a href="#method-i-is_approved-3F">#is_approved?</a></li>
-
- <li><a href="#method-i-is_owner-3F">#is_owner?</a></li>
-
- <li><a href="#method-i-last_release_revision">#last_release_revision</a></li>
-
- <li><a href="#method-i-last_revision">#last_revision</a></li>
-
- <li><a href="#method-i-next_releaseid">#next_releaseid</a></li>
-
- <li><a href="#method-i-next_revid">#next_revid</a></li>
-
- <li><a href="#method-i-rejections">#rejections</a></li>
-
- <li><a href="#method-i-related_cves">#related_cves</a></li>
-
- <li><a href="#method-i-release">#release</a></li>
-
- <li><a href="#method-i-release-21">#release!</a></li>
-
- <li><a href="#method-i-workflow_status">#workflow_status</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Glsa</h1>
-
- <div id="description" class="description">
-
-<p>GLSA model</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="new_request-method" class="method-detail ">
- <a name="method-c-new_request"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new_request</span><span
- class="method-args">(title, bugs, comment, access, import_references, user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Files a new GLSA request</p>
-
-
-
- <div class="method-source-code" id="new_request-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 185</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">new_request</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">bugs</span>, <span class="ruby-identifier">comment</span>, <span class="ruby-identifier">access</span>, <span class="ruby-identifier">import_references</span>, <span class="ruby-identifier">user</span>)
- <span class="ruby-identifier">glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">new</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">requester</span> = <span class="ruby-identifier">user</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">glsa_id</span> = <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">MD5</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-identifier">title</span> <span class="ruby-operator">+</span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>.<span class="ruby-identifier">to_s</span>)[<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-value">9</span>]
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">restricted</span> = (<span class="ruby-identifier">access</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;confidential&quot;</span>)
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">status</span> = <span class="ruby-string">&quot;request&quot;</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">save!</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-node">&quot;Error while saving the GLSA object: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">comment</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">blank?</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">comments</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Comment</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">:rating</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;neutral&quot;</span>, <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">comment</span>, <span class="ruby-value">:user</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>)
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">save!</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-node">&quot;Error while saving the comment: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">revision</span> = <span class="ruby-constant">Revision</span>.<span class="ruby-identifier">new</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">revid</span> = <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">next_revid</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">glsa</span> = <span class="ruby-identifier">glsa</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">title</span> = <span class="ruby-identifier">title</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">user</span> = <span class="ruby-identifier">user</span>
-
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">save!</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">delete</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-node">&quot;Error while saving Revision object: #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">bugs</span> = <span class="ruby-constant">Bugzilla</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">str2bugIDs</span>(<span class="ruby-identifier">bugs</span>)
-
- <span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">b</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bug</span>)
-
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">create</span>(
- <span class="ruby-value">:bug_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bug</span>,
- <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">summary</span>,
- <span class="ruby-value">:whiteboard</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">status_whiteboard</span>,
- <span class="ruby-value">:arches</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">arch_cc</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">', '</span>)
- )
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-comment"># In case of bugzilla errors, just keep the bug #</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">create</span>(<span class="ruby-value">:bug_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bug</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">import_references</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> { <span class="ruby-string">&quot;importing references&quot;</span> }
- <span class="ruby-identifier">refs</span> = []
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">related_cves</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">refs</span> <span class="ruby-operator">&lt;&lt;</span> {<span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">cve_id</span>, <span class="ruby-value">:url</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">url</span>}
- <span class="ruby-keyword">end</span>
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">add_references</span> <span class="ruby-identifier">refs</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">glsa</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new_request-source -->
-
- </div>
-
-
-
-
- </div><!-- new_request-method -->
-
-
- <div id="next_id-method" class="method-detail ">
- <a name="method-c-next_id"></a>
-
-
- <div class="method-heading">
- <span class="method-name">next_id</span><span
- class="method-args">(month = Time.now)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Calculates the next GLSA ID for the given month, or the current month</p>
-
-
-
- <div class="method-source-code" id="next_id-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 173</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">next_id</span>(<span class="ruby-identifier">month</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>)
- <span class="ruby-identifier">month_id</span> = <span class="ruby-identifier">month</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-string">&quot;%Y%m&quot;</span>)
- <span class="ruby-identifier">items</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">&quot;glsa_id LIKE ? AND status = ?&quot;</span>, <span class="ruby-identifier">month_id</span> <span class="ruby-operator">+</span> <span class="ruby-string">'%'</span>, <span class="ruby-string">'release'</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'glsa_id DESC'</span>)
-
- <span class="ruby-keyword">return</span> <span class="ruby-node">&quot;#{month_id}-01&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">items</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
-
- <span class="ruby-identifier">items</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">glsa_id</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/^#{month_id}-(\d+)$/</span>
- <span class="ruby-identifier">next_id</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-node">$1</span>) <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
- <span class="ruby-node">&quot;#{month_id}-#{format &quot;%02d&quot;, next_id}&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- next_id-source -->
-
- </div>
-
-
-
-
- </div><!-- next_id-method -->
-
-
- </div><!-- public-class-method-details -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="add_references-method" class="method-detail ">
- <a name="method-i-add_references"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_references</span><span
- class="method-args">(refs)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Bulk addition of references. Expects an array of hashes <tt>{:title =&gt;
-..., :url =&gt; ...}</tt></p>
-
-
-
- <div class="method-source-code" id="add_references-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 134</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_references</span>(<span class="ruby-identifier">refs</span>)
- <span class="ruby-identifier">rev</span> = <span class="ruby-identifier">last_revision</span>.<span class="ruby-identifier">deep_copy</span>
-
- <span class="ruby-identifier">refs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">reference</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">references</span>.<span class="ruby-identifier">create</span>(<span class="ruby-identifier">reference</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">invalidate_last_revision_cache</span>
- <span class="ruby-keyword">self</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_references-source -->
-
- </div>
-
-
-
-
- </div><!-- add_references-method -->
-
-
- <div id="approval_status-method" class="method-detail ">
- <a name="method-i-approval_status"></a>
-
-
- <div class="method-heading">
- <span class="method-name">approval_status</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>The approval status of the GLSA, either :approved, :commented, or :none</p>
-
-
-
- <div class="method-source-code" id="approval_status-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 82</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">approval_status</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">is_approved?</span>
- <span class="ruby-keyword">return</span> <span class="ruby-value">:approved</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">has_comments?</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">has_pending_comments?</span>
- <span class="ruby-keyword">return</span> <span class="ruby-value">:comments_pending</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-keyword">return</span> <span class="ruby-value">:commented</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">return</span> <span class="ruby-value">:none</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- approval_status-source -->
-
- </div>
-
-
-
-
- </div><!-- approval_status-method -->
-
-
- <div id="approvals-method" class="method-detail ">
- <a name="method-i-approvals"></a>
-
-
- <div class="method-heading">
- <span class="method-name">approvals</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns all approving comments</p>
-
-
-
- <div class="method-source-code" id="approvals-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 62</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">approvals</span>
- <span class="ruby-identifier">comments</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:rating</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'approval'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- approvals-source -->
-
- </div>
-
-
-
-
- </div><!-- approvals-method -->
-
-
- <div id="has_comments-3F-method" class="method-detail ">
- <a name="method-i-has_comments-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">has_comments?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns true if it has comments</p>
-
-
-
- <div class="method-source-code" id="has_comments-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 77</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">has_comments?</span>
- <span class="ruby-identifier">comments</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- has_comments-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- has_comments-3F-method -->
-
-
- <div id="has_pending_comments-3F-method" class="method-detail ">
- <a name="method-i-has_pending_comments-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">has_pending_comments?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns true if there are any pending comments left</p>
-
-
-
- <div class="method-source-code" id="has_pending_comments-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 121</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">has_pending_comments?</span>
- <span class="ruby-identifier">comments</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:read</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>).<span class="ruby-identifier">all</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- has_pending_comments-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- has_pending_comments-3F-method -->
-
-
- <div id="invalidate_last_revision_cache-method" class="method-detail ">
- <a name="method-i-invalidate_last_revision_cache"></a>
-
-
- <div class="method-heading">
- <span class="method-name">invalidate_last_revision_cache</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Invalidates the last revision cache</p>
-
-
-
- <div class="method-source-code" id="invalidate_last_revision_cache-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 39</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">invalidate_last_revision_cache</span>
- <span class="ruby-ivar">@last_revision</span> = <span class="ruby-keyword">nil</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- invalidate_last_revision_cache-source -->
-
- </div>
-
-
-
-
- </div><!-- invalidate_last_revision_cache-method -->
-
-
- <div id="is_approved-3F-method" class="method-detail ">
- <a name="method-i-is_approved-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">is_approved?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns true if the draft is ready for sending</p>
-
-
-
- <div class="method-source-code" id="is_approved-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 72</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">is_approved?</span>
- (<span class="ruby-identifier">approvals</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">rejections</span>.<span class="ruby-identifier">count</span>) <span class="ruby-operator">&gt;=</span> <span class="ruby-value">2</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- is_approved-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- is_approved-3F-method -->
-
-
- <div id="is_owner-3F-method" class="method-detail ">
- <a name="method-i-is_owner-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">is_owner?</span><span
- class="method-args">(user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns true if user is the owner of this GLSA.</p>
-
-
-
- <div class="method-source-code" id="is_owner-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 96</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">is_owner?</span>(<span class="ruby-identifier">user</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">user</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-identifier">luser</span> = (<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;request&quot;</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">requester</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">submitter</span>)
- <span class="ruby-identifier">luser</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">user</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- is_owner-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- is_owner-3F-method -->
-
-
- <div id="last_release_revision-method" class="method-detail ">
- <a name="method-i-last_release_revision"></a>
-
-
- <div class="method-heading">
- <span class="method-name">last_release_revision</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the last revision object that was a release</p>
-
-
-
- <div class="method-source-code" id="last_release_revision-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 34</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">last_release_revision</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">revisions</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:is_release</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">true</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'release_revision DESC'</span>).<span class="ruby-identifier">first</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- last_release_revision-source -->
-
- </div>
-
-
-
-
- </div><!-- last_release_revision-method -->
-
-
- <div id="last_revision-method" class="method-detail ">
- <a name="method-i-last_revision"></a>
-
-
- <div class="method-heading">
- <span class="method-name">last_revision</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the last revision object, referring to the current state of things</p>
-
-
-
- <div class="method-source-code" id="last_revision-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 29</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">last_revision</span>
- <span class="ruby-ivar">@last_revision</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">revisions</span>.<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;revid DESC&quot;</span>).<span class="ruby-identifier">first</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- last_revision-source -->
-
- </div>
-
-
-
-
- </div><!-- last_revision-method -->
-
-
- <div id="next_releaseid-method" class="method-detail ">
- <a name="method-i-next_releaseid"></a>
-
-
- <div class="method-heading">
- <span class="method-name">next_releaseid</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the next release revision ID to be given for this GLSA</p>
-
-
-
- <div class="method-source-code" id="next_releaseid-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 53</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">next_releaseid</span>
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">rev</span> = <span class="ruby-identifier">last_release_revision</span>)
- <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">release_revision</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-value">1</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- next_releaseid-source -->
-
- </div>
-
-
-
-
- </div><!-- next_releaseid-method -->
-
-
- <div id="next_revid-method" class="method-detail ">
- <a name="method-i-next_revid"></a>
-
-
- <div class="method-heading">
- <span class="method-name">next_revid</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the next revision ID to be given for this GLSA</p>
-
-
-
- <div class="method-source-code" id="next_revid-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 44</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">next_revid</span>
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">rev</span> = <span class="ruby-identifier">last_revision</span>)
- <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">revid</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-value">0</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- next_revid-source -->
-
- </div>
-
-
-
-
- </div><!-- next_revid-method -->
-
-
- <div id="rejections-method" class="method-detail ">
- <a name="method-i-rejections"></a>
-
-
- <div class="method-heading">
- <span class="method-name">rejections</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns all rejecting comments</p>
-
-
-
- <div class="method-source-code" id="rejections-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 67</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">rejections</span>
- <span class="ruby-identifier">comments</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:rating</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'rejection'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- rejections-source -->
-
- </div>
-
-
-
-
- </div><!-- rejections-method -->
-
-
- <div id="related_cves-method" class="method-detail ">
- <a name="method-i-related_cves"></a>
-
-
- <div class="method-heading">
- <span class="method-name">related_cves</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns all CVEs linked to this GLSA</p>
-
-
-
- <div class="method-source-code" id="related_cves-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 126</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">related_cves</span>
- <span class="ruby-identifier">last_revision</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span>
- <span class="ruby-constant">CveAssignment</span>.<span class="ruby-identifier">find_all_by_bug</span>(<span class="ruby-identifier">bug</span>.<span class="ruby-identifier">bug_id</span>).<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">assignment</span><span class="ruby-operator">|</span> <span class="ruby-identifier">assignment</span>.<span class="ruby-identifier">cve</span>}.<span class="ruby-identifier">uniq</span>
- <span class="ruby-keyword">end</span>.<span class="ruby-identifier">flatten</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- related_cves-source -->
-
- </div>
-
-
-
-
- </div><!-- related_cves-method -->
-
-
- <div id="release-method" class="method-detail ">
- <a name="method-i-release"></a>
-
-
- <div class="method-heading">
- <span class="method-name">release</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Performs the steps to release the GLSA, performing santiy checks.</p>
-
-
-
- <div class="method-source-code" id="release-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 146</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">release</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">GLSAReleaseError</span>, <span class="ruby-string">'Cannot release the GLSA as it is not approved'</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">is_approved?</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">GLSAReleaseError</span>, <span class="ruby-string">'Cannot release the GLSA as there are comments pending'</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">has_pending_comments?</span>
- <span class="ruby-comment"># TODO: releasing someone else's draft</span>
- <span class="ruby-identifier">release!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- release-source -->
-
- </div>
-
-
-
-
- </div><!-- release-method -->
-
-
- <div id="release-21-method" class="method-detail ">
- <a name="method-i-release-21"></a>
-
-
- <div class="method-heading">
- <span class="method-name">release!</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Performs the steps to release the GLSA, performing not as many checks. The
-<tt>release</tt> method is to be preferred.</p>
-
-
-
- <div class="method-source-code" id="release-21-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 154</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">release!</span>
- <span class="ruby-comment"># This one is not avoidable. Some information is only filled in during the first edit, thus making it required.</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">GLSAReleaseError</span>, <span class="ruby-string">'Cannot release the GLSA as it is not in &quot;draft&quot; or &quot;release&quot; status'</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">not</span> (<span class="ruby-keyword">self</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">'draft'</span> <span class="ruby-keyword">or</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">'release'</span>)
-
- <span class="ruby-identifier">rev</span> = <span class="ruby-identifier">last_revision</span>.<span class="ruby-identifier">deep_copy</span>
- <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">is_release</span> = <span class="ruby-keyword">true</span>
- <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">release_revision</span> = <span class="ruby-identifier">next_releaseid</span>
- <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">save!</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">'release'</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">glsa_id</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">next_id</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">first_released_at</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">status</span> = <span class="ruby-string">'release'</span>
- <span class="ruby-identifier">save!</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- release-21-source -->
-
- </div>
-
-
-
-
- </div><!-- release-21-method -->
-
-
- <div id="workflow_status-method" class="method-detail ">
- <a name="method-i-workflow_status"></a>
-
-
- <div class="method-heading">
- <span class="method-name">workflow_status</span><span
- class="method-args">(user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the workflow status of this GLSA for a given user. Return values:
-:own (own draft), :approved (approval given), :commented (comment or
-rejection given)</p>
-
-
-
- <div class="method-source-code" id="workflow_status-source">
-<pre>
-<span class="ruby-comment"># File app/models/glsa.rb, line 104</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">workflow_status</span>(<span class="ruby-identifier">user</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">is_owner?</span>(<span class="ruby-identifier">user</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-value">:own</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">comments</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:rating</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'approval'</span>, <span class="ruby-value">:user_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>.<span class="ruby-identifier">id</span>).<span class="ruby-identifier">all</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>
- <span class="ruby-keyword">return</span> <span class="ruby-value">:approved</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">comments</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:user_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user</span>.<span class="ruby-identifier">id</span>).<span class="ruby-identifier">all</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>
- <span class="ruby-keyword">return</span> <span class="ruby-value">:commented</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">return</span> <span class="ruby-value">:todo</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- workflow_status-source -->
-
- </div>
-
-
-
-
- </div><!-- workflow_status-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/GlsaController.html b/doc/app/GlsaController.html
deleted file mode 100644
index c20d239..0000000
--- a/doc/app/GlsaController.html
+++ /dev/null
@@ -1,1231 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: GlsaController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/glsa_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/glsa_controller.rb">app/controllers/glsa_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-archive">#archive</a></li>
-
- <li><a href="#method-i-comment">#comment</a></li>
-
- <li><a href="#method-i-create">#create</a></li>
-
- <li><a href="#method-i-destroy">#destroy</a></li>
-
- <li><a href="#method-i-diff">#diff</a></li>
-
- <li><a href="#method-i-download">#download</a></li>
-
- <li><a href="#method-i-drafts">#drafts</a></li>
-
- <li><a href="#method-i-edit">#edit</a></li>
-
- <li><a href="#method-i-import_references">#import_references</a></li>
-
- <li><a href="#method-i-new">#new</a></li>
-
- <li><a href="#method-i-prepare_release">#prepare_release</a></li>
-
- <li><a href="#method-i-release">#release</a></li>
-
- <li><a href="#method-i-requests">#requests</a></li>
-
- <li><a href="#method-i-rev_diff">#rev_diff</a></li>
-
- <li><a href="#method-i-show">#show</a></li>
-
- <li><a href="#method-i-update">#update</a></li>
-
- <li><a href="#method-i-update_cache">#update_cache</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">GlsaController</h1>
-
- <div id="description" class="description">
-
-<p>GLSA controller</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="archive-method" class="method-detail ">
- <a name="method-i-archive"></a>
-
-
- <div class="method-heading">
- <span class="method-name">archive</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="archive-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 26</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">archive</span>
- <span class="ruby-ivar">@pageID</span> = <span class="ruby-string">&quot;archive&quot;</span>
- <span class="ruby-ivar">@pageTitle</span> = <span class="ruby-string">&quot;GLSA archive&quot;</span>
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">html</span> {
- <span class="ruby-ivar">@month</span> = (<span class="ruby-identifier">params</span>[<span class="ruby-value">:month</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Date</span>.<span class="ruby-identifier">today</span>.<span class="ruby-identifier">month</span>).<span class="ruby-identifier">to_i</span>
- <span class="ruby-ivar">@year</span> = (<span class="ruby-identifier">params</span>[<span class="ruby-value">:year</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">Date</span>.<span class="ruby-identifier">today</span>.<span class="ruby-identifier">year</span>).<span class="ruby-identifier">to_i</span>
-
- <span class="ruby-identifier">month_start</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@year</span>, <span class="ruby-ivar">@month</span>, <span class="ruby-value">1</span>)
- <span class="ruby-identifier">month_end</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@year</span>, <span class="ruby-ivar">@month</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>) <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
-
- <span class="ruby-ivar">@glsas</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'release'</span>, <span class="ruby-value">:first_released_at</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">month_start</span><span class="ruby-operator">..</span><span class="ruby-identifier">month_end</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'updated_at DESC'</span>)
- }
- <span class="ruby-identifier">format</span>.<span class="ruby-identifier">js</span> {
- <span class="ruby-ivar">@month</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:view</span>][<span class="ruby-string">'month(2i)'</span>].<span class="ruby-identifier">to_i</span>
- <span class="ruby-ivar">@year</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:view</span>][<span class="ruby-string">'month(1i)'</span>].<span class="ruby-identifier">to_i</span>
-
- <span class="ruby-identifier">month_start</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@year</span>, <span class="ruby-ivar">@month</span>, <span class="ruby-value">1</span>)
- <span class="ruby-identifier">month_end</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@year</span>, <span class="ruby-ivar">@month</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>) <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
-
- <span class="ruby-ivar">@glsas</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'release'</span>, <span class="ruby-value">:first_released_at</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">month_start</span><span class="ruby-operator">..</span><span class="ruby-identifier">month_end</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'updated_at DESC'</span>)
- <span class="ruby-ivar">@table</span> = <span class="ruby-identifier">render_to_string</span> <span class="ruby-value">:partial</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;glsa_row&quot;</span>, <span class="ruby-value">:collection</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsas</span>, <span class="ruby-value">:as</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:glsa</span>, <span class="ruby-value">:locals</span> =<span class="ruby-operator">&gt;</span> { <span class="ruby-value">:view</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:drafts</span> }
- }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- archive-source -->
-
- </div>
-
-
-
-
- </div><!-- archive-method -->
-
-
- <div id="comment-method" class="method-detail ">
- <a name="method-i-comment"></a>
-
-
- <div class="method-heading">
- <span class="method-name">comment</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="comment-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 368</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">comment</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- comment-source -->
-
- </div>
-
-
-
-
- </div><!-- comment-method -->
-
-
- <div id="create-method" class="method-detail ">
- <a name="method-i-create"></a>
-
-
- <div class="method-heading">
- <span class="method-name">create</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="create-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 70</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">create</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:what</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;request&quot;</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">new_request</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:title</span>], <span class="ruby-identifier">params</span>[<span class="ruby-value">:bugs</span>], <span class="ruby-identifier">params</span>[<span class="ruby-value">:comment</span>], <span class="ruby-identifier">params</span>[<span class="ruby-value">:access</span>], (<span class="ruby-identifier">params</span>[<span class="ruby-value">:import_references</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>), <span class="ruby-identifier">current_user</span>)
-
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Mail</span>.<span class="ruby-identifier">request_notification</span>(<span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">current_user</span>)
-
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-node">&quot;Successfully created GLSA #{glsa.glsa_id}&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;requests&quot;</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">flash</span>.<span class="ruby-identifier">now</span>[<span class="ruby-value">:error</span>] = <span class="ruby-identifier">e</span>.<span class="ruby-identifier">message</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;new-request&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- create-source -->
-
- </div>
-
-
-
-
- </div><!-- create-method -->
-
-
- <div id="destroy-method" class="method-detail ">
- <a name="method-i-destroy"></a>
-
-
- <div class="method-heading">
- <span class="method-name">destroy</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="destroy-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 365</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">destroy</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- destroy-source -->
-
- </div>
-
-
-
-
- </div><!-- destroy-method -->
-
-
- <div id="diff-method" class="method-detail ">
- <a name="method-i-diff"></a>
-
-
- <div class="method-heading">
- <span class="method-name">diff</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="diff-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 332</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">diff</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
-
- <span class="ruby-identifier">rev_old</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">revisions</span>.<span class="ruby-identifier">find_by_revid</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:old</span>])
- <span class="ruby-identifier">rev_new</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">revisions</span>.<span class="ruby-identifier">find_by_revid</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:new</span>])
-
- <span class="ruby-ivar">@diff</span> = <span class="ruby-identifier">with_format</span>(<span class="ruby-value">:xml</span>) { <span class="ruby-identifier">rev_diff</span>(<span class="ruby-ivar">@glsa</span>, <span class="ruby-identifier">rev_old</span>, <span class="ruby-identifier">rev_new</span>) }
-<span class="ruby-keyword">end</span></pre>
- </div><!-- diff-source -->
-
- </div>
-
-
-
-
- </div><!-- diff-method -->
-
-
- <div id="download-method" class="method-detail ">
- <a name="method-i-download"></a>
-
-
- <div class="method-heading">
- <span class="method-name">download</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="download-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 105</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">download</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-ivar">@rev</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:rev_id</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">revisions</span>.<span class="ruby-identifier">find_by_revid</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:rev_id</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@rev</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;Invalid revision ID&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">text</span> = <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">wants</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">wants</span>.<span class="ruby-identifier">xml</span> { <span class="ruby-identifier">text</span> = <span class="ruby-identifier">render_to_string</span>(<span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:show</span>, <span class="ruby-value">:format</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'xml'</span>)}
- <span class="ruby-identifier">wants</span>.<span class="ruby-identifier">txt</span> { <span class="ruby-identifier">text</span> = <span class="ruby-identifier">render_to_string</span>(<span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:show</span>, <span class="ruby-value">:format</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'txt'</span>)}
- <span class="ruby-identifier">wants</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;Cannot download HTML format. Pick .xml or .txt&quot;</span>; <span class="ruby-keyword">return</span> }
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">send_data</span>(<span class="ruby-identifier">text</span>, <span class="ruby-value">:filename</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;glsa-#{@glsa.glsa_id}.#{params[:format]}&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- download-source -->
-
- </div>
-
-
-
-
- </div><!-- download-method -->
-
-
- <div id="drafts-method" class="method-detail ">
- <a name="method-i-drafts"></a>
-
-
- <div class="method-heading">
- <span class="method-name">drafts</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="drafts-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 20</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">drafts</span>
- <span class="ruby-ivar">@pageID</span> = <span class="ruby-string">&quot;drafts&quot;</span>
- <span class="ruby-ivar">@pageTitle</span> = <span class="ruby-string">&quot;Pooled GLSA drafts&quot;</span>
- <span class="ruby-ivar">@glsas</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'draft'</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'updated_at DESC'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- drafts-source -->
-
- </div>
-
-
-
-
- </div><!-- drafts-method -->
-
-
- <div id="edit-method" class="method-detail ">
- <a name="method-i-edit"></a>
-
-
- <div class="method-heading">
- <span class="method-name">edit</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="edit-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 126</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">edit</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-ivar">@rev</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span>
-
- <span class="ruby-comment"># Packages</span>
- <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">vulnerable_packages</span>.<span class="ruby-identifier">build</span>(<span class="ruby-value">:comp</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;&lt;&quot;</span>, <span class="ruby-value">:arch</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;*&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">vulnerable_packages</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
- <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">unaffected_packages</span>.<span class="ruby-identifier">build</span>(<span class="ruby-value">:comp</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;&gt;=&quot;</span>, <span class="ruby-value">:arch</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;*&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">unaffected_packages</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
-
- <span class="ruby-comment"># References</span>
- <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">references</span>.<span class="ruby-identifier">build</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">references</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
-
- <span class="ruby-ivar">@templates</span> = {}
- <span class="ruby-constant">GLSAMAKER_TEMPLATE_TARGETS</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">target</span><span class="ruby-operator">|</span>
- <span class="ruby-ivar">@templates</span>[<span class="ruby-identifier">target</span>] = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:target</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">target</span>).<span class="ruby-identifier">all</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- edit-source -->
-
- </div>
-
-
-
-
- </div><!-- edit-method -->
-
-
- <div id="import_references-method" class="method-detail ">
- <a name="method-i-import_references"></a>
-
-
- <div class="method-heading">
- <span class="method-name">import_references</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="import_references-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 371</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">import_references</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:go</span>].<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">'1'</span>
- <span class="ruby-identifier">glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-constant">Integer</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>]))
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-identifier">glsa</span>)
- <span class="ruby-identifier">refs</span> = []
-
- <span class="ruby-identifier">params</span>[<span class="ruby-value">:import</span>][<span class="ruby-value">:cve</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cve_id</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">cve</span> = <span class="ruby-constant">Cve</span>.<span class="ruby-identifier">find_by_cve_id</span> <span class="ruby-identifier">cve_id</span>
- <span class="ruby-identifier">refs</span> <span class="ruby-operator">&lt;&lt;</span> {<span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">cve_id</span>, <span class="ruby-value">:url</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">cve</span>.<span class="ruby-identifier">url</span>}
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">add_references</span> <span class="ruby-identifier">refs</span>
-
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-node">&quot;Imported #{refs.count} references.&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">id</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-constant">Integer</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>]))
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-ivar">@cves</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">related_cves</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;Error: #{e.message}&quot;</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- import_references-source -->
-
- </div>
-
-
-
-
- </div><!-- import_references-method -->
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-i-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 53</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">new</span>
- <span class="ruby-ivar">@pageID</span> = <span class="ruby-string">&quot;new&quot;</span>
- <span class="ruby-ivar">@pageTitle</span> = <span class="ruby-string">&quot;New GLSA&quot;</span>
-
- <span class="ruby-comment"># TODO: Straight-to-draft editing</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;new-request&quot;</span>
- <span class="ruby-keyword">return</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:what</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;request&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;new-request&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:what</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;draft&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;new-draft&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">render</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- <div id="prepare_release-method" class="method-detail ">
- <a name="method-i-prepare_release"></a>
-
-
- <div class="method-heading">
- <span class="method-name">prepare_release</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="prepare_release-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 253</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">prepare_release</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">access</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
- <span class="ruby-identifier">deny_access</span> <span class="ruby-string">&quot;Tried to prepare release&quot;</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">'request'</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">'You cannot release a request. Draft the advisory first.'</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">restricted</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">'You cannot release a confidential draft. Make it public first.'</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@rev</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span>
-
- <span class="ruby-ivar">@comments_override</span> = (<span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">is_el_jefe?</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:override_approvals</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>) <span class="ruby-operator">||</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- prepare_release-source -->
-
- </div>
-
-
-
-
- </div><!-- prepare_release-method -->
-
-
- <div id="release-method" class="method-detail ">
- <a name="method-i-release"></a>
-
-
- <div class="method-heading">
- <span class="method-name">release</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="release-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 279</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">release</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">access</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">2</span>
- <span class="ruby-identifier">deny_access</span> <span class="ruby-string">&quot;Tried to prepare release&quot;</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">'request'</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">'You cannot release a request. Draft the advisory first.'</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">restricted</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">'You cannot release a confidential draft. Make it public first.'</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@rev</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">is_el_jefe?</span>
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">release!</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">release</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">invalidate_last_revision_cache</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:email</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'1'</span>
- <span class="ruby-identifier">of</span> = <span class="ruby-ivar">@template_format</span>
- <span class="ruby-ivar">@template_format</span> = <span class="ruby-string">'txt'</span>
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Mail</span>.<span class="ruby-identifier">send_text</span>(
- <span class="ruby-identifier">render_to_string</span>({<span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'glsa/show.txt.erb'</span>, <span class="ruby-value">:format</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:txt</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>}),
- <span class="ruby-node">&quot;[ GLSA #{@glsa.glsa_id} ] #{@rev.title}&quot;</span>,
- <span class="ruby-identifier">current_user</span>,
- <span class="ruby-keyword">false</span>
- )
- <span class="ruby-ivar">@template_format</span> = <span class="ruby-identifier">of</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">GLSAReleaseError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-node">&quot;Internal error: #{e.message}. Cannot release advisory.&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># ugly hack, but necessary to switch back to html</span>
- <span class="ruby-ivar">@real_format</span> = <span class="ruby-string">'html'</span>
- <span class="ruby-identifier">render</span>(<span class="ruby-value">:format</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">:html</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'application'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- release-source -->
-
- </div>
-
-
-
-
- </div><!-- release-method -->
-
-
- <div id="requests-method" class="method-detail ">
- <a name="method-i-requests"></a>
-
-
- <div class="method-heading">
- <span class="method-name">requests</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="requests-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 14</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">requests</span>
- <span class="ruby-ivar">@pageID</span> = <span class="ruby-string">&quot;requests&quot;</span>
- <span class="ruby-ivar">@pageTitle</span> = <span class="ruby-string">&quot;Pooled GLSA requests&quot;</span>
- <span class="ruby-ivar">@glsas</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'request'</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">'updated_at DESC'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- requests-source -->
-
- </div>
-
-
-
-
- </div><!-- requests-method -->
-
-
- <div id="show-method" class="method-detail ">
- <a name="method-i-show"></a>
-
-
- <div class="method-heading">
- <span class="method-name">show</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="show-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 87</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">show</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-ivar">@rev</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:rev_id</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span> <span class="ruby-operator">:</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">revisions</span>.<span class="ruby-identifier">find_by_revid</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:rev_id</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@rev</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;Invalid revision ID&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;show&quot;</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">respond_to</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">wants</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">wants</span>.<span class="ruby-identifier">html</span> { <span class="ruby-identifier">render</span> }
- <span class="ruby-identifier">wants</span>.<span class="ruby-identifier">xml</span> { }
- <span class="ruby-identifier">wants</span>.<span class="ruby-identifier">txt</span> { <span class="ruby-identifier">render</span> }
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- show-source -->
-
- </div>
-
-
-
-
- </div><!-- show-method -->
-
-
- <div id="update-method" class="method-detail ">
- <a name="method-i-update"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="update-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 144</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-ivar">@prev_latest_rev</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;Unknown GLSA ID&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;index&quot;</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># GLSA object</span>
- <span class="ruby-comment"># The first editor is submitter</span>
- <span class="ruby-comment"># TODO: Maybe take a better condition (adding bugs would make so. the submitter)</span>
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">submitter</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">submitter</span> = <span class="ruby-identifier">current_user</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">status</span> = <span class="ruby-string">&quot;draft&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;request&quot;</span>
-
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">restricted</span> = (<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:restricted</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;confidential&quot;</span>)
-
- <span class="ruby-comment"># Force update</span>
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">updated_at</span> = <span class="ruby-value">0</span>
-
- <span class="ruby-identifier">revision</span> = <span class="ruby-constant">Revision</span>.<span class="ruby-identifier">new</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">revid</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">next_revid</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">glsa</span> = <span class="ruby-ivar">@glsa</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">user</span> = <span class="ruby-identifier">current_user</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">title</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:title</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">synopsis</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:synopsis</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">access</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:access</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">severity</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:severity</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">product</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:product</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">description</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:description</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">background</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:background</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">impact</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:impact</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">workaround</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:workaround</span>]
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">resolution</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:resolution</span>]
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-identifier">flash</span>.<span class="ruby-identifier">now</span>[<span class="ruby-value">:error</span>] = <span class="ruby-node">&quot;Errors occurred while saving the Revision object: #{revision.errors.full_messages.join ', '}&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;edit&quot;</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;Errors occurred while saving the GLSA object&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;edit&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># Bugs</span>
- <span class="ruby-identifier">bugzilla_warning</span> = <span class="ruby-keyword">false</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:bugs</span>]
- <span class="ruby-identifier">bugs</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:bugs</span>].<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span> <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">to_i</span> }
-
- <span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">b</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Bugs</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bug</span>)
-
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">create</span>(
- <span class="ruby-value">:bug_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bug</span>,
- <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">summary</span>,
- <span class="ruby-value">:whiteboard</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">status_whiteboard</span>,
- <span class="ruby-value">:arches</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">arch_cc</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">', '</span>)
- )
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> { <span class="ruby-identifier">e</span>.<span class="ruby-identifier">inspect</span> }
- <span class="ruby-comment"># In case of bugzilla errors, just keep the bug #</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">create</span>(
- <span class="ruby-value">:bug_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">bug</span>
- )
- <span class="ruby-identifier">bugzilla_warning</span> = <span class="ruby-keyword">true</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:package</span>].<span class="ruby-identifier">inspect</span>
-
- <span class="ruby-comment"># Packages</span>
- <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:package</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">package</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-identifier">package</span>.<span class="ruby-identifier">inspect</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">package</span>[<span class="ruby-value">:atom</span>].<span class="ruby-identifier">strip</span> <span class="ruby-operator">==</span> <span class="ruby-string">''</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">packages</span>.<span class="ruby-identifier">create</span>(<span class="ruby-identifier">package</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># References</span>
- <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-value">:reference</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">reference</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-identifier">reference</span>.<span class="ruby-identifier">inspect</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">reference</span>[<span class="ruby-value">:title</span>].<span class="ruby-identifier">strip</span> <span class="ruby-operator">==</span> <span class="ruby-string">''</span>
- <span class="ruby-identifier">revision</span>.<span class="ruby-identifier">references</span>.<span class="ruby-identifier">create</span>(<span class="ruby-identifier">reference</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># Comments</span>
- <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">comments</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">comment</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">comment</span>.<span class="ruby-identifier">read</span> = <span class="ruby-identifier">params</span>[<span class="ruby-node">&quot;commentread-#{comment.id}&quot;</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;true&quot;</span>
- <span class="ruby-identifier">comment</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># Sending emails</span>
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Mail</span>.<span class="ruby-identifier">edit_notification</span>(<span class="ruby-ivar">@glsa</span>, <span class="ruby-identifier">rev_diff</span>(<span class="ruby-ivar">@glsa</span>, <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">revisions</span>[<span class="ruby-value">-2</span>], <span class="ruby-identifier">revision</span>), <span class="ruby-identifier">current_user</span>)
-
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-node">&quot;Saving was successful. #{'NOTE: Bugzilla integration is not available, only plain bug numbers.' if bugzilla_warning}&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'show'</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>
-
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update-source -->
-
- </div>
-
-
-
-
- </div><!-- update-method -->
-
-
- <div id="update_cache-method" class="method-detail ">
- <a name="method-i-update_cache"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update_cache</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="update_cache-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 342</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update_cache</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">check_object_access!</span>(<span class="ruby-ivar">@glsa</span>)
- <span class="ruby-ivar">@rev</span> = <span class="ruby-ivar">@glsa</span>.<span class="ruby-identifier">last_revision</span>
-
- <span class="ruby-ivar">@rev</span>.<span class="ruby-identifier">update_cached_bug_metadata</span>
-
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-string">&quot;Successfully updated all caches.&quot;</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:redirect</span>]
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:redirect</span>]
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'show'</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:no_redirect</span>]
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">log_error</span> <span class="ruby-identifier">e</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-node">&quot;Could not update caches: #{e.message}&quot;</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:redirect</span>]
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:redirect</span>]
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'show'</span>, <span class="ruby-value">:id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:no_redirect</span>]
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update_cache-source -->
-
- </div>
-
-
-
-
- </div><!-- update_cache-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- <div id="protected-instance-method-details" class="method-section section">
- <h3 class="section-header">Protected Instance Methods</h3>
-
-
- <div id="rev_diff-method" class="method-detail ">
- <a name="method-i-rev_diff"></a>
-
-
- <div class="method-heading">
- <span class="method-name">rev_diff</span><span
- class="method-args">(glsa, rev_old, rev_new, format = :unified, context_lines = 3)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="rev_diff-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/glsa_controller.rb, line 403</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">rev_diff</span>(<span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">rev_old</span>, <span class="ruby-identifier">rev_new</span>, <span class="ruby-identifier">format</span> = <span class="ruby-value">:unified</span>, <span class="ruby-identifier">context_lines</span> = <span class="ruby-value">3</span>)
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-identifier">glsa</span>
- <span class="ruby-ivar">@rev</span> = <span class="ruby-identifier">rev_old</span>
- <span class="ruby-identifier">old_text</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>.<span class="ruby-identifier">indent</span>(
- <span class="ruby-identifier">render_to_string</span>(
- <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'glsa/_glsa.xml.builder'</span>,
- <span class="ruby-value">:locals</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value">:glsa</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>, <span class="ruby-value">:rev</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@rev</span>},
- <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'none'</span>
- ),
- {<span class="ruby-value">:indent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">2</span>, <span class="ruby-value">:maxcols</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">80</span>}
- )
-
- <span class="ruby-ivar">@rev</span> = <span class="ruby-identifier">rev_new</span>
- <span class="ruby-identifier">new_text</span> = <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>.<span class="ruby-identifier">indent</span>(
- <span class="ruby-identifier">render_to_string</span>(
- <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'glsa/_glsa.xml.builder'</span>,
- <span class="ruby-value">:locals</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value">:glsa</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@glsa</span>, <span class="ruby-value">:rev</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@rev</span>},
- <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'none'</span>
- ),
- {<span class="ruby-value">:indent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">2</span>, <span class="ruby-value">:maxcols</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">80</span>}
- )
-
- <span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Diff</span>.<span class="ruby-identifier">diff</span>(<span class="ruby-identifier">old_text</span>, <span class="ruby-identifier">new_text</span>, <span class="ruby-identifier">format</span>, <span class="ruby-identifier">context_lines</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- rev_diff-source -->
-
- </div>
-
-
-
-
- </div><!-- rev_diff-method -->
-
-
- </div><!-- protected-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/GlsaHelper.html b/doc/app/GlsaHelper.html
deleted file mode 100644
index 1397dd3..0000000
--- a/doc/app/GlsaHelper.html
+++ /dev/null
@@ -1,876 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: GlsaHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/glsa_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/glsa_helper.rb">app/helpers/glsa_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-add_reference_link">#add_reference_link</a></li>
-
- <li><a href="#method-i-add_unaffected_package_link">#add_unaffected_package_link</a></li>
-
- <li><a href="#method-i-add_vulnerable_package_link">#add_vulnerable_package_link</a></li>
-
- <li><a href="#method-i-adv_wrap">#adv_wrap</a></li>
-
- <li><a href="#method-i-approval_icon">#approval_icon</a></li>
-
- <li><a href="#method-i-bugready_icon">#bugready_icon</a></li>
-
- <li><a href="#method-i-check_icon">#check_icon</a></li>
-
- <li><a href="#method-i-glsa_content">#glsa_content</a></li>
-
- <li><a href="#method-i-is_approval_icon">#is_approval_icon</a></li>
-
- <li><a href="#method-i-lastrev_content">#lastrev_content</a></li>
-
- <li><a href="#method-i-prefixed_item">#prefixed_item</a></li>
-
- <li><a href="#method-i-restricted_icon">#restricted_icon</a></li>
-
- <li><a href="#method-i-status_icon">#status_icon</a></li>
-
- <li><a href="#method-i-template_popups">#template_popups</a></li>
-
- <li><a href="#method-i-workflow_icon">#workflow_icon</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">GlsaHelper</h1>
-
- <div id="description" class="description">
-
-<p>GLSA Helper</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="add_reference_link-method" class="method-detail ">
- <a name="method-i-add_reference_link"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_reference_link</span><span
- class="method-args">(name)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="add_reference_link-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 37</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_reference_link</span>(<span class="ruby-identifier">name</span>)
- <span class="ruby-identifier">link_to_function</span> <span class="ruby-identifier">name</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;Add reference&quot;</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">page</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">page</span>.<span class="ruby-identifier">insert_html</span> <span class="ruby-value">:bottom</span>, <span class="ruby-value">:references_table</span>, <span class="ruby-value">:partial</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'reference'</span>, <span class="ruby-value">:object</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Reference</span>.<span class="ruby-identifier">new</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_reference_link-source -->
-
- </div>
-
-
-
-
- </div><!-- add_reference_link-method -->
-
-
- <div id="add_unaffected_package_link-method" class="method-detail ">
- <a name="method-i-add_unaffected_package_link"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_unaffected_package_link</span><span
- class="method-args">(name)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="add_unaffected_package_link-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 30</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_unaffected_package_link</span>(<span class="ruby-identifier">name</span>)
- <span class="ruby-identifier">link_to_function</span>(
- <span class="ruby-identifier">name</span>,
- <span class="ruby-node">&quot;Element.insert('packages_table_unaffected', { bottom: '#{escape_javascript(render(:partial =&gt; '/glsa/package', :object =&gt; Package.new(:comp =&gt; &quot;&lt;&quot;, :arch =&gt; &quot;*&quot;, :my_type =&gt; &quot;unaffected&quot;)))}' })&quot;</span>,
- <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'Add package'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_unaffected_package_link-source -->
-
- </div>
-
-
-
-
- </div><!-- add_unaffected_package_link-method -->
-
-
- <div id="add_vulnerable_package_link-method" class="method-detail ">
- <a name="method-i-add_vulnerable_package_link"></a>
-
-
- <div class="method-heading">
- <span class="method-name">add_vulnerable_package_link</span><span
- class="method-args">(name)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="add_vulnerable_package_link-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 23</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_vulnerable_package_link</span>(<span class="ruby-identifier">name</span>)
- <span class="ruby-identifier">link_to_function</span>(
- <span class="ruby-identifier">name</span>,
- <span class="ruby-node">&quot;Element.insert('packages_table_vulnerable', { bottom: '#{escape_javascript(render(:partial =&gt; '/glsa/package', :object =&gt; Package.new(:comp =&gt; &quot;&lt;&quot;, :arch =&gt; &quot;*&quot;, :my_type =&gt; &quot;vulnerable&quot;)))}' })&quot;</span>,
- <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'Add package'</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- add_vulnerable_package_link-source -->
-
- </div>
-
-
-
-
- </div><!-- add_vulnerable_package_link-method -->
-
-
- <div id="adv_wrap-method" class="method-detail ">
- <a name="method-i-adv_wrap"></a>
-
-
- <div class="method-heading">
- <span class="method-name">adv_wrap</span><span
- class="method-args">(text, shorten_args = false)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="adv_wrap-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 120</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">adv_wrap</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">shorten_args</span> = <span class="ruby-keyword">false</span>)
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/\r?\n/</span>, <span class="ruby-string">&quot;\n&quot;</span>)
-
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/&lt;\/?(b|i)&gt;/</span>, <span class="ruby-string">''</span>)
-
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/(?:&lt;ul&gt;\s*(.*?)&lt;\/ul&gt;(?:\s*\n)?)/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
- <span class="ruby-node">$1</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/&lt;li&gt;(.*?)&lt;\/li&gt;\s*/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span>
- (<span class="ruby-string">'* '</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">word_wrap</span>(<span class="ruby-node">$1</span>, <span class="ruby-value">69</span>)).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;\n&quot;</span>, <span class="ruby-string">&quot;\n &quot;</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;\n\n&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/(?:&lt;ol&gt;\s*(.*?)&lt;\/ol&gt;(?:\s*\n)?)/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">nom</span> = <span class="ruby-value">0</span>
- <span class="ruby-node">$1</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/&lt;li&gt;(.*?)&lt;\/li&gt;\s*/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span>
- (<span class="ruby-node">&quot;#{nom += 1}. &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">word_wrap</span>(<span class="ruby-node">$1</span>, <span class="ruby-value">68</span>)).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;\n&quot;</span>, <span class="ruby-string">&quot;\n &quot;</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;\n\n&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp">/(?:&lt;code&gt;\s*(.*?)&lt;\/code&gt;(?:\s*\n)?)/</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
- (<span class="ruby-string">' '</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">word_wrap</span>(<span class="ruby-identifier">shorten_args</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">shorten_args</span>(<span class="ruby-node">$1</span>) <span class="ruby-operator">:</span> <span class="ruby-node">$1</span>, <span class="ruby-value">69</span>)).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;\n&quot;</span>, <span class="ruby-string">&quot;\n &quot;</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;\n\n&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">word_wrap</span>(<span class="ruby-identifier">text</span>.<span class="ruby-identifier">chomp</span>, <span class="ruby-value">71</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- adv_wrap-source -->
-
- </div>
-
-
-
-
- </div><!-- adv_wrap-method -->
-
-
- <div id="approval_icon-method" class="method-detail ">
- <a name="method-i-approval_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">approval_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="approval_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 63</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">approval_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:approved</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/status-green.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is approved for sending.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:commented</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/status-red.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item has received comments.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:comments_pending</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/status-yellow.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item has received comments.&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/status-grey.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item has no comments.&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- approval_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- approval_icon-method -->
-
-
- <div id="bugready_icon-method" class="method-detail ">
- <a name="method-i-bugready_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bugready_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="bugready_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 55</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bugready_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/bug.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is bug ready.&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/bug-grey.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is NOT bug ready.&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bugready_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- bugready_icon-method -->
-
-
- <div id="check_icon-method" class="method-detail ">
- <a name="method-i-check_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">check_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="check_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 95</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">check_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/ok.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;All checks passed&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/error.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;Error. Cannot continue.&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- check_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- check_icon-method -->
-
-
- <div id="glsa_content-method" class="method-detail ">
- <a name="method-i-glsa_content"></a>
-
-
- <div class="method-heading">
- <span class="method-name">glsa_content</span><span
- class="method-args">(g, field)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="glsa_content-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 15</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">glsa_content</span>(<span class="ruby-identifier">g</span>, <span class="ruby-identifier">field</span>)
- (<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_sym</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>]) <span class="ruby-operator">||</span> <span class="ruby-identifier">g</span>[<span class="ruby-identifier">field</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- glsa_content-source -->
-
- </div>
-
-
-
-
- </div><!-- glsa_content-method -->
-
-
- <div id="is_approval_icon-method" class="method-detail ">
- <a name="method-i-is_approval_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">is_approval_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="is_approval_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 103</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">is_approval_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">'icons/approved.png'</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'This item is an approval'</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">'icons/not-approved.png'</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'This item is a rejection'</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- is_approval_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- is_approval_icon-method -->
-
-
- <div id="lastrev_content-method" class="method-detail ">
- <a name="method-i-lastrev_content"></a>
-
-
- <div class="method-heading">
- <span class="method-name">lastrev_content</span><span
- class="method-args">(g, field)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="lastrev_content-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 19</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">lastrev_content</span>(<span class="ruby-identifier">g</span>, <span class="ruby-identifier">field</span>)
- (<span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>][<span class="ruby-identifier">field</span>.<span class="ruby-identifier">to_sym</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:glsa</span>]) <span class="ruby-operator">||</span> <span class="ruby-identifier">g</span>.<span class="ruby-identifier">last_revision</span>[<span class="ruby-identifier">field</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- lastrev_content-source -->
-
- </div>
-
-
-
-
- </div><!-- lastrev_content-method -->
-
-
- <div id="prefixed_item-method" class="method-detail ">
- <a name="method-i-prefixed_item"></a>
-
-
- <div class="method-heading">
- <span class="method-name">prefixed_item</span><span
- class="method-args">(prefix, text)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="prefixed_item-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 111</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">prefixed_item</span>(<span class="ruby-identifier">prefix</span>, <span class="ruby-identifier">text</span>)
- <span class="ruby-identifier">tf</span> = <span class="ruby-constant">Text</span><span class="ruby-operator">::</span><span class="ruby-constant">Format</span>.<span class="ruby-identifier">new</span>()
- <span class="ruby-identifier">tf</span>.<span class="ruby-identifier">first_indent</span> = <span class="ruby-identifier">tf</span>.<span class="ruby-identifier">body_indent</span> = <span class="ruby-identifier">prefix</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
-
- <span class="ruby-identifier">str</span> = <span class="ruby-identifier">tf</span>.<span class="ruby-identifier">format</span>(<span class="ruby-identifier">text</span>)
- <span class="ruby-identifier">str</span>[<span class="ruby-value">0</span>, <span class="ruby-identifier">prefix</span>.<span class="ruby-identifier">length</span>] = <span class="ruby-identifier">prefix</span>
- <span class="ruby-identifier">str</span>.<span class="ruby-identifier">chomp</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- prefixed_item-source -->
-
- </div>
-
-
-
-
- </div><!-- prefixed_item-method -->
-
-
- <div id="restricted_icon-method" class="method-detail ">
- <a name="method-i-restricted_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">restricted_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="restricted_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 87</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">restricted_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/confidential.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is CONFIDENTIAL.&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/public.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is public.&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- restricted_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- restricted_icon-method -->
-
-
- <div id="status_icon-method" class="method-detail ">
- <a name="method-i-status_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">status_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="status_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 43</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">status_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;request&quot;</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/request.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is a request.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;draft&quot;</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/draft.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is a draft.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;release&quot;</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/sent.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This item is a sent GLSA.&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-string">&quot;?&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- status_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- status_icon-method -->
-
-
- <div id="template_popups-method" class="method-detail ">
- <a name="method-i-template_popups"></a>
-
-
- <div class="method-heading">
- <span class="method-name">template_popups</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="template_popups-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 145</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">template_popups</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:partial</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'template_popups'</span>, <span class="ruby-value">:locals</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-value">:templates</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@templates</span>}
-<span class="ruby-keyword">end</span></pre>
- </div><!-- template_popups-source -->
-
- </div>
-
-
-
-
- </div><!-- template_popups-method -->
-
-
- <div id="workflow_icon-method" class="method-detail ">
- <a name="method-i-workflow_icon"></a>
-
-
- <div class="method-heading">
- <span class="method-name">workflow_icon</span><span
- class="method-args">(status)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="workflow_icon-source">
-<pre>
-<span class="ruby-comment"># File app/helpers/glsa_helper.rb, line 75</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">workflow_icon</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:commented</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/commented.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;You have commented on this item.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:approved</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/approved.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;You have approved this item.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:own</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/user.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;This is your own draft.&quot;</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:todo</span>
- <span class="ruby-identifier">image_tag</span> <span class="ruby-string">&quot;icons/not-approved.png&quot;</span>, <span class="ruby-value">:title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;Please comment and/or approve.&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- workflow_icon-source -->
-
- </div>
-
-
-
-
- </div><!-- workflow_icon-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/GlsaMailer.html b/doc/app/GlsaMailer.html
deleted file mode 100644
index 8f1030a..0000000
--- a/doc/app/GlsaMailer.html
+++ /dev/null
@@ -1,440 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: GlsaMailer</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/mailers/glsa_mailer_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/mailers/glsa_mailer.rb">app/mailers/glsa_mailer.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActionMailer::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-approval">#approval</a></li>
-
- <li><a href="#method-i-comment">#comment</a></li>
-
- <li><a href="#method-i-edit">#edit</a></li>
-
- <li><a href="#method-i-new_request">#new_request</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">GlsaMailer</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="approval-method" class="method-detail ">
- <a name="method-i-approval"></a>
-
-
- <div class="method-heading">
- <span class="method-name">approval</span><span
- class="method-args">(recipient, glsa)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="approval-source">
-<pre>
-<span class="ruby-comment"># File app/mailers/glsa_mailer.rb, line 31</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">approval</span>(<span class="ruby-identifier">recipient</span>, <span class="ruby-identifier">glsa</span>)
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-identifier">mail</span>(<span class="ruby-value">:to</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">recipient</span>.<span class="ruby-identifier">email</span>,
- <span class="ruby-value">:subject</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;[GLSAMaker] Draft approved: #{glsa.last_revision.title}&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- approval-source -->
-
- </div>
-
-
-
-
- </div><!-- approval-method -->
-
-
- <div id="comment-method" class="method-detail ">
- <a name="method-i-comment"></a>
-
-
- <div class="method-heading">
- <span class="method-name">comment</span><span
- class="method-args">(recipient, glsa, comment, commentator)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="comment-source">
-<pre>
-<span class="ruby-comment"># File app/mailers/glsa_mailer.rb, line 22</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">comment</span>(<span class="ruby-identifier">recipient</span>, <span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">comment</span>, <span class="ruby-identifier">commentator</span>)
- <span class="ruby-ivar">@commentator</span> = <span class="ruby-identifier">commentator</span>
- <span class="ruby-ivar">@comment</span> = <span class="ruby-identifier">comment</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-identifier">mail</span>(<span class="ruby-value">:to</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">recipient</span>.<span class="ruby-identifier">email</span>,
- <span class="ruby-value">:subject</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;[GLSAMaker] Draft commented: #{glsa.last_revision.title}&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- comment-source -->
-
- </div>
-
-
-
-
- </div><!-- comment-method -->
-
-
- <div id="edit-method" class="method-detail ">
- <a name="method-i-edit"></a>
-
-
- <div class="method-heading">
- <span class="method-name">edit</span><span
- class="method-args">(recipient, glsa, diff, editor)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="edit-source">
-<pre>
-<span class="ruby-comment"># File app/mailers/glsa_mailer.rb, line 13</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">edit</span>(<span class="ruby-identifier">recipient</span>, <span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">diff</span>, <span class="ruby-identifier">editor</span>)
- <span class="ruby-ivar">@editor</span> = <span class="ruby-identifier">editor</span>
- <span class="ruby-ivar">@diff</span> = <span class="ruby-identifier">diff</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-identifier">mail</span>(<span class="ruby-value">:to</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">recipient</span>.<span class="ruby-identifier">email</span>,
- <span class="ruby-value">:subject</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;[GLSAMaker] Draft edit: #{glsa.last_revision.title}&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- edit-source -->
-
- </div>
-
-
-
-
- </div><!-- edit-method -->
-
-
- <div id="new_request-method" class="method-detail ">
- <a name="method-i-new_request"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new_request</span><span
- class="method-args">(recipient, glsa, requestor)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="new_request-source">
-<pre>
-<span class="ruby-comment"># File app/mailers/glsa_mailer.rb, line 5</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">new_request</span>(<span class="ruby-identifier">recipient</span>, <span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">requestor</span>)
- <span class="ruby-ivar">@requestor</span> = <span class="ruby-identifier">requestor</span>
- <span class="ruby-ivar">@glsa</span> = <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-identifier">mail</span>(<span class="ruby-value">:to</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">recipient</span>.<span class="ruby-identifier">email</span>,
- <span class="ruby-value">:subject</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;[GLSAMaker] New request: #{glsa.last_revision.title}&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new_request-source -->
-
- </div>
-
-
-
-
- </div><!-- new_request-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker.html b/doc/app/Glsamaker.html
deleted file mode 100644
index 55bd87f..0000000
--- a/doc/app/Glsamaker.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- <li><a href="./lib/glsamaker/xml_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/xml.rb">lib/glsamaker/xml.rb</a></li>
-
- <li><a href="./lib/glsamaker/helpers_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/helpers.rb">lib/glsamaker/helpers.rb</a></li>
-
- <li><a href="./lib/glsamaker/http_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/http.rb">lib/glsamaker/http.rb</a></li>
-
- <li><a href="./lib/glsamaker/mail_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/mail.rb">lib/glsamaker/mail.rb</a></li>
-
- <li><a href="./lib/glsamaker/diff_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/diff.rb">lib/glsamaker/diff.rb</a></li>
-
- <li><a href="./lib/glsamaker/portage_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/portage.rb">lib/glsamaker/portage.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">MODULE</span> <a href="Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><span class="type">MODULE</span> <a href="Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><span class="type">MODULE</span> <a href="Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><span class="type">MODULE</span> <a href="Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><span class="type">MODULE</span> <a href="Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><span class="type">MODULE</span> <a href="Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><span class="type">CLASS</span> <a href="Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-help">#help</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker</h1>
-
- <div id="description" class="description">
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-<hr style="height: 1px">
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-<hr style="height: 1px">
-
-<p>GLSAMaker library</p>
-<hr style="height: 1px">
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010-11 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="help-method" class="method-detail ">
- <a name="method-i-help"></a>
-
-
- <div class="method-heading">
- <span class="method-name">help</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="help-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/helpers.rb, line 13</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">help</span>
- <span class="ruby-constant">Helper</span>.<span class="ruby-identifier">instance</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- help-source -->
-
- </div>
-
-
-
-
- </div><!-- help-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Bugs.html b/doc/app/Glsamaker/Bugs.html
deleted file mode 100644
index 08b4f0b..0000000
--- a/doc/app/Glsamaker/Bugs.html
+++ /dev/null
@@ -1,279 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Bugs</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">MODULE</span> <a href="Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><span class="type">MODULE</span> <a href="Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><span class="type">MODULE</span> <a href="Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><span class="type">CLASS</span> <a href="Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><span class="type">CLASS</span> <a href="Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- </ul>
- </div>
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Bugs</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Bugs/ArchesMixin.html b/doc/app/Glsamaker/Bugs/ArchesMixin.html
deleted file mode 100644
index d1bc6e8..0000000
--- a/doc/app/Glsamaker/Bugs/ArchesMixin.html
+++ /dev/null
@@ -1,310 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Bugs::ArchesMixin</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-arch_cc">#arch_cc</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Bugs::ArchesMixin</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="arch_cc-method" class="method-detail ">
- <a name="method-i-arch_cc"></a>
-
-
- <div class="method-heading">
- <span class="method-name">arch_cc</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns an array of all arch teams in CC</p>
-
-
-
- <div class="method-source-code" id="arch_cc-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 35</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">arch_cc</span>
- <span class="ruby-ivar">@arch_cc</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">_arch_cc</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- arch_cc-source -->
-
- </div>
-
-
-
-
- </div><!-- arch_cc-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Bugs/Bug.html b/doc/app/Glsamaker/Bugs/Bug.html
deleted file mode 100644
index 810cd26..0000000
--- a/doc/app/Glsamaker/Bugs/Bug.html
+++ /dev/null
@@ -1,376 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Glsamaker::Bugs::Bug</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-cc">#cc</a></li>
-
- <li><a href="#method-i-whiteboard">#whiteboard</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><a class="include" href="StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
-
-
- <li><a class="include" href="ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
-
-
- <li><a class="include" href="BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Glsamaker::Bugs::Bug</h1>
-
- <div id="description" class="description">
-
-<p>Extends <a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a> with the <a
-href="Status.html">Status</a> and Arches functionality</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="cc-method" class="method-detail ">
- <a name="method-i-cc"></a>
-
-
- <div class="method-heading">
- <span class="method-name">cc</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="cc-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 82</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">cc</span>
- <span class="ruby-ivar">@cc</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- cc-source -->
-
- </div>
-
-
-
-
- </div><!-- cc-method -->
-
-
- <div id="whiteboard-method" class="method-detail ">
- <a name="method-i-whiteboard"></a>
-
-
- <div class="method-heading">
- <span class="method-name">whiteboard</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="whiteboard-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 78</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">whiteboard</span>
- <span class="ruby-ivar">@status_whiteboard</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- whiteboard-source -->
-
- </div>
-
-
-
-
- </div><!-- whiteboard-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Bugs/BugReadyMixin.html b/doc/app/Glsamaker/Bugs/BugReadyMixin.html
deleted file mode 100644
index b34c627..0000000
--- a/doc/app/Glsamaker/Bugs/BugReadyMixin.html
+++ /dev/null
@@ -1,317 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Bugs::BugReadyMixin</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-bug_ready-3F">#bug_ready?</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Bugs::BugReadyMixin</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="bug_ready-3F-method" class="method-detail ">
- <a name="method-i-bug_ready-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug_ready?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Indicates whether this bug has been handled and is in the correct state for
-sending a GLSA assigned to it.</p>
-
-
-
- <div class="method-source-code" id="bug_ready-3F-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 65</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug_ready?</span>
- <span class="ruby-identifier">secbug_status</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-value">:glsa</span> <span class="ruby-keyword">and</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">pending?</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">arch_cc</span> <span class="ruby-operator">==</span> []
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug_ready-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- bug_ready-3F-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Bugs/Status.html b/doc/app/Glsamaker/Bugs/Status.html
deleted file mode 100644
index 6d819fe..0000000
--- a/doc/app/Glsamaker/Bugs/Status.html
+++ /dev/null
@@ -1,580 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Glsamaker::Bugs::Status</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-new">::new</a></li>
-
- <li><a href="#method-i-3C-3D-3E">#<=></a></li>
-
- <li><a href="#method-i-blocked-3F">#blocked?</a></li>
-
- <li><a href="#method-i-overdue-3F">#overdue?</a></li>
-
- <li><a href="#method-i-pending-3F">#pending?</a></li>
-
- <li><a href="#method-i-to_s">#to_s</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><span class="include">Comparable</span></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Glsamaker::Bugs::Status</h1>
-
- <div id="description" class="description">
-
-<p>This baby is a bug status, one of the things you see in squared brackets in
-whiteboards.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
- <!-- Attributes -->
- <div id="attribute-method-details" class="method-section section">
- <h3 class="section-header">Attributes</h3>
-
-
- <div id="status-attribute-method" class="method-detail">
- <a name="status"></a>
-
- <div class="method-heading attribute-method-heading">
- <span class="method-name">status</span><span
- class="attribute-access-type">[R]</span>
- </div>
-
- <div class="method-description">
-
-
-
- </div>
- </div>
-
- </div><!-- attribute-method-details -->
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="new-method" class="method-detail ">
- <a name="method-c-new"></a>
-
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">(str)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Creates a new <a href="Status.html">Status</a> object by parsing
-<tt>str</tt> as a single status string</p>
-
-
-
- <div class="method-source-code" id="new-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 98</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">str</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">str</span> <span class="ruby-operator">==</span> <span class="ruby-string">'?'</span>
- <span class="ruby-ivar">@status</span> = <span class="ruby-string">'?'</span>.<span class="ruby-identifier">to_sym</span>
- <span class="ruby-ivar">@blocked</span> = <span class="ruby-ivar">@overdue</span> = <span class="ruby-ivar">@pending</span> = <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">cmp</span> = <span class="ruby-identifier">str</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\s+/</span>)
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">cmp</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
- <span class="ruby-ivar">@blocked</span> = (<span class="ruby-identifier">cmp</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;blocked&quot;</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">cmp</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^(upstream|ebuild|stable|glsa|noglsa)(\+|\?|\+\?|\?\+)?$/</span>
- <span class="ruby-ivar">@overdue</span> = (<span class="ruby-node">$2</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">and</span> <span class="ruby-node">$2</span>.<span class="ruby-identifier">include?</span> <span class="ruby-string">&quot;+&quot;</span>)
- <span class="ruby-ivar">@pending</span> = (<span class="ruby-node">$2</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">and</span> <span class="ruby-node">$2</span>.<span class="ruby-identifier">include?</span> <span class="ruby-string">&quot;?&quot;</span>)
-
- <span class="ruby-ivar">@status</span> = <span class="ruby-node">$1</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;Malformed Status string: #{str}&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- new-source -->
-
- </div>
-
-
-
-
- </div><!-- new-method -->
-
-
- </div><!-- public-class-method-details -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="3C-3D-3E-method" class="method-detail ">
- <a name="method-i-3C-3D-3E"></a>
-
-
- <div class="method-heading">
- <span class="method-name">&lt;=&gt;</span><span
- class="method-args">(other)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Comparison</p>
-
-
-
- <div class="method-source-code" id="3C-3D-3E-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 142</span>
-<span class="ruby-keyword">def</span> <span class="ruby-operator">&lt;=&gt;</span>(<span class="ruby-identifier">other</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;Cannot compare to #{other.class}&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Status</span>
-
- <span class="ruby-identifier">s</span> = [<span class="ruby-string">'?'</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-value">:upstream</span>, <span class="ruby-value">:ebuild</span>, <span class="ruby-value">:stable</span>, <span class="ruby-value">:glsa</span>, <span class="ruby-value">:noglsa</span>]
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@status</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">pending?</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@pending</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">overdue?</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@overdue</span>
- <span class="ruby-value">0</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">overdue?</span> <span class="ruby-keyword">and</span> <span class="ruby-keyword">not</span> <span class="ruby-ivar">@overdue</span>
- <span class="ruby-value">-1</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-ivar">@overdue</span> <span class="ruby-keyword">and</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">overdue?</span>
- <span class="ruby-value">1</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@pending</span> <span class="ruby-keyword">and</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">pending?</span>
- <span class="ruby-value">-1</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-value">1</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">else</span>
- (<span class="ruby-identifier">s</span>.<span class="ruby-identifier">index</span>(<span class="ruby-ivar">@status</span>) <span class="ruby-operator">-</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">other</span>.<span class="ruby-identifier">status</span>)) <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-value">-1</span> <span class="ruby-operator">:</span> <span class="ruby-value">1</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- 3C-3D-3E-source -->
-
- </div>
-
-
-
-
- </div><!-- 3C-3D-3E-method -->
-
-
- <div id="blocked-3F-method" class="method-detail ">
- <a name="method-i-blocked-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">blocked?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns <tt>true</tt> if the bug is blocked by another (c.f.
-+‘blocked’+ in whiteboards)</p>
-
-
-
- <div class="method-source-code" id="blocked-3F-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 122</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">blocked?</span>
- <span class="ruby-ivar">@blocked</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- blocked-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- blocked-3F-method -->
-
-
- <div id="overdue-3F-method" class="method-detail ">
- <a name="method-i-overdue-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">overdue?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns <tt>true</tt> if the bug is overdue (cf. +‘+’+ in whiteboards)</p>
-
-
-
- <div class="method-source-code" id="overdue-3F-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 127</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">overdue?</span>
- <span class="ruby-ivar">@overdue</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- overdue-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- overdue-3F-method -->
-
-
- <div id="pending-3F-method" class="method-detail ">
- <a name="method-i-pending-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">pending?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns <tt>true</tt> if the bug is pending action (cf. +‘?’+ in
-whiteboards)</p>
-
-
-
- <div class="method-source-code" id="pending-3F-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 132</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">pending?</span>
- <span class="ruby-ivar">@pending</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- pending-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- pending-3F-method -->
-
-
- <div id="to_s-method" class="method-detail ">
- <a name="method-i-to_s"></a>
-
-
- <div class="method-heading">
- <span class="method-name">to_s</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns a string representation (like you would find it in the whiteboard)</p>
-
-
-
- <div class="method-source-code" id="to_s-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 137</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
- <span class="ruby-ivar">@status</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> (<span class="ruby-ivar">@overdue</span> <span class="ruby-operator">?</span> <span class="ruby-string">&quot;+&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;&quot;</span>) <span class="ruby-operator">+</span> (<span class="ruby-ivar">@pending</span> <span class="ruby-operator">?</span> <span class="ruby-string">&quot;?&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;&quot;</span>) <span class="ruby-operator">+</span> (<span class="ruby-ivar">@blocked</span> <span class="ruby-operator">?</span> <span class="ruby-string">&quot; blocked&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;&quot;</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- to_s-source -->
-
- </div>
-
-
-
-
- </div><!-- to_s-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Bugs/StatusMixin.html b/doc/app/Glsamaker/Bugs/StatusMixin.html
deleted file mode 100644
index fabab8c..0000000
--- a/doc/app/Glsamaker/Bugs/StatusMixin.html
+++ /dev/null
@@ -1,320 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Bugs::StatusMixin</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../lib/glsamaker/bugs_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/bugs.rb">lib/glsamaker/bugs.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-secbug_status">#secbug_status</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Bugs::StatusMixin</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="secbug_status-method" class="method-detail ">
- <a name="method-i-secbug_status"></a>
-
-
- <div class="method-heading">
- <span class="method-name">secbug_status</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="secbug_status-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/bugs.rb, line 18</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">secbug_status</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">whiteboard</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/([A-C~?][0-4?]\??)\s+\[(.*?)\]\s*?(.*?)$/</span>
- <span class="ruby-identifier">st</span> = []
-
- <span class="ruby-node">$2</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;/&quot;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">status</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">st</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Status</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">status</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">st</span>
- <span class="ruby-keyword">else</span>
- [<span class="ruby-constant">Status</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">'?'</span>)]
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- secbug_status-source -->
-
- </div>
-
-
-
-
- </div><!-- secbug_status-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Diff.html b/doc/app/Glsamaker/Diff.html
deleted file mode 100644
index 1e3fd06..0000000
--- a/doc/app/Glsamaker/Diff.html
+++ /dev/null
@@ -1,338 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Diff</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/diff_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/diff.rb">lib/glsamaker/diff.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-diff">#diff</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Diff</h1>
-
- <div id="description" class="description">
-
-<p>Module providing diff support</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="diff-method" class="method-detail ">
- <a name="method-i-diff"></a>
-
-
- <div class="method-heading">
- <span class="method-name">diff</span><span
- class="method-args">(str_old, str_new, format = :unified, context_lines = 3)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns a unified diff for two strings Adapted from the O’Reilly Ruby
-Cookbook</p>
-
-
-
- <div class="method-source-code" id="diff-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/diff.rb, line 23</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">diff</span>(<span class="ruby-identifier">str_old</span>, <span class="ruby-identifier">str_new</span>, <span class="ruby-identifier">format</span> = <span class="ruby-value">:unified</span>, <span class="ruby-identifier">context_lines</span> = <span class="ruby-value">3</span>)
- <span class="ruby-identifier">str_old</span> = <span class="ruby-identifier">str_old</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\r?\n/</span>).<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">chomp</span> }
- <span class="ruby-identifier">str_new</span> = <span class="ruby-identifier">str_new</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\r?\n/</span>).<span class="ruby-identifier">map!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span>.<span class="ruby-identifier">chomp</span> }
-
- <span class="ruby-identifier">output</span> = <span class="ruby-string">&quot;&quot;</span>
- <span class="ruby-identifier">diffs</span> = <span class="ruby-operator">::</span><span class="ruby-constant">Diff</span><span class="ruby-operator">::</span><span class="ruby-constant">LCS</span>.<span class="ruby-identifier">diff</span>(<span class="ruby-identifier">str_old</span>, <span class="ruby-identifier">str_new</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">output</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">diffs</span>.<span class="ruby-identifier">empty?</span>
-
- <span class="ruby-identifier">oldhunk</span> = <span class="ruby-identifier">hunk</span> = <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">file_length_difference</span> = <span class="ruby-value">0</span>
- <span class="ruby-identifier">diffs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">piece</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-identifier">hunk</span> = <span class="ruby-operator">::</span><span class="ruby-constant">Diff</span><span class="ruby-operator">::</span><span class="ruby-constant">LCS</span><span class="ruby-operator">::</span><span class="ruby-constant">Hunk</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">str_old</span>, <span class="ruby-identifier">str_new</span>, <span class="ruby-identifier">piece</span>, <span class="ruby-identifier">context_lines</span>, <span class="ruby-identifier">file_length_difference</span>)
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">oldhunk</span>
-
- <span class="ruby-keyword">if</span> (<span class="ruby-identifier">context_lines</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>) <span class="ruby-keyword">and</span> <span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">overlaps?</span>(<span class="ruby-identifier">oldhunk</span>)
- <span class="ruby-identifier">hunk</span>.<span class="ruby-identifier">unshift</span>(<span class="ruby-identifier">oldhunk</span>)
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">oldhunk</span>.<span class="ruby-identifier">diff</span>(<span class="ruby-identifier">format</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">ensure</span>
- <span class="ruby-identifier">oldhunk</span> = <span class="ruby-identifier">hunk</span>
- <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">oldhunk</span>.<span class="ruby-identifier">diff</span>(<span class="ruby-identifier">format</span>) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- diff-source -->
-
- </div>
-
-
-
-
- </div><!-- diff-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/HTTP.html b/doc/app/Glsamaker/HTTP.html
deleted file mode 100644
index 6600379..0000000
--- a/doc/app/Glsamaker/HTTP.html
+++ /dev/null
@@ -1,323 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::HTTP</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/http_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/http.rb">lib/glsamaker/http.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-get">::get</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::HTTP</h1>
-
- <div id="description" class="description">
-
-<p>GLSAMaker <a href="HTTP.html">HTTP</a> utilities</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="get-method" class="method-detail ">
- <a name="method-c-get"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get</span><span
- class="method-args">(url)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Tries to fetch <tt>url</tt> via <a href="HTTP.html">HTTP</a> GET, sending a
-GLSAMaker custom User-Agent header. The body part is returned.</p>
-
-
-
- <div class="method-source-code" id="get-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/http.rb, line 21</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get</span>(<span class="ruby-identifier">url</span>)
- <span class="ruby-identifier">uri</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">url</span>)
-
- <span class="ruby-identifier">http</span> = <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">host</span>, <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">port</span>)
- <span class="ruby-identifier">http</span>.<span class="ruby-identifier">use_ssl</span> = <span class="ruby-keyword">true</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">uri</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;https&quot;</span>
- <span class="ruby-identifier">res</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">start</span> {
- <span class="ruby-identifier">http</span>.<span class="ruby-identifier">request_get</span>(<span class="ruby-identifier">uri</span>.<span class="ruby-identifier">request_uri</span>, {<span class="ruby-string">'User-Agent'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;GLSAMaker/#{GLSAMAKER_VERSION} (http://security.gentoo.org/)&quot;</span>})
- }
-
- <span class="ruby-comment"># Raises an exception if HTTP status suggests something went wrong</span>
- <span class="ruby-identifier">res</span>.<span class="ruby-identifier">value</span>
- <span class="ruby-identifier">res</span>.<span class="ruby-identifier">body</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get-source -->
-
- </div>
-
-
-
-
- </div><!-- get-method -->
-
-
- </div><!-- public-class-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Helper.html b/doc/app/Glsamaker/Helper.html
deleted file mode 100644
index 96d0c97..0000000
--- a/doc/app/Glsamaker/Helper.html
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Glsamaker::Helper</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/helpers_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/helpers.rb">lib/glsamaker/helpers.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- <!-- Included Modules -->
- <div id="includes-section" class="section">
- <h3 class="section-header">Included Modules</h3>
- <ul class="link-list">
-
-
- <li><span class="include">Singleton</span></li>
-
-
-
- <li><span class="include">::ActionView::Helpers::TextHelper</span></li>
-
-
- </ul>
- </div>
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Glsamaker::Helper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Mail.html b/doc/app/Glsamaker/Mail.html
deleted file mode 100644
index 1bdaf3b..0000000
--- a/doc/app/Glsamaker/Mail.html
+++ /dev/null
@@ -1,498 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Mail</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/mail_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/mail.rb">lib/glsamaker/mail.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-approval_notification">#approval_notification</a></li>
-
- <li><a href="#method-i-comment_notification">#comment_notification</a></li>
-
- <li><a href="#method-i-edit_notification">#edit_notification</a></li>
-
- <li><a href="#method-i-request_notification">#request_notification</a></li>
-
- <li><a href="#method-i-send_text">#send_text</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Mail</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="approval_notification-method" class="method-detail ">
- <a name="method-i-approval_notification"></a>
-
-
- <div class="method-heading">
- <span class="method-name">approval_notification</span><span
- class="method-args">(glsa)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="approval_notification-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/mail.rb, line 59</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">approval_notification</span>(<span class="ruby-identifier">glsa</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-constant">GLSAMAKER_NO_EMAIL</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-string">&quot;Not sending email.&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">rcpt</span> = <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">submitter</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">can_access?</span> <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">get_pref_category</span>(<span class="ruby-value">:mail</span>)[<span class="ruby-value">:comment</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span>
- <span class="ruby-constant">GlsaMailer</span>.<span class="ruby-identifier">approval</span>(<span class="ruby-identifier">rcpt</span>, <span class="ruby-identifier">glsa</span>).<span class="ruby-identifier">deliver</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- approval_notification-source -->
-
- </div>
-
-
-
-
- </div><!-- approval_notification-method -->
-
-
- <div id="comment_notification-method" class="method-detail ">
- <a name="method-i-comment_notification"></a>
-
-
- <div class="method-heading">
- <span class="method-name">comment_notification</span><span
- class="method-args">(glsa, comment, user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="comment_notification-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/mail.rb, line 44</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">comment_notification</span>(<span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">comment</span>, <span class="ruby-identifier">user</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-constant">GLSAMAKER_NO_EMAIL</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-string">&quot;Not sending email.&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">rcpt</span> = <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">submitter</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">can_access?</span> <span class="ruby-identifier">glsa</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">rcpt</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">user</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">get_pref_category</span>(<span class="ruby-value">:mail</span>)[<span class="ruby-value">:comment</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span>
- <span class="ruby-constant">GlsaMailer</span>.<span class="ruby-identifier">comment</span>(<span class="ruby-identifier">rcpt</span>, <span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">comment</span>, <span class="ruby-identifier">user</span>).<span class="ruby-identifier">deliver</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- comment_notification-source -->
-
- </div>
-
-
-
-
- </div><!-- comment_notification-method -->
-
-
- <div id="edit_notification-method" class="method-detail ">
- <a name="method-i-edit_notification"></a>
-
-
- <div class="method-heading">
- <span class="method-name">edit_notification</span><span
- class="method-args">(glsa, diff, user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="edit_notification-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/mail.rb, line 14</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">edit_notification</span>(<span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">diff</span>, <span class="ruby-identifier">user</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-constant">GLSAMAKER_NO_EMAIL</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-string">&quot;Not sending email.&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-constant">User</span>.<span class="ruby-identifier">find</span>(<span class="ruby-value">:all</span>, <span class="ruby-value">:conditions</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'id &gt; 0'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rcpt</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">can_access?</span> <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">get_pref_category</span>(<span class="ruby-value">:mail</span>)[<span class="ruby-value">:edit</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span>
- <span class="ruby-constant">GlsaMailer</span>.<span class="ruby-identifier">edit</span>(<span class="ruby-identifier">rcpt</span>, <span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">diff</span>, <span class="ruby-identifier">user</span>).<span class="ruby-identifier">deliver</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- edit_notification-source -->
-
- </div>
-
-
-
-
- </div><!-- edit_notification-method -->
-
-
- <div id="request_notification-method" class="method-detail ">
- <a name="method-i-request_notification"></a>
-
-
- <div class="method-heading">
- <span class="method-name">request_notification</span><span
- class="method-args">(glsa, user)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="request_notification-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/mail.rb, line 29</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">request_notification</span>(<span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">user</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-constant">GLSAMAKER_NO_EMAIL</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-string">&quot;Not sending email.&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-constant">User</span>.<span class="ruby-identifier">find</span>(<span class="ruby-value">:all</span>, <span class="ruby-value">:conditions</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'id &gt; 0'</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rcpt</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">can_access?</span> <span class="ruby-identifier">glsa</span>
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">rcpt</span>.<span class="ruby-identifier">get_pref_category</span>(<span class="ruby-value">:mail</span>)[<span class="ruby-value">:request</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span>
- <span class="ruby-constant">GlsaMailer</span>.<span class="ruby-identifier">new_request</span>(<span class="ruby-identifier">rcpt</span>, <span class="ruby-identifier">glsa</span>, <span class="ruby-identifier">user</span>).<span class="ruby-identifier">deliver</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- request_notification-source -->
-
- </div>
-
-
-
-
- </div><!-- request_notification-method -->
-
-
- <div id="send_text-method" class="method-detail ">
- <a name="method-i-send_text"></a>
-
-
- <div class="method-heading">
- <span class="method-name">send_text</span><span
- class="method-args">(text, subject, user, footer = true)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="send_text-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/mail.rb, line 73</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">send_text</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">user</span>, <span class="ruby-identifier">footer</span> = <span class="ruby-keyword">true</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-constant">GLSAMAKER_NO_EMAIL</span>
- <span class="ruby-constant">Rails</span>.<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">info</span> <span class="ruby-string">&quot;Not sending email.&quot;</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-constant">GlsaMailer</span>.<span class="ruby-identifier">deliver_text</span>(<span class="ruby-identifier">user</span>, <span class="ruby-identifier">subject</span>, <span class="ruby-identifier">text</span>, <span class="ruby-identifier">footer</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- send_text-source -->
-
- </div>
-
-
-
-
- </div><!-- send_text-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Portage.html b/doc/app/Glsamaker/Portage.html
deleted file mode 100644
index 1a3f76a..0000000
--- a/doc/app/Glsamaker/Portage.html
+++ /dev/null
@@ -1,567 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::Portage</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/portage_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/portage.rb">lib/glsamaker/portage.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
- <!-- Namespace Contents -->
- <div id="namespace-list-section" class="section">
- <h3 class="section-header">Namespace</h3>
- <ul class="link-list">
-
- <li><span class="type">CLASS</span> <a href="Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- </ul>
- </div>
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-find_packages">#find_packages</a></li>
-
- <li><a href="#method-i-get_description">#get_description</a></li>
-
- <li><a href="#method-i-get_maintainers">#get_maintainers</a></li>
-
- <li><a href="#method-i-get_metadata">#get_metadata</a></li>
-
- <li><a href="#method-i-portdir">#portdir</a></li>
-
- <li><a href="#method-i-valid_atom-3F">#valid_atom?</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::Portage</h1>
-
- <div id="description" class="description">
-
-<p><a href="Helper.html">Helper</a> functions for <a
-href="Portage.html">Portage</a> tree interaction</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="find_packages-method" class="method-detail ">
- <a name="method-i-find_packages"></a>
-
-
- <div class="method-heading">
- <span class="method-name">find_packages</span><span
- class="method-args">(re)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns package atoms that match <tt>re</tt></p>
-
-
-
- <div class="method-source-code" id="find_packages-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 78</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">find_packages</span>(<span class="ruby-identifier">re</span>)
- <span class="ruby-identifier">results</span> = []
-
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">portdir</span>) <span class="ruby-keyword">do</span>
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-string">'*-*'</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">cat</span><span class="ruby-operator">|</span>
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-identifier">cat</span>) <span class="ruby-keyword">do</span>
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-string">&quot;*&quot;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pkg</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">pkg</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">re</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">results</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{cat}/#{pkg}&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">results</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- find_packages-source -->
-
- </div>
-
-
-
-
- </div><!-- find_packages-method -->
-
-
- <div id="get_description-method" class="method-detail ">
- <a name="method-i-get_description"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get_description</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Gets a description</p>
-
-
-
- <div class="method-source-code" id="get_description-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 69</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get_description</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-constant">Description</span>.<span class="ruby-identifier">eix</span>(<span class="ruby-identifier">atom</span>) <span class="ruby-operator">||</span>
- <span class="ruby-constant">Description</span>.<span class="ruby-identifier">ebuild</span>(<span class="ruby-identifier">atom</span>) <span class="ruby-operator">||</span>
- <span class="ruby-constant">Description</span>.<span class="ruby-identifier">pgo</span>(<span class="ruby-identifier">atom</span>) <span class="ruby-operator">||</span>
- <span class="ruby-constant">Description</span>.<span class="ruby-identifier">google</span>(<span class="ruby-identifier">atom</span>) <span class="ruby-operator">||</span>
- <span class="ruby-string">&quot;[could not get a description]&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get_description-source -->
-
- </div>
-
-
-
-
- </div><!-- get_description-method -->
-
-
- <div id="get_maintainers-method" class="method-detail ">
- <a name="method-i-get_maintainers"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get_maintainers</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns an array of maintainer email addresses for the package
-<tt>atom</tt></p>
-
-
-
- <div class="method-source-code" id="get_maintainers-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 95</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get_maintainers</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid package atom&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-constant">Portage</span>.<span class="ruby-identifier">valid_atom?</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Cannot find metadata&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">portdir</span>, <span class="ruby-identifier">atom</span>, <span class="ruby-string">'metadata.xml'</span>)
-
- <span class="ruby-identifier">x</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">portdir</span>, <span class="ruby-identifier">atom</span>, <span class="ruby-string">'metadata.xml'</span>)))
-
- <span class="ruby-identifier">herds</span> = []
- <span class="ruby-identifier">maintainers</span> = []
-
- <span class="ruby-identifier">x</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">'/pkgmetadata/herd'</span>).<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span> <span class="ruby-identifier">herds</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">h</span>.<span class="ruby-identifier">content</span> }
- <span class="ruby-identifier">x</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">'/pkgmetadata/maintainer/email'</span>).<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span> <span class="ruby-identifier">maintainers</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">content</span> }
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">herds</span>.<span class="ruby-identifier">first</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;no-herd&quot;</span>
- <span class="ruby-identifier">herds_xml</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">portdir</span>, <span class="ruby-string">'metadata'</span>, <span class="ruby-string">'herds.xml'</span>)))
- <span class="ruby-identifier">herds_email</span> = <span class="ruby-identifier">herds</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span> <span class="ruby-identifier">herds_xml</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-node">&quot;/herds/herd/name[text()='#{h}']&quot;</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">parent</span>.<span class="ruby-identifier">xpath</span>(<span class="ruby-string">&quot;./email&quot;</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">content</span> }
-
- (<span class="ruby-identifier">maintainers</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">herds_email</span>).<span class="ruby-identifier">uniq</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">maintainers</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get_maintainers-source -->
-
- </div>
-
-
-
-
- </div><!-- get_maintainers-method -->
-
-
- <div id="get_metadata-method" class="method-detail ">
- <a name="method-i-get_metadata"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get_metadata</span><span
- class="method-args">(atom, version = :latest, what = [])</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns information from the portage metadata cache Values: :depend,
-:rdepend, :slot, :src_uri, :restrict, :homepage, :license, :description,
-:keywords, :inherited, :iuse, :required_use, :pdepend, :provide, :eapi,
-:properties, :defined_phases as per portage/pym/portage/cache/metadata.py
-(database.auxdbkey_order)</p>
-
-
-
- <div class="method-source-code" id="get_metadata-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 122</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get_metadata</span>(<span class="ruby-identifier">atom</span>, <span class="ruby-identifier">version</span> = <span class="ruby-value">:latest</span>, <span class="ruby-identifier">what</span> = [])
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid package atom&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-constant">Portage</span>.<span class="ruby-identifier">valid_atom?</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid version string&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">include?</span> <span class="ruby-string">'..'</span>
- <span class="ruby-keyword">return</span> {} <span class="ruby-keyword">if</span> <span class="ruby-identifier">what</span> <span class="ruby-operator">==</span> []
-
- <span class="ruby-identifier">lines</span> = [<span class="ruby-keyword">nil</span>, <span class="ruby-value">:depend</span>, <span class="ruby-value">:rdepend</span>, <span class="ruby-value">:slot</span>, <span class="ruby-value">:src_uri</span>, <span class="ruby-value">:restrict</span>, <span class="ruby-value">:homepage</span>,
- <span class="ruby-value">:license</span>, <span class="ruby-value">:description</span>, <span class="ruby-value">:keywords</span>, <span class="ruby-value">:inherited</span>, <span class="ruby-value">:iuse</span>, <span class="ruby-value">:required_use</span>,
- <span class="ruby-value">:pdepend</span>, <span class="ruby-value">:provide</span>, <span class="ruby-value">:eapi</span>, <span class="ruby-value">:properties</span>, <span class="ruby-value">:defined_phases</span>]
- <span class="ruby-identifier">cat</span>, <span class="ruby-identifier">pkg</span> = <span class="ruby-identifier">atom</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">'/'</span>, <span class="ruby-value">2</span>)
- <span class="ruby-identifier">result</span> = {}
-
- <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">chdir</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">Portage</span>.<span class="ruby-identifier">portdir</span>, <span class="ruby-string">'metadata'</span>, <span class="ruby-string">'cache'</span>, <span class="ruby-identifier">cat</span>)) <span class="ruby-keyword">do</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">version</span> <span class="ruby-operator">==</span> <span class="ruby-value">:latest</span>
- <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-node">&quot;#{pkg}-[0-9]*&quot;</span>).<span class="ruby-identifier">last</span>, <span class="ruby-string">'r'</span>)
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-node">&quot;#{pkg}-#{version}&quot;</span>), <span class="ruby-string">'r'</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">while</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">gets</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">what</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">lines</span>[<span class="ruby-identifier">$.</span>])
- <span class="ruby-identifier">result</span>[<span class="ruby-identifier">lines</span>[<span class="ruby-identifier">$.</span>]] = <span class="ruby-identifier">$_</span>.<span class="ruby-identifier">chomp</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-identifier">result</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get_metadata-source -->
-
- </div>
-
-
-
-
- </div><!-- get_metadata-method -->
-
-
- <div id="portdir-method" class="method-detail ">
- <a name="method-i-portdir"></a>
-
-
- <div class="method-heading">
- <span class="method-name">portdir</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the location of the portage dir, or raises an exception if it
-cannot be found</p>
-
-
-
- <div class="method-source-code" id="portdir-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 55</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">portdir</span>
- <span class="ruby-keyword">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span> <span class="ruby-constant">GLSAMAKER_PORTDIR</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;GLSAMAKER_PORTDIR is not a directory&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-constant">GLSAMAKER_PORTDIR</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- portdir-source -->
-
- </div>
-
-
-
-
- </div><!-- portdir-method -->
-
-
- <div id="valid_atom-3F-method" class="method-detail ">
- <a name="method-i-valid_atom-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">valid_atom?</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Validates the atom <tt>atom</tt></p>
-
-
-
- <div class="method-source-code" id="valid_atom-3F-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 64</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">valid_atom?</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-identifier">atom</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/[a-zA-Z0-9_-]\/[a-zA-Z0-9_-]/</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- valid_atom-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- valid_atom-3F-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/Portage/Description.html b/doc/app/Glsamaker/Portage/Description.html
deleted file mode 100644
index 50ec53a..0000000
--- a/doc/app/Glsamaker/Portage/Description.html
+++ /dev/null
@@ -1,436 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Glsamaker::Portage::Description</title>
-
- <link rel="stylesheet" href="../../rdoc.css" type="text/css" media="screen" />
-
- <script src="../../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../../index.html">Home</a>
- <a href="../../index.html#classes">Classes</a>
- <a href="../../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../../lib/glsamaker/portage_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/portage.rb">lib/glsamaker/portage.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-c-ebuild">::ebuild</a></li>
-
- <li><a href="#method-c-eix">::eix</a></li>
-
- <li><a href="#method-c-google">::google</a></li>
-
- <li><a href="#method-c-pgo">::pgo</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../../Admin.html">Admin</a></li>
-
- <li><a href="../../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../../Comment.html">Comment</a></li>
-
- <li><a href="../../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../../Authentication.html">Authentication</a></li>
-
- <li><a href="../../Authorization.html">Authorization</a></li>
-
- <li><a href="../../Bug.html">Bug</a></li>
-
- <li><a href="../../BugController.html">BugController</a></li>
-
- <li><a href="../../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../../BugsController.html">BugsController</a></li>
-
- <li><a href="../../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../../Cpe.html">Cpe</a></li>
-
- <li><a href="../../Cve.html">Cve</a></li>
-
- <li><a href="../../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../../CveChange.html">CveChange</a></li>
-
- <li><a href="../../CveComment.html">CveComment</a></li>
-
- <li><a href="../../CveController.html">CveController</a></li>
-
- <li><a href="../../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../../CveReference.html">CveReference</a></li>
-
- <li><a href="../../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../../Glsa.html">Glsa</a></li>
-
- <li><a href="../../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../../IndexController.html">IndexController</a></li>
-
- <li><a href="../../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../../Package.html">Package</a></li>
-
- <li><a href="../../Reference.html">Reference</a></li>
-
- <li><a href="../../Revision.html">Revision</a></li>
-
- <li><a href="../../SearchController.html">SearchController</a></li>
-
- <li><a href="../../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../../String.html">String</a></li>
-
- <li><a href="../../Template.html">Template</a></li>
-
- <li><a href="../../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Glsamaker::Portage::Description</h1>
-
- <div id="description" class="description">
-
-<p><a href="../../Package.html">Package</a> description helper</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-class-method-details" class="method-section section">
- <h3 class="section-header">Public Class Methods</h3>
-
-
- <div id="ebuild-method" class="method-detail ">
- <a name="method-c-ebuild"></a>
-
-
- <div class="method-heading">
- <span class="method-name">ebuild</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Tries to fetch the description for the package <tt>atom</tt> from an
-ebuild’s entry (works if running on Gentoo)</p>
-
-
-
- <div class="method-source-code" id="ebuild-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 23</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">ebuild</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid package atom&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-constant">Portage</span>.<span class="ruby-identifier">valid_atom?</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-keyword">nil</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- ebuild-source -->
-
- </div>
-
-
-
-
- </div><!-- ebuild-method -->
-
-
- <div id="eix-method" class="method-detail ">
- <a name="method-c-eix"></a>
-
-
- <div class="method-heading">
- <span class="method-name">eix</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="eix-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 28</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">eix</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-keyword">nil</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- eix-source -->
-
- </div>
-
-
-
-
- </div><!-- eix-method -->
-
-
- <div id="google-method" class="method-detail ">
- <a name="method-c-google"></a>
-
-
- <div class="method-heading">
- <span class="method-name">google</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Loads a description for <tt>atom</tt> from Google</p>
-
-
-
- <div class="method-source-code" id="google-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 47</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">google</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-keyword">nil</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- google-source -->
-
- </div>
-
-
-
-
- </div><!-- google-method -->
-
-
- <div id="pgo-method" class="method-detail ">
- <a name="method-c-pgo"></a>
-
-
- <div class="method-heading">
- <span class="method-name">pgo</span><span
- class="method-args">(atom)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Loads a description for <tt>atom</tt> from packages.gentoo.org</p>
-
-
-
- <div class="method-source-code" id="pgo-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/portage.rb, line 33</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">pgo</span>(<span class="ruby-identifier">atom</span>)
- <span class="ruby-identifier">raise</span>(<span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Invalid package atom&quot;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-constant">Portage</span>.<span class="ruby-identifier">valid_atom?</span>(<span class="ruby-identifier">atom</span>)
-
- <span class="ruby-identifier">n</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>(<span class="ruby-constant">Glsamaker</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">get</span>(<span class="ruby-node">&quot;http://packages.gentoo.org/package/#{atom}&quot;</span>))
-
- <span class="ruby-identifier">node</span> = <span class="ruby-identifier">n</span>.<span class="ruby-identifier">css</span>(<span class="ruby-string">'p.description'</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">first</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">type</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span><span class="ruby-operator">::</span><span class="ruby-constant">Node</span><span class="ruby-operator">::</span><span class="ruby-constant">TEXT_NODE</span>
- <span class="ruby-identifier">node</span>.<span class="ruby-identifier">to_s</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;XML parse error&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- pgo-source -->
-
- </div>
-
-
-
-
- </div><!-- pgo-method -->
-
-
- </div><!-- public-class-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Glsamaker/XML.html b/doc/app/Glsamaker/XML.html
deleted file mode 100644
index 66e4f6b..0000000
--- a/doc/app/Glsamaker/XML.html
+++ /dev/null
@@ -1,323 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: Glsamaker::XML</title>
-
- <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
-
- <script src="../js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="../lib/glsamaker/xml_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/glsamaker/xml.rb">lib/glsamaker/xml.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-indent">#indent</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">Glsamaker::XML</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="indent-method" class="method-detail ">
- <a name="method-i-indent"></a>
-
-
- <div class="method-heading">
- <span class="method-name">indent</span><span
- class="method-args">(xml, options = {:indent => 2})</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="indent-source">
-<pre>
-<span class="ruby-comment"># File lib/glsamaker/xml.rb, line 14</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">indent</span>(<span class="ruby-identifier">xml</span>, <span class="ruby-identifier">options</span> = {<span class="ruby-value">:indent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">2</span>})
- <span class="ruby-identifier">command</span> = <span class="ruby-constant">GLSAMAKER_XMLINDENT</span>
- <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;xmlindent either does not exist or is not executable.&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">executable?</span> <span class="ruby-identifier">command</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">' '</span>, <span class="ruby-value">2</span>)[<span class="ruby-value">0</span>]
-
- <span class="ruby-identifier">command</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; -i#{Integer options[:indent]}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-value">:indent</span>
- <span class="ruby-identifier">command</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; -l#{Integer options[:maxcols]}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">has_key?</span> <span class="ruby-value">:maxcols</span>
-
- <span class="ruby-comment"># \r\n will make problems while converting</span>
- <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-string">&quot;\r&quot;</span>, <span class="ruby-string">&quot;&quot;</span>)
-
- <span class="ruby-constant">IO</span>.<span class="ruby-identifier">popen</span>(<span class="ruby-identifier">command</span>, <span class="ruby-string">'r+'</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">io</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">io</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">xml</span>
- <span class="ruby-identifier">io</span>.<span class="ruby-identifier">close_write</span>
- <span class="ruby-identifier">io</span>.<span class="ruby-identifier">read</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- indent-source -->
-
- </div>
-
-
-
-
- </div><!-- indent-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/IndexController.html b/doc/app/IndexController.html
deleted file mode 100644
index 4040caa..0000000
--- a/doc/app/IndexController.html
+++ /dev/null
@@ -1,487 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: IndexController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/index_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/index_controller.rb">app/controllers/index_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-about">#about</a></li>
-
- <li><a href="#method-i-error">#error</a></li>
-
- <li><a href="#method-i-index">#index</a></li>
-
- <li><a href="#method-i-profile">#profile</a></li>
-
- <li><a href="#method-i-update">#update</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">IndexController</h1>
-
- <div id="description" class="description">
-
-<p>Index controller</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="about-method" class="method-detail ">
- <a name="method-i-about"></a>
-
-
- <div class="method-heading">
- <span class="method-name">about</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="about-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/index_controller.rb, line 32</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">about</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- about-source -->
-
- </div>
-
-
-
-
- </div><!-- about-method -->
-
-
- <div id="error-method" class="method-detail ">
- <a name="method-i-error"></a>
-
-
- <div class="method-heading">
- <span class="method-name">error</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="error-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/index_controller.rb, line 20</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">error</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;user&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index/error-user'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'notice'</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;disabled&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index/error-disabled'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'notice'</span>
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;access&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index/error-access'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'notice'</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'index/error-system'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'notice'</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- error-source -->
-
- </div>
-
-
-
-
- </div><!-- error-method -->
-
-
- <div id="index-method" class="method-detail ">
- <a name="method-i-index"></a>
-
-
- <div class="method-heading">
- <span class="method-name">index</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="index-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/index_controller.rb, line 16</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index</span>
- <span class="ruby-ivar">@my_drafts</span> = <span class="ruby-constant">Glsa</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'draft'</span>, <span class="ruby-value">:submitter</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">current_user</span>.<span class="ruby-identifier">id</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;updated_at DESC&quot;</span>).<span class="ruby-identifier">limit</span>(<span class="ruby-value">10</span>)
-<span class="ruby-keyword">end</span></pre>
- </div><!-- index-source -->
-
- </div>
-
-
-
-
- </div><!-- index-method -->
-
-
- <div id="profile-method" class="method-detail ">
- <a name="method-i-profile"></a>
-
-
- <div class="method-heading">
- <span class="method-name">profile</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="profile-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/index_controller.rb, line 35</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">profile</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-identifier">current_user</span>
- <span class="ruby-ivar">@prefs</span> = <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">preferences</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- profile-source -->
-
- </div>
-
-
-
-
- </div><!-- profile-method -->
-
-
- <div id="update-method" class="method-detail ">
- <a name="method-i-update"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="update-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/index_controller.rb, line 40</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update</span>
- <span class="ruby-ivar">@user</span> = <span class="ruby-identifier">current_user</span>
- <span class="ruby-ivar">@prefs</span> = <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">preferences</span>
-
- <span class="ruby-identifier">preferences</span> = {<span class="ruby-value">:own_ready</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:own_comment</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:edit</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:new_req</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:not_me</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>}
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:preferences</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-node">]own_ready own_comment edit new_req not_me]</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">notification</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">preferences</span>[<span class="ruby-identifier">notification</span>.<span class="ruby-identifier">to_sym</span>] = <span class="ruby-identifier">params</span>[<span class="ruby-value">:preferences</span>][<span class="ruby-identifier">notification</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'1'</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">preferences</span>[<span class="ruby-value">:mail</span>] <span class="ruby-operator">||=</span> {}
- <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">preferences</span>[<span class="ruby-value">:mail</span>] = <span class="ruby-identifier">preferences</span>
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@user</span>.<span class="ruby-identifier">save</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:notice</span>] = <span class="ruby-string">&quot;Successfully updated your profile&quot;</span>
- <span class="ruby-identifier">redirect_to</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;index&quot;</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">flash</span>[<span class="ruby-value">:error</span>] = <span class="ruby-string">&quot;Could not update your profile&quot;</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:action</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;profile&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update-source -->
-
- </div>
-
-
-
-
- </div><!-- update-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/IndexHelper.html b/doc/app/IndexHelper.html
deleted file mode 100644
index 7590c64..0000000
--- a/doc/app/IndexHelper.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: IndexHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/index_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/index_helper.rb">app/helpers/index_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">IndexHelper</h1>
-
- <div id="description" class="description">
-
-<p>Index Helper</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Package.html b/doc/app/Package.html
deleted file mode 100644
index c3a080e..0000000
--- a/doc/app/Package.html
+++ /dev/null
@@ -1,332 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Package</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/package_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/package.rb">app/models/package.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-xml_comp">#xml_comp</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Package</h1>
-
- <div id="description" class="description">
-
-<p><a href="Package.html">Package</a> model</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="xml_comp-method" class="method-detail ">
- <a name="method-i-xml_comp"></a>
-
-
- <div class="method-heading">
- <span class="method-name">xml_comp</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the comparator in the format needed for the XML</p>
-
-
-
- <div class="method-source-code" id="xml_comp-source">
-<pre>
-<span class="ruby-comment"># File app/models/package.rb, line 17</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">xml_comp</span>
- <span class="ruby-identifier">comps</span> = {
- <span class="ruby-string">'&gt;='</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'ge'</span>,
- <span class="ruby-string">'&gt;'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'gt'</span>,
- <span class="ruby-string">'='</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'eq'</span>,
- <span class="ruby-string">'&lt;='</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'le'</span>,
- <span class="ruby-string">'&lt;'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'lt'</span>,
- <span class="ruby-string">'*&lt;'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'rlt'</span>,
- <span class="ruby-string">'*&lt;='</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'rle'</span>,
- <span class="ruby-string">'*&gt;'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'rgt'</span>,
- <span class="ruby-string">'*&gt;='</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'rge'</span>
- }
-
- <span class="ruby-identifier">comps</span>[<span class="ruby-keyword">self</span>.<span class="ruby-identifier">comp</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- xml_comp-source -->
-
- </div>
-
-
-
-
- </div><!-- xml_comp-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Reference.html b/doc/app/Reference.html
deleted file mode 100644
index 839fa87..0000000
--- a/doc/app/Reference.html
+++ /dev/null
@@ -1,271 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Reference</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/reference_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/reference.rb">app/models/reference.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Reference</h1>
-
- <div id="description" class="description">
-
-<p><a href="Reference.html">Reference</a> model</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Revision.html b/doc/app/Revision.html
deleted file mode 100644
index a8d7364..0000000
--- a/doc/app/Revision.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Revision</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/revision_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/revision.rb">app/models/revision.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-bug_ready-3F">#bug_ready?</a></li>
-
- <li><a href="#method-i-deep_copy">#deep_copy</a></li>
-
- <li><a href="#method-i-get_linked_bugs">#get_linked_bugs</a></li>
-
- <li><a href="#method-i-packages_by_atom">#packages_by_atom</a></li>
-
- <li><a href="#method-i-to_s">#to_s</a></li>
-
- <li><a href="#method-i-update_cached_bug_metadata">#update_cached_bug_metadata</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Revision</h1>
-
- <div id="description" class="description">
-
-<p><a href="Revision.html">Revision</a> model</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="bug_ready-3F-method" class="method-detail ">
- <a name="method-i-bug_ready-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bug_ready?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Checks all assigned bugs for bug ready status</p>
-
-
-
- <div class="method-source-code" id="bug_ready-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/revision.rb, line 56</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bug_ready?</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">b</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">bug_ready?</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bug_ready-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- bug_ready-3F-method -->
-
-
- <div id="deep_copy-method" class="method-detail ">
- <a name="method-i-deep_copy"></a>
-
-
- <div class="method-heading">
- <span class="method-name">deep_copy</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Creates a deep copy of a previous revision, copying all bugs, references
-and packages, incrementing the revision ID by one. <b>The caller must take
-care of deleting this revision again in case any error occurs later.</b></p>
-
-
-
- <div class="method-source-code" id="deep_copy-source">
-<pre>
-<span class="ruby-comment"># File app/models/revision.rb, line 74</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">deep_copy</span>
- <span class="ruby-identifier">new_rev</span> = <span class="ruby-identifier">dup</span>
- <span class="ruby-identifier">new_rev</span>.<span class="ruby-identifier">revid</span> = <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">next_revid</span>
-
- <span class="ruby-identifier">references</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">reference</span><span class="ruby-operator">|</span> <span class="ruby-identifier">new_rev</span>.<span class="ruby-identifier">references</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">reference</span>.<span class="ruby-identifier">dup</span> }
- <span class="ruby-identifier">packages</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">package</span><span class="ruby-operator">|</span> <span class="ruby-identifier">new_rev</span>.<span class="ruby-identifier">packages</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">package</span>.<span class="ruby-identifier">dup</span> }
- <span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span> <span class="ruby-identifier">new_rev</span>.<span class="ruby-identifier">bugs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">dup</span> }
-
- <span class="ruby-identifier">new_rev</span>.<span class="ruby-identifier">save!</span>
- <span class="ruby-identifier">new_rev</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- deep_copy-source -->
-
- </div>
-
-
-
-
- </div><!-- deep_copy-method -->
-
-
- <div id="get_linked_bugs-method" class="method-detail ">
- <a name="method-i-get_linked_bugs"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get_linked_bugs</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns an Array of Integers of the bugs linked to this revision</p>
-
-
-
- <div class="method-source-code" id="get_linked_bugs-source">
-<pre>
-<span class="ruby-comment"># File app/models/revision.rb, line 49</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get_linked_bugs</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">bug</span>.<span class="ruby-identifier">bug_id</span>.<span class="ruby-identifier">to_i</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get_linked_bugs-source -->
-
- </div>
-
-
-
-
- </div><!-- get_linked_bugs-method -->
-
-
- <div id="packages_by_atom-method" class="method-detail ">
- <a name="method-i-packages_by_atom"></a>
-
-
- <div class="method-heading">
- <span class="method-name">packages_by_atom</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns the packages linked to this revision grouped by atoms</p>
-
-
-
- <div class="method-source-code" id="packages_by_atom-source">
-<pre>
-<span class="ruby-comment"># File app/models/revision.rb, line 87</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">packages_by_atom</span>
- <span class="ruby-identifier">packages_list</span> = {}
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">packages</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">packages_list</span>[<span class="ruby-identifier">p</span>[<span class="ruby-value">:atom</span>]] <span class="ruby-operator">||=</span> {}
- (<span class="ruby-identifier">packages_list</span>[<span class="ruby-identifier">p</span>[<span class="ruby-value">:atom</span>]][<span class="ruby-identifier">p</span>[<span class="ruby-value">:my_type</span>]] <span class="ruby-operator">||=</span> []) <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">p</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">packages_list</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- packages_by_atom-source -->
-
- </div>
-
-
-
-
- </div><!-- packages_by_atom-method -->
-
-
- <div id="to_s-method" class="method-detail ">
- <a name="method-i-to_s"></a>
-
-
- <div class="method-heading">
- <span class="method-name">to_s</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="to_s-source">
-<pre>
-<span class="ruby-comment"># File app/models/revision.rb, line 97</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
- <span class="ruby-identifier">s</span> = <span class="ruby-node">&quot;r#{self.revid}&quot;</span>
- <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">is_release?</span>
- <span class="ruby-identifier">s</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot; (release #{self.release_revision})&quot;</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">s</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- to_s-source -->
-
- </div>
-
-
-
-
- </div><!-- to_s-method -->
-
-
- <div id="update_cached_bug_metadata-method" class="method-detail ">
- <a name="method-i-update_cached_bug_metadata"></a>
-
-
- <div class="method-heading">
- <span class="method-name">update_cached_bug_metadata</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Updates the cached metadata of all assigned bugs</p>
-
-
-
- <div class="method-source-code" id="update_cached_bug_metadata-source">
-<pre>
-<span class="ruby-comment"># File app/models/revision.rb, line 65</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">update_cached_bug_metadata</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">bugs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">b</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">b</span>.<span class="ruby-identifier">update_cached_metadata</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- update_cached_bug_metadata-source -->
-
- </div>
-
-
-
-
- </div><!-- update_cached_bug_metadata-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/SearchController.html b/doc/app/SearchController.html
deleted file mode 100644
index 0c68917..0000000
--- a/doc/app/SearchController.html
+++ /dev/null
@@ -1,378 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: SearchController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/search_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/search_controller.rb">app/controllers/search_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-index">#index</a></li>
-
- <li><a href="#method-i-results">#results</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">SearchController</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="index-method" class="method-detail ">
- <a name="method-i-index"></a>
-
-
- <div class="method-heading">
- <span class="method-name">index</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="index-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/search_controller.rb, line 2</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- index-source -->
-
- </div>
-
-
-
-
- </div><!-- index-method -->
-
-
- <div id="results-method" class="method-detail ">
- <a name="method-i-results"></a>
-
-
- <div class="method-heading">
- <span class="method-name">results</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="results-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/search_controller.rb, line 5</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">results</span>
- <span class="ruby-identifier">search</span> = <span class="ruby-constant">ThinkingSphinx</span>.<span class="ruby-identifier">search</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:q</span>], <span class="ruby-value">:max_matches</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">1000</span>, <span class="ruby-value">:per_page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">1000</span>
-
- <span class="ruby-ivar">@results</span> = {}
- <span class="ruby-identifier">search</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">result</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">to_s</span>
- <span class="ruby-ivar">@results</span>[<span class="ruby-identifier">klass</span>] = [] <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@results</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">klass</span>
- <span class="ruby-ivar">@results</span>[<span class="ruby-identifier">klass</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">result</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@results</span>.<span class="ruby-identifier">include?</span> <span class="ruby-string">'Revision'</span>
- <span class="ruby-ivar">@results</span>[<span class="ruby-string">'Glsa'</span>] = [] <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@results</span>[<span class="ruby-string">'Glsa'</span>]
-
- <span class="ruby-ivar">@results</span>[<span class="ruby-string">'Revision'</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rev</span><span class="ruby-operator">|</span>
- <span class="ruby-ivar">@results</span>[<span class="ruby-string">'Glsa'</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">rev</span>.<span class="ruby-identifier">glsa</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@results</span>[<span class="ruby-string">'Glsa'</span>].<span class="ruby-identifier">uniq!</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-comment"># Filter search results</span>
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@results</span>.<span class="ruby-identifier">include?</span> <span class="ruby-string">'Glsa'</span>
- <span class="ruby-ivar">@results</span>[<span class="ruby-string">'Glsa'</span>].<span class="ruby-identifier">delete_if</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">result</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">not</span> <span class="ruby-identifier">check_object_access</span>(<span class="ruby-identifier">result</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Riddle</span><span class="ruby-operator">::</span><span class="ruby-constant">ConnectionError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-keyword">true</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- results-source -->
-
- </div>
-
-
-
-
- </div><!-- results-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/SearchHelper.html b/doc/app/SearchHelper.html
deleted file mode 100644
index f928d82..0000000
--- a/doc/app/SearchHelper.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: SearchHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/search_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/search_helper.rb">app/helpers/search_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">SearchHelper</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/String.html b/doc/app/String.html
deleted file mode 100644
index 1123444..0000000
--- a/doc/app/String.html
+++ /dev/null
@@ -1,435 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: String</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./lib/tasks/utils_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="lib/tasks/utils.rb">lib/tasks/utils.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">Object</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-bold">#bold</a></li>
-
- <li><a href="#method-i-green">#green</a></li>
-
- <li><a href="#method-i-purple">#purple</a></li>
-
- <li><a href="#method-i-red">#red</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">String</h1>
-
- <div id="description" class="description">
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="bold-method" class="method-detail ">
- <a name="method-i-bold"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bold</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="bold-source">
-<pre>
-<span class="ruby-comment"># File lib/tasks/utils.rb, line 26</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bold</span>
- <span class="ruby-identifier">ansi</span> <span class="ruby-value">1</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bold-source -->
-
- </div>
-
-
-
-
- </div><!-- bold-method -->
-
-
- <div id="green-method" class="method-detail ">
- <a name="method-i-green"></a>
-
-
- <div class="method-heading">
- <span class="method-name">green</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="green-source">
-<pre>
-<span class="ruby-comment"># File lib/tasks/utils.rb, line 22</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">green</span>
- <span class="ruby-identifier">ansi</span> <span class="ruby-value">32</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- green-source -->
-
- </div>
-
-
-
-
- </div><!-- green-method -->
-
-
- <div id="purple-method" class="method-detail ">
- <a name="method-i-purple"></a>
-
-
- <div class="method-heading">
- <span class="method-name">purple</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="purple-source">
-<pre>
-<span class="ruby-comment"># File lib/tasks/utils.rb, line 14</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">purple</span>
- <span class="ruby-identifier">ansi</span> <span class="ruby-value">35</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- purple-source -->
-
- </div>
-
-
-
-
- </div><!-- purple-method -->
-
-
- <div id="red-method" class="method-detail ">
- <a name="method-i-red"></a>
-
-
- <div class="method-heading">
- <span class="method-name">red</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="red-source">
-<pre>
-<span class="ruby-comment"># File lib/tasks/utils.rb, line 18</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">red</span>
- <span class="ruby-identifier">ansi</span> <span class="ruby-value">31</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- red-source -->
-
- </div>
-
-
-
-
- </div><!-- red-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/Template.html b/doc/app/Template.html
deleted file mode 100644
index 4f809ee..0000000
--- a/doc/app/Template.html
+++ /dev/null
@@ -1,269 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: Template</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/template_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/template.rb">app/models/template.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">Template</h1>
-
- <div id="description" class="description">
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/ToolsController.html b/doc/app/ToolsController.html
deleted file mode 100644
index 5c1c478..0000000
--- a/doc/app/ToolsController.html
+++ /dev/null
@@ -1,448 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: ToolsController</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/controllers/tools_controller_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/controllers/tools_controller.rb">app/controllers/tools_controller.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link"><a href="ApplicationController.html">ApplicationController</a></p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-background">#background</a></li>
-
- <li><a href="#method-i-bugs_ajax_info">#bugs_ajax_info</a></li>
-
- <li><a href="#method-i-template">#template</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">ToolsController</h1>
-
- <div id="description" class="description">
-
-<p>Tools controller</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="background-method" class="method-detail ">
- <a name="method-i-background"></a>
-
-
- <div class="method-heading">
- <span class="method-name">background</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="background-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/tools_controller.rb, line 69</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">background</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- background-source -->
-
- </div>
-
-
-
-
- </div><!-- background-method -->
-
-
- <div id="bugs_ajax_info-method" class="method-detail ">
- <a name="method-i-bugs_ajax_info"></a>
-
-
- <div class="method-heading">
- <span class="method-name">bugs_ajax_info</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Provides information for the ‘file new request’ page</p>
-
-
-
- <div class="method-source-code" id="bugs_ajax_info-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/tools_controller.rb, line 17</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">bugs_ajax_info</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:bugs</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-identifier">render</span> <span class="ruby-value">:text</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&quot;No bug given&quot;</span>, <span class="ruby-value">:status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">500</span>
- <span class="ruby-keyword">return</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">bug_ids</span> = <span class="ruby-constant">Bugzilla</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">str2bugIDs</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:bugs</span>])
-
- <span class="ruby-ivar">@bugs</span> = []
- <span class="ruby-identifier">bug_ids</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug_id</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@bugs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Bugzilla</span><span class="ruby-operator">::</span><span class="ruby-constant">Bug</span>.<span class="ruby-identifier">load_from_id</span>(<span class="ruby-identifier">bug_id</span>.<span class="ruby-identifier">to_i</span>)
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
- <span class="ruby-ivar">@bugs</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;Ignoring #{bug_id} #{e.message}&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">buginfo</span> = <span class="ruby-identifier">render_to_string</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'tools/ajaxbugs'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
-
- <span class="ruby-comment"># Generating a description</span>
- <span class="ruby-ivar">@bugs</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">i</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">String</span>}
- <span class="ruby-identifier">suggestion</span> = <span class="ruby-keyword">nil</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@bugs</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
- <span class="ruby-ivar">@text</span> = <span class="ruby-ivar">@bugs</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">summary</span>
- <span class="ruby-identifier">suggestion</span> = <span class="ruby-identifier">render_to_string</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'tools/ajaxdescr'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@atoms</span> = []
- <span class="ruby-ivar">@bugs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">bug</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">matchdata</span> = <span class="ruby-regexp">/([\w-]+)\/([\w-]+)(-([\w.]+))?/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">bug</span>.<span class="ruby-identifier">summary</span>)
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">matchdata</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-identifier">category</span> = <span class="ruby-identifier">matchdata</span>[<span class="ruby-value">1</span>]
- <span class="ruby-identifier">package</span> = <span class="ruby-identifier">matchdata</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/-+?$/</span>, <span class="ruby-string">''</span>)
-
- <span class="ruby-ivar">@atoms</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{category}/#{package}&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-ivar">@atoms</span>.<span class="ruby-identifier">uniq!</span>
-
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@atoms</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
- <span class="ruby-ivar">@text</span> = <span class="ruby-ivar">@atoms</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">', '</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;: Multiple vulnerabilities&quot;</span>
- <span class="ruby-identifier">suggestion</span> = <span class="ruby-identifier">render_to_string</span> <span class="ruby-value">:template</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'tools/ajaxdescr'</span>, <span class="ruby-value">:layout</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">suggestion</span> <span class="ruby-operator">||=</span> <span class="ruby-string">&quot;(no suggestion available)&quot;</span>
-
- <span class="ruby-identifier">render</span> <span class="ruby-value">:json</span> =<span class="ruby-operator">&gt;</span> {<span class="ruby-string">&quot;buginfo&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">buginfo</span>, <span class="ruby-string">&quot;title&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">suggestion</span>}
-<span class="ruby-keyword">end</span></pre>
- </div><!-- bugs_ajax_info-source -->
-
- </div>
-
-
-
-
- </div><!-- bugs_ajax_info-method -->
-
-
- <div id="template-method" class="method-detail ">
- <a name="method-i-template"></a>
-
-
- <div class="method-heading">
- <span class="method-name">template</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="template-source">
-<pre>
-<span class="ruby-comment"># File app/controllers/tools_controller.rb, line 73</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">template</span>
- <span class="ruby-ivar">@target</span> = <span class="ruby-identifier">params</span>[<span class="ruby-value">:template</span>][<span class="ruby-value">:target</span>]
-
- <span class="ruby-keyword">if</span> <span class="ruby-constant">GLSAMAKER_TEMPLATE_TARGETS</span>.<span class="ruby-identifier">include?</span> <span class="ruby-ivar">@target</span>
- <span class="ruby-keyword">begin</span>
- <span class="ruby-ivar">@template</span> = <span class="ruby-constant">Template</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:template</span>][<span class="ruby-value">:id</span>])
- <span class="ruby-keyword">rescue</span> <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">RecordNotFound</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-string">&quot;Cannot find template&quot;</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-ivar">@error</span> = <span class="ruby-string">&quot;Invalid target&quot;</span>
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- template-source -->
-
- </div>
-
-
-
-
- </div><!-- template-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/ToolsHelper.html b/doc/app/ToolsHelper.html
deleted file mode 100644
index 37a60fd..0000000
--- a/doc/app/ToolsHelper.html
+++ /dev/null
@@ -1,263 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Module: ToolsHelper</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="module">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/helpers/tools_helper_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/helpers/tools_helper.rb">app/helpers/tools_helper.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
-
-
-
-
-
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="module">ToolsHelper</h1>
-
- <div id="description" class="description">
-
-<p>Tools helper</p>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/User.html b/doc/app/User.html
deleted file mode 100644
index eff1570..0000000
--- a/doc/app/User.html
+++ /dev/null
@@ -1,444 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>Class: User</title>
-
- <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
-
- <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body id="top" class="class">
-
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="./index.html">Home</a>
- <a href="./index.html#classes">Classes</a>
- <a href="./index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="file-metadata">
- <div id="file-list-section" class="section">
- <h3 class="section-header">In Files</h3>
- <div class="section-body">
- <ul>
-
- <li><a href="./app/models/user_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
- class="thickbox" title="app/models/user.rb">app/models/user.rb</a></li>
-
- </ul>
- </div>
- </div>
-
-
- </div>
-
- <div id="class-metadata">
-
- <!-- Parent Class -->
- <div id="parent-class-section" class="section">
- <h3 class="section-header">Parent</h3>
-
- <p class="link">ActiveRecord::Base</p>
-
- </div>
-
-
-
-
-
-
-
- <!-- Method Quickref -->
- <div id="method-list-section" class="section">
- <h3 class="section-header">Methods</h3>
- <ul class="link-list">
-
- <li><a href="#method-i-can_access-3F">#can_access?</a></li>
-
- <li><a href="#method-i-get_pref_category">#get_pref_category</a></li>
-
- <li><a href="#method-i-is_el_jefe-3F">#is_el_jefe?</a></li>
-
- <li><a href="#method-i-to_s">#to_s</a></li>
-
- </ul>
- </div>
-
-
-
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="./doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class/Module Index
- <span class="search-toggle"><img src="./images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="./Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="./Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="./Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="./Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="./Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="./Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="./Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="./Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="./Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="./Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="./Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="./Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="./Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="./Admin.html">Admin</a></li>
-
- <li><a href="./Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="./Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="./Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="./Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="./Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="./Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="./Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="./Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="./Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="./Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="./Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="./Comment.html">Comment</a></li>
-
- <li><a href="./Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="./ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="./ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="./Authentication.html">Authentication</a></li>
-
- <li><a href="./Authorization.html">Authorization</a></li>
-
- <li><a href="./Bug.html">Bug</a></li>
-
- <li><a href="./BugController.html">BugController</a></li>
-
- <li><a href="./BugHelper.html">BugHelper</a></li>
-
- <li><a href="./BugsController.html">BugsController</a></li>
-
- <li><a href="./BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="./CommentsController.html">CommentsController</a></li>
-
- <li><a href="./CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="./Cpe.html">Cpe</a></li>
-
- <li><a href="./Cve.html">Cve</a></li>
-
- <li><a href="./CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="./CveChange.html">CveChange</a></li>
-
- <li><a href="./CveComment.html">CveComment</a></li>
-
- <li><a href="./CveController.html">CveController</a></li>
-
- <li><a href="./CveHelper.html">CveHelper</a></li>
-
- <li><a href="./CveReference.html">CveReference</a></li>
-
- <li><a href="./GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="./Glsa.html">Glsa</a></li>
-
- <li><a href="./GlsaController.html">GlsaController</a></li>
-
- <li><a href="./GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="./GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="./IndexController.html">IndexController</a></li>
-
- <li><a href="./IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="./Package.html">Package</a></li>
-
- <li><a href="./Reference.html">Reference</a></li>
-
- <li><a href="./Revision.html">Revision</a></li>
-
- <li><a href="./SearchController.html">SearchController</a></li>
-
- <li><a href="./SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="./String.html">String</a></li>
-
- <li><a href="./Template.html">Template</a></li>
-
- <li><a href="./ToolsController.html">ToolsController</a></li>
-
- <li><a href="./ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="./User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
- <h1 class="class">User</h1>
-
- <div id="description" class="description">
-
-<h1>Access levels</h1>
-<dl class="rdoc-list"><dt><b>0 (Contributor)</b></dt>
-<dd>
-<p>Can see own drafts, can fill in requests</p>
-</dd><dt><b>1 (Padawan)</b></dt>
-<dd>
-<p>all of the above, plus see and edit all drafts</p>
-</dd><dt><b>2 (Full member)</b></dt>
-<dd>
-<p>all of the above, plus voting</p>
-</dd><dt><b>3 (Confidential member)</b></dt>
-<dd>
-<p>all of the above, including restricted drafts</p>
-</dd></dl>
-
- </div><!-- description -->
-
-
-
-
- <div id="5Buntitled-5D" class="documentation-section">
-
-
-
-
-
-
-
-
- <!-- Methods -->
-
- <div id="public-instance-method-details" class="method-section section">
- <h3 class="section-header">Public Instance Methods</h3>
-
-
- <div id="can_access-3F-method" class="method-detail ">
- <a name="method-i-can_access-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">can_access?</span><span
- class="method-args">(glsa)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Checks access to a given GLSA</p>
-
-
-
- <div class="method-source-code" id="can_access-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/user.rb, line 44</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">can_access?</span>(<span class="ruby-identifier">glsa</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">access</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">and</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">is_owner?</span> <span class="ruby-keyword">self</span>
- <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">access</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">3</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">glsa</span>.<span class="ruby-identifier">restricted</span>
-
- <span class="ruby-keyword">true</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- can_access-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- can_access-3F-method -->
-
-
- <div id="get_pref_category-method" class="method-detail ">
- <a name="method-i-get_pref_category"></a>
-
-
- <div class="method-heading">
- <span class="method-name">get_pref_category</span><span
- class="method-args">(category)</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Returns a certain category form the user’s preferences or an empty hash
-if that category does not exist</p>
-
-
-
- <div class="method-source-code" id="get_pref_category-source">
-<pre>
-<span class="ruby-comment"># File app/models/user.rb, line 57</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">get_pref_category</span>(<span class="ruby-identifier">category</span>)
- <span class="ruby-keyword">return</span> {} <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">preferences</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">or</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">preferences</span>[<span class="ruby-identifier">category</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span>
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">preferences</span>[<span class="ruby-identifier">category</span>]
-<span class="ruby-keyword">end</span></pre>
- </div><!-- get_pref_category-source -->
-
- </div>
-
-
-
-
- </div><!-- get_pref_category-method -->
-
-
- <div id="is_el_jefe-3F-method" class="method-detail ">
- <a name="method-i-is_el_jefe-3F"></a>
-
-
- <div class="method-heading">
- <span class="method-name">is_el_jefe?</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
- <p>Is the user an admin? ;)</p>
-
-
-
- <div class="method-source-code" id="is_el_jefe-3F-source">
-<pre>
-<span class="ruby-comment"># File app/models/user.rb, line 39</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">is_el_jefe?</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">jefe</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- is_el_jefe-3F-source -->
-
- </div>
-
-
-
-
- </div><!-- is_el_jefe-3F-method -->
-
-
- <div id="to_s-method" class="method-detail ">
- <a name="method-i-to_s"></a>
-
-
- <div class="method-heading">
- <span class="method-name">to_s</span><span
- class="method-args">()</span>
- <span class="method-click-advice">click to toggle source</span>
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
- <div class="method-source-code" id="to_s-source">
-<pre>
-<span class="ruby-comment"># File app/models/user.rb, line 51</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
- <span class="ruby-node">&quot;#{name} (#{login})&quot;</span>
-<span class="ruby-keyword">end</span></pre>
- </div><!-- to_s-source -->
-
- </div>
-
-
-
-
- </div><!-- to_s-method -->
-
-
- </div><!-- public-instance-method-details -->
-
- </div><!-- 5Buntitled-5D -->
-
-
- </div><!-- documentation -->
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/admin/index_controller_rb.html b/doc/app/app/controllers/admin/index_controller_rb.html
deleted file mode 100644
index f67d077..0000000
--- a/doc/app/app/controllers/admin/index_controller_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: index_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
-
- <script src="../../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/admin/templates_controller_rb.html b/doc/app/app/controllers/admin/templates_controller_rb.html
deleted file mode 100644
index 28fc938..0000000
--- a/doc/app/app/controllers/admin/templates_controller_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: templates_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
-
- <script src="../../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/admin/users_controller_rb.html b/doc/app/app/controllers/admin/users_controller_rb.html
deleted file mode 100644
index 90174b6..0000000
--- a/doc/app/app/controllers/admin/users_controller_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: users_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
-
- <script src="../../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/application_controller_rb.html b/doc/app/app/controllers/application_controller_rb.html
deleted file mode 100644
index 5d26309..0000000
--- a/doc/app/app/controllers/application_controller_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: application_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Thu Sep 01 20:06:30 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/bug_controller_rb.html b/doc/app/app/controllers/bug_controller_rb.html
deleted file mode 100644
index dfff5bd..0000000
--- a/doc/app/app/controllers/bug_controller_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bug_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/bugs_controller_rb.html b/doc/app/app/controllers/bugs_controller_rb.html
deleted file mode 100644
index 7ed9419..0000000
--- a/doc/app/app/controllers/bugs_controller_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bugs_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Thu Sep 01 20:06:58 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2011 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/comments_controller_rb.html b/doc/app/app/controllers/comments_controller_rb.html
deleted file mode 100644
index 4c9c812..0000000
--- a/doc/app/app/controllers/comments_controller_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: comments_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Sep 04 14:49:11 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2011 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/cve_controller_rb.html b/doc/app/app/controllers/cve_controller_rb.html
deleted file mode 100644
index 413121f..0000000
--- a/doc/app/app/controllers/cve_controller_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/glsa_controller_rb.html b/doc/app/app/controllers/glsa_controller_rb.html
deleted file mode 100644
index 91d7860..0000000
--- a/doc/app/app/controllers/glsa_controller_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: glsa_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Sep 04 00:52:07 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010-11 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/index_controller_rb.html b/doc/app/app/controllers/index_controller_rb.html
deleted file mode 100644
index 47199fe..0000000
--- a/doc/app/app/controllers/index_controller_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: index_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 20:18:29 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/search_controller_rb.html b/doc/app/app/controllers/search_controller_rb.html
deleted file mode 100644
index be6f4e9..0000000
--- a/doc/app/app/controllers/search_controller_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: search_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Thu Sep 01 20:00:53 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/controllers/tools_controller_rb.html b/doc/app/app/controllers/tools_controller_rb.html
deleted file mode 100644
index 1ce2ac1..0000000
--- a/doc/app/app/controllers/tools_controller_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: tools_controller.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 19:16:21 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/admin/index_helper_rb.html b/doc/app/app/helpers/admin/index_helper_rb.html
deleted file mode 100644
index 3f09817..0000000
--- a/doc/app/app/helpers/admin/index_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: index_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
-
- <script src="../../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/admin/templates_helper_rb.html b/doc/app/app/helpers/admin/templates_helper_rb.html
deleted file mode 100644
index 14d63e2..0000000
--- a/doc/app/app/helpers/admin/templates_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: templates_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
-
- <script src="../../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/admin/users_helper_rb.html b/doc/app/app/helpers/admin/users_helper_rb.html
deleted file mode 100644
index 04875e2..0000000
--- a/doc/app/app/helpers/admin/users_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: users_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
-
- <script src="../../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/application_helper_rb.html b/doc/app/app/helpers/application_helper_rb.html
deleted file mode 100644
index 8dfd4e7..0000000
--- a/doc/app/app/helpers/application_helper_rb.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: application_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Tue Aug 30 18:13:21 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-11 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2006-07 Jean-Philippe Lang
-Copyright (C) 2008 Robert Buchholz &lt;rbu@gentoo.org&gt; and Tobias Heinlein &lt;keytoaster@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/bug_helper_rb.html b/doc/app/app/helpers/bug_helper_rb.html
deleted file mode 100644
index f6efc2b..0000000
--- a/doc/app/app/helpers/bug_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bug_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/bugs_helper_rb.html b/doc/app/app/helpers/bugs_helper_rb.html
deleted file mode 100644
index 9fb0d4a..0000000
--- a/doc/app/app/helpers/bugs_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bugs_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/comments_helper_rb.html b/doc/app/app/helpers/comments_helper_rb.html
deleted file mode 100644
index 5e3f03f..0000000
--- a/doc/app/app/helpers/comments_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: comments_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/cve_helper_rb.html b/doc/app/app/helpers/cve_helper_rb.html
deleted file mode 100644
index 536b23c..0000000
--- a/doc/app/app/helpers/cve_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 22 23:12:58 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/glsa_helper_rb.html b/doc/app/app/helpers/glsa_helper_rb.html
deleted file mode 100644
index 3d3e6fa..0000000
--- a/doc/app/app/helpers/glsa_helper_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: glsa_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 19:02:21 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/index_helper_rb.html b/doc/app/app/helpers/index_helper_rb.html
deleted file mode 100644
index f737cd6..0000000
--- a/doc/app/app/helpers/index_helper_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: index_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/search_helper_rb.html b/doc/app/app/helpers/search_helper_rb.html
deleted file mode 100644
index ede1014..0000000
--- a/doc/app/app/helpers/search_helper_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: search_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Tue Aug 30 15:17:23 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/helpers/tools_helper_rb.html b/doc/app/app/helpers/tools_helper_rb.html
deleted file mode 100644
index 26e2e42..0000000
--- a/doc/app/app/helpers/tools_helper_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: tools_helper.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/mailers/glsa_mailer_rb.html b/doc/app/app/mailers/glsa_mailer_rb.html
deleted file mode 100644
index 43cd59d..0000000
--- a/doc/app/app/mailers/glsa_mailer_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: glsa_mailer.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/bug_rb.html b/doc/app/app/models/bug_rb.html
deleted file mode 100644
index 01d0e8e..0000000
--- a/doc/app/app/models/bug_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bug.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Tue Aug 30 15:17:23 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/comment_rb.html b/doc/app/app/models/comment_rb.html
deleted file mode 100644
index 7c05461..0000000
--- a/doc/app/app/models/comment_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: comment.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Sep 04 15:03:52 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/cpe_rb.html b/doc/app/app/models/cpe_rb.html
deleted file mode 100644
index 12e0670..0000000
--- a/doc/app/app/models/cpe_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cpe.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/cve_assignment_rb.html b/doc/app/app/models/cve_assignment_rb.html
deleted file mode 100644
index b8d9d20..0000000
--- a/doc/app/app/models/cve_assignment_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve_assignment.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/cve_change_rb.html b/doc/app/app/models/cve_change_rb.html
deleted file mode 100644
index 0b6b21c..0000000
--- a/doc/app/app/models/cve_change_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve_change.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/cve_comment_rb.html b/doc/app/app/models/cve_comment_rb.html
deleted file mode 100644
index b2a0d50..0000000
--- a/doc/app/app/models/cve_comment_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve_comment.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Tue Aug 30 15:17:23 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/cve_rb.html b/doc/app/app/models/cve_rb.html
deleted file mode 100644
index 6aae252..0000000
--- a/doc/app/app/models/cve_rb.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Tue Aug 30 15:17:23 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>glsamaker/helpers</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/cve_reference_rb.html b/doc/app/app/models/cve_reference_rb.html
deleted file mode 100644
index 5e57e0e..0000000
--- a/doc/app/app/models/cve_reference_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: cve_reference.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/glsa_rb.html b/doc/app/app/models/glsa_rb.html
deleted file mode 100644
index 51ca649..0000000
--- a/doc/app/app/models/glsa_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: glsa.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Sep 04 14:42:42 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/package_rb.html b/doc/app/app/models/package_rb.html
deleted file mode 100644
index 64e10d4..0000000
--- a/doc/app/app/models/package_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: package.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/reference_rb.html b/doc/app/app/models/reference_rb.html
deleted file mode 100644
index 6e7ad5b..0000000
--- a/doc/app/app/models/reference_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: reference.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/revision_rb.html b/doc/app/app/models/revision_rb.html
deleted file mode 100644
index 4d756da..0000000
--- a/doc/app/app/models/revision_rb.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: revision.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Tue Aug 30 15:17:23 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>rexml/document</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/template_rb.html b/doc/app/app/models/template_rb.html
deleted file mode 100644
index 2e25072..0000000
--- a/doc/app/app/models/template_rb.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: template.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/app/models/user_rb.html b/doc/app/app/models/user_rb.html
deleted file mode 100644
index 958fac4..0000000
--- a/doc/app/app/models/user_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: user.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/created.rid b/doc/app/created.rid
deleted file mode 100644
index 07ced90..0000000
--- a/doc/app/created.rid
+++ /dev/null
@@ -1,56 +0,0 @@
-Sun, 04 Sep 2011 22:29:19 +0200
-app/helpers/application_helper.rb Tue, 30 Aug 2011 18:13:21 +0200
-app/helpers/tools_helper.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/models/comment.rb Sun, 04 Sep 2011 15:03:52 +0200
-lib/glsamaker/portage.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/helpers/admin/users_helper.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/helpers/bugs_helper.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/models/reference.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/models/cve_reference.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/models/bug.rb Tue, 30 Aug 2011 15:17:23 +0200
-lib/bugzilla.rb Thu, 01 Sep 2011 20:47:04 +0200
-lib/tasks/utils.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/controllers/admin/templates_controller.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/helpers/index_helper.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/helpers/admin/index_helper.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/helpers/cve_helper.rb Mon, 22 Aug 2011 23:12:58 +0200
-app/models/cve_assignment.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/models/glsa.rb Sun, 04 Sep 2011 14:42:42 +0200
-lib/glsamaker/helpers.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/models/cve_comment.rb Tue, 30 Aug 2011 15:17:23 +0200
-app/models/cve.rb Tue, 30 Aug 2011 15:17:23 +0200
-app/controllers/admin/index_controller.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/controllers/tools_controller.rb Mon, 29 Aug 2011 19:16:21 +0200
-app/helpers/bug_helper.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/models/user.rb Mon, 29 Aug 2011 14:56:39 +0200
-lib/glsamaker.rb Sun, 14 Aug 2011 14:43:15 +0200
-lib/glsamaker/http.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/models/revision.rb Tue, 30 Aug 2011 15:17:23 +0200
-lib/bugzilla/bug.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/controllers/application_controller.rb Thu, 01 Sep 2011 20:06:30 +0200
-app/controllers/index_controller.rb Mon, 29 Aug 2011 20:18:29 +0200
-app/controllers/search_controller.rb Thu, 01 Sep 2011 20:00:53 +0200
-app/controllers/cve_controller.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/mailers/glsa_mailer.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/models/package.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/models/template.rb Mon, 29 Aug 2011 14:56:39 +0200
-lib/glsamaker/bugs.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/controllers/admin/users_controller.rb Mon, 29 Aug 2011 14:56:39 +0200
-lib/bugzilla/comment.rb Sun, 14 Aug 2011 14:43:15 +0200
-lib/bugzilla/history.rb Mon, 29 Aug 2011 14:56:39 +0200
-lib/authorization.rb Sun, 04 Sep 2011 11:11:44 +0200
-lib/authentication.rb Mon, 29 Aug 2011 14:56:39 +0200
-lib/glsamaker/diff.rb Sun, 14 Aug 2011 14:43:15 +0200
-lib/glsamaker/xml.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/controllers/bug_controller.rb Sun, 14 Aug 2011 14:43:15 +0200
-app/controllers/glsa_controller.rb Sun, 04 Sep 2011 00:52:07 +0200
-app/helpers/glsa_helper.rb Mon, 29 Aug 2011 19:02:21 +0200
-doc/README_FOR_APP Sun, 04 Sep 2011 22:27:27 +0200
-lib/glsamaker/mail.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/controllers/comments_controller.rb Sun, 04 Sep 2011 14:49:11 +0200
-app/helpers/comments_helper.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/helpers/admin/templates_helper.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/models/cpe.rb Mon, 29 Aug 2011 14:56:39 +0200
-app/controllers/bugs_controller.rb Thu, 01 Sep 2011 20:06:58 +0200
-app/helpers/search_helper.rb Tue, 30 Aug 2011 15:17:23 +0200
-app/models/cve_change.rb Mon, 29 Aug 2011 14:56:39 +0200
diff --git a/doc/app/doc/README_FOR_APP.html b/doc/app/doc/README_FOR_APP.html
deleted file mode 100644
index ffbe146..0000000
--- a/doc/app/doc/README_FOR_APP.html
+++ /dev/null
@@ -1,260 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: README_FOR_APP [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet" />
-
- <script src="../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file">
- <div id="metadata">
- <div id="home-metadata">
- <div id="home-section" class="section">
- <h3 class="section-header">
- <a href="../index.html">Home</a>
- <a href="../index.html#classes">Classes</a>
- <a href="../index.html#methods">Methods</a>
- </h3>
- </div>
- </div>
-
- <div id="project-metadata">
-
-
- <div id="fileindex-section" class="section project-section">
- <h3 class="section-header">Files</h3>
- <ul>
-
- <li class="file"><a href="../doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
- </div>
-
-
- <div id="classindex-section" class="section project-section">
- <h3 class="section-header">Class Index
- <span class="search-toggle"><img src="../images/find.png"
- height="16" width="16" alt="[+]"
- title="show/hide quicksearch" /></span></h3>
- <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
- <fieldset>
- <legend>Quicksearch</legend>
- <input type="text" name="quicksearch" value=""
- class="quicksearch-field" />
- </fieldset>
- </form>
-
- <ul class="link-list">
-
- <li><a href="../Glsamaker.html">Glsamaker</a></li>
-
- <li><a href="../Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li><a href="../Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="../Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="../Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li><a href="../Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="../Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li><a href="../Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li><a href="../Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li><a href="../Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li><a href="../Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li><a href="../Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li><a href="../Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li><a href="../Admin.html">Admin</a></li>
-
- <li><a href="../Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li><a href="../Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li><a href="../Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li><a href="../Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li><a href="../Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li><a href="../Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li><a href="../Bugzilla.html">Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li><a href="../Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li><a href="../Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="../Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li><a href="../Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li><a href="../Comment.html">Comment</a></li>
-
- <li><a href="../Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li><a href="../ApplicationController.html">ApplicationController</a></li>
-
- <li><a href="../ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li><a href="../Authentication.html">Authentication</a></li>
-
- <li><a href="../Authorization.html">Authorization</a></li>
-
- <li><a href="../Bug.html">Bug</a></li>
-
- <li><a href="../BugController.html">BugController</a></li>
-
- <li><a href="../BugHelper.html">BugHelper</a></li>
-
- <li><a href="../BugsController.html">BugsController</a></li>
-
- <li><a href="../BugsHelper.html">BugsHelper</a></li>
-
- <li><a href="../CommentsController.html">CommentsController</a></li>
-
- <li><a href="../CommentsHelper.html">CommentsHelper</a></li>
-
- <li><a href="../Cpe.html">Cpe</a></li>
-
- <li><a href="../Cve.html">Cve</a></li>
-
- <li><a href="../CveAssignment.html">CveAssignment</a></li>
-
- <li><a href="../CveChange.html">CveChange</a></li>
-
- <li><a href="../CveComment.html">CveComment</a></li>
-
- <li><a href="../CveController.html">CveController</a></li>
-
- <li><a href="../CveHelper.html">CveHelper</a></li>
-
- <li><a href="../CveReference.html">CveReference</a></li>
-
- <li><a href="../GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li><a href="../Glsa.html">Glsa</a></li>
-
- <li><a href="../GlsaController.html">GlsaController</a></li>
-
- <li><a href="../GlsaHelper.html">GlsaHelper</a></li>
-
- <li><a href="../GlsaMailer.html">GlsaMailer</a></li>
-
- <li><a href="../IndexController.html">IndexController</a></li>
-
- <li><a href="../IndexHelper.html">IndexHelper</a></li>
-
- <li><a href="../Package.html">Package</a></li>
-
- <li><a href="../Reference.html">Reference</a></li>
-
- <li><a href="../Revision.html">Revision</a></li>
-
- <li><a href="../SearchController.html">SearchController</a></li>
-
- <li><a href="../SearchHelper.html">SearchHelper</a></li>
-
- <li><a href="../String.html">String</a></li>
-
- <li><a href="../Template.html">Template</a></li>
-
- <li><a href="../ToolsController.html">ToolsController</a></li>
-
- <li><a href="../ToolsHelper.html">ToolsHelper</a></li>
-
- <li><a href="../User.html">User</a></li>
-
- </ul>
- <div id="no-class-search-results" style="display: none;">No matching classes.</div>
- </div>
-
-
- </div>
- </div>
-
- <div id="documentation">
-
-<h1>GLSAMaker v2</h1>
-
-<p>GLSAMaker is a core tool for the Gentoo Security Team. It is used to track,
-create, edit and review Security announcements and drafts.</p>
-
-<p>Project website: <a
-href="https://redmine.a3li.li/projects/glsamaker2">redmine.a3li.li/projects/glsamaker2</a></p>
-
-<h2>Needed libraries</h2>
-<ul><li>
-<p>Rails 3.1</p>
-</li><li>
-<p>Nokogiri</p>
-</li><li>
-<p>FasterCSV</p>
-</li><li>
-<p>JSON</p>
-</li><li>
-<p>Mechanize</p>
-</li><li>
-<p>Rcov</p>
-</li><li>
-<p>text-format</p>
-</li><li>
-<p>xmlindent</p>
-</li><li>
-<p>Sphinx</p>
-</li><li>
-<p>Sparklines</p>
-</li></ul>
-
-<h2>Copyright</h2>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;
-Portions Copyright (C) 2006-2007 Jean-Philippe Lang</pre>
-
-<h2>License</h2>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-</body>
-</html>
-
diff --git a/doc/app/images/brick.png b/doc/app/images/brick.png
deleted file mode 100644
index 7851cf3..0000000
--- a/doc/app/images/brick.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/brick_link.png b/doc/app/images/brick_link.png
deleted file mode 100644
index 9ebf013..0000000
--- a/doc/app/images/brick_link.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/bug.png b/doc/app/images/bug.png
deleted file mode 100644
index 2d5fb90..0000000
--- a/doc/app/images/bug.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/bullet_black.png b/doc/app/images/bullet_black.png
deleted file mode 100644
index 5761970..0000000
--- a/doc/app/images/bullet_black.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/bullet_toggle_minus.png b/doc/app/images/bullet_toggle_minus.png
deleted file mode 100644
index b47ce55..0000000
--- a/doc/app/images/bullet_toggle_minus.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/bullet_toggle_plus.png b/doc/app/images/bullet_toggle_plus.png
deleted file mode 100644
index 9ab4a89..0000000
--- a/doc/app/images/bullet_toggle_plus.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/date.png b/doc/app/images/date.png
deleted file mode 100644
index 783c833..0000000
--- a/doc/app/images/date.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/find.png b/doc/app/images/find.png
deleted file mode 100644
index 1547479..0000000
--- a/doc/app/images/find.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/loadingAnimation.gif b/doc/app/images/loadingAnimation.gif
deleted file mode 100644
index 82290f4..0000000
--- a/doc/app/images/loadingAnimation.gif
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/macFFBgHack.png b/doc/app/images/macFFBgHack.png
deleted file mode 100644
index c6473b3..0000000
--- a/doc/app/images/macFFBgHack.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/package.png b/doc/app/images/package.png
deleted file mode 100644
index da3c2a2..0000000
--- a/doc/app/images/package.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/page_green.png b/doc/app/images/page_green.png
deleted file mode 100644
index de8e003..0000000
--- a/doc/app/images/page_green.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/page_white_text.png b/doc/app/images/page_white_text.png
deleted file mode 100644
index 813f712..0000000
--- a/doc/app/images/page_white_text.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/page_white_width.png b/doc/app/images/page_white_width.png
deleted file mode 100644
index 1eb8809..0000000
--- a/doc/app/images/page_white_width.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/plugin.png b/doc/app/images/plugin.png
deleted file mode 100644
index 6187b15..0000000
--- a/doc/app/images/plugin.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/ruby.png b/doc/app/images/ruby.png
deleted file mode 100644
index f763a16..0000000
--- a/doc/app/images/ruby.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/tag_green.png b/doc/app/images/tag_green.png
deleted file mode 100644
index 83ec984..0000000
--- a/doc/app/images/tag_green.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/wrench.png b/doc/app/images/wrench.png
deleted file mode 100644
index 5c8213f..0000000
--- a/doc/app/images/wrench.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/wrench_orange.png b/doc/app/images/wrench_orange.png
deleted file mode 100644
index 565a933..0000000
--- a/doc/app/images/wrench_orange.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/images/zoom.png b/doc/app/images/zoom.png
deleted file mode 100644
index 908612e..0000000
--- a/doc/app/images/zoom.png
+++ /dev/null
Binary files differ
diff --git a/doc/app/index.html b/doc/app/index.html
deleted file mode 100644
index 97d1bec..0000000
--- a/doc/app/index.html
+++ /dev/null
@@ -1,612 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
- "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>GLSAMaker 2</title>
-
- <link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
-
- <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
- <script src="js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
- <script src="js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
- <script src="js/darkfish.js" type="text/javascript" charset="utf-8"></script>
-
-</head>
-<body class="indexpage">
-
-
- <h1>GLSAMaker 2</h1>
-
-
- <p>This is the API documentation for 'GLSAMaker 2'.</p>
-
-
-
-
- <h2>Files</h2>
- <ul>
-
- <li class="file"><a href="doc/README_FOR_APP.html">README_FOR_APP</a></li>
-
- </ul>
-
-
- <h2 id="classes">Classes/Modules</h2>
- <ul>
-
- <li class="module"><a href="Glsamaker.html">Glsamaker</a></li>
-
- <li class="module"><a href="Glsamaker/Bugs.html">Glsamaker::Bugs</a></li>
-
- <li class="module"><a href="Glsamaker/Bugs/ArchesMixin.html">Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li class="class"><a href="Glsamaker/Bugs/Bug.html">Glsamaker::Bugs::Bug</a></li>
-
- <li class="module"><a href="Glsamaker/Bugs/BugReadyMixin.html">Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li class="class"><a href="Glsamaker/Bugs/Status.html">Glsamaker::Bugs::Status</a></li>
-
- <li class="module"><a href="Glsamaker/Bugs/StatusMixin.html">Glsamaker::Bugs::StatusMixin</a></li>
-
- <li class="module"><a href="Glsamaker/Diff.html">Glsamaker::Diff</a></li>
-
- <li class="module"><a href="Glsamaker/HTTP.html">Glsamaker::HTTP</a></li>
-
- <li class="class"><a href="Glsamaker/Helper.html">Glsamaker::Helper</a></li>
-
- <li class="module"><a href="Glsamaker/Mail.html">Glsamaker::Mail</a></li>
-
- <li class="module"><a href="Glsamaker/Portage.html">Glsamaker::Portage</a></li>
-
- <li class="class"><a href="Glsamaker/Portage/Description.html">Glsamaker::Portage::Description</a></li>
-
- <li class="module"><a href="Glsamaker/XML.html">Glsamaker::XML</a></li>
-
- <li class="module"><a href="Admin.html">Admin</a></li>
-
- <li class="class"><a href="Admin/IndexController.html">Admin::IndexController</a></li>
-
- <li class="module"><a href="Admin/IndexHelper.html">Admin::IndexHelper</a></li>
-
- <li class="class"><a href="Admin/TemplatesController.html">Admin::TemplatesController</a></li>
-
- <li class="module"><a href="Admin/TemplatesHelper.html">Admin::TemplatesHelper</a></li>
-
- <li class="class"><a href="Admin/UsersController.html">Admin::UsersController</a></li>
-
- <li class="module"><a href="Admin/UsersHelper.html">Admin::UsersHelper</a></li>
-
- <li class="module"><a href="Bugzilla.html">Bugzilla</a></li>
-
- <li class="class"><a href="Bugzilla/Bug.html">Bugzilla::Bug</a></li>
-
- <li class="module"><a href="Bugzilla/Bugzilla.html">Bugzilla::Bugzilla</a></li>
-
- <li class="module"><a href="Bugzilla/Bugzilla/Bugzilla.html">Bugzilla::Bugzilla::Bugzilla</a></li>
-
- <li class="class"><a href="Bugzilla/Bugzilla/Bugzilla/Change.html">Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li class="class"><a href="Bugzilla/Comment.html">Bugzilla::Comment</a></li>
-
- <li class="class"><a href="Bugzilla/History.html">Bugzilla::History</a></li>
-
- <li class="class"><a href="Comment.html">Comment</a></li>
-
- <li class="class"><a href="Comment/CommentValidator.html">Comment::CommentValidator</a></li>
-
- <li class="class"><a href="ApplicationController.html">ApplicationController</a></li>
-
- <li class="module"><a href="ApplicationHelper.html">ApplicationHelper</a></li>
-
- <li class="module"><a href="Authentication.html">Authentication</a></li>
-
- <li class="module"><a href="Authorization.html">Authorization</a></li>
-
- <li class="class"><a href="Bug.html">Bug</a></li>
-
- <li class="class"><a href="BugController.html">BugController</a></li>
-
- <li class="module"><a href="BugHelper.html">BugHelper</a></li>
-
- <li class="class"><a href="BugsController.html">BugsController</a></li>
-
- <li class="module"><a href="BugsHelper.html">BugsHelper</a></li>
-
- <li class="class"><a href="CommentsController.html">CommentsController</a></li>
-
- <li class="module"><a href="CommentsHelper.html">CommentsHelper</a></li>
-
- <li class="class"><a href="Cpe.html">Cpe</a></li>
-
- <li class="class"><a href="Cve.html">Cve</a></li>
-
- <li class="class"><a href="CveAssignment.html">CveAssignment</a></li>
-
- <li class="class"><a href="CveChange.html">CveChange</a></li>
-
- <li class="class"><a href="CveComment.html">CveComment</a></li>
-
- <li class="class"><a href="CveController.html">CveController</a></li>
-
- <li class="module"><a href="CveHelper.html">CveHelper</a></li>
-
- <li class="class"><a href="CveReference.html">CveReference</a></li>
-
- <li class="class"><a href="GLSAReleaseError.html">GLSAReleaseError</a></li>
-
- <li class="class"><a href="Glsa.html">Glsa</a></li>
-
- <li class="class"><a href="GlsaController.html">GlsaController</a></li>
-
- <li class="module"><a href="GlsaHelper.html">GlsaHelper</a></li>
-
- <li class="class"><a href="GlsaMailer.html">GlsaMailer</a></li>
-
- <li class="class"><a href="IndexController.html">IndexController</a></li>
-
- <li class="module"><a href="IndexHelper.html">IndexHelper</a></li>
-
- <li class="class"><a href="Package.html">Package</a></li>
-
- <li class="class"><a href="Reference.html">Reference</a></li>
-
- <li class="class"><a href="Revision.html">Revision</a></li>
-
- <li class="class"><a href="SearchController.html">SearchController</a></li>
-
- <li class="module"><a href="SearchHelper.html">SearchHelper</a></li>
-
- <li class="class"><a href="String.html">String</a></li>
-
- <li class="class"><a href="Template.html">Template</a></li>
-
- <li class="class"><a href="ToolsController.html">ToolsController</a></li>
-
- <li class="module"><a href="ToolsHelper.html">ToolsHelper</a></li>
-
- <li class="class"><a href="User.html">User</a></li>
-
- </ul>
-
- <h2 id="methods">Methods</h2>
- <ul>
-
- <li><a href="Cve.html#method-c-concat">::concat &mdash; Cve</a></li>
-
- <li><a href="Glsamaker/Portage/Description.html#method-c-ebuild">::ebuild &mdash; Glsamaker::Portage::Description</a></li>
-
- <li><a href="Glsamaker/Portage/Description.html#method-c-eix">::eix &mdash; Glsamaker::Portage::Description</a></li>
-
- <li><a href="Glsamaker/HTTP.html#method-c-get">::get &mdash; Glsamaker::HTTP</a></li>
-
- <li><a href="Glsamaker/Portage/Description.html#method-c-google">::google &mdash; Glsamaker::Portage::Description</a></li>
-
- <li><a href="Authentication.html#method-c-included">::included &mdash; Authentication</a></li>
-
- <li><a href="Bugzilla/Bug.html#method-c-load_from_id">::load_from_id &mdash; Bugzilla::Bug</a></li>
-
- <li><a href="Bugzilla/Comment.html#method-c-new">::new &mdash; Bugzilla::Comment</a></li>
-
- <li><a href="Bugzilla/Bugzilla/Bugzilla/Change.html#method-c-new">::new &mdash; Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="Bugzilla/Bug.html#method-c-new">::new &mdash; Bugzilla::Bug</a></li>
-
- <li><a href="Bugzilla/History.html#method-c-new">::new &mdash; Bugzilla::History</a></li>
-
- <li><a href="Glsamaker/Bugs/Status.html#method-c-new">::new &mdash; Glsamaker::Bugs::Status</a></li>
-
- <li><a href="Glsa.html#method-c-new_request">::new_request &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-c-next_id">::next_id &mdash; Glsa</a></li>
-
- <li><a href="Glsamaker/Portage/Description.html#method-c-pgo">::pgo &mdash; Glsamaker::Portage::Description</a></li>
-
- <li><a href="Bugzilla/Bug.html#method-c-str2bugIDs">::str2bugIDs &mdash; Bugzilla::Bug</a></li>
-
- <li><a href="Glsamaker/Bugs/Status.html#method-i-3C-3D-3E">#<=> &mdash; Glsamaker::Bugs::Status</a></li>
-
- <li><a href="IndexController.html#method-i-about">#about &mdash; IndexController</a></li>
-
- <li><a href="Admin/UsersHelper.html#method-i-access_list">#access_list &mdash; Admin::UsersHelper</a></li>
-
- <li><a href="Admin/UsersHelper.html#method-i-access_string">#access_string &mdash; Admin::UsersHelper</a></li>
-
- <li><a href="CveController.html#method-i-actions">#actions &mdash; CveController</a></li>
-
- <li><a href="Bugzilla/Bugzilla/Bugzilla/Change.html#method-i-add_change">#add_change &mdash; Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="Bugzilla.html#method-i-add_comment">#add_comment &mdash; Bugzilla</a></li>
-
- <li><a href="Cve.html#method-i-add_comment">#add_comment &mdash; Cve</a></li>
-
- <li><a href="GlsaHelper.html#method-i-add_reference_link">#add_reference_link &mdash; GlsaHelper</a></li>
-
- <li><a href="Glsa.html#method-i-add_references">#add_references &mdash; Glsa</a></li>
-
- <li><a href="GlsaHelper.html#method-i-add_unaffected_package_link">#add_unaffected_package_link &mdash; GlsaHelper</a></li>
-
- <li><a href="GlsaHelper.html#method-i-add_vulnerable_package_link">#add_vulnerable_package_link &mdash; GlsaHelper</a></li>
-
- <li><a href="Authentication.html#method-i-admin_access_required">#admin_access_required &mdash; Authentication</a></li>
-
- <li><a href="GlsaHelper.html#method-i-adv_wrap">#adv_wrap &mdash; GlsaHelper</a></li>
-
- <li><a href="GlsaMailer.html#method-i-approval">#approval &mdash; GlsaMailer</a></li>
-
- <li><a href="GlsaHelper.html#method-i-approval_icon">#approval_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="Glsamaker/Mail.html#method-i-approval_notification">#approval_notification &mdash; Glsamaker::Mail</a></li>
-
- <li><a href="Glsa.html#method-i-approval_status">#approval_status &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-approvals">#approvals &mdash; Glsa</a></li>
-
- <li><a href="Glsamaker/Bugs/ArchesMixin.html#method-i-arch_cc">#arch_cc &mdash; Glsamaker::Bugs::ArchesMixin</a></li>
-
- <li><a href="GlsaController.html#method-i-archive">#archive &mdash; GlsaController</a></li>
-
- <li><a href="CveController.html#method-i-assign">#assign &mdash; CveController</a></li>
-
- <li><a href="Cve.html#method-i-assign">#assign &mdash; Cve</a></li>
-
- <li><a href="CveController.html#method-i-assign_preview">#assign_preview &mdash; CveController</a></li>
-
- <li><a href="ToolsController.html#method-i-background">#background &mdash; ToolsController</a></li>
-
- <li><a href="Glsamaker/Bugs/Status.html#method-i-blocked-3F">#blocked? &mdash; Glsamaker::Bugs::Status</a></li>
-
- <li><a href="String.html#method-i-bold">#bold &mdash; String</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-box_title">#box_title &mdash; ApplicationHelper</a></li>
-
- <li><a href="CveController.html#method-i-bug">#bug &mdash; CveController</a></li>
-
- <li><a href="BugController.html#method-i-bug">#bug &mdash; BugController</a></li>
-
- <li><a href="CveController.html#method-i-bug_package">#bug_package &mdash; CveController</a></li>
-
- <li><a href="CveController.html#method-i-bug_preview">#bug_preview &mdash; CveController</a></li>
-
- <li><a href="Glsamaker/Bugs/BugReadyMixin.html#method-i-bug_ready-3F">#bug_ready? &mdash; Glsamaker::Bugs::BugReadyMixin</a></li>
-
- <li><a href="Revision.html#method-i-bug_ready-3F">#bug_ready? &mdash; Revision</a></li>
-
- <li><a href="Bug.html#method-i-bug_url">#bug_url &mdash; Bug</a></li>
-
- <li><a href="GlsaHelper.html#method-i-bugready_icon">#bugready_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="ToolsController.html#method-i-bugs_ajax_info">#bugs_ajax_info &mdash; ToolsController</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-bugs_unify_cvenames">#bugs_unify_cvenames &mdash; ApplicationHelper</a></li>
-
- <li><a href="Bugzilla/History.html#method-i-by_field">#by_field &mdash; Bugzilla::History</a></li>
-
- <li><a href="Bugzilla/History.html#method-i-by_user">#by_user &mdash; Bugzilla::History</a></li>
-
- <li><a href="User.html#method-i-can_access-3F">#can_access? &mdash; User</a></li>
-
- <li><a href="Bug.html#method-i-cc">#cc &mdash; Bug</a></li>
-
- <li><a href="Glsamaker/Bugs/Bug.html#method-i-cc">#cc &mdash; Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="CveController.html#method-i-changes">#changes &mdash; CveController</a></li>
-
- <li><a href="GlsaHelper.html#method-i-check_icon">#check_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="Authorization.html#method-i-check_object_access">#check_object_access &mdash; Authorization</a></li>
-
- <li><a href="Authorization.html#method-i-check_object_access-21">#check_object_access! &mdash; Authorization</a></li>
-
- <li><a href="Cve.html#method-i-colorize">#colorize &mdash; Cve</a></li>
-
- <li><a href="GlsaController.html#method-i-comment">#comment &mdash; GlsaController</a></li>
-
- <li><a href="GlsaMailer.html#method-i-comment">#comment &mdash; GlsaMailer</a></li>
-
- <li><a href="Glsamaker/Mail.html#method-i-comment_notification">#comment_notification &mdash; Glsamaker::Mail</a></li>
-
- <li><a href="CveController.html#method-i-comments">#comments &mdash; CveController</a></li>
-
- <li><a href="GlsaController.html#method-i-create">#create &mdash; GlsaController</a></li>
-
- <li><a href="BugsController.html#method-i-create">#create &mdash; BugsController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-create">#create &mdash; Admin::UsersController</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-create">#create &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="CommentsController.html#method-i-create">#create &mdash; CommentsController</a></li>
-
- <li><a href="Authentication.html#method-i-current_user">#current_user &mdash; Authentication</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-cveify_bug_title">#cveify_bug_title &mdash; ApplicationHelper</a></li>
-
- <li><a href="Revision.html#method-i-deep_copy">#deep_copy &mdash; Revision</a></li>
-
- <li><a href="Authorization.html#method-i-deny_access">#deny_access &mdash; Authorization</a></li>
-
- <li><a href="Bugzilla/Bug.html#method-i-description">#description &mdash; Bugzilla::Bug</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-destroy">#destroy &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-destroy">#destroy &mdash; Admin::UsersController</a></li>
-
- <li><a href="CommentsController.html#method-i-destroy">#destroy &mdash; CommentsController</a></li>
-
- <li><a href="BugsController.html#method-i-destroy">#destroy &mdash; BugsController</a></li>
-
- <li><a href="GlsaController.html#method-i-destroy">#destroy &mdash; GlsaController</a></li>
-
- <li><a href="GlsaController.html#method-i-diff">#diff &mdash; GlsaController</a></li>
-
- <li><a href="Glsamaker/Diff.html#method-i-diff">#diff &mdash; Glsamaker::Diff</a></li>
-
- <li><a href="GlsaController.html#method-i-download">#download &mdash; GlsaController</a></li>
-
- <li><a href="GlsaController.html#method-i-drafts">#drafts &mdash; GlsaController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-edit">#edit &mdash; Admin::UsersController</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-edit">#edit &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="GlsaController.html#method-i-edit">#edit &mdash; GlsaController</a></li>
-
- <li><a href="GlsaMailer.html#method-i-edit">#edit &mdash; GlsaMailer</a></li>
-
- <li><a href="Glsamaker/Mail.html#method-i-edit_notification">#edit_notification &mdash; Glsamaker::Mail</a></li>
-
- <li><a href="IndexController.html#method-i-error">#error &mdash; IndexController</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-error_msg">#error_msg &mdash; ApplicationHelper</a></li>
-
- <li><a href="Bugzilla.html#method-i-file_bug">#file_bug &mdash; Bugzilla</a></li>
-
- <li><a href="Glsamaker/Portage.html#method-i-find_packages">#find_packages &mdash; Glsamaker::Portage</a></li>
-
- <li><a href="CveController.html#method-i-general_info">#general_info &mdash; CveController</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-get_bug_cves">#get_bug_cves &mdash; ApplicationHelper</a></li>
-
- <li><a href="Glsamaker/Portage.html#method-i-get_description">#get_description &mdash; Glsamaker::Portage</a></li>
-
- <li><a href="Revision.html#method-i-get_linked_bugs">#get_linked_bugs &mdash; Revision</a></li>
-
- <li><a href="Glsamaker/Portage.html#method-i-get_maintainers">#get_maintainers &mdash; Glsamaker::Portage</a></li>
-
- <li><a href="Glsamaker/Portage.html#method-i-get_metadata">#get_metadata &mdash; Glsamaker::Portage</a></li>
-
- <li><a href="User.html#method-i-get_pref_category">#get_pref_category &mdash; User</a></li>
-
- <li><a href="GlsaHelper.html#method-i-glsa_content">#glsa_content &mdash; GlsaHelper</a></li>
-
- <li><a href="String.html#method-i-green">#green &mdash; String</a></li>
-
- <li><a href="Glsa.html#method-i-has_comments-3F">#has_comments? &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-has_pending_comments-3F">#has_pending_comments? &mdash; Glsa</a></li>
-
- <li><a href="Glsamaker.html#method-i-help">#help &mdash; Glsamaker</a></li>
-
- <li><a href="Bugzilla/Bug.html#method-i-history">#history &mdash; Bugzilla::Bug</a></li>
-
- <li><a href="BugController.html#method-i-history">#history &mdash; BugController</a></li>
-
- <li><a href="GlsaController.html#method-i-import_references">#import_references &mdash; GlsaController</a></li>
-
- <li><a href="Glsamaker/XML.html#method-i-indent">#indent &mdash; Glsamaker::XML</a></li>
-
- <li><a href="IndexController.html#method-i-index">#index &mdash; IndexController</a></li>
-
- <li><a href="Admin/IndexController.html#method-i-index">#index &mdash; Admin::IndexController</a></li>
-
- <li><a href="SearchController.html#method-i-index">#index &mdash; SearchController</a></li>
-
- <li><a href="CveController.html#method-i-index">#index &mdash; CveController</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-index">#index &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-index">#index &mdash; Admin::UsersController</a></li>
-
- <li><a href="CveController.html#method-i-info">#info &mdash; CveController</a></li>
-
- <li><a href="CveController.html#method-i-invalid">#invalid &mdash; CveController</a></li>
-
- <li><a href="Cve.html#method-i-invalidate">#invalidate &mdash; Cve</a></li>
-
- <li><a href="Glsa.html#method-i-invalidate_last_revision_cache">#invalidate_last_revision_cache &mdash; Glsa</a></li>
-
- <li><a href="GlsaHelper.html#method-i-is_approval_icon">#is_approval_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="Glsa.html#method-i-is_approved-3F">#is_approved? &mdash; Glsa</a></li>
-
- <li><a href="User.html#method-i-is_el_jefe-3F">#is_el_jefe? &mdash; User</a></li>
-
- <li><a href="Glsa.html#method-i-is_owner-3F">#is_owner? &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-last_release_revision">#last_release_revision &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-last_revision">#last_revision &mdash; Glsa</a></li>
-
- <li><a href="GlsaHelper.html#method-i-lastrev_content">#lastrev_content &mdash; GlsaHelper</a></li>
-
- <li><a href="CveController.html#method-i-later">#later &mdash; CveController</a></li>
-
- <li><a href="Cve.html#method-i-later">#later &mdash; Cve</a></li>
-
- <li><a href="BugHelper.html#method-i-linkify_comment">#linkify_comment &mdash; BugHelper</a></li>
-
- <li><a href="CveController.html#method-i-list">#list &mdash; CveController</a></li>
-
- <li><a href="ApplicationController.html#method-i-log_error">#log_error &mdash; ApplicationController</a></li>
-
- <li><a href="Bugzilla.html#method-i-log_in">#log_in &mdash; Bugzilla</a></li>
-
- <li><a href="Authorization.html#method-i-log_unauthorized_access">#log_unauthorized_access &mdash; Authorization</a></li>
-
- <li><a href="Authentication.html#method-i-login_required">#login_required &mdash; Authentication</a></li>
-
- <li><a href="Cve.html#method-i-mark_new">#mark_new &mdash; Cve</a></li>
-
- <li><a href="CveController.html#method-i-mark_new">#mark_new &mdash; CveController</a></li>
-
- <li><a href="BugsController.html#method-i-new">#new &mdash; BugsController</a></li>
-
- <li><a href="CommentsController.html#method-i-new">#new &mdash; CommentsController</a></li>
-
- <li><a href="GlsaController.html#method-i-new">#new &mdash; GlsaController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-new">#new &mdash; Admin::UsersController</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-new">#new &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="GlsaMailer.html#method-i-new_request">#new_request &mdash; GlsaMailer</a></li>
-
- <li><a href="Glsa.html#method-i-next_releaseid">#next_releaseid &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-next_revid">#next_revid &mdash; Glsa</a></li>
-
- <li><a href="Cve.html#method-i-nfu">#nfu &mdash; Cve</a></li>
-
- <li><a href="CveController.html#method-i-nfu">#nfu &mdash; CveController</a></li>
-
- <li><a href="CveController.html#method-i-note">#note &mdash; CveController</a></li>
-
- <li><a href="Glsamaker/Bugs/Status.html#method-i-overdue-3F">#overdue? &mdash; Glsamaker::Bugs::Status</a></li>
-
- <li><a href="Cve.html#method-i-package_hints">#package_hints &mdash; Cve</a></li>
-
- <li><a href="CveController.html#method-i-packages">#packages &mdash; CveController</a></li>
-
- <li><a href="Revision.html#method-i-packages_by_atom">#packages_by_atom &mdash; Revision</a></li>
-
- <li><a href="Glsamaker/Bugs/Status.html#method-i-pending-3F">#pending? &mdash; Glsamaker::Bugs::Status</a></li>
-
- <li><a href="Glsamaker/Portage.html#method-i-portdir">#portdir &mdash; Glsamaker::Portage</a></li>
-
- <li><a href="GlsaHelper.html#method-i-prefixed_item">#prefixed_item &mdash; GlsaHelper</a></li>
-
- <li><a href="GlsaController.html#method-i-prepare_release">#prepare_release &mdash; GlsaController</a></li>
-
- <li><a href="Cpe.html#method-i-product">#product &mdash; Cpe</a></li>
-
- <li><a href="IndexController.html#method-i-profile">#profile &mdash; IndexController</a></li>
-
- <li><a href="String.html#method-i-purple">#purple &mdash; String</a></li>
-
- <li><a href="String.html#method-i-red">#red &mdash; String</a></li>
-
- <li><a href="CveController.html#method-i-references">#references &mdash; CveController</a></li>
-
- <li><a href="Glsa.html#method-i-rejections">#rejections &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-related_cves">#related_cves &mdash; Glsa</a></li>
-
- <li><a href="Glsa.html#method-i-release">#release &mdash; Glsa</a></li>
-
- <li><a href="GlsaController.html#method-i-release">#release &mdash; GlsaController</a></li>
-
- <li><a href="Glsa.html#method-i-release-21">#release! &mdash; Glsa</a></li>
-
- <li><a href="Glsamaker/Mail.html#method-i-request_notification">#request_notification &mdash; Glsamaker::Mail</a></li>
-
- <li><a href="GlsaController.html#method-i-requests">#requests &mdash; GlsaController</a></li>
-
- <li><a href="GlsaHelper.html#method-i-restricted_icon">#restricted_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="SearchController.html#method-i-results">#results &mdash; SearchController</a></li>
-
- <li><a href="GlsaController.html#method-i-rev_diff">#rev_diff &mdash; GlsaController</a></li>
-
- <li><a href="Cve.html#method-i-search">#search &mdash; Cve</a></li>
-
- <li><a href="Glsamaker/Bugs/StatusMixin.html#method-i-secbug_status">#secbug_status &mdash; Glsamaker::Bugs::StatusMixin</a></li>
-
- <li><a href="Glsamaker/Mail.html#method-i-send_text">#send_text &mdash; Glsamaker::Mail</a></li>
-
- <li><a href="BugsController.html#method-i-show">#show &mdash; BugsController</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-show">#show &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="CommentsController.html#method-i-show">#show &mdash; CommentsController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-show">#show &mdash; Admin::UsersController</a></li>
-
- <li><a href="GlsaController.html#method-i-show">#show &mdash; GlsaController</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-simple_format_without_paragraph">#simple_format_without_paragraph &mdash; ApplicationHelper</a></li>
-
- <li><a href="Cpe.html#method-i-split">#split &mdash; Cpe</a></li>
-
- <li><a href="GlsaHelper.html#method-i-status_icon">#status_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="Admin/TemplatesHelper.html#method-i-target_list">#target_list &mdash; Admin::TemplatesHelper</a></li>
-
- <li><a href="ToolsController.html#method-i-template">#template &mdash; ToolsController</a></li>
-
- <li><a href="GlsaHelper.html#method-i-template_popups">#template_popups &mdash; GlsaHelper</a></li>
-
- <li><a href="Bugzilla/Bugzilla/Bugzilla/Change.html#method-i-to_s">#to_s &mdash; Bugzilla::Bugzilla::Bugzilla::Change</a></li>
-
- <li><a href="Cve.html#method-i-to_s">#to_s &mdash; Cve</a></li>
-
- <li><a href="User.html#method-i-to_s">#to_s &mdash; User</a></li>
-
- <li><a href="Glsamaker/Bugs/Status.html#method-i-to_s">#to_s &mdash; Glsamaker::Bugs::Status</a></li>
-
- <li><a href="Revision.html#method-i-to_s">#to_s &mdash; Revision</a></li>
-
- <li><a href="IndexController.html#method-i-update">#update &mdash; IndexController</a></li>
-
- <li><a href="Admin/UsersController.html#method-i-update">#update &mdash; Admin::UsersController</a></li>
-
- <li><a href="GlsaController.html#method-i-update">#update &mdash; GlsaController</a></li>
-
- <li><a href="Admin/TemplatesController.html#method-i-update">#update &mdash; Admin::TemplatesController</a></li>
-
- <li><a href="Bugzilla.html#method-i-update_bug">#update_bug &mdash; Bugzilla</a></li>
-
- <li><a href="GlsaController.html#method-i-update_cache">#update_cache &mdash; GlsaController</a></li>
-
- <li><a href="Revision.html#method-i-update_cached_bug_metadata">#update_cached_bug_metadata &mdash; Revision</a></li>
-
- <li><a href="Bug.html#method-i-update_cached_metadata">#update_cached_metadata &mdash; Bug</a></li>
-
- <li><a href="Cve.html#method-i-url">#url &mdash; Cve</a></li>
-
- <li><a href="Glsamaker/Portage.html#method-i-valid_atom-3F">#valid_atom? &mdash; Glsamaker::Portage</a></li>
-
- <li><a href="Comment/CommentValidator.html#method-i-validate">#validate &mdash; Comment::CommentValidator</a></li>
-
- <li><a href="Cpe.html#method-i-vendor">#vendor &mdash; Cpe</a></li>
-
- <li><a href="Cpe.html#method-i-version">#version &mdash; Cpe</a></li>
-
- <li><a href="CveHelper.html#method-i-view_mask_to_condition">#view_mask_to_condition &mdash; CveHelper</a></li>
-
- <li><a href="Glsamaker/Bugs/Bug.html#method-i-whiteboard">#whiteboard &mdash; Glsamaker::Bugs::Bug</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-whiteboard_to_severity">#whiteboard_to_severity &mdash; ApplicationHelper</a></li>
-
- <li><a href="ApplicationHelper.html#method-i-with_format">#with_format &mdash; ApplicationHelper</a></li>
-
- <li><a href="GlsaHelper.html#method-i-workflow_icon">#workflow_icon &mdash; GlsaHelper</a></li>
-
- <li><a href="Glsa.html#method-i-workflow_status">#workflow_status &mdash; Glsa</a></li>
-
- <li><a href="Package.html#method-i-xml_comp">#xml_comp &mdash; Package</a></li>
-
- <li><a href="Bugzilla.html#method-i-xmlrpc_client">#xmlrpc_client &mdash; Bugzilla</a></li>
-
- </ul>
-
- <div id="validator-badges">
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
- <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
- Rdoc Generator</a> 2</small>.</p>
- </div>
-</body>
-</html>
diff --git a/doc/app/js/darkfish.js b/doc/app/js/darkfish.js
deleted file mode 100644
index 84565c1..0000000
--- a/doc/app/js/darkfish.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- *
- * Darkfish Page Functions
- * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
- *
- * Author: Michael Granger <mgranger@laika.com>
- *
- */
-
-/* Provide console simulation for firebug-less environments */
-if (!("console" in window) || !("firebug" in console)) {
- var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
- "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
-
- window.console = {};
- for (var i = 0; i < names.length; ++i)
- window.console[names[i]] = function() {};
-};
-
-
-/**
- * Unwrap the first element that matches the given @expr@ from the targets and return them.
- */
-$.fn.unwrap = function( expr ) {
- return this.each( function() {
- $(this).parents( expr ).eq( 0 ).after( this ).remove();
- });
-};
-
-
-function showSource( e ) {
- var target = e.target;
- var codeSections = $(target).
- parents('.method-detail').
- find('.method-source-code');
-
- $(target).
- parents('.method-detail').
- find('.method-source-code').
- slideToggle();
-};
-
-function hookSourceViews() {
- $('.method-description,.method-heading').click( showSource );
-};
-
-function toggleDebuggingSection() {
- $('.debugging-section').slideToggle();
-};
-
-function hookDebuggingToggle() {
- $('#debugging-toggle img').click( toggleDebuggingSection );
-};
-
-function hookQuickSearch() {
- $('.quicksearch-field').each( function() {
- var searchElems = $(this).parents('.section').find( 'li' );
- var toggle = $(this).parents('.section').find('h3 .search-toggle');
- // console.debug( "Toggle is: %o", toggle );
- var qsbox = $(this).parents('form').get( 0 );
-
- $(this).quicksearch( this, searchElems, {
- noSearchResultsIndicator: 'no-class-search-results',
- focusOnLoad: false
- });
- $(toggle).click( function() {
- // console.debug( "Toggling qsbox: %o", qsbox );
- $(qsbox).toggle();
- });
- });
-};
-
-function highlightTarget( anchor ) {
- console.debug( "Highlighting target '%s'.", anchor );
-
- $("a[name=" + anchor + "]").each( function() {
- if ( !$(this).parent().parent().hasClass('target-section') ) {
- console.debug( "Wrapping the target-section" );
- $('div.method-detail').unwrap( 'div.target-section' );
- $(this).parent().wrap( '<div class="target-section"></div>' );
- } else {
- console.debug( "Already wrapped." );
- }
- });
-};
-
-function highlightLocationTarget() {
- console.debug( "Location hash: %s", window.location.hash );
- if ( ! window.location.hash || window.location.hash.length == 0 ) return;
-
- var anchor = window.location.hash.substring(1);
- console.debug( "Found anchor: %s; matching %s", anchor, "a[name=" + anchor + "]" );
-
- highlightTarget( anchor );
-};
-
-function highlightClickTarget( event ) {
- console.debug( "Highlighting click target for event %o", event.target );
- try {
- var anchor = $(event.target).attr( 'href' ).substring(1);
- console.debug( "Found target anchor: %s", anchor );
- highlightTarget( anchor );
- } catch ( err ) {
- console.error( "Exception while highlighting: %o", err );
- };
-};
-
-
-$(document).ready( function() {
- hookSourceViews();
- hookDebuggingToggle();
- hookQuickSearch();
- highlightLocationTarget();
-
- $('ul.link-list a').bind( "click", highlightClickTarget );
-});
diff --git a/doc/app/js/jquery.js b/doc/app/js/jquery.js
deleted file mode 100644
index afe9e74..0000000
--- a/doc/app/js/jquery.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * jQuery 1.2.6 - New Wave Javascript
- *
- * Copyright (c) 2008 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2008-09-25 09:50:52 -0700 (Thu, 25 Sep 2008) $
- * $Rev: 38 $
- */
-(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
-return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
-return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
-selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
-return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
-this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
-return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
-jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
-script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
-for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
-for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
-jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
-ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
-while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
-while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
-for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
-jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
-xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
-jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
-for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
-s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
-e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})(); \ No newline at end of file
diff --git a/doc/app/js/quicksearch.js b/doc/app/js/quicksearch.js
deleted file mode 100644
index 70dbd33..0000000
--- a/doc/app/js/quicksearch.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- *
- * JQuery QuickSearch - Hook up a form field to hide non-matching elements.
- * $Id: quicksearch.js 53 2009-01-07 02:52:03Z deveiant $
- *
- * Author: Michael Granger <mgranger@laika.com>
- *
- */
-jQuery.fn.quicksearch = function( target, searchElems, options ) {
- // console.debug( "Quicksearch fn" );
-
- var settings = {
- delay: 250,
- clearButton: false,
- highlightMatches: false,
- focusOnLoad: false,
- noSearchResultsIndicator: null
- };
- if ( options ) $.extend( settings, options );
-
- return jQuery(this).each( function() {
- // console.debug( "Creating a new quicksearch on %o for %o", this, searchElems );
- new jQuery.quicksearch( this, searchElems, settings );
- });
-};
-
-
-jQuery.quicksearch = function( searchBox, searchElems, settings ) {
- var timeout;
- var boxdiv = $(searchBox).parents('div').eq(0);
-
- function init() {
- setupKeyEventHandlers();
- focusOnLoad();
- };
-
- function setupKeyEventHandlers() {
- // console.debug( "Hooking up the 'keypress' event to %o", searchBox );
- $(searchBox).
- unbind( 'keyup' ).
- keyup( function(e) { return onSearchKey( e.keyCode ); });
- $(searchBox).
- unbind( 'keypress' ).
- keypress( function(e) {
- switch( e.which ) {
- // Execute the search on Enter, Tab, or Newline
- case 9:
- case 13:
- case 10:
- clearTimeout( timeout );
- e.preventDefault();
- doQuickSearch();
- break;
-
- // Allow backspace
- case 8:
- return true;
- break;
-
- // Only allow valid search characters
- default:
- return validQSChar( e.charCode );
- }
- });
- };
-
- function focusOnLoad() {
- if ( !settings.focusOnLoad ) return false;
- $(searchBox).focus();
- };
-
- function onSearchKey ( code ) {
- clearTimeout( timeout );
- // console.debug( "...scheduling search." );
- timeout = setTimeout( doQuickSearch, settings.delay );
- };
-
- function validQSChar( code ) {
- var c = String.fromCharCode( code );
- return (
- (c == ':') ||
- (c >= 'a' && c <= 'z') ||
- (c >= 'A' && c <= 'Z')
- );
- };
-
- function doQuickSearch() {
- var searchText = searchBox.value;
- var pat = new RegExp( searchText, "im" );
- var shownCount = 0;
-
- if ( settings.noSearchResultsIndicator ) {
- $('#' + settings.noSearchResultsIndicator).hide();
- }
-
- // All elements start out hidden
- $(searchElems).each( function(index) {
- var str = $(this).text();
-
- if ( pat.test(str) ) {
- shownCount += 1;
- $(this).fadeIn();
- } else {
- $(this).hide();
- }
- });
-
- if ( shownCount == 0 && settings.noSearchResultsIndicator ) {
- $('#' + settings.noSearchResultsIndicator).slideDown();
- }
- };
-
- init();
-};
diff --git a/doc/app/js/thickbox-compressed.js b/doc/app/js/thickbox-compressed.js
deleted file mode 100644
index 3a3fdae..0000000
--- a/doc/app/js/thickbox-compressed.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * Thickbox 3 - One Box To Rule Them All.
- * By Cody Lindley (http://www.codylindley.com)
- * Copyright (c) 2007 cody lindley
- * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
-*/
-
-var tb_pathToImage = "../images/loadingAnimation.gif";
-
-eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(o).2S(9(){1u(\'a.18, 3n.18, 3i.18\');1w=1p 1t();1w.L=2H});9 1u(b){$(b).s(9(){6 t=X.Q||X.1v||M;6 a=X.u||X.23;6 g=X.1N||P;19(t,a,g);X.2E();H P})}9 19(d,f,g){3m{3(2t o.v.J.2i==="2g"){$("v","11").r({A:"28%",z:"28%"});$("11").r("22","2Z");3(o.1Y("1F")===M){$("v").q("<U 5=\'1F\'></U><4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}n{3(o.1Y("B")===M){$("v").q("<4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}3(1K()){$("#B").1J("2B")}n{$("#B").1J("2z")}3(d===M){d=""}$("v").q("<4 5=\'K\'><1I L=\'"+1w.L+"\' /></4>");$(\'#K\').2y();6 h;3(f.O("?")!==-1){h=f.3l(0,f.O("?"))}n{h=f}6 i=/\\.2s$|\\.2q$|\\.2m$|\\.2l$|\\.2k$/;6 j=h.1C().2h(i);3(j==\'.2s\'||j==\'.2q\'||j==\'.2m\'||j==\'.2l\'||j==\'.2k\'){1D="";1G="";14="";1z="";1x="";R="";1n="";1r=P;3(g){E=$("a[@1N="+g+"]").36();25(D=0;((D<E.1c)&&(R===""));D++){6 k=E[D].u.1C().2h(i);3(!(E[D].u==f)){3(1r){1z=E[D].Q;1x=E[D].u;R="<1e 5=\'1X\'>&1d;&1d;<a u=\'#\'>2T &2R;</a></1e>"}n{1D=E[D].Q;1G=E[D].u;14="<1e 5=\'1U\'>&1d;&1d;<a u=\'#\'>&2O; 2N</a></1e>"}}n{1r=1b;1n="1t "+(D+1)+" 2L "+(E.1c)}}}S=1p 1t();S.1g=9(){S.1g=M;6 a=2x();6 x=a[0]-1M;6 y=a[1]-1M;6 b=S.z;6 c=S.A;3(b>x){c=c*(x/b);b=x;3(c>y){b=b*(y/c);c=y}}n 3(c>y){b=b*(y/c);c=y;3(b>x){c=c*(x/b);b=x}}13=b+30;1a=c+2G;$("#8").q("<a u=\'\' 5=\'1L\' Q=\'1o\'><1I 5=\'2F\' L=\'"+f+"\' z=\'"+b+"\' A=\'"+c+"\' 23=\'"+d+"\'/></a>"+"<4 5=\'2D\'>"+d+"<4 5=\'2C\'>"+1n+14+R+"</4></4><4 5=\'2A\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4>");$("#Z").s(G);3(!(14==="")){9 12(){3($(o).N("s",12)){$(o).N("s",12)}$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1D,1G,g);H P}$("#1U").s(12)}3(!(R==="")){9 1i(){$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1z,1x,g);H P}$("#1X").s(1i)}o.1h=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}n 3(I==3k){3(!(R=="")){o.1h="";1i()}}n 3(I==3j){3(!(14=="")){o.1h="";12()}}};16();$("#K").C();$("#1L").s(G);$("#8").r({Y:"T"})};S.L=f}n{6 l=f.2r(/^[^\\?]+\\??/,\'\');6 m=2p(l);13=(m[\'z\']*1)+30||3h;1a=(m[\'A\']*1)+3g||3f;W=13-30;V=1a-3e;3(f.O(\'2j\')!=-1){1E=f.1B(\'3d\');$("#15").C();3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4></4><U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\' > </U>")}n{$("#B").N();$("#8").q("<U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\'> </U>")}}n{3($("#8").r("Y")!="T"){3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\'>1l</a> 1k 1j 1s</4></4><4 5=\'F\' J=\'z:"+W+"p;A:"+V+"p\'></4>")}n{$("#B").N();$("#8").q("<4 5=\'F\' 3c=\'3b\' J=\'z:"+W+"p;A:"+V+"p;\'></4>")}}n{$("#F")[0].J.z=W+"p";$("#F")[0].J.A=V+"p";$("#F")[0].3a=0;$("#1H").11(d)}}$("#Z").s(G);3(f.O(\'37\')!=-1){$("#F").q($(\'#\'+m[\'26\']).1T());$("#8").24(9(){$(\'#\'+m[\'26\']).q($("#F").1T())});16();$("#K").C();$("#8").r({Y:"T"})}n 3(f.O(\'2j\')!=-1){16();3($.1q.35){$("#K").C();$("#8").r({Y:"T"})}}n{$("#F").34(f+="&1y="+(1p 33().32()),9(){16();$("#K").C();1u("#F a.18");$("#8").r({Y:"T"})})}}3(!m[\'1A\']){o.21=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}}}}31(e){}}9 1m(){$("#K").C();$("#8").r({Y:"T"})}9 G(){$("#2Y").N("s");$("#Z").N("s");$("#8").2X("2W",9(){$(\'#8,#B,#1F\').2V("24").N().C()});$("#K").C();3(2t o.v.J.2i=="2g"){$("v","11").r({A:"1Z",z:"1Z"});$("11").r("22","")}o.1h="";o.21="";H P}9 16(){$("#8").r({2U:\'-\'+20((13/2),10)+\'p\',z:13+\'p\'});3(!(1V.1q.2Q&&1V.1q.2P<7)){$("#8").r({38:\'-\'+20((1a/2),10)+\'p\'})}}9 2p(a){6 b={};3(!a){H b}6 c=a.1B(/[;&]/);25(6 i=0;i<c.1c;i++){6 d=c[i].1B(\'=\');3(!d||d.1c!=2){39}6 e=2a(d[0]);6 f=2a(d[1]);f=f.2r(/\\+/g,\' \');b[e]=f}H b}9 2x(){6 a=o.2M;6 w=1S.2o||1R.2o||(a&&a.1Q)||o.v.1Q;6 h=1S.1P||1R.1P||(a&&a.2n)||o.v.2n;1O=[w,h];H 1O}9 1K(){6 a=2K.2J.1C();3(a.O(\'2I\')!=-1&&a.O(\'3o\')!=-1){H 1b}}',62,211,'|||if|div|id|var||TB_window|function||||||||||||||else|document|px|append|css|click||href|body||||width|height|TB_overlay|remove|TB_Counter|TB_TempArray|TB_ajaxContent|tb_remove|return|keycode|style|TB_load|src|null|unbind|indexOf|false|title|TB_NextHTML|imgPreloader|block|iframe|ajaxContentH|ajaxContentW|this|display|TB_closeWindowButton||html|goPrev|TB_WIDTH|TB_PrevHTML|TB_iframeContent|tb_position||thickbox|tb_show|TB_HEIGHT|true|length|nbsp|span|Math|onload|onkeydown|goNext|Esc|or|close|tb_showIframe|TB_imageCount|Close|new|browser|TB_FoundURL|Key|Image|tb_init|name|imgLoader|TB_NextURL|random|TB_NextCaption|modal|split|toLowerCase|TB_PrevCaption|urlNoQuery|TB_HideSelect|TB_PrevURL|TB_ajaxWindowTitle|img|addClass|tb_detectMacXFF|TB_ImageOff|150|rel|arrayPageSize|innerHeight|clientWidth|self|window|children|TB_prev|jQuery|frameborder|TB_next|getElementById|auto|parseInt|onkeyup|overflow|alt|unload|for|inlineId||100||unescape|1000|round|hspace|TB_closeAjaxWindow|TB_title|undefined|match|maxHeight|TB_iframe|bmp|gif|png|clientHeight|innerWidth|tb_parseQuery|jpeg|replace|jpg|typeof|which|keyCode|event|tb_getPageSize|show|TB_overlayBG|TB_closeWindow|TB_overlayMacFFBGHack|TB_secondLine|TB_caption|blur|TB_Image|60|tb_pathToImage|mac|userAgent|navigator|of|documentElement|Prev|lt|version|msie|gt|ready|Next|marginLeft|trigger|fast|fadeOut|TB_imageOff|hidden||catch|getTime|Date|load|safari|get|TB_inline|marginTop|continue|scrollTop|TB_modal|class|TB_|45|440|40|630|input|188|190|substr|try|area|firefox'.split('|'),0,{})) \ No newline at end of file
diff --git a/doc/app/lib/authentication_rb.html b/doc/app/lib/authentication_rb.html
deleted file mode 100644
index b0b1250..0000000
--- a/doc/app/lib/authentication_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: authentication.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet" />
-
- <script src="../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/authorization_rb.html b/doc/app/lib/authorization_rb.html
deleted file mode 100644
index 8222750..0000000
--- a/doc/app/lib/authorization_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: authorization.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet" />
-
- <script src="../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Sep 04 11:11:44 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2011 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/bugzilla/bug_rb.html b/doc/app/lib/bugzilla/bug_rb.html
deleted file mode 100644
index ad18c96..0000000
--- a/doc/app/lib/bugzilla/bug_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bug.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/bugzilla/comment_rb.html b/doc/app/lib/bugzilla/comment_rb.html
deleted file mode 100644
index 2baf141..0000000
--- a/doc/app/lib/bugzilla/comment_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: comment.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/bugzilla/history_rb.html b/doc/app/lib/bugzilla/history_rb.html
deleted file mode 100644
index 76ba5e4..0000000
--- a/doc/app/lib/bugzilla/history_rb.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: history.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<p>Encapsulates a bug’s history</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/bugzilla_rb.html b/doc/app/lib/bugzilla_rb.html
deleted file mode 100644
index bb45e7b..0000000
--- a/doc/app/lib/bugzilla_rb.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bugzilla.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet" />
-
- <script src="../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Thu Sep 01 20:47:04 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>nokogiri</li>
-
- <li>fastercsv</li>
-
- <li>fileutils</li>
-
- <li>xmlrpc/client</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/bugs_rb.html b/doc/app/lib/glsamaker/bugs_rb.html
deleted file mode 100644
index 134ea71..0000000
--- a/doc/app/lib/glsamaker/bugs_rb.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: bugs.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>bugzilla</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/diff_rb.html b/doc/app/lib/glsamaker/diff_rb.html
deleted file mode 100644
index 540bf62..0000000
--- a/doc/app/lib/glsamaker/diff_rb.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: diff.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>diff/lcs</li>
-
- <li>diff/lcs/hunk</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;
-Copyright (C) 2006-2007 Jean-Philippe Lang</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/helpers_rb.html b/doc/app/lib/glsamaker/helpers_rb.html
deleted file mode 100644
index 6653b3f..0000000
--- a/doc/app/lib/glsamaker/helpers_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: helpers.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/http_rb.html b/doc/app/lib/glsamaker/http_rb.html
deleted file mode 100644
index c05c5cb..0000000
--- a/doc/app/lib/glsamaker/http_rb.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: http.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>net/http</li>
-
- <li>net/https</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/mail_rb.html b/doc/app/lib/glsamaker/mail_rb.html
deleted file mode 100644
index a16f0ba..0000000
--- a/doc/app/lib/glsamaker/mail_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: mail.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Mon Aug 29 14:56:39 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010-11 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/portage_rb.html b/doc/app/lib/glsamaker/portage_rb.html
deleted file mode 100644
index d81a4e6..0000000
--- a/doc/app/lib/glsamaker/portage_rb.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: portage.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>nokogiri</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker/xml_rb.html b/doc/app/lib/glsamaker/xml_rb.html
deleted file mode 100644
index 20be518..0000000
--- a/doc/app/lib/glsamaker/xml_rb.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: xml.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2010 Alex Legler &lt;a3li@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/glsamaker_rb.html b/doc/app/lib/glsamaker_rb.html
deleted file mode 100644
index f5cdde0..0000000
--- a/doc/app/lib/glsamaker_rb.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: glsamaker.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet" />
-
- <script src="../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- <li>glsamaker/http</li>
-
- <li>glsamaker/portage</li>
-
- <li>glsamaker/diff</li>
-
- <li>glsamaker/xml</li>
-
- <li>glsamaker/bugs</li>
-
- <li>glsamaker/mail</li>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/lib/tasks/utils_rb.html b/doc/app/lib/tasks/utils_rb.html
deleted file mode 100644
index 045a833..0000000
--- a/doc/app/lib/tasks/utils_rb.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
-
- <title>File: utils.rb [GLSAMaker 2]</title>
-
- <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet" />
-
- <script src="../../js/jquery.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/thickbox-compressed.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/quicksearch.js" type="text/javascript"
- charset="utf-8"></script>
- <script src="../../js/darkfish.js" type="text/javascript"
- charset="utf-8"></script>
-</head>
-
-<body class="file file-popup">
- <div id="metadata">
- <dl>
- <dt class="modified-date">Last Modified</dt>
- <dd class="modified-date">Sun Aug 14 14:43:15 +0200 2011</dd>
-
-
- <dt class="requires">Requires</dt>
- <dd class="requires">
- <ul>
-
- </ul>
- </dd>
-
-
-
- </dl>
- </div>
-
- <div id="documentation">
-
- <div class="description">
- <h2>Description</h2>
-
-<h3>GLSAMaker v2</h3>
-
-<pre>Copyright (C) 2009-2011 Alex Legler &lt;a3li@gentoo.org&gt;
-Copyright (C) 2009 Pierre-Yves Rofes &lt;py@gentoo.org&gt;</pre>
-
-<p>This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU Affero General Public License as published by
-the Free Software Foundation, either version 3 of the License, or (at your
-option) any later version.</p>
-
-<p>For more information, see the LICENSE file.</p>
-
- </div>
-
- </div>
-</body>
-</html>
-
diff --git a/doc/app/rdoc.css b/doc/app/rdoc.css
deleted file mode 100644
index ea91421..0000000
--- a/doc/app/rdoc.css
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * "Darkfish" Rdoc CSS
- * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
- *
- * Author: Michael Granger <ged@FaerieMUD.org>
- *
- */
-
-/* Base Green is: #6C8C22 */
-
-*{ padding: 0; margin: 0; }
-
-body {
- background: #efefef;
- font: 14px "Helvetica Neue", Helvetica, Tahoma, sans-serif;
-}
-body.class, body.module, body.file {
- margin-left: 40px;
-}
-body.file-popup {
- font-size: 90%;
- margin-left: 0;
-}
-
-h1 {
- font-size: 300%;
- text-shadow: rgba(135,145,135,0.65) 2px 2px 3px;
- color: #6C8C22;
-}
-h2,h3,h4 { margin-top: 1.5em; }
-
-:link,
-:visited {
- color: #6C8C22;
- text-decoration: none;
-}
-:link:hover,
-:visited:hover {
- border-bottom: 1px dotted #6C8C22;
-}
-
-pre {
- background: #ddd;
- padding: 0.5em 0;
-}
-
-
-/* @group Generic Classes */
-
-.initially-hidden {
- display: none;
-}
-
-.quicksearch-field {
- width: 98%;
- background: #ddd;
- border: 1px solid #aaa;
- height: 1.5em;
- -webkit-border-radius: 4px;
-}
-.quicksearch-field:focus {
- background: #f1edba;
-}
-
-.missing-docs {
- font-size: 120%;
- background: white url(images/wrench_orange.png) no-repeat 4px center;
- color: #ccc;
- line-height: 2em;
- border: 1px solid #d00;
- opacity: 1;
- padding-left: 20px;
- text-indent: 24px;
- letter-spacing: 3px;
- font-weight: bold;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
-}
-
-.target-section {
- border: 2px solid #dcce90;
- border-left-width: 8px;
- padding: 0 1em;
- background: #fff3c2;
-}
-
-/* @end */
-
-
-/* @group Index Page, Standalone file pages */
-body.indexpage {
- margin: 1em 3em;
-}
-body.indexpage p,
-body.indexpage div,
-body.file p {
- margin: 1em 0;
-}
-
-.indexpage .rdoc-list p, .file .rdoc-list p {
- margin: 0em 0;
-}
-
-.indexpage ol,
-.file #documentation ol {
- line-height: 160%;
-}
-
-.indexpage ul,
-.file #documentation ul {
- line-height: 160%;
- list-style: none;
-}
-.indexpage ul :link,
-.indexpage ul :visited {
- font-size: 16px;
-}
-
-.indexpage li,
-.file #documentation li {
- padding-left: 20px;
-}
-
-.indexpage ol,
-.file #documentation ol {
- margin-left: 20px;
-}
-
-.indexpage ol > li,
-.file #documentation ol > li {
- padding-left: 0;
-}
-
-.indexpage ul > li,
-.file #documentation ul > li {
- background: url(images/bullet_black.png) no-repeat left 4px;
-}
-.indexpage li.module {
- background: url(images/package.png) no-repeat left 4px;
-}
-.indexpage li.class {
- background: url(images/ruby.png) no-repeat left 4px;
-}
-.indexpage li.file {
- background: url(images/page_white_text.png) no-repeat left 4px;
-}
-.file li p,
-.indexpage li p {
- margin: 0 0;
-}
-
-/* @end */
-
-/* @group Top-Level Structure */
-
-.class #metadata,
-.file #metadata,
-.module #metadata {
- float: left;
- width: 260px;
-}
-
-.class #documentation,
-.file #documentation,
-.module #documentation {
- margin: 2em 1em 5em 300px;
- min-width: 340px;
-}
-
-.file #metadata {
- margin: 0.8em;
-}
-
-#validator-badges {
- clear: both;
- margin: 1em 1em 2em;
-}
-
-/* @end */
-
-/* @group Metadata Section */
-#metadata .section {
- background-color: #dedede;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- border: 1px solid #aaa;
- margin: 0 8px 16px;
- font-size: 90%;
- overflow: hidden;
-}
-#metadata h3.section-header {
- margin: 0;
- padding: 2px 8px;
- background: #ccc;
- color: #666;
- -moz-border-radius-topleft: 4px;
- -moz-border-radius-topright: 4px;
- -webkit-border-top-left-radius: 4px;
- -webkit-border-top-right-radius: 4px;
- border-bottom: 1px solid #aaa;
-}
-#metadata #home-section h3.section-header {
- border-bottom: 0;
-}
-
-#metadata ul,
-#metadata dl,
-#metadata p {
- padding: 8px;
- list-style: none;
-}
-
-#file-metadata ul {
- padding-left: 28px;
- list-style-image: url(images/page_green.png);
-}
-
-dl.svninfo {
- color: #666;
- margin: 0;
-}
-dl.svninfo dt {
- font-weight: bold;
-}
-
-ul.link-list li {
- white-space: nowrap;
-}
-ul.link-list .type {
- font-size: 8px;
- text-transform: uppercase;
- color: white;
- background: #969696;
- padding: 2px 4px;
- -webkit-border-radius: 5px;
-}
-
-/* @end */
-
-
-/* @group Project Metadata Section */
-#project-metadata {
- margin-top: 3em;
-}
-
-.file #project-metadata {
- margin-top: 0em;
-}
-
-#project-metadata .section {
- border: 1px solid #aaa;
-}
-#project-metadata h3.section-header {
- border-bottom: 1px solid #aaa;
- position: relative;
-}
-#project-metadata h3.section-header .search-toggle {
- position: absolute;
- right: 5px;
-}
-
-
-#project-metadata form {
- color: #777;
- background: #ccc;
- padding: 8px 8px 16px;
- border-bottom: 1px solid #bbb;
-}
-#project-metadata fieldset {
- border: 0;
-}
-
-#no-class-search-results {
- margin: 0 auto 1em;
- text-align: center;
- font-size: 14px;
- font-weight: bold;
- color: #aaa;
-}
-
-/* @end */
-
-
-/* @group Documentation Section */
-.description {
- font-size: 100%;
- color: #333;
-}
-
-.description p {
- margin: 1em 0.4em;
-}
-
-.description li p {
- margin: 0;
-}
-
-.description ul {
- margin-left: 1.5em;
-}
-.description ul li {
- line-height: 1.4em;
-}
-
-.description dl,
-#documentation dl {
- margin: 8px 1.5em;
- border: 1px solid #ccc;
-}
-.description dl {
- font-size: 14px;
-}
-
-.description dt,
-#documentation dt {
- padding: 2px 4px;
- font-weight: bold;
- background: #ddd;
-}
-.description dd,
-#documentation dd {
- padding: 2px 12px;
-}
-.description dd + dt,
-#documentation dd + dt {
- margin-top: 0.7em;
-}
-
-#documentation .section {
- font-size: 90%;
-}
-
-#documentation h2.section-header {
- margin-top: 2em;
- padding: 0.75em 0.5em;
- background: #ccc;
- color: #333;
- font-size: 175%;
- border: 1px solid #bbb;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
-}
-
-#documentation h3.section-header {
- margin-top: 2em;
- padding: 0.25em 0.5em;
- background-color: #dedede;
- color: #333;
- font-size: 150%;
- border: 1px solid #bbb;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
-}
-
-#constants-list > dl,
-#attributes-list > dl {
- margin: 1em 0 2em;
- border: 0;
-}
-#constants-list > dl dt,
-#attributes-list > dl dt {
- padding-left: 0;
- font-weight: bold;
- font-family: Monaco, "Andale Mono";
- background: inherit;
-}
-#constants-list > dl dt a,
-#attributes-list > dl dt a {
- color: inherit;
-}
-#constants-list > dl dd,
-#attributes-list > dl dd {
- margin: 0 0 1em 0;
- padding: 0;
- color: #666;
-}
-
-.documentation-section h2 {
- position: relative;
-}
-
-.documentation-section h2 a {
- position: absolute;
- top: 8px;
- right: 10px;
- font-size: 12px;
- color: #9b9877;
- visibility: hidden;
-}
-
-.documentation-section h2:hover a {
- visibility: visible;
-}
-
-/* @group Method Details */
-
-#documentation .method-source-code {
- display: none;
-}
-
-#documentation .method-detail {
- margin: 0.5em 0;
- padding: 0.5em 0;
- cursor: pointer;
-}
-#documentation .method-detail:hover {
- background-color: #f1edba;
-}
-#documentation .method-heading {
- position: relative;
- padding: 2px 4px 0 20px;
- font-size: 125%;
- font-weight: bold;
- color: #333;
- background: url(images/brick.png) no-repeat left bottom;
-}
-#documentation .method-heading :link,
-#documentation .method-heading :visited {
- color: inherit;
-}
-#documentation .method-click-advice {
- position: absolute;
- top: 2px;
- right: 5px;
- font-size: 10px;
- color: #9b9877;
- visibility: hidden;
- padding-right: 20px;
- line-height: 20px;
- background: url(images/zoom.png) no-repeat right top;
-}
-#documentation .method-detail:hover .method-click-advice {
- visibility: visible;
-}
-
-#documentation .method-alias .method-heading {
- color: #666;
- background: url(images/brick_link.png) no-repeat left bottom;
-}
-
-#documentation .method-description,
-#documentation .aliases {
- margin: 0 20px;
- color: #666;
-}
-
-#documentation .method-description p,
-#documentation .aliases p {
- line-height: 1.2em;
-}
-
-#documentation .aliases {
- padding-top: 4px;
- font-style: italic;
- cursor: default;
-}
-#documentation .method-description p {
- padding: 0;
-}
-#documentation .method-description p + p {
- margin-bottom: 0.5em;
-}
-#documentation .method-description ul {
- margin-left: 1.5em;
-}
-
-#documentation .attribute-method-heading {
- background: url(images/tag_green.png) no-repeat left bottom;
-}
-#documentation #attribute-method-details .method-detail:hover {
- background-color: transparent;
- cursor: default;
-}
-#documentation .attribute-access-type {
- font-size: 60%;
- text-transform: uppercase;
- vertical-align: super;
- padding: 0 2px;
-}
-/* @end */
-
-/* @end */
-
-
-
-/* @group Source Code */
-
-div.method-source-code {
- background: #262626;
- color: #efefef;
- margin: 1em;
- padding: 0.5em;
- border: 1px dashed #999;
- overflow: hidden;
-}
-
-div.method-source-code pre {
- background: inherit;
- padding: 0;
- color: white;
- overflow: auto;
-}
-
-/* @group Ruby keyword styles */
-
-.ruby-constant { color: #7fffd4; background: transparent; }
-.ruby-keyword { color: #00ffff; background: transparent; }
-.ruby-ivar { color: #eedd82; background: transparent; }
-.ruby-operator { color: #00ffee; background: transparent; }
-.ruby-identifier { color: #ffdead; background: transparent; }
-.ruby-node { color: #ffa07a; background: transparent; }
-.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
-.ruby-regexp { color: #ffa07a; background: transparent; }
-.ruby-value { color: #7fffd4; background: transparent; }
-
-/* @end */
-/* @end */
-
-
-/* @group File Popup Contents */
-
-.file #metadata,
-.file-popup #metadata {
-}
-
-.file-popup dl {
- font-size: 80%;
- padding: 0.75em;
- background-color: #dedede;
- color: #333;
- border: 1px solid #bbb;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
-}
-.file dt {
- font-weight: bold;
- padding-left: 22px;
- line-height: 20px;
- background: url(images/page_white_width.png) no-repeat left top;
-}
-.file dt.modified-date {
- background: url(images/date.png) no-repeat left top;
-}
-.file dt.requires {
- background: url(images/plugin.png) no-repeat left top;
-}
-.file dt.scs-url {
- background: url(images/wrench.png) no-repeat left top;
-}
-
-.file dl dd {
- margin: 0 0 1em 0;
-}
-.file #metadata dl dd ul {
- list-style: circle;
- margin-left: 20px;
- padding-top: 0;
-}
-.file #metadata dl dd ul li {
-}
-
-
-.file h2 {
- margin-top: 2em;
- padding: 0.75em 0.5em;
- background-color: #dedede;
- color: #333;
- font-size: 120%;
- border: 1px solid #bbb;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
-}
-
-/* @end */
-
-
-
-
-/* @group ThickBox Styles */
-#TB_window {
- font: 12px Arial, Helvetica, sans-serif;
- color: #333333;
-}
-
-#TB_secondLine {
- font: 10px Arial, Helvetica, sans-serif;
- color:#666666;
-}
-
-#TB_window :link,
-#TB_window :visited { color: #666666; }
-#TB_window :link:hover,
-#TB_window :visited:hover { color: #000; }
-#TB_window :link:active,
-#TB_window :visited:active { color: #666666; }
-#TB_window :link:focus,
-#TB_window :visited:focus { color: #666666; }
-
-#TB_overlay {
- position: fixed;
- z-index:100;
- top: 0px;
- left: 0px;
- height:100%;
- width:100%;
-}
-
-.TB_overlayMacFFBGHack {background: url(images/macFFBgHack.png) repeat;}
-.TB_overlayBG {
- background-color:#000;
- filter:alpha(opacity=75);
- -moz-opacity: 0.75;
- opacity: 0.75;
-}
-
-* html #TB_overlay { /* ie6 hack */
- position: absolute;
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
-}
-
-#TB_window {
- position: fixed;
- background: #ffffff;
- z-index: 102;
- color:#000000;
- display:none;
- border: 4px solid #525252;
- text-align:left;
- top:50%;
- left:50%;
-}
-
-* html #TB_window { /* ie6 hack */
- position: absolute;
- margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
-}
-
-#TB_window img#TB_Image {
- display:block;
- margin: 15px 0 0 15px;
- border-right: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
- border-top: 1px solid #666;
- border-left: 1px solid #666;
-}
-
-#TB_caption{
- height:25px;
- padding:7px 30px 10px 25px;
- float:left;
-}
-
-#TB_closeWindow{
- height:25px;
- padding:11px 25px 10px 0;
- float:right;
-}
-
-#TB_closeAjaxWindow{
- padding:7px 10px 5px 0;
- margin-bottom:1px;
- text-align:right;
- float:right;
-}
-
-#TB_ajaxWindowTitle{
- float:left;
- padding:7px 0 5px 10px;
- margin-bottom:1px;
- font-size: 22px;
-}
-
-#TB_title{
- background-color: #6C8C22;
- color: #dedede;
- height:40px;
-}
-#TB_title :link,
-#TB_title :visited {
- color: white !important;
- border-bottom: 1px dotted #dedede;
-}
-
-#TB_ajaxContent{
- clear:both;
- padding:2px 15px 15px 15px;
- overflow:auto;
- text-align:left;
- line-height:1.4em;
-}
-
-#TB_ajaxContent.TB_modal{
- padding:15px;
-}
-
-#TB_ajaxContent p{
- padding:5px 0px 5px 0px;
-}
-
-#TB_load{
- position: fixed;
- display:none;
- height:13px;
- width:208px;
- z-index:103;
- top: 50%;
- left: 50%;
- margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
-}
-
-* html #TB_load { /* ie6 hack */
- position: absolute;
- margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
-}
-
-#TB_HideSelect{
- z-index:99;
- position:fixed;
- top: 0;
- left: 0;
- background-color:#fff;
- border:none;
- filter:alpha(opacity=0);
- -moz-opacity: 0;
- opacity: 0;
- height:100%;
- width:100%;
-}
-
-* html #TB_HideSelect { /* ie6 hack */
- position: absolute;
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
-}
-
-#TB_iframeContent{
- clear:both;
- border:none;
- margin-bottom:-1px;
- margin-top:1px;
- _margin-bottom:1px;
-}
-
-/* @end */
-
-/* @group Debugging Section */
-
-#debugging-toggle {
- text-align: center;
-}
-#debugging-toggle img {
- cursor: pointer;
-}
-
-#rdoc-debugging-section-dump {
- display: none;
- margin: 0 2em 2em;
- background: #ccc;
- border: 1px solid #999;
-}
-
-
-
-/* @end */
diff --git a/doc/diagrams/models.dot b/doc/diagrams/models.dot
deleted file mode 100644
index 75607f6..0000000
--- a/doc/diagrams/models.dot
+++ /dev/null
@@ -1,18 +0,0 @@
-digraph models_diagram {
- graph[overlap=false, splines=true]
- "Bug" [shape=Mrecord, label="{Bug|title :text\lcreated_at :datetime\lupdated_at :datetime\l}"]
- "Comment" [shape=Mrecord, label="{Comment|text :text\lread :boolean\lcreated_at :datetime\lupdated_at :datetime\l}"]
- "Glsa" [shape=Mrecord, label="{Glsa|requester :integer\lsubmitter :integer\lbugreadymaker :integer\lstatus :string\lrestricted :boolean\lcreated_at :datetime\lupdated_at :datetime\l}"]
- "Reference" [shape=Mrecord, label="{Reference|title :text\lurl :text\lcreated_at :datetime\lupdated_at :datetime\l}"]
- "Revision" [shape=Mrecord, label="{Revision|revid :integer\ltitle :string\laccess :string\lproduct :string\lcategory :string\lseverity :string\lsynopsis :text\lbackground :text\ldescription :text\limpact :text\lworkaround :text\lresolution :text\lcreated_at :datetime\lupdated_at :datetime\l}"]
- "User" [shape=Mrecord, label="{User|login :string\lname :string\lemail :string\ldisabled :boolean\lpreferences :text\laccess :integer\lcreated_at :datetime\lupdated_at :datetime\l}"]
- "Glsa" -> "Comment" [arrowtail=crow, arrowhead=dot, dir=both]
- "Glsa" -> "Revision" [arrowtail=crow, arrowhead=dot, dir=both]
- "Revision" -> "Bug" [arrowtail=crow, arrowhead=dot, dir=both]
- "Revision" -> "Reference" [arrowtail=crow, arrowhead=dot, dir=both]
- "User" -> "Glsa" [label="requested_glsas", arrowtail=crow, arrowhead=dot, dir=both]
- "User" -> "Revision" [arrowtail=crow, arrowhead=dot, dir=both]
- "User" -> "Glsa" [label="bugreadymade_glsas", arrowtail=crow, arrowhead=dot, dir=both]
- "User" -> "Permission" [arrowtail=crow, arrowhead=crow, dir=both]
- "User" -> "Glsa" [label="submitted_glsas", arrowtail=crow, arrowhead=dot, dir=both]
-}
diff --git a/doc/diagrams/models.png b/doc/diagrams/models.png
deleted file mode 100644
index bec604c..0000000
--- a/doc/diagrams/models.png
+++ /dev/null
Binary files differ
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
new file mode 100644
index 0000000..601cf97
--- /dev/null
+++ b/docker-compose.override.yml
@@ -0,0 +1,60 @@
+version: '3.7'
+
+services:
+ http-serving:
+ build:
+ context: .
+ dockerfile: Dockerfile.dev
+ volumes:
+ - type: "bind"
+ source: "/var/log/glsamaker"
+ target: "/var/log/glsamaker"
+ - type: "bind"
+ source: "."
+ target: "/go/src/glsamaker"
+ environment:
+ GLSAMAKER_LOG_FILE: '/var/log/glsamaker/web.log'
+ ports:
+ - 127.0.0.1:5000:5000
+ command: "tail -f /dev/null"
+ depends_on:
+ - db
+ updater:
+ build:
+ context: .
+ dockerfile: Dockerfile.dev
+ volumes:
+ - type: "bind"
+ source: "."
+ target: "/go/src/glsamaker"
+ - type: "bind"
+ source: "/var/log/glsamaker"
+ target: "/var/log/glsamaker"
+ environment:
+ GLSAMAKER_LOG_FILE: '/var/log/glsamaker/updater.log'
+ command: "tail -f /dev/null"
+ depends_on:
+ - db
+ db:
+ image: postgres:12
+ restart: always
+ environment:
+ POSTGRES_USER: ${GLSAMAKER_POSTGRES_USER:-root}
+ POSTGRES_PASSWORD: ${GLSAMAKER_POSTGRES_PASSWORD:-root}
+ POSTGRES_DB: ${GLSAMAKER_POSTGRES_DB:-glsamaker}
+ volumes:
+ - pgdata:/var/lib/postgresql/data
+ pgadmin:
+ image: dpage/pgadmin4
+ environment:
+ PGADMIN_DEFAULT_EMAIL: admin@admin.org
+ PGADMIN_DEFAULT_PASSWORD: admin
+ volumes:
+ - pgadmin:/root/.pgadmin
+ ports:
+ - "5050:80"
+ restart: unless-stopped
+
+volumes:
+ pgdata:
+ pgadmin:
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..4ce6b2b
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,55 @@
+version: '3.7'
+
+services:
+ http-serving:
+ image: ${GLSAMAKER_IMAGE:-gentoo/glsamaker:latest}
+ volumes:
+ - type: "bind"
+ source: "/var/log/glsamaker"
+ target: "/var/log/glsamaker"
+ ports:
+ - 127.0.0.1:5000:5000
+ labels:
+ com.centurylinklabs.watchtower.enable: "true"
+ restart: always
+ environment:
+ GLSAMAKER_LOG_FILE: '/var/log/glsamaker/web.log'
+ command: "/go/src/glsamaker/bin/glsamaker --serve"
+ depends_on:
+ - db
+ updater:
+ image: ${GLSAMAKER_IMAGE:-gentoo/glsamaker:latest}
+ volumes:
+ - type: "bind"
+ source: "/var/log/glsamaker"
+ target: "/var/log/glsamaker"
+ labels:
+ com.centurylinklabs.watchtower.enable: "true"
+ environment:
+ GLSAMAKER_LOG_FILE: '/var/log/glsamaker/updater.log'
+ command: "/go/src/glsamaker/bin/glsamaker --full-update"
+ depends_on:
+ - db
+ db:
+ image: postgres:12
+ restart: always
+ environment:
+ POSTGRES_USER: ${GLSAMAKER_POSTGRES_USER:-root}
+ POSTGRES_PASSWORD: ${GLSAMAKER_POSTGRES_PASSWORD:-root}
+ POSTGRES_DB: ${GLSAMAKER_POSTGRES_DB:-glsamaker}
+ volumes:
+ - ${GLSAMAKER_POSTGRES_DATA_PATH:-/var/lib/postgresql/data}:/var/lib/postgresql/data
+ watchtower:
+ image: containrrr/watchtower:0.3.10
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - /root/.docker/config.json:/config.json
+ command: --label-enable
+ pgadmin:
+ image: dpage/pgadmin4
+ environment:
+ PGADMIN_DEFAULT_EMAIL: admin@admin.org
+ PGADMIN_DEFAULT_PASSWORD: admin
+ ports:
+ - "5050:80"
+ restart: unless-stopped
diff --git a/glsamaker.go b/glsamaker.go
new file mode 100644
index 0000000..5c7f6ec
--- /dev/null
+++ b/glsamaker.go
@@ -0,0 +1,60 @@
+package main
+
+import (
+ "glsamaker/pkg/app"
+ "glsamaker/pkg/config"
+ "glsamaker/pkg/cveimport"
+ "glsamaker/pkg/logger"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+ "time"
+)
+
+func printHelp() {
+ fmt.Println("Please specific one of the following options:")
+ fmt.Println(" glsamaker --update -- incrementally import cve's and update the database")
+ fmt.Println(" glsamaker --full-update -- import all cve's and update the database")
+ fmt.Println(" glsamaker --serve -- serve the application")
+}
+
+func isCommand(command string) bool {
+ return len(os.Args) > 1 && os.Args[1] == command
+}
+
+func main() {
+
+ waitForPostgres()
+
+ errorLogFile := logger.CreateLogFile(config.LogFile())
+ defer errorLogFile.Close()
+ initLoggers(os.Stdout, errorLogFile)
+
+ if isCommand("--serve") {
+ app.Serve()
+ } else if isCommand("--full-update") {
+ cveimport.FullUpdate()
+ } else if isCommand("--update") {
+ cveimport.Update()
+ } else {
+ printHelp()
+ }
+
+}
+
+// initialize the loggers depending on whether
+// config.debug is set to true
+func initLoggers(infoHandler io.Writer, errorHandler io.Writer) {
+ if config.Debug() == "true" {
+ logger.Init(os.Stdout, infoHandler, errorHandler)
+ } else {
+ logger.Init(ioutil.Discard, infoHandler, errorHandler)
+ }
+}
+
+// TODO this has to be solved differently
+// wait for postgres to come up
+func waitForPostgres() {
+ time.Sleep(5 * time.Second)
+}
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..fa4821f
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,13 @@
+module glsamaker
+
+go 1.13
+
+require (
+ github.com/duo-labs/webauthn v0.0.0-20200131223046-0864f70a0509
+ github.com/duo-labs/webauthn.io v0.0.0-20191119211219-328048ff6814
+ github.com/go-pg/pg/v9 v9.1.3
+ github.com/google/uuid v1.1.1
+ github.com/pquerna/otp v1.2.0
+ github.com/skip2/go-qrcode v0.0.0-20191027152451-9434209cb086
+ golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..61ce03c
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,739 @@
+bitbucket.org/liamstask/goose v0.0.0-20150115234039-8488cc47d90c/go.mod h1:hSVuE3qU7grINVSwrmzHfpg9k87ALBk+XaualNyUzI4=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw=
+contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0=
+github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/OpenPeeDeeP/depguard v1.0.0/go.mod h1:7/4sitnI9YlQgTLLk734QlzXT8DuHVnAyztLplQjk+o=
+github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us=
+github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM=
+github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
+github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
+github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
+github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q=
+github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM=
+github.com/bombsimon/wsl v1.2.8 h1:b+E/W7koicKBZDU+vEsw/hnQTN8026Gv1eMZDLUU/Wc=
+github.com/bombsimon/wsl v1.2.8/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/certifi/gocertifi v0.0.0-20180118203423-deb3ae2ef261/go.mod h1:GJKEexRPVJrBSOjoqN5VNOIKJ5Q3RViH6eu3puDRwx4=
+github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM=
+github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cloudflare/backoff v0.0.0-20161212185259-647f3cdfc87a/go.mod h1:rzgs2ZOiguV6/NpiDgADjRLPNyZlApIWxKpkT+X8SdY=
+github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7 h1:Puu1hUwfps3+1CUzYdAZXijuvLuRMirgiXdf3zsM2Ig=
+github.com/cloudflare/cfssl v0.0.0-20190726000631-633726f6bcb7/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
+github.com/cloudflare/cfssl v1.4.1 h1:vScfU2DrIUI9VPHBVeeAQ0q5A+9yshO1Gz+3QoUQiKw=
+github.com/cloudflare/cfssl v1.4.1/go.mod h1:KManx/OJPb5QY+y0+o/898AMcM128sF0bURvoVUSjTo=
+github.com/cloudflare/go-metrics v0.0.0-20151117154305-6a9aea36fb41/go.mod h1:eaZPlJWD+G9wseg1BuRXlHnjntPMrywMsyxf+LTOdP4=
+github.com/cloudflare/redoctober v0.0.0-20171127175943-746a508df14c/go.mod h1:6Se34jNoqrd8bTxrmJB2Bg2aoZ2CdSXonils9NsiNgo=
+github.com/codemodus/kace v0.5.1 h1:4OCsBlE2c/rSJo375ggfnucv9eRzge/U5LrrOZd47HA=
+github.com/codemodus/kace v0.5.1/go.mod h1:coddaHoX1ku1YFSe4Ip0mL9kQjJvKkzb9CfIdG1YR04=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY=
+github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/etcd v3.3.17+incompatible h1:f/Z3EoDSx1yjaIjLQGo1diYUlQYSBrrAQ5vP8NjwXwo=
+github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
+github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/duo-labs/webauthn v0.0.0-20191119193225-4bf9a0f776d4/go.mod h1:KR2KScxcZAWdZGOUnsPGjD3ow0cvNfv3WHXC/Xz+d9g=
+github.com/duo-labs/webauthn v0.0.0-20200131223046-0864f70a0509 h1:XlqpA/EJNuSPkp6/yl2fCXcsQ/y5uw4GKkVBYmebdnE=
+github.com/duo-labs/webauthn v0.0.0-20200131223046-0864f70a0509/go.mod h1:lLEqCfy8LnwEbRr1SrxujNtHadF3cEGY7MmR3vo0s3A=
+github.com/duo-labs/webauthn.io v0.0.0-20191119211219-328048ff6814 h1:vlNyR3D4/kNWWD2fQ6Q7WhrB6UwbPivuheitHcPPP1I=
+github.com/duo-labs/webauthn.io v0.0.0-20191119211219-328048ff6814/go.mod h1:fAQEHOngvfrn+T6HvMoB/AJ8CMVcCqvk3Ue3JYJshsA=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
+github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
+github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
+github.com/fatih/color v1.6.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/getsentry/raven-go v0.0.0-20180121060056-563b81fc02b7/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA=
+github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA=
+github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0=
+github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
+github.com/go-pg/pg/v9 v9.0.0-beta.14/go.mod h1:T2Sr6bpTCOr2lUqOUMiXLMJqZHSUBKk1LdgSqjwhZfA=
+github.com/go-pg/pg/v9 v9.0.3/go.mod h1:Tm/Q3Vt6gdQOH6TTN1H/xLlIXc+Qrka7TZ6uREtu/eA=
+github.com/go-pg/pg/v9 v9.1.3 h1:gmE7k5ib45+NcRJBGUDPD/keJGCMqhH7TPqbd9xbdz4=
+github.com/go-pg/pg/v9 v9.1.3/go.mod h1:QM13HBLkdml4zcKOfUfGLymM6hb72aKTJLrmaH8rsFg=
+github.com/go-pg/urlstruct v0.1.0/go.mod h1:2Nag+BIny6G/KYCkdt++ZnqU/VinzimGapKfs4kwlN0=
+github.com/go-pg/urlstruct v0.2.6/go.mod h1:dxENwVISWSOX+k87hDt0ueEJadD+gZWv3tHzwfmZPu8=
+github.com/go-pg/urlstruct v0.3.0 h1:ORiTb205uT7v7lvq4VUOQ4ddJ5TjFRlVRWqWsMBgek4=
+github.com/go-pg/urlstruct v0.3.0/go.mod h1:/XKyiUOUUS3onjF+LJxbfmSywYAdl6qMfVbX33Q8rgg=
+github.com/go-pg/zerochecker v0.1.1 h1:av77Qe7Gs+1oYGGh51k0sbZ0bUaxJEdeP0r8YE64Dco=
+github.com/go-pg/zerochecker v0.1.1/go.mod h1:NJZ4wKL0NmTtz0GKCoJ8kym6Xn/EQzXRl2OnAe7MmDo=
+github.com/go-sql-driver/mysql v1.3.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g=
+github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4=
+github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8=
+github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ=
+github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
+github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ=
+github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY=
+github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg=
+github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k=
+github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw=
+github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU=
+github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk=
+github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg=
+github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI=
+github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks=
+github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc=
+github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4=
+github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8=
+github.com/go-toolsmith/typep v1.0.0 h1:zKymWyA1TRYvqYrYDrfEMZULyrhcnGY3x7LDKU2XQaA=
+github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU=
+github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
+github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
+github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b h1:ekuhfTjngPhisSjOJ0QWKpPQE8/rbknHaes6WVJj5Hw=
+github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE=
+github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.0.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0=
+github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4=
+github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM=
+github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk=
+github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w=
+github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0=
+github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw=
+github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8=
+github.com/golangci/go-tools v0.0.0-20190318055746-e32c54105b7c/go.mod h1:unzUULGw35sjyOYjUt0jMTXqHlZPpPc6e+xfO4cd6mM=
+github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8=
+github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o=
+github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU=
+github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d h1:pXTK/gkVNs7Zyy7WKgLXmpQ5bHTrq5GDsp8R9Qs67g0=
+github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU=
+github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU=
+github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks=
+github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU=
+github.com/golangci/golangci-lint v1.17.2-0.20190910081718-bad04bb7378f/go.mod h1:kaqo8l0OZKYPtjNmG4z4HrWLgcYNIJ9B9q3LWri9uLg=
+github.com/golangci/golangci-lint v1.21.0 h1:HxAxpR8Z0M8omihvQdsD3PF0qPjlqYqp2vMJzstoKeI=
+github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk=
+github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547/go.mod h1:0qUabqiIQgfmlAmulqxyiGkkyF6/tOGSnY2cnPVwrzU=
+github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI=
+github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU=
+github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
+github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA=
+github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg=
+github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA=
+github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o=
+github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 h1:EL/O5HGrF7Jaq0yNhBLucz9hTuRzj2LdwGBOaENgxIk=
+github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA=
+github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us=
+github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI=
+github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
+github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039 h1:XQKc8IYQOeRwVs36tDrEmTgDgP88d5iEURwpmtiAlOM=
+github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4=
+github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys=
+github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/certificate-transparency-go v1.0.21 h1:Yf1aXowfZ2nuboBsg7iYGLmwsOARdV86pfH3g95wXmE=
+github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg=
+github.com/google/certificate-transparency-go v1.1.0 h1:10MlrYzh5wfkToxWI4yJzffsxLfxcEDlOATMx/V9Kzw=
+github.com/google/certificate-transparency-go v1.1.0/go.mod h1:i+Q7XY+ArBveOUT36jiHGfuSK1fHICIg6sUkRxPAbCs=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/monologue v0.0.0-20190606152607-4b11a32b5934/go.mod h1:6NTfaQoUpg5QmPsCUWLR3ig33FHrKXhTtWzF0DVdmuk=
+github.com/google/monologue v0.0.0-20191105172128-0324c8b45f6f h1:i0EUsaZHmQOp6gNaLUa2Xjh540lSHm9g+FN/TqyJIN4=
+github.com/google/monologue v0.0.0-20191105172128-0324c8b45f6f/go.mod h1:6NTfaQoUpg5QmPsCUWLR3ig33FHrKXhTtWzF0DVdmuk=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/trillian v1.2.2-0.20190612132142-05461f4df60a/go.mod h1:YPmUVn5NGwgnDUgqlVyFGMTgaWlnSvH7W5p+NdOG8UA=
+github.com/google/trillian-examples v0.0.0-20190603134952-4e75ba15216c/go.mod h1:WgL3XZ3pA8/9cm7yxqWrZE6iZkESB2ItGxy5Fo6k2lk=
+github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
+github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
+github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
+github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
+github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
+github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ=
+github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
+github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
+github.com/gostaticanalysis/analysisutil v0.0.3 h1:iwp+5/UAyzQSFgQ4uR2sni99sJ8Eo9DEacKWM5pekIg=
+github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 h1:THDBEeQ9xZ8JEaCLyLQqXMMdRqNr0QAUJTIkQAUtFjg=
+github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.12.1 h1:zCy2xE9ablevUOrUZc3Dl72Dt+ya2FNAvC2yLYMHzi4=
+github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c=
+github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
+github.com/hashicorp/hcl v0.0.0-20180404174102-ef8a98b0bbce/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
+github.com/jinzhu/gorm v1.9.11/go.mod h1:bu/pK8szGZ2puuErfU0RwyeNdsf3e6nCX/noXaVxkfw=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
+github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548/go.mod h1:hGT6jSUVzF6no3QaDSMLGLEHtHSBSefs+MgcDWnmhmo=
+github.com/jmoiron/sqlx v0.0.0-20180124204410-05cef0741ade/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU=
+github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
+github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/katzenpost/core v0.0.7/go.mod h1:UXMLmMXlBHrhMXhWTy4DvCXqwTRLOh4DP/mR1Cm1sR8=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v0.0.0-20161130080628-0de1eaf82fa3/go.mod h1:jxZFDH7ILpTPQTk+E2s+z4CUas9lVNjIuKR4c5/zKgM=
+github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kisielk/sqlstruct v0.0.0-20150923205031-648daed35d49/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE=
+github.com/kisom/goutils v1.1.0/go.mod h1:+UBTfd78habUYWFbNWTJNG+jNG/i/lGURakr4A/yNRw=
+github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
+github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
+github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kylelemons/go-gypsy v0.0.0-20160905020020-08cad365cd28/go.mod h1:T/T7jsxVqf9k/zYOqbgNAsANsjxTd1Yq3htjDhQ1H0c=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/letsencrypt/pkcs11key v2.0.1-0.20170608213348-396559074696+incompatible/go.mod h1:iGYXKqDXt0cpBthCHdr9ZdsQwyGlYFh/+8xa4WzIQ34=
+github.com/lib/pq v0.0.0-20180201184707-88edab080323/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
+github.com/magiconair/properties v1.7.6/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE=
+github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
+github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
+github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mattn/go-runewidth v0.0.6 h1:V2iyH+aX9C5fsYCpK60U8BYIvmhqxuOL3JZcqc1NB7k=
+github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
+github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
+github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk=
+github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
+github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
+github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk=
+github.com/mreiferson/go-httpclient v0.0.0-20160630210159-31f0106b4474/go.mod h1:OQA4XLvDbMgS8P0CevmM4m9Q3Jq4phKUzcocxuGJ5m8=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/nbutton23/zxcvbn-go v0.0.0-20160627004424-a22cb81b2ecd/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
+github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
+github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E=
+github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
+github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/olekukonko/tablewriter v0.0.2 h1:sq53g+DWf0J6/ceFUHpQ0nAEb6WgM++fq16MZ91cS6o=
+github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
+github.com/pelletier/go-toml v1.1.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4=
+github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=
+github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v0.9.4/go.mod h1:oCXIBxdI62A4cR6aTRJCgetEjecSIYzOEaeAn4iYEpM=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.2.1 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI=
+github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY=
+github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/procfs v0.0.7 h1:RS5GAlMbnkWkhs4+bPocMTmGjYkuCY5djjqEDdXOhcQ=
+github.com/prometheus/procfs v0.0.7/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI=
+github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
+github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
+github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do=
+github.com/securego/gosec v0.0.0-20191119104125-df484bfa9e9f h1:1egnuKwFhkqg8hXU5huGkxz9iPFu4dLINWRSIPjAM+M=
+github.com/securego/gosec v0.0.0-20191119104125-df484bfa9e9f/go.mod h1:H5UrtKXL5BGF4FgRa7p2fyqU/lddaTSCLjexYIfS0Bk=
+github.com/segmentio/encoding v0.1.10 h1:0b8dva47cSuNQR5ZcU3d0pfi9EnPpSK6q7y5ZGEW36Q=
+github.com/segmentio/encoding v0.1.10/go.mod h1:RWhr02uzMB9gQC1x+MfYxedtmBibb9cZ6Vv9VxRSSbw=
+github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc=
+github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
+github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
+github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ=
+github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/skip2/go-qrcode v0.0.0-20191027152451-9434209cb086 h1:RYiqpb2ii2Z6J4x0wxK46kvPBbFuZcdhS+CIztmYgZs=
+github.com/skip2/go-qrcode v0.0.0-20191027152451-9434209cb086/go.mod h1:PLPIyL7ikehBD1OAjmKKiOEhbvWyHGaNDjquXMcYABo=
+github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/sourcegraph/go-diff v0.5.1 h1:gO6i5zugwzo1RVTvgvfwCOSVegNuvnNi6bAD1QCmkHs=
+github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/afero v1.1.0/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg=
+github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.2/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/jwalterweatherman v0.0.0-20180109140146-7c0cea34c8ec/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
+github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/viper v1.0.2/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+github.com/spf13/viper v1.5.0 h1:GpsTwfsQ27oS/Aha/6d1oD7tpKIqWnOA6tgOX9HHkt4=
+github.com/spf13/viper v1.5.0/go.mod h1:AkYRkVJF8TkSG/xet6PzXX+l39KhhXa2pdqVSxnTcn4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
+github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
+github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e h1:RumXZ56IrCj4CL+g1b9OL/oH0QnsF976bC8xQFYUD5Q=
+github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
+github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
+github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
+github.com/ultraware/funlen v0.0.1/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA=
+github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo=
+github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA=
+github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg=
+github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA=
+github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
+github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
+github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
+github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM=
+github.com/uudashr/gocognit v1.0.0 h1:NST9SQhYHpFiyKdXn8UAiogdB1xkt5RnA1/rR/oBcGw=
+github.com/uudashr/gocognit v1.0.0/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM=
+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
+github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s=
+github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
+github.com/valyala/quicktemplate v1.1.1/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4=
+github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4=
+github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
+github.com/vmihailenco/bufpool v0.1.5 h1:mEO/biwhAgiY97yPMmAdH4PvaIu63C6uGBdfSdoMo/I=
+github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk=
+github.com/vmihailenco/msgpack/v4 v4.3.5/go.mod h1:DuaveEe48abshDmz5UBKyZ+yDugvaeFk5ayfrewUOaw=
+github.com/vmihailenco/msgpack/v4 v4.3.7 h1:Aj4eMY2qXTRfWRwHKJ2n/CWKVy15pCYN327QMJ/OUVs=
+github.com/vmihailenco/msgpack/v4 v4.3.7/go.mod h1:Ii+PksJlvFT5ZRcB/4YLAInMIp6a0WOCm0L3BU0aNG4=
+github.com/vmihailenco/tagparser v0.1.0/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY=
+github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/weppos/publicsuffix-go v0.4.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k=
+github.com/weppos/publicsuffix-go v0.5.0/go.mod h1:z3LCPQ38eedDQSwmsSRW4Y7t2L8Ln16JPQ02lHAdn5k=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
+github.com/zmap/rc2 v0.0.0-20131011165748-24b9757f5521/go.mod h1:3YZ9o3WnatTIZhuOtot4IcUfzoKVjUHqu6WALIyI0nE=
+github.com/zmap/zcertificate v0.0.0-20180516150559-0e3d58b1bac4/go.mod h1:5iU54tB79AMBcySS0R2XIyZBAVmeHranShAFELYx7is=
+github.com/zmap/zcrypto v0.0.0-20190729165852-9051775e6a2e/go.mod h1:w7kd3qXHh8FNaczNjslXqvFQiv5mMWRXlL9klTUAHc8=
+github.com/zmap/zlint v0.0.0-20190806154020-fd021b4cfbeb/go.mod h1:29UiAJNsiVdvTBFCJW8e3q6dcDbOoPkhMgttOSCIMMY=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/etcd v3.3.13+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
+go.etcd.io/etcd v3.3.17+incompatible h1:g8iRku1SID8QAW8cDlV0L/PkZlw63LSiYEHYHoE6j/s=
+go.etcd.io/etcd v3.3.17+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
+go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY=
+go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
+go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E=
+go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
+go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
+go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU=
+go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
+golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20191117063200-497ca9f6d64f/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20191128160524-b544559bb6d1/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw=
+golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/net v0.0.0-20170915142106-8351a756f30f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190420063019-afa5a82059c6/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191119073136-fc4aabc6c914/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222033325-078779b8f2d8 h1:4l6HGmcZuPkox4Zl1b7SZQfYo8KIKvPe+5VG6ibuUEg=
+golang.org/x/net v0.0.0-20200222033325-078779b8f2d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20171026204733-164713f0dfce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191119060738-e882bf8e40c2 h1:wAW1U21MfVN0sUipAD8952TBjGXMRHFKQugDlQ9RwwE=
+golang.org/x/sys v0.0.0-20191119060738-e882bf8e40c2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20170915040203-e531a2a1c15f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181117154741-2ddaf7f79a09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190110163146-51295c7ec13a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190121143147-24cd39ecf745/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190719005602-e377ae9d6386/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
+golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
+golang.org/x/tools v0.0.0-20190909030654-5b82db07426d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911151314-feee8acb394c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191101200257-8dbcdeb83d3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119175705-11e13f1c3fd7 h1:RyLBY/sJ/JwgAsmjUkGy/spRidXrmMj9uK4V6eiBypg=
+golang.org/x/tools v0.0.0-20191119175705-11e13f1c3fd7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190605220351-eb0b1bdb6ae6/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11 h1:51D++eCgOHufw5VfDE9Uzqyyc+OyQIjb9hkYy9LN5Fk=
+google.golang.org/genproto v0.0.0-20191115221424-83cc0476cb11/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
+google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk=
+gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.6 h1:97YCGUei5WVbkKfogoJQsLwUJ17cWvpLrgNvlcbxikE=
+gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+mellium.im/sasl v0.2.1 h1:nspKSRg7/SyO0cRGY71OkfHab8tf9kCts6a6oTDut0w=
+mellium.im/sasl v0.2.1/go.mod h1:ROaEDLQNuf9vjKqE1SrAfnsobm2YKXT1gnN1uDp1PjQ=
+mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I=
+mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc=
+mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo=
+mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4=
+mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34/go.mod h1:H6SUd1XjIs+qQCyskXg5OFSrilMRUkD8ePJpHKDPaeY=
+mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw=
+mvdan.cc/unparam v0.0.0-20191111180625-960b1ec0f2c2 h1:K7wru2CfJGumS5hkiguQ0Rb9ebKM2Jo8s5d4Jm9lFaM=
+mvdan.cc/unparam v0.0.0-20191111180625-960b1ec0f2c2/go.mod h1:rCqoQrfAmpTX/h2APczwM7UymU/uvaOluiVPIYCSY/k=
+sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
+sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
+sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
+sourcegraph.com/sqs/pbtypes v1.0.0 h1:f7lAwqviDEGvON4kRv0o5V7FT/IQK+tbkF664XMbP3o=
+sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4=
diff --git a/lib/assets/.gitkeep b/lib/assets/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/lib/assets/.gitkeep
+++ /dev/null
diff --git a/lib/authentication.rb b/lib/authentication.rb
deleted file mode 100644
index 6f162e3..0000000
--- a/lib/authentication.rb
+++ /dev/null
@@ -1,111 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Authentication module
-module Authentication
- protected
- # Login filter to be applied to *all* pages on GLSAMaker
- def login_required
- # Production authentication via REMOTE_USER
- if Rails.env.production? or GLSAMAKER_FORCE_PRODUCTION_AUTH
- # REMOTE_USER should be there in FCGI or Passenger
- env_user_name = user_name
-
- # Autentication system most likely broken
- if env_user_name.nil?
- logger.warn "Neither REMOTE_USER nor HTTP_AUTHORIZATION set in environment."
- redirect_to :controller => 'index', :action => 'error', :type => 'system'
- return
- end
-
- user = User.find_by_login(env_user_name)
-
- # User not known to GLSAMaker
- if user == nil
- logger.warn "Unknown user #{env_user_name} tried to log in from #{request.remote_ip}"
- redirect_to :controller => 'index', :action => 'error', :type => 'user'
- return
- end
-
- # User is marked as disabled in the DB
- if user.disabled
- logger.warn "Disabled user #{env_user_name} tried to log in from #{request.remote_ip}"
- redirect_to :controller => 'index', :action => 'error', :type => 'disabled'
- return
- end
-
- # Auth is fine now.
- logger.debug "Environment username: #{env_user_name}"
-
- # For all other environments request, HTTP auth by ourselves
- # The password can be set in config/initializers/glsamaker.rb
- else
- authenticate_or_request_with_http_basic("GLSAMaker testing environment") do |username, password|
- logger.debug "Environment username: #{username}"
- check_auth(username, password)
- end
- end
- end
-
- # Filter for admin pages
- def admin_access_required
- unless current_user.is_el_jefe?
- deny_access "Admin interface"
- false
- end
- end
-
- # Returns the ActiveRecord object of the currently logged in user
- def current_user
- User.find_by_login(user_name)
- end
-
- # Populate user to views, shamelessly stolen from restful auth. ;)
- def self.included(base)
- base.send :helper_method, :current_user if base.respond_to? :helper_method
- end
-
- private
- # Tries to find out the user name used for HTTP auth from two sources
- def user_name
- if request.env.include?('REMOTE_USER') then
- u = request.env['REMOTE_USER']
- return u unless u.nil?
- else
- auth = http_authorization_data
- return auth[0] unless auth.nil?
- end
- return nil
- end
-
- def check_auth(username, password)
- user = User.find_by_login(username)
-
- return false if user.nil?
- return false if user.disabled
-
- password == GLSAMAKER_DEVEL_PASSWORD
- end
-
- def http_authorization_data
- return nil unless request.env.include?('HTTP_AUTHORIZATION')
- return nil if request.env['HTTP_AUTHORIZATION'].nil?
-
- auth_info = request.env['HTTP_AUTHORIZATION'].split
-
- if auth_info[0] == "Basic"
- auth_info[1].unpack("m*").first.split(/:/, 2)
- else
- logger.fatal "Non-Basic HTTP authentication given. I can't process that"
- raise RuntimeError, "Cannot process this type of HTTP authentication"
- end
- end
-end
diff --git a/lib/authorization.rb b/lib/authorization.rb
deleted file mode 100644
index 5341709..0000000
--- a/lib/authorization.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2011 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Authorization module
-module Authorization
- # Checks access to a given GLSA
- def check_object_access(glsa)
- # Contributor, no foreign drafts
- if current_user.access == 0
- unless glsa.is_owner? current_user
- return false
- end
- elsif current_user.access < 3
- if glsa.restricted
- return false
- end
- end
-
- true
- end
-
- # Checks access to a given GLSA, and aborts the request if the user does not have sufficient permissions
- def check_object_access!(glsa)
- unless check_object_access(glsa)
- deny_access "Access to restricted GLSA #{glsa.id} (#{params[:action]})"
- return false
- end
-
- true
- end
-
- # Redirects the user to a 'Access Denied' screen and logs the incident
- def deny_access(msg)
- log_unauthorized_access msg
- redirect_to :controller => '/index', :action => 'error', :type => 'access'
- end
-
- # Logs an unauthorized access attempt
- def log_unauthorized_access(msg)
- logger.warn "[#{Time.now.rfc2822}] UNAUTHORIZED ACCESS by #{current_user.login} from #{request.remote_ip} to #{request.url}: #{msg}"
- end
-end
diff --git a/lib/bugzilla.rb b/lib/bugzilla.rb
deleted file mode 100644
index d6af1b3..0000000
--- a/lib/bugzilla.rb
+++ /dev/null
@@ -1,195 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'nokogiri'
-require 'fileutils'
-require 'xmlrpc/client'
-
-module Bugzilla ; end
-
-%w[ comment history bug ].each {|lib| require File.join(File.dirname(__FILE__), "bugzilla/#{lib}")}
-
-# Bugzilla module
-module Bugzilla
- module_function
- # Adds a comment to a bug. Returns the comment id on success, raises an exception on failure.
- def add_comment(bug, comment)
- if GLSAMAKER_BUGZIE_SKIP
- Rails.logger.info 'Skipped Bugzilla.add_comment'
- return
- end
-
- Rails.logger.debug 'Called Bugzilla.add_comment'
- did_retry = false
-
- begin
- client, token = xmlrpc_client
-
- result = client.call('Bug.add_comment', {
- 'id' => bug.to_i,
- 'comment' => comment,
- 'Bugzilla_token' => token,
- })
- result['id']
- rescue XMLRPC::FaultException => e
- if did_retry
- raise "Could not add the comment: #{e.faultString} (code #{e.faultCode})"
- end
-
- # If we need to log in first
- if e.faultCode == 410
- Rails.logger.debug "Not logged in, doing that now."
- log_in
- did_retry = true
- retry
- else
- raise "Could not add the comment: #{e.faultString} (code #{e.faultCode})"
- end
- end
-
- end
-
- # Updates a bug. Returns an array of changes that were done on the bug.
- def update_bug(bug, changes = {})
- if GLSAMAKER_BUGZIE_SKIP
- Rails.logger.info 'Skipped Bugzilla.update_bug'
- return
- end
-
- Rails.logger.debug 'Called Bugzilla.update_bug'
- did_retry = false
-
- begin
- client, token = xmlrpc_client
-
- rpc_data = {}
- rpc_data['ids'] = [bug]
- rpc_data['component'] = changes[:component] if changes.has_key?(:component)
- rpc_data['product'] = changes[:product] if changes.has_key?(:product)
- rpc_data['summary'] = changes[:summary] if changes.has_key?(:summary)
- rpc_data['version'] = changes[:version] if changes.has_key?(:version)
- rpc_data['comment'] = {'body' => changes[:comment]} if changes.has_key?(:comment)
- rpc_data['priority'] = changes[:priority] if changes.has_key?(:priority)
- rpc_data['severity'] = changes[:severity] if changes.has_key?(:severity)
- rpc_data['alias'] = changes[:alias] if changes.has_key?(:alias)
- rpc_data['assigned_to'] = changes[:assignee] if changes.has_key?(:assignee)
- #rpc_data['cc'] = changes[:cc].to_a if changes.has_key?(:cc) TODO: add and remove
- rpc_data['status'] = changes[:status] if changes.has_key?(:status)
- rpc_data['whiteboard'] = changes[:whiteboard] if changes.has_key?(:whiteboard)
- rpc_data['url'] = changes[:url] if changes.has_key?(:url)
- rpc_data['resolution'] = changes[:resolution] if changes.has_key?(:resolution)
- rpc_data['Bugzilla_token'] = token
-
- result = client.call('Bug.update', rpc_data)
- result['bugs'].first
- rescue XMLRPC::FaultException => e
- if did_retry
- raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})"
- end
-
- # If we need to log in first
- if e.faultCode == 410
- Rails.logger.debug "Not logged in, doing that now."
- log_in
- did_retry = true
- retry
- else
- raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})"
- end
- end
- end
-
- # Files a bug, and returns the id of the filed bug
- def file_bug(data)
- if GLSAMAKER_BUGZIE_SKIP
- Rails.logger.info 'Skipped Bugzilla.file_bug'
- return
- end
-
- Rails.logger.debug 'Called Bugzilla.file_bug'
- did_retry = false
-
- begin
- client, token = xmlrpc_client
-
- rpc_data = {}
- rpc_data['component'] = data[:component] if data.has_key?(:component)
- rpc_data['product'] = data[:product] if data.has_key?(:product)
- rpc_data['summary'] = data[:summary] if data.has_key?(:summary)
- rpc_data['version'] = data[:version] if data.has_key?(:version)
- rpc_data['description'] = data[:comment] if data.has_key?(:comment)
- rpc_data['priority'] = data[:priority] if data.has_key?(:priority)
- rpc_data['severity'] = data[:severity] if data.has_key?(:severity)
- rpc_data['alias'] = data[:alias] if data.has_key?(:alias)
- rpc_data['assigned_to'] = data[:assignee] if data.has_key?(:assignee)
- rpc_data['cc'] = data[:cc].to_a if data.has_key?(:cc)
- rpc_data['status'] = data[:status] if data.has_key?(:status)
- rpc_data['Bugzilla_token'] = token
-
- result = client.call('Bug.create', rpc_data)
- result['id']
- rescue XMLRPC::FaultException => e
- if did_retry
- raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})"
- end
-
- # If we need to log in first
- if e.faultCode == 410
- Rails.logger.debug "Not logged in, doing that now."
- log_in
- did_retry = true
- retry
- else
- raise "Could not file the bug: #{e.faultString} (code #{e.faultCode})"
- end
- end
- end
-
- def log_in
- Rails.logger.debug "Called Bugzilla.log_in"
- raise unless GLSAMAKER_BUGZIE_USER and GLSAMAKER_BUGZIE_PW
-
- client, token = xmlrpc_client
-
- begin
- result = client.call('User.login', {
- 'login' => GLSAMAKER_BUGZIE_USER,
- 'password' => GLSAMAKER_BUGZIE_PW
- })
-
- Rails.logger.debug "Successfully logged in. UID: #{result['id']}"
-
- token_file = File.join(Rails.root, 'tmp', 'bugzie-token.txt')
- FileUtils.rm(token_file) if File.exist?(token_file)
- FileUtils.touch(token_file)
- File.chmod(0600, token_file)
- File.open(token_file, 'w') {|f| f.write result['token'] }
-
- return true
- rescue XMLRPC::FaultException => e
- Rails.logger.warn "Failure logging in: #{e.message}"
- return false
- end
- end
-
- def xmlrpc_client
- client = XMLRPC::Client.new(GLSAMAKER_BUGZIE_HOST, '/xmlrpc.cgi', 443, nil, nil, nil, nil, true)
- client.http_header_extra = {'User-Agent' => "GLSAMaker/#{GLSAMAKER_VERSION} (https://security.gentoo.org/)"}
-
- token = ''
- token_file = File.join(Rails.root, 'tmp', 'bugzie-token.txt')
- if File.readable? token_file
- token = File.read(token_file)
- end
-
- [client, token]
- end
-end
diff --git a/lib/bugzilla/bug.rb b/lib/bugzilla/bug.rb
deleted file mode 100644
index 7f6b20b..0000000
--- a/lib/bugzilla/bug.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Encapsulates a Bugzilla Bug
-module Bugzilla
- class Bug
- attr_reader :summary, :created_at, :reporter, :alias, :assigned_to, :cc, :status_whiteboard,
- :product, :component, :status, :resolution, :url, :comments, :bug_id, :restricted,
- :severity, :priority, :depends, :blocks
-
- alias :title :summary
-
- # Creates a new +Bug+ object from the Gentoo bug referenced as #+bugid+
- def self.load_from_id(bugid)
- begin
- id = Integer(bugid)
-
- raise ArgumentError if id == 0
- rescue ArgumentError => e
- raise ArgumentError, "Invalid Bug ID"
- end
-
- begin
- xml = Nokogiri::XML(Glsamaker::HTTP.get("https://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?ctype=xml&id=#{id}"))
- rescue SocketError => e
- raise SocketError, "Bugzilla is unreachable: #{e.message}"
- rescue Exception => e
- raise ArgumentError, "Couldn't load bug: #{e.message}"
- end
-
- self.new(xml.root.xpath("bug").first, bugid)
- end
-
- # Returns the URL for the bug, set +secure+ to false to get a http:-URL
- def url(secure = true)
- if secure
- "https://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{@bug_id}"
- else
- "http://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{@bug_id}"
- end
- end
-
- def history()
- @history ||= History.new(self)
- end
-
- def initialize(bug, id)
- unless bug.is_a? Nokogiri::XML::Element
- raise ArgumentError, "Nokogiri failure"
- end
-
- if bug["error"] == "NotFound"
- raise ArgumentError, "Bug not found"
- elsif bug["error"] == "NotPermitted"
- @bug_id = id
- @restricted = true
- return
- end
-
- @restricted = false
- @cc = []
- @depends = []
- @blocks = []
- @comments = []
-
- bug.children.each do |node|
- # Ignore whitespace
- next if node.type == Nokogiri::XML::Node::TEXT_NODE
- # Ignore empty nodes
- next if node.children.size == 0
-
- case node.name
- when "bug_id" then
- @bug_id = content_in node
- when "short_desc" then
- @summary = content_in node
- when "creation_ts" then
- @created_at = Time.parse(content_in(node))
- when "reporter" then
- @reporter = content_in node
- when "alias" then
- @alias = content_in node
- when "assigned_to" then
- @assigned_to = content_in node
- when "cc" then
- @cc << content_in(node)
- when "status_whiteboard" then
- @status_whiteboard = content_in node
- when "product" then
- @product = content_in node
- when "component" then
- @component = content_in node
- when "bug_status" then
- @status = content_in node
- when "resolution" then
- @resolution = content_in node
- when "bug_file_loc" then
- @url = content_in node
- when "bug_severity" then
- @severity = content_in node
- when "priority" then
- @priority = content_in node
- when "dependson" then
- @depends << content_in(node)
- when "blocked" then
- @blocks << content_in(node)
- when "long_desc" then
- @comments << Bugzilla::Comment.new(
- node.xpath("who").first.children.first.to_s,
- node.xpath("thetext").first.children.first.to_s,
- node.xpath("bug_when").first.children.first.to_s
- )
- end
- end
- end
-
- # Returns the initial bug description
- def description
- @comments.first.text
- end
-
- # Splits a String +str+ into an array of valid bug IDs
- def self.str2bugIDs(str)
- bug_ids = str.split(/,\s*/)
-
- bug_ids.map do |bug|
- bug.gsub(/\D/, '')
- end
- end
-
- private
- def content_in(node)
- node.children.first.content.strip
- end
- end
-end
diff --git a/lib/bugzilla/comment.rb b/lib/bugzilla/comment.rb
deleted file mode 100644
index 2cd9236..0000000
--- a/lib/bugzilla/comment.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-# Encapsulates a comment to a Bug
-module Bugzilla
- class Comment
- attr_reader :author, :text, :date
-
- def initialize(by, text, date)
- @author = by
- @text = text
- @date = Time.parse(date)
- end
- end
-end
diff --git a/lib/bugzilla/history.rb b/lib/bugzilla/history.rb
deleted file mode 100644
index 04188e4..0000000
--- a/lib/bugzilla/history.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-# Encapsulates a bug's history
-module Bugzilla
- class History
- attr_reader :changes
-
- # Creates a new History for the Bug object +bug+.
- def initialize(bug)
- unless bug.respond_to? :bug_id
- raise ArgumentError, "Need a bug (or something that at least looks like a bug)"
- end
-
- begin
- html = Nokogiri::HTML(Glsamaker::HTTP.get("https://bugs.gentoo.org/show_activity.cgi?id=#{bug.bug_id}"))
- rescue Exception => e
- raise ArgumentError, "Couldn't load the bug history: #{e.message}"
- end
-
- @changes = []
- change_cache = nil
-
- html.xpath("/html/body/table/tr").each do |change|
- # ignore header line
- next if change.children.first.name == "th"
-
- # First line in a multi-change set
- unless (chcount = change.children.first["rowspan"]) == nil
- change_cache = Change.new(change.children.first.content.strip, change.children[2].content.strip)
-
- change_cache.add_change(
- change.children[4].content.strip.downcase.to_sym,
- change.children[6].content.strip,
- change.children[8].content.strip
- )
-
- @changes << change_cache
- else
- change_cache.add_change(
- change.children[0].content.strip.downcase.to_sym,
- change.children[2].content.strip,
- change.children[4].content.strip
- )
- end
- end
- end
-
- # Returns an Array of Changes made to the field +field+
- def by_field(field)
- raise(ArgumentError, "Symbol expected") unless field.is_a? Symbol
-
- changes = []
-
- @changes.each do |change|
- if change.changes.has_key?(field)
- changes << change
- end
- end
-
- changes
- end
-
- # Returns an Array of Changes made by the user +user+
- def by_user(user)
- changes = []
-
- @changes.each do |change|
- if change.user == user
- changes << change
- end
- end
-
- changes
- end
- end
-
- # This represents a single Change made to a Bug
- class Bugzilla::Change
- attr_reader :user, :time, :changes
-
- # Creates a new Change made by +user+ at +time+.
- def initialize(user, time)
- @user = user || ""
- @time = Time.parse(time)
- @changes = {}
- end
-
- # Adds a changed +field+ to the Change object. +removed+ denotes the removed text
- # and +added+ is the new text
- def add_change(field, removed, added)
- raise(ArgumentError, "field has to be a symbol") unless field.is_a? Symbol
-
- if @changes.has_key?(field)
- @changes[field][0] += " #{removed}"
- @changes[field][1] += " #{added}"
- else
- @changes[field] = [removed, added]
- end
- end
-
- # Returns a string representation
- def to_s
- "#{@user} changed at #{@time.to_s}: #{@changes.inspect}"
- end
- end
-end
diff --git a/lib/glsamaker.rb b/lib/glsamaker.rb
deleted file mode 100644
index fdc93d8..0000000
--- a/lib/glsamaker.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'glsamaker/http'
-require 'glsamaker/portage'
-require 'glsamaker/diff'
-require 'glsamaker/xml'
-require 'glsamaker/bugs'
-require 'glsamaker/mail'
-
-#FIXME: spelling module is developed with dead 'runspell' gem.
-#
-#require 'glsamaker/spelling'
-
-# require 'glsamaker/helpers' DO NOT REQUIRE or else the rake tasks will blow up
diff --git a/lib/glsamaker/bugs.rb b/lib/glsamaker/bugs.rb
deleted file mode 100644
index 567624e..0000000
--- a/lib/glsamaker/bugs.rb
+++ /dev/null
@@ -1,182 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'bugzilla'
-
-module Glsamaker
- module Bugs
-
- module StatusMixin
- def secbug_status
- if whiteboard =~ /([A-C~?][0-4?]\??)\s+\[(.*?)\]\s*?(.*?)$/
- st = []
-
- $2.split("/").each do |status|
- st << Status.new(status)
- end
-
- return st
- else
- [Status.new('?')]
- end
- end
- end
-
- module ArchesMixin
- # Returns an array of all arch teams in CC
- def arch_cc
- @arch_cc ||= _arch_cc
- end
-
- private
- def _arch_cc
- ccd_arches = []
- our_arches = %w[ alpha@gentoo.org amd64@gentoo.org arm@gentoo.org bsd@gentoo.org hppa@gentoo.org
- ia64@gentoo.org m68k@gentoo.org mips@gentoo.org ppc64@gentoo.org ppc@gentoo.org release@gentoo.org
- s390@gentoo.org sh@gentoo.org sparc@gentoo.org x86@gentoo.org ]
-
- if cc.is_a? String
- _cc = cc.split(/,\s*/)
- elsif cc.nil?
- _cc = []
- else
- _cc = cc
- end
-
- _cc.each do |cc_member|
- if our_arches.include? cc_member
- ccd_arches << cc_member
- end
- end
-
- ccd_arches
- end
- end
-
- module BugReadyMixin
- # Indicates whether this bug has been handled and is in the correct
- # state for sending a GLSA assigned to it.
- def bug_ready?
- secbug_status.each do |s|
- return false unless s.status == :glsa and not s.pending?
- end
-
- return arch_cc == []
- rescue Exception => e
- return false
- end
- end
-
- # Extends Bugzilla::Bug with the Status and Arches functionality
- class Bug < Bugzilla::Bug
- def whiteboard
- @status_whiteboard
- end
-
- def cc
- @cc
- end
-
- # Returns the Gentoo Bugzilla URI for the bug.
- # Set +secure+ to false to get a HTTP instead of a HTTPS URI
- def bug_url(secure = true)
- if secure
- "https://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{self.bug_id}"
- else
- "http://#{GLSAMAKER_BUGZIE_HOST}/show_bug.cgi?id=#{self.bug_id}"
- end
- end
-
- include StatusMixin
- include ArchesMixin
- include BugReadyMixin
- end
-
- # This baby is a bug status, one of the things you see in squared brackets in whiteboards.
- class Status
- include Comparable
-
- attr_reader :status
-
- # Creates a new Status object by parsing +str+ as a single status string
- def initialize(str)
- if str == '?'
- @status = '?'.to_sym
- @blocked = @overdue = @pending = false
- return
- end
-
- cmp = str.strip.split(/\s+/)
-
- if cmp.length == 2
- @blocked = (cmp[1] == "blocked")
- end
-
- if cmp[0] =~ /^(upstream|ebuild|stable|glsa|noglsa)(\+|\?|\+\?|\?\+)?$/
- @overdue = ($2 != nil and $2.include? "+")
- @pending = ($2 != nil and $2.include? "?")
-
- @status = $1.downcase.to_sym
- else
- raise ArgumentError, "Malformed Status string: #{str}"
- end
- end
-
- # Returns +true+ if the bug is blocked by another (c.f. +'blocked'+ in whiteboards)
- def blocked?
- @blocked
- end
-
- # Returns +true+ if the bug is overdue (cf. +'+'+ in whiteboards)
- def overdue?
- @overdue
- end
-
- # Returns +true+ if the bug is pending action (cf. +'?'+ in whiteboards)
- def pending?
- @pending
- end
-
- # Returns a string representation (like you would find it in the whiteboard)
- def to_s
- @status.to_s + (@overdue ? "+" : "") + (@pending ? "?" : "") + (@blocked ? " blocked" : "")
- end
-
- # Comparison
- def <=>(other)
- raise(ArgumentError, "Cannot compare to #{other.class}") unless other.is_a? Status
-
- s = ['?'.to_sym, :upstream, :ebuild, :stable, :glsa, :noglsa]
-
- if other.status == @status
- if other.pending? == @pending and other.overdue? == @overdue
- 0
- else
- if other.overdue? and not @overdue
- -1
- elsif @overdue and not other.overdue?
- 1
- else
- if @pending and not other.pending?
- -1
- else
- 1
- end
- end
- end
- else
- (s.index(@status) - s.index(other.status)) < 0 ? -1 : 1
- end
- end
-
- end
- end
-end
diff --git a/lib/glsamaker/diff.rb b/lib/glsamaker/diff.rb
deleted file mode 100644
index 18e10f6..0000000
--- a/lib/glsamaker/diff.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-# Copyright (C) 2006-2007 Jean-Philippe Lang
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'diff/lcs'
-require 'diff/lcs/hunk'
-
-module Glsamaker
- # Module providing diff support
- module Diff
- module_function
-
- # Returns a unified diff for two strings
- # Adapted from the O'Reilly Ruby Cookbook
- def diff(str_old, str_new, format = :unified, context_lines = 3)
- str_old = str_old.split(/\r?\n/).map! { |l| l.chomp }
- str_new = str_new.split(/\r?\n/).map! { |l| l.chomp }
-
- output = ""
- diffs = ::Diff::LCS.diff(str_old, str_new)
- return output if diffs.empty?
-
- oldhunk = hunk = nil
- file_length_difference = 0
- diffs.each do |piece|
- begin
- hunk = ::Diff::LCS::Hunk.new(str_old, str_new, piece, context_lines, file_length_difference)
- next unless oldhunk
-
- if (context_lines > 0) and hunk.overlaps?(oldhunk)
- hunk.unshift(oldhunk)
- else
- output << oldhunk.diff(format)
- end
- ensure
- oldhunk = hunk
- output << "\n"
- end
- end
-
- output << oldhunk.diff(format) << "\n"
- end
-
- end
-end
diff --git a/lib/glsamaker/helpers.rb b/lib/glsamaker/helpers.rb
deleted file mode 100644
index aca09ab..0000000
--- a/lib/glsamaker/helpers.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-module Glsamaker
- module_function
- def help
- Helper.instance
- end
-
- class Helper
- include Singleton
- include ::ActionView::Helpers::TextHelper
- end
-end
diff --git a/lib/glsamaker/http.rb b/lib/glsamaker/http.rb
deleted file mode 100644
index 5f63096..0000000
--- a/lib/glsamaker/http.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'net/http'
-require 'net/https'
-
-# GLSAMaker library
-module Glsamaker
- # GLSAMaker HTTP utilities
- module HTTP
- # Tries to fetch +url+ via HTTP GET, sending a GLSAMaker custom User-Agent header.
- # The body part is returned.
- def get(url)
- uri = URI.parse(url)
-
- http = Net::HTTP.new(uri.host, uri.port)
- http.use_ssl = true if uri.scheme == "https"
- res = http.start {
- http.request_get(uri.request_uri, {'User-Agent' => "GLSAMaker/#{GLSAMAKER_VERSION} (https://security.gentoo.org/)"})
- }
-
- # Raises an exception if HTTP status suggests something went wrong
- res.value
- res.body
- end
-
- module_function :get
- end
-end
diff --git a/lib/glsamaker/mail.rb b/lib/glsamaker/mail.rb
deleted file mode 100644
index b749193..0000000
--- a/lib/glsamaker/mail.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010-11 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-module Glsamaker
- module Mail
- module_function
- def edit_notification(glsa, diff, user)
- if GLSAMAKER_NO_EMAIL
- Rails.logger.info "Not sending email."
- return false
- end
-
- if glsa.restricted
- Rails.logger.info "Not sending email, confidential item."
- return false
- end
-
- User.active.each do |rcpt|
- next unless rcpt.can_access? glsa
-
- unless rcpt.get_pref_category(:mail)[:edit] == false
- GlsaMailer.edit(rcpt, glsa, diff, user).deliver
- end
- end
- end
-
- def request_notification(glsa, user)
- if GLSAMAKER_NO_EMAIL
- Rails.logger.info "Not sending email."
- return false
- end
-
- if glsa.restricted
- Rails.logger.info "Not sending email, confidential item."
- return false
- end
-
- User.active.each do |rcpt|
- next unless rcpt.can_access? glsa
-
- unless rcpt.get_pref_category(:mail)[:request] == false
- GlsaMailer.new_request(rcpt, glsa, user).deliver
- end
- end
- end
-
- def comment_notification(glsa, comment, user)
- if GLSAMAKER_NO_EMAIL
- Rails.logger.info "Not sending email."
- return false
- end
-
- # Nothing to do if there's no submitter yet
- return if glsa.status == 'request'
-
- if glsa.restricted
- Rails.logger.info "Not sending email, confidential item."
- return false
- end
-
- rcpt = glsa.submitter
- return unless rcpt.can_access? glsa
- return if rcpt == user
-
- unless rcpt.get_pref_category(:mail)[:comment] == false
- GlsaMailer.comment(rcpt, glsa, comment, user).deliver
- end
- end
-
- def approval_notification(glsa)
- if GLSAMAKER_NO_EMAIL
- Rails.logger.info "Not sending email."
- return false
- end
-
- if glsa.restricted
- Rails.logger.info "Not sending email, confidential item."
- return false
- end
-
- rcpt = glsa.submitter
- return unless rcpt.can_access? glsa
-
- unless rcpt.get_pref_category(:mail)[:comment] == false
- GlsaMailer.approval(rcpt, glsa).deliver
- end
- end
-
- def send_text(text, subject, user, footer = true)
- if GLSAMAKER_NO_EMAIL
- Rails.logger.info "Not sending email."
- return false
- end
-
- GlsaMailer.text(user, subject, text, footer).deliver
- end
-
- end
-end
diff --git a/lib/glsamaker/portage.rb b/lib/glsamaker/portage.rb
deleted file mode 100644
index f49e93e..0000000
--- a/lib/glsamaker/portage.rb
+++ /dev/null
@@ -1,194 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-require 'nokogiri'
-
-module Glsamaker
- # Helper functions for Portage tree interaction
- module Portage
-
- # Package description helper
- class Description
- class << self
- # Tries to fetch the description for the package +atom+ from
- # an ebuild's entry (works if running on Gentoo)
- def ebuild(atom)
- raise(ArgumentError, "Invalid package atom") unless Portage.valid_atom?(atom)
- nil
- end
-
- def eix(atom)
- nil
- end
-
- # Loads a description for +atom+ from packages.gentoo.org
- def pgo(atom)
- raise(ArgumentError, "Invalid package atom") unless Portage.valid_atom?(atom)
-
- n = Nokogiri::XML(Glsamaker::HTTP.get("https://packages.gentoo.org/package/#{atom}"))
-
- node = n.css('p.description').first.children.first
- if node.type == Nokogiri::XML::Node::TEXT_NODE
- node.to_s
- else
- raise ArgumentError, "XML parse error"
- end
- end
-
- # Loads a description for +atom+ from Google
- def google(atom)
- nil
- end
- end
- end
-
- module_function
- # Returns the location of the portage dir, or raises an exception if it cannot be found
- def portdir
- unless File.directory? GLSAMAKER_PORTDIR
- raise "GLSAMAKER_PORTDIR is not a directory"
- end
-
- GLSAMAKER_PORTDIR
- end
-
- # Validates the atom +atom+
- def valid_atom?(atom)
- atom =~ /^[+a-zA-Z0-9_-]+\/[+a-zA-Z0-9_-]+$/
- end
-
- # Checks if there are any ebuilds for the +atom+
- def has_ebuilds?(atom)
- return false unless valid_atom? atom
-
- Dir.chdir("#{portdir}/#{atom}") do
- Dir.glob('*.ebuild') do |ebuild|
- return true
- end
- end
-
- false
- rescue Errno::ENOENT
- false
- end
-
- # Gets a description
- def get_description(atom)
- Description.eix(atom) ||
- Description.ebuild(atom) ||
- Description.pgo(atom) ||
- Description.google(atom) ||
- "[could not get a description]"
- end
-
- # Returns package atoms that match +re+
- def find_packages(re)
- results = []
-
- Dir.chdir(portdir) do
- Dir.glob('*-*') do |cat|
- Dir.chdir(cat) do
- Dir.glob("*") do |pkg|
- pkg =~ re and results << "#{cat}/#{pkg}"
- end
- end
- end
- end
-
- results
- end
-
- # Returns an array of maintainer email addresses for the package +atom+
- def get_maintainers(atom)
- raise(ArgumentError, "Invalid package atom") unless Portage.valid_atom?(atom)
- raise(ArgumentError, "Cannot find metadata") unless File.exist? File.join(portdir, atom, 'metadata.xml')
-
- x = Nokogiri::XML(File.read(File.join(portdir, atom, 'metadata.xml')))
-
- maintainers = []
-
- x.xpath('/pkgmetadata/maintainer/email').each {|m| maintainers << m.content }
-
- if maintainers.empty?
- if x.path('/pkgmetadata/comment()').text.include? "maintainer-needed"
- maintainers = "maintainer-needed@gentoo.org"
- else
- raise(ArgumentError, "No Maintainer Information Found")
- end
- end
-
- maintainers
- end
-
- # Returns information from the portage metadata cache
- # Values: :depend, :rdepend, :slot, :src_uri, :restrict, :homepage,
- # :license, :description, :keywords, :iuse, :required_use,
- # :pdepend, :provide, :eapi, :properties, :defined_phases
- # as per portage/pym/portage/cache/metadata.py (database.auxdbkey_order)
- #
- # @param [String] atom Package atom (without version, see next parameter)
- # @param [String] version Desired version, tries to use the last available one (as decided by a rather stupid technique)
- # @return [Hash{Symbol => String, Array}] A hash with all available metadata (see above for keys)
- def get_metadata(atom, version = :latest)
- raise(ArgumentError, "Invalid package atom") unless Portage.valid_atom?(atom)
- raise(ArgumentError, "Invalid version string") if version.to_s.include? '..'
-
- items = {
- 'DEFINED_PHASES' => :defined_phases,
- 'DEPEND' => :depend,
- 'DESCRIPTION' => :description,
- 'EAPI' => :eapi,
- 'HOMEPAGE' => :homepage,
- 'IUSE' => :iuse,
- 'KEYWORDS' => :keywords,
- 'LICENSE' => :license,
- 'PDEPEND' => :pdepend,
- 'PROPERTIES' => :properties,
- 'RDEPEND' => :rdepend,
- 'RESTRICT' => :restrict,
- 'REQUIRED_USE' => :required_use,
- 'SLOT' => :slot,
- 'SRC_URI' => :src_uri
- }
-
- valid_keys = items.keys
-
- # List of metadata items to split at space
- split_keys = ['SRC_URI', 'IUSE', 'KEYWORDS', 'PROPERTIES', 'DEFINED_PHASES']
-
- cat, pkg = atom.split('/', 2)
- r = Regexp.compile('^(\\w+)=([^\n]*)')
- result = {}
-
- Dir.chdir(File.join(Glsamaker::Portage.portdir, 'metadata', 'md5-cache', cat)) do
- if version == :latest
- f = File.open(Dir.glob("#{pkg}-[0-9]*").last, 'r')
- else
- f = File.open(File.join("#{pkg}-#{version}"), 'r')
- end
-
- while f.gets
- if (match = r.match($_)) != nil and valid_keys.include? match[1]
- if split_keys.include? match[1]
- result[items[match[1]]] = match[2].split(' ')
- else
- result[items[match[1]]] = match[2]
- end
- end
- end
-
- f.close
- end
- result
- end
- end
-
-end
diff --git a/lib/glsamaker/spelling.rb b/lib/glsamaker/spelling.rb
deleted file mode 100644
index cc30cc8..0000000
--- a/lib/glsamaker/spelling.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-module Glsamaker
- class Spelling
- class << self
- def init
- dic = File.join(Rails.root, 'vendor', 'dictionaries', 'en_US.dic')
- aff = File.join(Rails.root, 'vendor', 'dictionaries', 'en_US.aff')
-
- @runspell = Runspell.new(aff, dic)
- end
-
- def check(word)
- init if @runspell.nil?
- @runspell.check(word)
- end
-
- def suggest(word)
- init if @runspell.nil?
- @runspell.suggest(word)
- end
-
- # Checks a string for spelling, <tt>before_marker</tt> and <tt>after_maker</tt> are put around the misspelled words
- def check_string(string, before_marker, after_marker)
- result = []
- string.split(/\b/).each do |word|
- if word =~ /^[\s,.-:(){}\[\]<>]*$/
- result << word
- elsif check(word)
- result << word
- else
- result << before_marker.html_safe + word + after_marker.html_safe
- end
- end
-
- result.join
- end
- end
- end
-end
diff --git a/lib/glsamaker/xml.rb b/lib/glsamaker/xml.rb
deleted file mode 100644
index 2b0e375..0000000
--- a/lib/glsamaker/xml.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-
-module Glsamaker
- module XML
- module_function
- def indent(xml, options = {:indent => 2})
- command = GLSAMAKER_XMLINDENT
- raise "xmlindent either does not exist or is not executable." unless File.executable? command.split(' ', 2)[0]
-
- command += " -i#{Integer options[:indent]}" if options.has_key? :indent
- command += " -l#{Integer options[:maxcols]}" if options.has_key? :maxcols
-
- # \r\n will make problems while converting
- xml.gsub!("\r", "")
-
- IO.popen(command, 'r+') do |io|
- io.write xml
- io.close_write
- io.read
- end
- end
- end
-end
diff --git a/lib/kramdown_ext.rb b/lib/kramdown_ext.rb
deleted file mode 100644
index e41013e..0000000
--- a/lib/kramdown_ext.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-module Kramdown
- module Converter
- class Xml < Html
- NOENTITY_MAP = {
- :mdash => '---',
- :ndash => '--',
- :hellip => '...',
- :laquo_space => '<< ',
- :raquo_space => ' >>',
- :laquo => '<',
- :raquo => '>'
- }
-
- # Overriding to do nothing. We don't want typographic symbols replaced
- def convert_typographic_sym(el, opts)
- NOENTITY_MAP[el.value]
- end
- end
- end
-end
diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/lib/tasks/.gitkeep
+++ /dev/null
diff --git a/lib/tasks/cve.rake b/lib/tasks/cve.rake
deleted file mode 100644
index dbdc7a8..0000000
--- a/lib/tasks/cve.rake
+++ /dev/null
@@ -1,366 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2010–15 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2020 Max Magorsch <arzano@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-libs = %w( json nokogiri zlib stringio )
-libs << File.join(File.dirname(__FILE__), '..', 'bugzilla')
-libs << File.join(File.dirname(__FILE__), '..', 'glsamaker')
-libs << File.join(File.dirname(__FILE__), 'utils')
-
-libs.each { |lib| require lib }
-
-TMPDIR = File.join(File.dirname(__FILE__), '..', '..', 'tmp')
-# What year are the first CVEs from?
-YEAR = (ENV['START_YEAR'] || 2004).to_i
-BASEURL = 'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-%s.json.gz'
-
-DEBUG = ENV.key? 'DEBUG'
-VERBOSE = (ENV.key?('VERBOSE') || DEBUG)
-QUIET = ENV.key? 'QUIET'
-
-fail "I can't be quiet and verbose at the same time..." if QUIET && VERBOSE
-
-namespace :cve do
-
- desc 'Destroy all CVEs and CPEs'
- task destroy_all: [:environment, 'db:load_config'] do
- CveReference.destroy_all
- Cve.destroy_all
- Cpe.destroy_all
- end
-
-
- desc 'Print all CVEs'
- task print_all: [:environment, 'db:load_config'] do
- Cve.find_each do |cve|
- puts cve.cve_id + ",\"" + cve.summary + "\"," + (cve.cvss || "") + "," + cve.state + "," + cve.published_at.to_formatted_s(:iso8601) + "," + cve.last_changed_at.to_formatted_s(:iso8601) + "," + cve.created_at.to_formatted_s(:iso8601) + "," + cve.updated_at.to_formatted_s(:iso8601)
- end
- end
-
-
- desc 'Full CVE data import'
- task full_import: [:environment, 'db:load_config'] do
- Rails.cache.write(CVE_CACHE_LAST_IMPORT, Time.now.utc)
- start_ts = Time.now
-
- (YEAR..Date.today.year).each do |year|
- info 'Processing CVEs from '.bold + year.to_s.purple
-
- jsondata = status 'Downloading' do
- gunzip_str Glsamaker::HTTP.get(BASEURL % year)
- end
-
- json = status 'Loading JSON' do
- JSON.parse(jsondata)
- end
-
- cves = json["CVE_Items"]
- create_cves(cves)
-
- puts
- end
-
- info 'done'.green
- info "(#{Time.now - start_ts} seconds)"
- end
-
-
- desc 'Incrementally update last CVEs'
- task update: :environment do
- Rails.cache.write(CVE_CACHE_LAST_IMPORT, Time.now.utc)
- info 'Running incremental CVE data update...'
-
- jsondata = status 'Downloading' do
- gunzip_str Glsamaker::HTTP.get(BASEURL % 'modified')
- end
-
- json = status 'Loading JSON' do
- JSON.parse(jsondata)
- end
-
- cves = json["CVE_Items"]
- update_cves(cves)
- end
-
-
- desc 'Update all CVEs'
- task update_all: :environment do
- Rails.cache.write(CVE_CACHE_LAST_IMPORT, Time.now.utc)
- info 'Running complete CVE data update...'
-
- (YEAR..Date.today.year).each do |year|
- info 'Processing CVEs from '.bold + year.to_s.purple
-
- jsondata = status 'Downloading' do
- gunzip_str Glsamaker::HTTP.get(BASEURL % year)
- end
-
- json = status 'Loading JSON' do
- JSON.parse(jsondata)
- end
-
- cves = json["CVE_Items"]
- update_cves(cves)
- end
- end
-
-end
-
-
-#
-# Update the given cve
-#
-def create_cve(cve)
- summary = cve.dig('cve', 'description', 'description_data', 0, 'value')
- _cve = Cve.create(
- :cve_id => cve.dig('cve', 'CVE_data_meta', 'ID'),
- :summary => summary,
- :cvss => cve.dig('impact', 'baseMetricV2', 'cvssV2', 'vectorString'),
- :published_at => DateTime.parse(cve['publishedDate']),
- :last_changed_at => DateTime.parse(cve['lastModifiedDate']),
- :state => (summary =~ /^\*\* REJECT \*\*/ ? 'REJECTED' : 'NEW')
- )
-
- if cve.dig('references', 'reference_data')
- cve.dig('references', 'reference_data').each do |ref|
- CveReference.create(
- :cve => _cve,
- :source => ref['refsource'],
- :title => ref['name'],
- :uri => ref['url']
- )
- end
- end
-
- cve.dig('configurations', 'nodes').each do |node|
- if node.key?('cpe_match')
- node['cpe_match'].each do |cpe_match|
- cpe_str = cpe_match['cpe23Uri']
-
- cpe = Cpe.where(:cpe => cpe_str).first
- cpe ||= Cpe.create(:cpe => cpe_str)
-
- _cve.cpes << cpe
- end
- elsif node.key?('children')
- node['children'].each do |child|
- if child.key?('cpe_match')
- child['cpe_match'].each do |cpe_match|
- cpe_str = cpe_match['cpe23Uri']
-
- cpe = Cpe.where(:cpe => cpe_str).first
- cpe ||= Cpe.create(:cpe => cpe_str)
-
- _cve.cpes << cpe
- end
- end
- end
- end
- end
-end
-
-
-#
-# Create the all given cves
-#
-def create_cves(cves)
- processed_cves = 0
- info "#{cves.size.to_s.purple} CVEs (one dot equals 100, purple dot equals 500)"
-
- cves.each do |cve|
- unless VERBOSE || QUIET
-
- if processed_cves % 500 == 0
- print '.'.purple
- else
- print '.' if processed_cves % 100 == 0
- end
- end
-
- puts cve.dig('cve', 'CVE_data_meta', 'ID').to_s.purple if VERBOSE
-
- begin
- create_cve(cve)
- rescue ActiveRecord::StatementInvalid => e
- # Ignore dupes, ONLY do that for the full db update!
- raise e unless e.message =~ /Duplicate entry/
- end
-
- processed_cves += 1
- STDOUT.flush
- end
-end
-
-
-#
-# Update the all given cves
-#
-def update_cves(cves)
- start_ts = Time.now
- processed_cves = created_cves = updated_cves = 0
-
- info "#{cves.size.to_s.purple} CVEs (one dot equals 100, purple dot equals 500)"
-
- cves.each do |cve|
- unless VERBOSE || QUIET
- if processed_cves % 500 == 0
- print '.'.purple
- else
- print '.' if processed_cves % 100 == 0
- end
- end
-
- puts cve.dig('cve', 'CVE_data_meta', 'ID').to_s.purple if VERBOSE
-
- c = Cve.find_by_cve_id cve.dig('cve', 'CVE_data_meta', 'ID')
-
- if c.nil?
- debug 'Creating CVE.'
- create_cve(cve)
- created_cves += 1
- else
- last_changed_at = Time.parse(cve['lastModifiedDate']).utc
-
- if last_changed_at.to_i > c.last_changed_at.to_i
- debug 'Updating CVE. Timestamp changed.'
- summary = cve.dig('cve', 'description', 'description_data', 0, 'value')
- c.attributes = {
- cve_id: cve.dig('cve','CVE_data_meta','ID'),
- summary: summary,
- cvss: cve.dig('impact', 'baseMetricV2', 'cvssV2', 'vectorString'),
- published_at: DateTime.parse(cve['publishedDate']),
- last_changed_at: DateTime.parse(cve['lastModifiedDate']),
- }
-
- c.state = 'REJECTED' if summary =~ /^\*\* REJECT \*\*/
- c.save!
-
- db_references = []
- xml_references = []
-
- if cve.dig 'references', 'reference_data'
- cve.dig('references', 'reference_data').each do |ref|
- xml_references << [
- :source => ref['refsource'],
- :title => ref['name'],
- :uri => ref['url']
- ]
- end
- end
-
- c.references.each do |ref|
- db_references << [ref.source, ref.title, ref.uri]
- end
-
- rem = db_references - xml_references
- debug "Removing references: #{rem.inspect}"
-
- rem.each do |item|
- ref = c.references.where(['source = ? AND title = ? AND uri = ?', *item]).first
- debug ref
- c.references.delete(ref)
- ref.destroy
- end
-
- add = xml_references - db_references
- debug "Ading references: #{add.inspect}"
-
- add.each do |item|
- c.references.create(
- source: item[0],
- title: item[1],
- uri: item[2]
- )
- end
-
- db_cpes = []
- xml_cpes = []
-
- cve.dig('configurations', 'nodes').each do |node|
- if node.key?('cpe_match')
- node['cpe_match'].each do |cpe_match|
- xml_cpes << cpe_match['cpe23Uri']
- end
- elsif node.key?('children')
- node['children'].each do |child|
- if child.key?('cpe_match')
- child['cpe_match'].each do |cpe_match|
- xml_cpes << cpe_match['cpe23Uri']
- end
- end
- end
- end
- end
-
- c.cpes.each do |prod|
- db_cpes << prod.cpe
- end
-
- rem = db_cpes - xml_cpes
- debug "Removing CPEs: #{rem.inspect}"
-
- rem.each do |item|
- c.cpes.delete(Cpe.find_by_cpe(item))
- end
-
- add = xml_cpes - db_cpes
- debug "Ading CPEs: #{add.inspect}"
-
- add.each do |item|
- cpe = Cpe.where(cpe: item).first
- cpe ||= Cpe.create(cpe: item)
-
- c.cpes << cpe
- end
-
- c.save!
- updated_cves += 1
- end
- end
-
- processed_cves += 1
- STDOUT.flush
- end
-
- info ''
-
- info "(#{Time.now - start_ts} seconds, #{created_cves} new CVE entries, #{updated_cves} updated CVE entries)"
-end
-
-
-#
-# Run something, and display a status info around it
-#
-def status(message)
- fail ArgumentError, 'I want a block :(' unless block_given?
-
- print "#{message}....." unless QUIET
- STDOUT.flush
-
- stuff = yield
- print "\b" * 5 + ' done.'.green + "\n" unless QUIET
- stuff
-end
-
-
-def debug(msg)
- $stderr.puts msg if DEBUG
-end
-
-
-def info(msg)
- puts msg unless QUIET
-end
-
-#
-# unzip the given string
-#
-def gunzip_str(str)
- Zlib::GzipReader.new(StringIO.new(str)).read
-end
diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake
deleted file mode 100644
index ec34f91..0000000
--- a/lib/tasks/import.rake
+++ /dev/null
@@ -1,256 +0,0 @@
-require 'rexml/document'
-require 'nokogiri'
-require 'net/http'
-require 'uri'
-require 'date'
-
-namespace :import do
-
- desc "Import Request Files"
- task :requests => :environment do
- info "Importing GLSA requests"
-
- glsa_req_dir = ENV['GLSA_REQ_DIR']
- if glsa_req_dir == nil
- puts "Please, set GLSA_REQ_DIR"
- exit(-1)
- end
-
- glsa_list = Array.new
- Glsa.all.each do |glsa|
- glsa_list.push glsa.glsa_id
- end
-
- default_user = User.first
- if default_user == nil
- raise "No users defined!"
- end
-
- Dir.glob(glsa_req_dir + "/*.xml").each do |filename|
- req_f = File.new(filename)
- doc = REXML::Document.new req_f
-
- root = doc.root
- glsa_req_id = root.attributes['id'][0..7]
-
- if not glsa_list.include? glsa_req_id
- puts "Processing GLSA Request #{glsa_req_id}"
-
- glsa = Glsa.new
- glsa.glsa_id = glsa_req_id
- glsa.status = 'request'
-
- root.elements.each('metadata') do |meta|
- user = meta.text.strip
- user = User.where(:login => user)
-
- if user.length > 0
- user = user[0]
- else
- user = default_user
- end
-
- glsa.requester = user if meta.attributes['tag'] == 'requester'
-
- end
-
- unless glsa.save
- raise "Errors occurred while saving the GLSA object: #{glsa.errors.full_messages.join ', '}"
- end
-
- root.elements.each('metadata/metadata/metadata') do |comm|
- puts comm.text.strip()
-
- comment = glsa.comments.new
- comment.user_id = glsa.requester
- comment.rating = 'neutral'
- comment.text = comm.text.strip
-
- unless comment.save
- raise "Error. #{comment.errors.full_messages.join ', '}"
- end
- end
-
- #It's time for the revision
- revision = glsa.revisions.new
- revision.revid = 1
- revision.user = glsa.requester
- revision.title = root.elements['title'].text
- revision.impact = root.elements['impact'].attributes['type']
- revision.product = root.elements['product'].attributes['type']
- revision.resolution = root.elements['resolution'].text
- revision.workaround = root.elements['workaround'].text
- revision.description = root.elements['description'].text
- revision.is_release = false
- revision.severity = root.elements['impact'].attributes['type']
-
- unless revision.save
- #Clean up
- glsa.delete
- raise "Errors occurred while saving the Revision object: #{revision.errors.full_messages.join ', '}"
- end
-
- #Let's grab the bugs
- root.elements.each('bug') do |bug|
- Bug.create(
- :bug_id => bug.text,
- :revision_id => revision
- )
- end
-
- end
- end
- end
-
- desc "Import Advisory Files"
- task :advisories => :environment do
- info "Importing old GLSAs from www.gentoo.org"
-
- #Lets grab the IDs we have in the DB, the see
- #if we already processed them
- glsa_list = Array.new
- Glsa.all.each do |glsa|
- glsa_list.push glsa.glsa_id
- end
-
- GLSA_URL = "https://www.gentoo.org/rdf/en/glsa-index.rdf"
- GLSA_URL_BASE = "https://www.gentoo.org/security/en/glsa/glsa-%s.xml?passthru=1"
-
- default_user = User.first
- if default_user == nil
- raise "No users defined!"
- end
-
- #Let's parse the XML and get the advisories ID
- index = Nokogiri::XML(Glsamaker::HTTP.get(GLSA_URL))
- index.remove_namespaces!
- root_idx = index.root
- ids = Array.new
-
- root_idx.xpath('item').each do |elem|
- url = elem.at_xpath('./link').content
- elem.at_xpath('./title').content =~ /GLSA\s(\d{6})-(\d{1,3})\s\(.*/
- id = "#{$1}-#{$2}"
- ids << id
- end
-
- ids.reverse_each do |id|
- #if id no in glsa_list, then process the url
- if not glsa_list.include? id
- puts "Processing GLSA Advisory #{id}"
-
- xml = index = Nokogiri::XML(Glsamaker::HTTP.get(GLSA_URL_BASE % id))
- root = xml.root
-
- #Lets create the GLSA in the DB
- glsa = Glsa.new
- glsa.glsa_id = id
- glsa.status = 'release'
- glsa.first_released_at = DateTime.parse(root.at_xpath('./announced').content)
-
- #Lets take a look at users in Metadata
- root.xpath('metadata').each do |meta|
- user = meta.content.strip()
- user = User.where(:login => user)
-
- if user.length > 0
- user = user[0]
- else
- user = default_user
- end
-
- glsa.submitter = user if meta['tag'] == 'submitter'
- glsa.requester = user if meta['tag'] == 'requester'
- glsa.bugreadymaker = user if meta['tag'] == 'bugReady'
- end
-
- #For old GLSAs with no metadata
- if glsa.submitter == nil
- glsa.submitter = default_user
- end
-
- if glsa.requester == nil
- glsa.requester = default_user
- end
-
- unless glsa.save
- raise "Errors occurred while saving the GLSA object: #{glsa.errors.full_messages.join ', '}"
- end
-
- #Lets create the Revision in the DB
- revision = Revision.new
-
- revision.glsa = glsa
- revision.user = glsa.submitter
- revision.revid = 1
- revision.release_revision = root.at_xpath('./revised').content.split(':')[1].strip.to_i
- revision.title = root.at_xpath('./title').content
- revision.impact = root.at_xpath('./impact').children.to_xml(:indent => 0)
- revision.product = root.at_xpath('./product').content
- revision.synopsis = root.at_xpath('./synopsis').children.to_xml(:indent => 0)
- revision.resolution = root.at_xpath('./resolution').children.to_xml(:indent => 0)
- revision.workaround = root.at_xpath('./workaround').children.to_xml(:indent => 0)
- revision.description = root.at_xpath('./description').children.to_xml(:indent => 0)
- revision.is_release = true
- revision.severity = root.at_xpath('./impact')['type']
-
- #Old GLSAs may not have a background tag
- begin
- revision.background = root.at_xpath('./background').content.strip
- rescue
- revision.background = nil
- end
-
- #Old GLSAs may not have an access tag
- begin
- revision.access = root.at_xpath('./access').content.strip
- rescue
- revision.access = nil
- end
-
- unless revision.save
- #Clean up
- glsa.delete
- raise "Errors occurred while saving the Revision object: #{revision.errors.full_messages.join ', '}"
- end
-
- #Let's grab the bugs
- root.xpath('bug').each do |bug|
- revision.bugs.create(
- :bug_id => bug.content.to_i
- )
- end
-
- #Let's grab the references
- root.xpath('references/uri').each do |uri|
- revision.references.create(
- :url => uri['link'],
- :title => uri.content
- )
- end
-
- #Let's grab the packages
- root.xpath('affected/package').each do |pkg_info|
- pkg_info.children.each do |inner|
- if inner.is_a? Nokogiri::XML::Node
- auto = true
- if inner['auto'] == 'n'
- auto = false
- end
-
- revision.packages.create(
- :my_type => inner.node_name,
- :atom => pkg_info['name'],
- :version => inner.content,
- :comp => Package.reverse_comp(inner['range']),
- :arch => pkg_info['arch'],
- :automatic => auto
- )
-
- end
- end
- end
- end
- end
- end
-end
diff --git a/lib/tasks/rcov.rake b/lib/tasks/rcov.rake
deleted file mode 100644
index bb602e4..0000000
--- a/lib/tasks/rcov.rake
+++ /dev/null
@@ -1,81 +0,0 @@
-def run_coverage(files)
- rm_f "coverage"
- rm_f "coverage.data"
-
- # turn the files we want to run into a string
- if files.empty?
- puts "No files were specified for testing"
- return
- end
-
- files = files.join(" ")
-
- if RUBY_PLATFORM =~ /darwin/
- exclude = '--exclude "gems/*" --exclude "Library/Frameworks/*"'
- elsif RUBY_PLATFORM =~ /java/
- exclude = '--exclude "rubygems/*,jruby/*,parser*,gemspec*,_DELEGATION*,eval*,recognize_optimized*,yaml,yaml/*,fcntl"'
- else
- exclude = '--exclude "gems/*"'
- end
- # rake test:units:rcov SHOW_ONLY=models,controllers,lib,helpers
- # rake test:units:rcov SHOW_ONLY=m,c,l,h
- if ENV['SHOW_ONLY']
- params = String.new
- show_only = ENV['SHOW_ONLY'].to_s.split(',').map{|x|x.strip}
- if show_only.any?
- reg_exp = []
- for show_type in show_only
- reg_exp << case show_type
- when 'm', 'models' then 'app\/models'
- when 'c', 'controllers' then 'app\/controllers'
- when 'h', 'helpers' then 'app\/helpers'
- when 'l', 'lib' then 'lib'
- else
- show_type
- end
- end
- reg_exp.map!{ |m| "(#{m})" }
- params << " --exclude \"^(?!#{reg_exp.join('|')})\""
- end
- exclude = exclude + params
- end
-
- rcov_bin = RUBY_PLATFORM =~ /java/ ? "jruby -S rcov" : "rcov"
- rcov = "#{rcov_bin} --rails -Ilib:test --sort coverage --text-report #{exclude}"
- puts
- puts
- puts "Running tests..."
- cmd = "#{rcov} #{files}"
- puts cmd
- begin
- sh cmd
- rescue Exception => e
- $stderr.puts "#{e.message}"
- $stderr.puts "The tests likely failed. Not aborting to not break Hudson builds"
- end
-end
-
-namespace :test do
-
- desc "Measures unit, functional, and integration test coverage"
- task :coverage do
- run_coverage Dir["test/unit/**/*.rb", "test/functional/**/*.rb", "test/integration/**/*.rb"]
- end
-
- namespace :coverage do
- desc "Runs coverage on unit tests"
- task :units do
- run_coverage Dir["test/unit/**/*.rb"]
- end
-
- desc "Runs coverage on functional tests"
- task :functionals do
- run_coverage Dir["test/functional/**/*.rb"]
- end
-
- desc "Runs coverage on integration tests"
- task :integration do
- run_coverage Dir["test/integration/**/*.rb"]
- end
- end
-end
diff --git a/lib/tasks/utils.rb b/lib/tasks/utils.rb
deleted file mode 100644
index 3e49702..0000000
--- a/lib/tasks/utils.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# ===GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-# Copyright (C) 2009 Pierre-Yves Rofes <py@gentoo.org>
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# For more information, see the LICENSE file.
-#
-
-class String
- def purple
- ansi 35
- end
-
- def red
- ansi 31
- end
-
- def green
- ansi 32
- end
-
- def bold
- ansi 1
- end
-
- private
- def ansi(code)
- code = Integer(code)
- "\033[1;#{code}m#{self}\033[0m"
- end
-end
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..692cf07
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,8682 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@csstools/convert-colors": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz",
+ "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
+ },
+ "@csstools/sass-import-resolve": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/sass-import-resolve/-/sass-import-resolve-1.0.0.tgz",
+ "integrity": "sha512-pH4KCsbtBLLe7eqUrw8brcuFO8IZlN36JjdKlOublibVdAIPHCzEnpBWOVUXK5sCf+DpBi8ZtuWtjF0srybdeA=="
+ },
+ "@gentoo/tyrian": {
+ "version": "git+https://anongit.gentoo.org/git/sites/tyrian-theme.git#5b6b8e70fb7067b54fa4f2fac3966ae74fcb713c",
+ "from": "git+https://anongit.gentoo.org/git/sites/tyrian-theme.git",
+ "requires": {
+ "autoprefixer": "^7.2.4",
+ "bootstrap": "4.3.1",
+ "font-awesome": "4.7.0",
+ "jquery": "^3.3.1",
+ "popper.js": "1.14.7"
+ },
+ "dependencies": {
+ "autoprefixer": {
+ "version": "7.2.6",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
+ "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
+ "requires": {
+ "browserslist": "^2.11.3",
+ "caniuse-lite": "^1.0.30000805",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^6.0.17",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "popper.js": {
+ "version": "1.14.7",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.7.tgz",
+ "integrity": "sha512-4q1hNvoUre/8srWsH7hnoSJ5xVmIL4qgz+s4qf2TnJIMyZFUFMGH+9vE7mXynAlHSZ/NdTmmow86muD0myUkVQ=="
+ }
+ }
+ },
+ "@types/events": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "dev": true
+ },
+ "@types/glob": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "dev": true,
+ "requires": {
+ "@types/events": "*",
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "12.12.31",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.31.tgz",
+ "integrity": "sha512-T+wnJno8uh27G9c+1T+a1/WYCHzLeDqtsGJkoEdSp2X8RTh3oOCZQcUnjAx90CS8cmmADX51O0FI/tu9s0yssg==",
+ "dev": true
+ },
+ "@webassemblyjs/ast": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "requires": {
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA=="
+ },
+ "@webassemblyjs/helper-api-error": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw=="
+ },
+ "@webassemblyjs/helper-buffer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA=="
+ },
+ "@webassemblyjs/helper-code-frame": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
+ "requires": {
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-fsm": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw=="
+ },
+ "@webassemblyjs/helper-module-context": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0"
+ }
+ },
+ "@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw=="
+ },
+ "@webassemblyjs/helper-wasm-section": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
+ }
+ },
+ "@webassemblyjs/ieee754": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "requires": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "@webassemblyjs/leb128": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "requires": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/utf8": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w=="
+ },
+ "@webassemblyjs/wasm-edit": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-gen": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-opt": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wasm-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
+ }
+ },
+ "@webassemblyjs/wast-parser": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@webassemblyjs/wast-printer": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+ },
+ "@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "dev": true,
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "acorn": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz",
+ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA=="
+ },
+ "adjust-sourcemap-loader": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz",
+ "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==",
+ "requires": {
+ "assert": "1.4.1",
+ "camelcase": "5.0.0",
+ "loader-utils": "1.2.3",
+ "object-path": "0.11.4",
+ "regex-parser": "2.2.10"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+ "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA=="
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ }
+ }
+ },
+ "ajv": {
+ "version": "6.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz",
+ "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-errors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+ "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+ },
+ "ajv-keywords": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+ "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
+ },
+ "ansi-colors": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+ "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
+ "dev": true
+ },
+ "ansi-html": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+ "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "dependencies": {
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arity-n": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
+ "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U="
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+ },
+ "array-flatten": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
+ "async": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+ },
+ "async-foreach": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI="
+ },
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "autoprefixer": {
+ "version": "9.7.5",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.5.tgz",
+ "integrity": "sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==",
+ "requires": {
+ "browserslist": "^4.11.0",
+ "caniuse-lite": "^1.0.30001036",
+ "chalk": "^2.4.2",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^7.0.27",
+ "postcss-value-parser": "^4.0.3"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.0.tgz",
+ "integrity": "sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001035",
+ "electron-to-chromium": "^1.3.380",
+ "node-releases": "^1.1.52",
+ "pkg-up": "^3.1.0"
+ }
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg=="
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz",
+ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+ },
+ "batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+ },
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "requires": {
+ "inherits": "~2.0.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "bonjour": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+ "dev": true,
+ "requires": {
+ "array-flatten": "^2.1.0",
+ "deep-equal": "^1.0.1",
+ "dns-equal": "^1.0.0",
+ "dns-txt": "^2.0.2",
+ "multicast-dns": "^6.0.1",
+ "multicast-dns-service-types": "^1.1.0"
+ }
+ },
+ "bootstrap": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz",
+ "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "2.11.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
+ "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
+ "requires": {
+ "caniuse-lite": "^1.0.30000792",
+ "electron-to-chromium": "^1.3.30"
+ }
+ },
+ "buffer": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+ "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ },
+ "buffer-indexof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+ "dev": true
+ },
+ "cacache": {
+ "version": "12.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
+ "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ }
+ }
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "requires": {
+ "callsites": "^2.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ }
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001038",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz",
+ "integrity": "sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "requires": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "fsevents": "^1.2.7",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ },
+ "chrome-trace-event": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "requires": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "coffeescript": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.5.1.tgz",
+ "integrity": "sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ=="
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+ },
+ "compose-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
+ "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
+ "requires": {
+ "arity-n": "^1.0.4"
+ }
+ },
+ "compressible": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
+ "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+ "dev": true,
+ "requires": {
+ "mime-db": ">= 1.43.0 < 2"
+ }
+ },
+ "compression": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.5",
+ "bytes": "3.0.0",
+ "compressible": "~2.0.16",
+ "debug": "2.6.9",
+ "on-headers": "~1.0.2",
+ "safe-buffer": "5.1.2",
+ "vary": "~1.1.2"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
+ "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA=="
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "dev": true
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+ "dev": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
+ "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw=="
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+ },
+ "cosmiconfig": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.13.1",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ }
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "cross-spawn": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "css": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
+ "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "source-map": "^0.6.1",
+ "source-map-resolve": "^0.5.2",
+ "urix": "^0.1.0"
+ }
+ },
+ "css-blank-pseudo": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
+ "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==",
+ "requires": {
+ "postcss": "^7.0.5"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "css-has-pseudo": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
+ "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^5.0.0-rc.4"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "css-loader": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz",
+ "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
+ "loader-utils": "^1.2.3",
+ "normalize-path": "^3.0.0",
+ "postcss": "^7.0.23",
+ "postcss-modules-extract-imports": "^2.0.0",
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.1.1",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.0.2",
+ "schema-utils": "^2.6.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg=="
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "css-prefers-color-scheme": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz",
+ "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==",
+ "requires": {
+ "postcss": "^7.0.5"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "cssdb": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz",
+ "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "cyclist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
+ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
+ },
+ "d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "requires": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "d3": {
+ "version": "3.5.17",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
+ "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g="
+ },
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+ },
+ "d3-axis": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz",
+ "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ=="
+ },
+ "d3-brush": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.5.tgz",
+ "integrity": "sha512-rEaJ5gHlgLxXugWjIkolTA0OyMvw8UWU1imYXy1v642XyyswmI1ybKOv05Ft+ewq+TFmdliD3VuK0pRp1VT/5A==",
+ "requires": {
+ "d3-dispatch": "1",
+ "d3-drag": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "1",
+ "d3-transition": "1"
+ }
+ },
+ "d3-collection": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
+ },
+ "d3-color": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz",
+ "integrity": "sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg=="
+ },
+ "d3-dispatch": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+ "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA=="
+ },
+ "d3-drag": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz",
+ "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==",
+ "requires": {
+ "d3-dispatch": "1",
+ "d3-selection": "1"
+ }
+ },
+ "d3-ease": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz",
+ "integrity": "sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ=="
+ },
+ "d3-format": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz",
+ "integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw=="
+ },
+ "d3-geo": {
+ "version": "1.11.9",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.9.tgz",
+ "integrity": "sha512-9edcH6J3s/Aa3KJITWqFJbyB/8q3mMlA9Fi7z6yy+FAYMnRaxmC7jBhUnsINxVWD14GmqX3DK8uk7nV6/Ekt4A==",
+ "requires": {
+ "d3-array": "1"
+ }
+ },
+ "d3-interpolate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+ "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+ "requires": {
+ "d3-color": "1"
+ }
+ },
+ "d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ },
+ "d3-quadtree": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz",
+ "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA=="
+ },
+ "d3-scale": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz",
+ "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==",
+ "requires": {
+ "d3-array": "^1.2.0",
+ "d3-collection": "1",
+ "d3-color": "1",
+ "d3-format": "1",
+ "d3-interpolate": "1",
+ "d3-time": "1",
+ "d3-time-format": "2"
+ }
+ },
+ "d3-selection": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz",
+ "integrity": "sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA=="
+ },
+ "d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+ "requires": {
+ "d3-path": "1"
+ }
+ },
+ "d3-time": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+ "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
+ },
+ "d3-time-format": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz",
+ "integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==",
+ "requires": {
+ "d3-time": "1"
+ }
+ },
+ "d3-timer": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+ "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw=="
+ },
+ "d3-transition": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz",
+ "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==",
+ "requires": {
+ "d3-color": "1",
+ "d3-dispatch": "1",
+ "d3-ease": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "^1.1.0",
+ "d3-timer": "1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "datatables.net": {
+ "version": "1.10.20",
+ "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.20.tgz",
+ "integrity": "sha512-4E4S7tTU607N3h0fZPkGmAtr9mwy462u+VJ6gxYZ8MxcRIjZqHy3Dv1GNry7i3zQCktTdWbULVKBbkAJkuHEnQ==",
+ "requires": {
+ "jquery": ">=1.7"
+ },
+ "dependencies": {
+ "jquery": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
+ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
+ }
+ }
+ },
+ "datatables.net-bs4": {
+ "version": "1.10.20",
+ "resolved": "https://registry.npmjs.org/datatables.net-bs4/-/datatables.net-bs4-1.10.20.tgz",
+ "integrity": "sha512-kQmMUMsHMOlAW96ztdoFqjSbLnlGZQ63iIM82kHbmldsfYdzuyhbb4hTx6YNBi481WCO3iPSvI6YodNec46ZAw==",
+ "requires": {
+ "datatables.net": "1.10.20",
+ "jquery": ">=1.7"
+ },
+ "dependencies": {
+ "jquery": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
+ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
+ }
+ }
+ },
+ "datatables.net-buttons": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/datatables.net-buttons/-/datatables.net-buttons-1.6.1.tgz",
+ "integrity": "sha512-Lcgvi/xGB2X0jr1n/uQMmg43Z1JQO6aaGjPHO+sAQAMfBGBi9cK1hhfM4Vg8gzC5fz3sW4QrtjAdKvOPnQ1A3w==",
+ "requires": {
+ "datatables.net": "^1.10.15",
+ "jquery": ">=1.7"
+ }
+ },
+ "datatables.net-buttons-bs4": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/datatables.net-buttons-bs4/-/datatables.net-buttons-bs4-1.6.1.tgz",
+ "integrity": "sha512-PdE1vrnRIeX+p++wnbpdnr97kgTCs+DDomtTccsQvMrFm29lxVa7uTz1awasfGRrCrJzpb5HjPrPJBzbGHrUyg==",
+ "requires": {
+ "datatables.net-bs4": "^1.10.15",
+ "datatables.net-buttons": "1.6.1",
+ "jquery": ">=1.7"
+ }
+ },
+ "datatables.net-dt": {
+ "version": "1.10.20",
+ "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-1.10.20.tgz",
+ "integrity": "sha512-D+65buDke96a3WlJo2re+SbcAVfjPh2nsFZG198Vbkz3i1wKPdB+wkV2K07qYIiIpypcXWOnD2pz3MvnUqM9Tw==",
+ "requires": {
+ "datatables.net": "1.10.20",
+ "jquery": ">=1.7"
+ },
+ "dependencies": {
+ "jquery": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
+ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
+ }
+ }
+ },
+ "datatables.net-responsive": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/datatables.net-responsive/-/datatables.net-responsive-2.2.3.tgz",
+ "integrity": "sha512-8D6VtZcyuH3FG0Hn5A4LPZQEOX3+HrRFM7HjpmsQc/nQDBbdeBLkJX4Sh/o1nzFTSneuT1Wh/lYZHVPpjcN+Sw==",
+ "requires": {
+ "datatables.net": "^1.10.15",
+ "jquery": ">=1.7"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
+ },
+ "deep-equal": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
+ "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+ "dev": true,
+ "requires": {
+ "is-arguments": "^1.0.4",
+ "is-date-object": "^1.0.1",
+ "is-regex": "^1.0.4",
+ "object-is": "^1.0.1",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.2.0"
+ }
+ },
+ "default-gateway": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "ip-regex": "^2.1.0"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
+ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
+ "dev": true,
+ "requires": {
+ "@types/glob": "^7.1.1",
+ "globby": "^6.1.0",
+ "is-path-cwd": "^2.0.0",
+ "is-path-in-cwd": "^2.0.0",
+ "p-map": "^2.0.0",
+ "pify": "^4.0.1",
+ "rimraf": "^2.6.3"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
+ "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+ "dev": true
+ },
+ "detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc="
+ },
+ "detect-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+ "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+ "dev": true
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "dns-equal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+ "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+ "dev": true
+ },
+ "dns-packet": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+ "dev": true,
+ "requires": {
+ "ip": "^1.1.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "dns-txt": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+ "dev": true,
+ "requires": {
+ "buffer-indexof": "^1.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+ },
+ "duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.386",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.386.tgz",
+ "integrity": "sha512-M7JHfp32Bq6Am59AWgglh2d3nqe6y8Y94Vcb/AXUsO3DGvKUHYI5ML9+U5oNShfdOEfurrrjKSoSgFt2mz7mpw=="
+ },
+ "elliptic": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
+ "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "enhanced-resolve": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
+ "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.5.0",
+ "tapable": "^1.0.0"
+ },
+ "dependencies": {
+ "memory-fs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+ "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ }
+ }
+ },
+ "errno": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.17.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
+ "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.5",
+ "is-regex": "^1.0.5",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimleft": "^2.1.1",
+ "string.prototype.trimright": "^2.1.1"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es5-ext": {
+ "version": "0.10.53",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
+ "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.3",
+ "next-tick": "~1.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "requires": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "dev": true
+ },
+ "eventemitter3": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
+ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
+ "dev": true
+ },
+ "events": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
+ },
+ "eventsource": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+ "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+ "dev": true,
+ "requires": {
+ "original": "^1.0.0"
+ }
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "exports-loader": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.7.0.tgz",
+ "integrity": "sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "source-map": "0.5.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz",
+ "integrity": "sha1-D+llA6yGpa213mP05BKuSHLNvoY="
+ }
+ }
+ },
+ "expose-loader": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz",
+ "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw=="
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "dependencies": {
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
+ "dev": true
+ }
+ }
+ },
+ "ext": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
+ "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
+ "requires": {
+ "type": "^2.0.0"
+ },
+ "dependencies": {
+ "type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz",
+ "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow=="
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz",
+ "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "figgy-pudding": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
+ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw=="
+ },
+ "file-loader": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-5.1.0.tgz",
+ "integrity": "sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg==",
+ "requires": {
+ "loader-utils": "^1.4.0",
+ "schema-utils": "^2.5.0"
+ }
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "optional": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "flatten": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
+ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg=="
+ },
+ "flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "follow-redirects": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz",
+ "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "font-awesome": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+ "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+ "dev": true
+ },
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz",
+ "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==",
+ "optional": true,
+ "requires": {
+ "bindings": "^1.5.0",
+ "nan": "^2.12.1",
+ "node-pre-gyp": "*"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "3.2.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.3.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.9.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.3.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.14.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4.4.2"
+ }
+ },
+ "nopt": {
+ "version": "4.0.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.13",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.8.6",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+ "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "requires": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "dependencies": {
+ "is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "global-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+ "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+ "requires": {
+ "global-prefix": "^3.0.0"
+ },
+ "dependencies": {
+ "global-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+ "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+ "requires": {
+ "ini": "^1.3.5",
+ "kind-of": "^6.0.2",
+ "which": "^1.3.1"
+ }
+ }
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "globule": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz",
+ "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==",
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.12",
+ "minimatch": "~3.0.2"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
+ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+ },
+ "handle-thing": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+ "requires": {
+ "ajv": "^6.5.5",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
+ "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+ },
+ "hpack.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "obuf": "^1.0.0",
+ "readable-stream": "^2.0.1",
+ "wbuf": "^1.1.0"
+ }
+ },
+ "html-entities": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "dev": true
+ },
+ "http-deceiver": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+ "dev": true
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
+ "dev": true
+ },
+ "http-proxy": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
+ "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+ "dev": true,
+ "requires": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "http-proxy-middleware": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+ "dev": true,
+ "requires": {
+ "http-proxy": "^1.17.0",
+ "is-glob": "^4.0.0",
+ "lodash": "^4.17.11",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "icss-utils": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "requires": {
+ "postcss": "^7.0.14"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+ },
+ "import-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+ "requires": {
+ "import-from": "^2.1.0"
+ }
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-from": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "import-local": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+ "requires": {
+ "pkg-dir": "^3.0.0",
+ "resolve-cwd": "^2.0.0"
+ }
+ },
+ "imports-loader": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz",
+ "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==",
+ "requires": {
+ "loader-utils": "^1.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "in-publish": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
+ "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ=="
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "internal-ip": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+ "dev": true,
+ "requires": {
+ "default-gateway": "^4.2.0",
+ "ipaddr.js": "^1.9.0"
+ }
+ },
+ "interpret": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw=="
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "ip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+ "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+ "dev": true
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true
+ },
+ "is-absolute-url": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz",
+ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-callable": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
+ "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "dev": true
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz",
+ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^2.1.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.2"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "jquery": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz",
+ "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
+ },
+ "jquery-ujs": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.2.tgz",
+ "integrity": "sha1-ao7xAg5rbdo4W5CkvdwSjCHFY5c=",
+ "requires": {
+ "jquery": ">=1.8.0"
+ }
+ },
+ "js-base64": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz",
+ "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "json3": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+ "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "killable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+ "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+ "dev": true
+ },
+ "kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "loader-runner": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
+ },
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "lodash._reinterpolate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+ },
+ "lodash.template": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+ "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.templatesettings": "^4.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+ "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0"
+ }
+ },
+ "loglevel": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.7.tgz",
+ "integrity": "sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==",
+ "dev": true
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "map-age-cleaner": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+ "requires": {
+ "p-defer": "^1.0.0"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+ "dev": true
+ },
+ "mem": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+ "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+ "requires": {
+ "map-age-cleaner": "^0.1.1",
+ "mimic-fn": "^2.0.0",
+ "p-is-promise": "^2.0.0"
+ }
+ },
+ "memory-fs": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.43.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
+ "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
+ },
+ "mime-types": {
+ "version": "2.1.26",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
+ "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+ "requires": {
+ "mime-db": "1.43.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz",
+ "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==",
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "multicast-dns": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "dev": true,
+ "requires": {
+ "dns-packet": "^1.3.1",
+ "thunky": "^1.0.2"
+ }
+ },
+ "multicast-dns-service-types": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
+ },
+ "next-tick": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+ "node-forge": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
+ "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+ "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
+ "requires": {
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": "^2.87.0",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
+ }
+ }
+ },
+ "node-libs-browser": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+ "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+ "requires": {
+ "assert": "^1.1.1",
+ "browserify-zlib": "^0.2.0",
+ "buffer": "^4.3.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "^1.0.0",
+ "crypto-browserify": "^3.11.0",
+ "domain-browser": "^1.1.1",
+ "events": "^3.0.0",
+ "https-browserify": "^1.0.0",
+ "os-browserify": "^0.3.0",
+ "path-browserify": "0.0.1",
+ "process": "^0.11.10",
+ "punycode": "^1.2.4",
+ "querystring-es3": "^0.2.0",
+ "readable-stream": "^2.3.3",
+ "stream-browserify": "^2.0.1",
+ "stream-http": "^2.7.2",
+ "string_decoder": "^1.0.0",
+ "timers-browserify": "^2.0.4",
+ "tty-browserify": "0.0.0",
+ "url": "^0.11.0",
+ "util": "^0.11.0",
+ "vm-browserify": "^1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "util": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+ "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ }
+ }
+ },
+ "node-releases": {
+ "version": "1.1.52",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.52.tgz",
+ "integrity": "sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ==",
+ "requires": {
+ "semver": "^6.3.0"
+ }
+ },
+ "node-sass": {
+ "version": "4.13.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
+ "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
+ "requires": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^1.1.1",
+ "cross-spawn": "^3.0.0",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "in-publish": "^2.0.0",
+ "lodash": "^4.17.15",
+ "meow": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "nan": "^2.13.2",
+ "node-gyp": "^3.8.0",
+ "npmlog": "^4.0.0",
+ "request": "^2.88.0",
+ "sass-graph": "^2.2.4",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI="
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz",
+ "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-path": {
+ "version": "0.11.4",
+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
+ "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
+ "dev": true
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "dev": true,
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opn": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+ "dev": true,
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "original": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+ "dev": true,
+ "requires": {
+ "url-parse": "^1.4.3"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-defer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+ "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+ },
+ "p-is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
+ },
+ "p-limit": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
+ "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-map": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
+ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "dev": true
+ },
+ "p-retry": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz",
+ "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==",
+ "dev": true,
+ "requires": {
+ "retry": "^0.12.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+ },
+ "parallel-transform": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
+ "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
+ "requires": {
+ "cyclist": "^1.0.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz",
+ "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==",
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "pkg-up": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "popper.js": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
+ "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ=="
+ },
+ "portfinder": {
+ "version": "1.0.25",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
+ "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.2",
+ "debug": "^3.1.1",
+ "mkdirp": "^0.5.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs="
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ }
+ },
+ "postcss-advanced-variables": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-advanced-variables/-/postcss-advanced-variables-3.0.1.tgz",
+ "integrity": "sha512-JqVjfkmqPoazMobVeQYzbt7djcDGJfMlpwBd9abTqmzWR40tvIUMXpTU5w3riqz7h+wYPY7V6GF8BIXL/ybEfg==",
+ "requires": {
+ "@csstools/sass-import-resolve": "^1.0.0",
+ "postcss": "^7.0.6"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-atroot": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/postcss-atroot/-/postcss-atroot-0.1.3.tgz",
+ "integrity": "sha1-Z1LAIwx0UUBUk0WysOMOvtoBpAU=",
+ "requires": {
+ "postcss": "^5.0.5"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-attribute-case-insensitive": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz",
+ "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^6.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-color-functional-notation": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
+ "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-color-gray": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
+ "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-color-hex-alpha": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
+ "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
+ "requires": {
+ "postcss": "^7.0.14",
+ "postcss-values-parser": "^2.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-color-mod-function": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
+ "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-color-rebeccapurple": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
+ "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-custom-media": {
+ "version": "7.0.8",
+ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
+ "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
+ "requires": {
+ "postcss": "^7.0.14"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-custom-properties": {
+ "version": "8.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
+ "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
+ "requires": {
+ "postcss": "^7.0.17",
+ "postcss-values-parser": "^2.0.1"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-custom-selectors": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
+ "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-dir-pseudo-class": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
+ "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-double-position-gradients": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
+ "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
+ "requires": {
+ "postcss": "^7.0.5",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-env-function": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
+ "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-extend-rule": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-extend-rule/-/postcss-extend-rule-2.0.0.tgz",
+ "integrity": "sha512-dgr1GJzW3lUBczZJO5Fm51rktn34Uc99xR1uQyC2Td8JPep/Y+TRx6TjK0yngikOd4LxV1xyuohMMpcaOBgrfA==",
+ "requires": {
+ "postcss": "^6.0.22",
+ "postcss-nesting": "^5.0.0"
+ }
+ },
+ "postcss-flexbugs-fixes": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz",
+ "integrity": "sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ==",
+ "requires": {
+ "postcss": "^7.0.26"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-focus-visible": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
+ "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-focus-within": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
+ "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-font-variant": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz",
+ "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-gap-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
+ "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-image-set-function": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
+ "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-import": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
+ "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
+ "requires": {
+ "postcss": "^7.0.1",
+ "postcss-value-parser": "^3.2.3",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-initial": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz",
+ "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==",
+ "requires": {
+ "lodash.template": "^4.5.0",
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-lab-function": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
+ "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
+ "requires": {
+ "@csstools/convert-colors": "^1.4.0",
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-load-config": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+ "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "import-cwd": "^2.0.0"
+ }
+ },
+ "postcss-loader": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "postcss": "^7.0.0",
+ "postcss-load-config": "^2.0.0",
+ "schema-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-logical": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
+ "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-media-minmax": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
+ "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-extract-imports": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+ "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "requires": {
+ "postcss": "^7.0.5"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-local-by-default": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+ "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
+ "requires": {
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.16",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz",
+ "integrity": "sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg=="
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-scope": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-selector-parser": "^6.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-modules-values": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "requires": {
+ "icss-utils": "^4.0.0",
+ "postcss": "^7.0.6"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-nested": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.1.tgz",
+ "integrity": "sha512-AMayXX8tS0HCp4O4lolp4ygj9wBn32DJWXvG6gCv+ZvJrEa00GUxJcJEEzMh87BIe6FrWdYkpR2cuyqHKrxmXw==",
+ "requires": {
+ "postcss": "^7.0.21",
+ "postcss-selector-parser": "^6.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-nesting": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-5.0.0.tgz",
+ "integrity": "sha512-Yoe3w2mcVslnEJl5zLyz1yBxCFUpYu138apEEOCwS2HRdDw/TDxTwD1fXBrIarL8J1cPzHfVwO1m40B2/UpGCw==",
+ "requires": {
+ "postcss": "^6.0.21"
+ }
+ },
+ "postcss-overflow-shorthand": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
+ "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-page-break": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
+ "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-place": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
+ "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-values-parser": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-preset-env": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz",
+ "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==",
+ "requires": {
+ "autoprefixer": "^9.6.1",
+ "browserslist": "^4.6.4",
+ "caniuse-lite": "^1.0.30000981",
+ "css-blank-pseudo": "^0.1.4",
+ "css-has-pseudo": "^0.10.0",
+ "css-prefers-color-scheme": "^3.1.1",
+ "cssdb": "^4.4.0",
+ "postcss": "^7.0.17",
+ "postcss-attribute-case-insensitive": "^4.0.1",
+ "postcss-color-functional-notation": "^2.0.1",
+ "postcss-color-gray": "^5.0.0",
+ "postcss-color-hex-alpha": "^5.0.3",
+ "postcss-color-mod-function": "^3.0.3",
+ "postcss-color-rebeccapurple": "^4.0.1",
+ "postcss-custom-media": "^7.0.8",
+ "postcss-custom-properties": "^8.0.11",
+ "postcss-custom-selectors": "^5.1.2",
+ "postcss-dir-pseudo-class": "^5.0.0",
+ "postcss-double-position-gradients": "^1.0.0",
+ "postcss-env-function": "^2.0.2",
+ "postcss-focus-visible": "^4.0.0",
+ "postcss-focus-within": "^3.0.0",
+ "postcss-font-variant": "^4.0.0",
+ "postcss-gap-properties": "^2.0.0",
+ "postcss-image-set-function": "^3.0.1",
+ "postcss-initial": "^3.0.0",
+ "postcss-lab-function": "^2.0.1",
+ "postcss-logical": "^3.0.0",
+ "postcss-media-minmax": "^4.0.0",
+ "postcss-nesting": "^7.0.0",
+ "postcss-overflow-shorthand": "^2.0.0",
+ "postcss-page-break": "^2.0.0",
+ "postcss-place": "^4.0.1",
+ "postcss-pseudo-class-any-link": "^6.0.0",
+ "postcss-replace-overflow-wrap": "^3.0.0",
+ "postcss-selector-matches": "^4.0.0",
+ "postcss-selector-not": "^4.0.0"
+ },
+ "dependencies": {
+ "browserslist": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.11.0.tgz",
+ "integrity": "sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001035",
+ "electron-to-chromium": "^1.3.380",
+ "node-releases": "^1.1.52",
+ "pkg-up": "^3.1.0"
+ }
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-nesting": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
+ "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
+ "requires": {
+ "postcss": "^7.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-property-lookup": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-property-lookup/-/postcss-property-lookup-2.0.0.tgz",
+ "integrity": "sha512-KUb53a7UZWDMVb0SRODOonc4H1wlbgQ0VfYwmJaR1xWPorhariEz0U7x0ri3W/imFs6HqLYWP7hl2yMvi5Ty+w==",
+ "requires": {
+ "object-assign": "^4.0.1",
+ "postcss": "^6.0.6",
+ "tcomb": "^3.2.21"
+ }
+ },
+ "postcss-pseudo-class-any-link": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
+ "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
+ "requires": {
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^5.0.0-rc.3"
+ },
+ "dependencies": {
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-replace-overflow-wrap": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
+ "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
+ "requires": {
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-selector-matches": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
+ "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-selector-not": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz",
+ "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "postcss": "^7.0.2"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+ "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+ },
+ "postcss-values-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
+ "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "precss": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/precss/-/precss-4.0.0.tgz",
+ "integrity": "sha512-cRPZMKpHLZXR6gJlrXRjJe7SQMf+wYxg6rKp+TwYsYABjApSj9z8E8yIlagqADaWyikeIZttaNU6xqSjFIAP/g==",
+ "requires": {
+ "postcss": "^7.0.6",
+ "postcss-advanced-variables": "^3.0.0",
+ "postcss-atroot": "^0.1.3",
+ "postcss-extend-rule": "^2.0.0",
+ "postcss-nested": "^4.1.0",
+ "postcss-preset-env": "^6.4.0",
+ "postcss-property-lookup": "^2.0.0"
+ },
+ "dependencies": {
+ "postcss": {
+ "version": "7.0.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz",
+ "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+ },
+ "proxy-addr": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
+ "dev": true,
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.1"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "querystringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+ "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "dev": true,
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "dev": true
+ }
+ }
+ },
+ "read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
+ "requires": {
+ "pify": "^2.3.0"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regex-parser": {
+ "version": "2.2.10",
+ "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz",
+ "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA=="
+ },
+ "regexp.prototype.flags": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
+ "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1"
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+ },
+ "requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
+ "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-cwd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+ "requires": {
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ }
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "resolve-url-loader": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz",
+ "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==",
+ "requires": {
+ "adjust-sourcemap-loader": "2.0.0",
+ "camelcase": "5.3.1",
+ "compose-function": "3.0.3",
+ "convert-source-map": "1.7.0",
+ "es6-iterator": "2.0.3",
+ "loader-utils": "1.2.3",
+ "postcss": "7.0.21",
+ "rework": "1.0.1",
+ "rework-visit": "1.0.0",
+ "source-map": "0.6.1"
+ },
+ "dependencies": {
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "postcss": {
+ "version": "7.0.21",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz",
+ "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==",
+ "requires": {
+ "chalk": "^2.4.2",
+ "source-map": "^0.6.1",
+ "supports-color": "^6.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=",
+ "dev": true
+ },
+ "rework": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
+ "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
+ "requires": {
+ "convert-source-map": "^0.3.3",
+ "css": "^2.0.0"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
+ "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA="
+ }
+ }
+ },
+ "rework-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz",
+ "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo="
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+ "requires": {
+ "aproba": "^1.1.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sass-graph": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "requires": {
+ "glob": "^7.0.0",
+ "lodash": "^4.0.0",
+ "scss-tokenizer": "^0.2.3",
+ "yargs": "^7.0.0"
+ }
+ },
+ "sass-loader": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz",
+ "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==",
+ "requires": {
+ "clone-deep": "^4.0.1",
+ "loader-utils": "^1.2.3",
+ "neo-async": "^2.6.1",
+ "schema-utils": "^2.6.1",
+ "semver": "^6.3.0"
+ }
+ },
+ "schema-utils": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz",
+ "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==",
+ "requires": {
+ "ajv": "^6.12.0",
+ "ajv-keywords": "^3.4.1"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "requires": {
+ "js-base64": "^2.1.8",
+ "source-map": "^0.4.2"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "select-hose": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+ "dev": true
+ },
+ "selfsigned": {
+ "version": "1.10.7",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",
+ "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==",
+ "dev": true,
+ "requires": {
+ "node-forge": "0.9.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "serialize-javascript": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
+ "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ=="
+ },
+ "serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "dev": true,
+ "requires": {
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "dependencies": {
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "dev": true,
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "dev": true,
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
+ },
+ "simple-html-tokenizer": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz",
+ "integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4="
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sockjs": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+ "dev": true,
+ "requires": {
+ "faye-websocket": "^0.10.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "sockjs-client": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz",
+ "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.5",
+ "eventsource": "^1.0.7",
+ "faye-websocket": "~0.11.1",
+ "inherits": "^2.0.3",
+ "json3": "^3.3.2",
+ "url-parse": "^1.4.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "faye-websocket": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+ "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "source-list-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "requires": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
+ "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+ "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+ },
+ "spdy": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
+ "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "handle-thing": "^2.0.0",
+ "http-deceiver": "^1.2.7",
+ "select-hose": "^2.0.0",
+ "spdy-transport": "^3.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "spdy-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "detect-node": "^2.0.4",
+ "hpack.js": "^2.1.6",
+ "obuf": "^1.1.2",
+ "readable-stream": "^3.0.6",
+ "wbuf": "^1.7.3"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.16.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+ "dev": true
+ },
+ "stdout-stream": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz",
+ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==",
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-http": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ=="
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
+ "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
+ "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "style-loader": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.1.3.tgz",
+ "integrity": "sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==",
+ "requires": {
+ "loader-utils": "^1.2.3",
+ "schema-utils": "^2.6.4"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svg-inline-loader": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz",
+ "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==",
+ "requires": {
+ "loader-utils": "^1.1.0",
+ "object-assign": "^4.0.1",
+ "simple-html-tokenizer": "^0.1.1"
+ }
+ },
+ "tapable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
+ },
+ "tar": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
+ "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.12",
+ "inherits": "2"
+ }
+ },
+ "taucharts": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/taucharts/-/taucharts-2.8.0.tgz",
+ "integrity": "sha512-rUubG1QQwIR114pIpzKkJYYrtCQnn7rC3mrTfbCSV9HYQPCcXiwodwL+NNwxET5YrJcqcWXqevUK74xhWbxMRA==",
+ "requires": {
+ "d3-array": "^1.2.1",
+ "d3-axis": "^1.0.12",
+ "d3-brush": "^1.0.6",
+ "d3-color": "^1.2.3",
+ "d3-format": "^1.3.2",
+ "d3-geo": "^1.11.3",
+ "d3-quadtree": "^1.0.6",
+ "d3-scale": "^1.0.6",
+ "d3-selection": "^1.4.0",
+ "d3-shape": "^1.3.4",
+ "d3-time": "^1.0.11",
+ "d3-time-format": "^2.1.3",
+ "d3-transition": "^1.2.0",
+ "topojson-client": "^3.0.0"
+ }
+ },
+ "tcomb": {
+ "version": "3.2.29",
+ "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz",
+ "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ=="
+ },
+ "terser": {
+ "version": "4.6.7",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.7.tgz",
+ "integrity": "sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==",
+ "requires": {
+ "commander": "^2.20.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.12"
+ }
+ },
+ "terser-webpack-plugin": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
+ "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
+ "requires": {
+ "cacache": "^12.0.2",
+ "find-cache-dir": "^2.1.0",
+ "is-wsl": "^1.1.0",
+ "schema-utils": "^1.0.0",
+ "serialize-javascript": "^2.1.2",
+ "source-map": "^0.6.1",
+ "terser": "^4.1.2",
+ "webpack-sources": "^1.4.0",
+ "worker-farm": "^1.7.0"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "thunky": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+ "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
+ "dev": true
+ },
+ "topojson-client": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
+ "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
+ "requires": {
+ "commander": "2"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
+ },
+ "true-case-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz",
+ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==",
+ "requires": {
+ "glob": "^7.1.2"
+ }
+ },
+ "tslib": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
+ "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA=="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "turbolinks": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/turbolinks/-/turbolinks-5.2.0.tgz",
+ "integrity": "sha512-pMiez3tyBo6uRHFNNZoYMmrES/IaGgMhQQM+VFF36keryjb5ms0XkVpmKHkfW/4Vy96qiGW3K9bz0tF5sK9bBw=="
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ },
+ "type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "dev": true,
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg=="
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+ }
+ }
+ },
+ "url-parse": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+ "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+ "dev": true,
+ "requires": {
+ "querystringify": "^2.1.1",
+ "requires-port": "^1.0.0"
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "v8-compile-cache": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
+ "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w=="
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
+ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
+ },
+ "watchpack": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz",
+ "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==",
+ "requires": {
+ "chokidar": "^2.1.8",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0"
+ }
+ },
+ "wbuf": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+ "dev": true,
+ "requires": {
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "webpack": {
+ "version": "4.42.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz",
+ "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==",
+ "requires": {
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.2.1",
+ "ajv": "^6.10.2",
+ "ajv-keywords": "^3.4.1",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^4.1.0",
+ "eslint-scope": "^4.0.3",
+ "json-parse-better-errors": "^1.0.2",
+ "loader-runner": "^2.4.0",
+ "loader-utils": "^1.2.3",
+ "memory-fs": "^0.4.1",
+ "micromatch": "^3.1.10",
+ "mkdirp": "^0.5.3",
+ "neo-async": "^2.6.1",
+ "node-libs-browser": "^2.2.1",
+ "schema-utils": "^1.0.0",
+ "tapable": "^1.1.3",
+ "terser-webpack-plugin": "^1.4.3",
+ "watchpack": "^1.6.0",
+ "webpack-sources": "^1.4.1"
+ },
+ "dependencies": {
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ }
+ }
+ },
+ "webpack-cli": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz",
+ "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==",
+ "requires": {
+ "chalk": "2.4.2",
+ "cross-spawn": "6.0.5",
+ "enhanced-resolve": "4.1.0",
+ "findup-sync": "3.0.0",
+ "global-modules": "2.0.0",
+ "import-local": "2.0.0",
+ "interpret": "1.2.0",
+ "loader-utils": "1.2.3",
+ "supports-color": "6.1.0",
+ "v8-compile-cache": "2.0.3",
+ "yargs": "13.2.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+ },
+ "enhanced-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "memory-fs": "^0.4.0",
+ "tapable": "^1.0.0"
+ }
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ }
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+ },
+ "yargs": {
+ "version": "13.2.4",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
+ "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "os-locale": "^3.1.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-dev-middleware": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz",
+ "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "^0.4.1",
+ "mime": "^2.4.4",
+ "mkdirp": "^0.5.1",
+ "range-parser": "^1.2.1",
+ "webpack-log": "^2.0.0"
+ },
+ "dependencies": {
+ "mime": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+ "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "dev": true
+ }
+ }
+ },
+ "webpack-dev-server": {
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz",
+ "integrity": "sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-html": "0.0.7",
+ "bonjour": "^3.5.0",
+ "chokidar": "^2.1.8",
+ "compression": "^1.7.4",
+ "connect-history-api-fallback": "^1.6.0",
+ "debug": "^4.1.1",
+ "del": "^4.1.1",
+ "express": "^4.17.1",
+ "html-entities": "^1.2.1",
+ "http-proxy-middleware": "0.19.1",
+ "import-local": "^2.0.0",
+ "internal-ip": "^4.3.0",
+ "ip": "^1.1.5",
+ "is-absolute-url": "^3.0.3",
+ "killable": "^1.0.1",
+ "loglevel": "^1.6.6",
+ "opn": "^5.5.0",
+ "p-retry": "^3.0.1",
+ "portfinder": "^1.0.25",
+ "schema-utils": "^1.0.0",
+ "selfsigned": "^1.10.7",
+ "semver": "^6.3.0",
+ "serve-index": "^1.9.1",
+ "sockjs": "0.3.19",
+ "sockjs-client": "1.4.0",
+ "spdy": "^4.0.1",
+ "strip-ansi": "^3.0.1",
+ "supports-color": "^6.1.0",
+ "url": "^0.11.0",
+ "webpack-dev-middleware": "^3.7.2",
+ "webpack-log": "^2.0.0",
+ "ws": "^6.2.1",
+ "yargs": "12.0.5"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "invert-kv": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "lcid": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+ "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+ "dev": true,
+ "requires": {
+ "execa": "^1.0.0",
+ "lcid": "^2.0.0",
+ "mem": "^4.0.0"
+ }
+ },
+ "schema-utils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.1.0",
+ "ajv-errors": "^1.0.0",
+ "ajv-keywords": "^3.1.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "12.0.5",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
+ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^3.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1 || ^4.0.0",
+ "yargs-parser": "^11.1.1"
+ }
+ },
+ "yargs-parser": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
+ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "webpack-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^3.0.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "webpack-sources": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+ "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "requires": {
+ "source-list-map": "^2.0.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+ "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.4.0 <0.4.11",
+ "safe-buffer": ">=5.1.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8="
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+ "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
+ "yargs": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "requires": {
+ "camelcase": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo="
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ef0de17
--- /dev/null
+++ b/package.json
@@ -0,0 +1,41 @@
+{
+ "dependencies": {
+ "@gentoo/tyrian": "git+https://anongit.gentoo.org/git/sites/tyrian-theme.git",
+ "autoprefixer": "^9.7.4",
+ "bootstrap": "4.3.1",
+ "coffeescript": "^2.5.0",
+ "core-js": "^3.6.4",
+ "css-loader": "^3.4.2",
+ "d3": "^3.5.6",
+ "datatables.net": "^1.10.20",
+ "datatables.net-bs4": "^1.10.20",
+ "datatables.net-buttons": "^1.6.1",
+ "datatables.net-buttons-bs4": "^1.6.1",
+ "datatables.net-dt": "^1.10.20",
+ "datatables.net-responsive": "^2.2.3",
+ "exports-loader": "^0.7.0",
+ "expose-loader": "^0.7.5",
+ "file-loader": "^5.1.0",
+ "imports-loader": "^0.8.0",
+ "jquery": "^3.4.1",
+ "jquery-ujs": "^1.2.2",
+ "node-sass": "^4.13.1",
+ "popper.js": "^1.16.0",
+ "postcss-flexbugs-fixes": "^4.2.0",
+ "postcss-import": "^12.0.1",
+ "postcss-loader": "^3.0.0",
+ "precss": "^4.0.0",
+ "regenerator-runtime": "^0.13.5",
+ "resolve-url-loader": "^3.1.1",
+ "sass-loader": "^8.0.2",
+ "style-loader": "^1.1.3",
+ "svg-inline-loader": "^0.8.2",
+ "taucharts": "^2.8.0",
+ "turbolinks": "^5.2.0",
+ "webpack": "^4.42.0",
+ "webpack-cli": "^3.3.11"
+ },
+ "devDependencies": {
+ "webpack-dev-server": "^3.10.1"
+ }
+}
diff --git a/pkg/app/handler/about/index.go b/pkg/app/handler/about/index.go
new file mode 100644
index 0000000..edeb45b
--- /dev/null
+++ b/pkg/app/handler/about/index.go
@@ -0,0 +1,28 @@
+// Used to show the about pages of the application
+
+package about
+
+import (
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "net/http"
+)
+
+// Show renders a template to show the main about page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+ renderAboutTemplate(w, user)
+}
+
+// ShowSearch renders a template to show the about
+// page about the search functionality
+func ShowSearch(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+ renderAboutSearchTemplate(w, user)
+}
+
+// ShowCLI renders a template to show the about
+// page about the command line tool
+func ShowCLI(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+ renderAboutCLITemplate(w, user)
+}
diff --git a/pkg/app/handler/about/utils.go b/pkg/app/handler/about/utils.go
new file mode 100644
index 0000000..77f1383
--- /dev/null
+++ b/pkg/app/handler/about/utils.go
@@ -0,0 +1,58 @@
+// miscellaneous utility functions used for the about pages of the application
+
+package about
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderAboutTemplate renders all templates used for the main about page
+func renderAboutTemplate(w http.ResponseWriter, user *users.User) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/about/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "about.tmpl", createPageData("about", user))
+}
+
+// renderAboutSearchTemplate renders all templates used for
+// the about page about the search functionality
+func renderAboutSearchTemplate(w http.ResponseWriter, user *users.User) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/about/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "aboutSearch.tmpl", createPageData("about", user))
+}
+
+// renderAboutCLITemplate renders all templates used for
+// the about page about the command line tool
+func renderAboutCLITemplate(w http.ResponseWriter, user *users.User) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/about/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "aboutCLI.tmpl", createPageData("about", user))
+}
+
+// createPageData creates the data used in the templates of the about pages
+func createPageData(page string, user *users.User) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ }
+}
diff --git a/pkg/app/handler/account/password.go b/pkg/app/handler/account/password.go
new file mode 100644
index 0000000..5cdb9e5
--- /dev/null
+++ b/pkg/app/handler/account/password.go
@@ -0,0 +1,109 @@
+// Used to show the change password page
+
+package account
+
+import (
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// ChangePassword changes the password of a user in case of a valid POST request.
+// In case of a GET request the dialog for the password change is displayed
+func ChangePassword(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if r.Method == "POST" {
+
+ r.ParseForm()
+
+ oldPassword := getStringParam("oldPassword", r)
+ newPassword := getStringParam("newPassword", r)
+ confirmedNewPassword := getStringParam("confirmedNewPassword", r)
+
+ if newPassword != confirmedNewPassword {
+ renderPasswordChangeTemplate(w, r, user, false, "The passwords you have entered do not match")
+ return
+ }
+
+ if !user.CheckPassword(oldPassword) {
+ renderPasswordChangeTemplate(w, r, user, false, "The old password you have entered is not correct")
+ return
+ }
+
+ err := user.UpdatePassword(newPassword)
+ if err != nil {
+ renderPasswordChangeTemplate(w, r, user, false, "Internal error during hash calculation.")
+ return
+ }
+
+ wasForcedToChange := user.ForcePasswordRotation
+ user.ForcePasswordRotation = false
+
+ _, err = connection.DB.Model(user).Column("password").WherePK().Update()
+ _, err = connection.DB.Model(user).Column("force_password_rotation").WherePK().Update()
+
+ if err != nil {
+ logger.Info.Println("error during password update")
+ logger.Info.Println(err)
+ renderPasswordChangeTemplate(w, r, user, false, "Internal error during password update.")
+ return
+ }
+
+ if wasForcedToChange {
+ http.Redirect(w, r, "/", 301)
+ return
+ }
+
+ updatedUser := utils.GetAuthenticatedUser(r)
+
+ renderPasswordChangeTemplate(w, r, updatedUser, true, "Your password has been changed successfully.")
+ return
+ }
+
+ renderPasswordChangeTemplate(w, r, user, false, "")
+}
+
+// renderPasswordChangeTemplate renders all templates used for the login page
+func renderPasswordChangeTemplate(w http.ResponseWriter, r *http.Request, user *users.User, success bool, message string) {
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/account/password/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "password.tmpl", createPasswordChangeData("account", user, success, message))
+}
+
+// createPasswordChangeData creates the data used in the template of the password change page
+func createPasswordChangeData(page string, user *users.User, success bool, message string) interface{} {
+
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Success bool
+ Message string
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ Success: success,
+ Message: message,
+ }
+}
+
+// returns the value of a parameter with the given key of a POST request
+func getStringParam(key string, r *http.Request) string {
+ if len(r.Form[key]) > 0 {
+ return r.Form[key][0]
+ }
+
+ return ""
+}
diff --git a/pkg/app/handler/account/twofactor.go b/pkg/app/handler/account/twofactor.go
new file mode 100644
index 0000000..4d87426
--- /dev/null
+++ b/pkg/app/handler/account/twofactor.go
@@ -0,0 +1,200 @@
+package account
+
+import (
+ "glsamaker/pkg/app/handler/authentication/totp"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "bytes"
+ "github.com/duo-labs/webauthn/webauthn"
+ "html/template"
+ "net/http"
+)
+
+// landing page
+
+func TwoFactorAuth(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+ render2FATemplate(w, r, user)
+}
+
+// webauthn
+
+func ActivateWebAuthn(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+
+ if user.WebauthnCredentials != nil && len(user.WebauthnCredentials) >= 0 {
+ updatedUser := &users.User{
+ Id: user.Id,
+ IsUsingTOTP: false,
+ IsUsingWebAuthn: true,
+ Show2FANotice: false,
+ }
+
+ _, err := connection.DB.Model(updatedUser).Column("is_using_totp").WherePK().Update()
+ _, err = connection.DB.Model(updatedUser).Column("is_using_web_authn").WherePK().Update()
+ _, err = connection.DB.Model(updatedUser).Column("show2fa_notice").WherePK().Update()
+
+ if err != nil {
+ logger.Error.Println("Error activating webauthn")
+ logger.Error.Println(err)
+ }
+
+ }
+
+ http.Redirect(w, r, "/account/2fa", 301)
+}
+
+func DisableWebAuthn(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ updatedUser := &users.User{
+ Id: user.Id,
+ IsUsingWebAuthn: false,
+ }
+
+ _, err := connection.DB.Model(updatedUser).Column("is_using_web_authn").WherePK().Update()
+
+ if err != nil {
+ logger.Error.Println("Error disabling webauthn")
+ logger.Error.Println(err)
+ }
+
+ http.Redirect(w, r, "/account/2fa", 301)
+}
+
+// totp
+
+func ActivateTOTP(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+
+ updatedUser := &users.User{
+ Id: user.Id,
+ IsUsingTOTP: true,
+ IsUsingWebAuthn: false,
+ Show2FANotice: false,
+ }
+
+ _, err := connection.DB.Model(updatedUser).Column("is_using_totp").WherePK().Update()
+ _, err = connection.DB.Model(updatedUser).Column("is_using_web_authn").WherePK().Update()
+ _, err = connection.DB.Model(updatedUser).Column("show2fa_notice").WherePK().Update()
+
+ if err != nil {
+ logger.Error.Println("Error activating totp")
+ logger.Error.Println(err)
+ }
+
+ http.Redirect(w, r, "/account/2fa", 301)
+}
+
+func DisableTOTP(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+
+ updatedUser := &users.User{
+ Id: user.Id,
+ IsUsingTOTP: false,
+ }
+
+ _, err := connection.DB.Model(updatedUser).Column("is_using_totp").WherePK().Update()
+
+ if err != nil {
+ logger.Error.Println("Error updating 2fa")
+ logger.Error.Println(err)
+ }
+
+ http.Redirect(w, r, "/account/2fa", 301)
+}
+
+func VerifyTOTP(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+ token := getToken(r)
+
+ validToken := "false"
+
+ if totp.IsValidTOTPToken(user, token) {
+ validToken = "true"
+ }
+
+ w.Write([]byte(validToken))
+}
+
+func Disable2FANotice(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ updatedUser := &users.User{
+ Id: user.Id,
+ Show2FANotice: false,
+ }
+
+ _, err := connection.DB.Model(updatedUser).Column("show2fa_notice").WherePK().Update()
+
+ if err != nil {
+ logger.Error.Println("Error disabling 2fa notice")
+ logger.Error.Println(err)
+ }
+
+ w.Write([]byte("ok"))
+}
+
+// utility functions
+
+func getToken(r *http.Request) string {
+ err := r.ParseForm()
+ if err != nil {
+ return ""
+ }
+ return r.Form.Get("token")
+}
+
+// renderIndexTemplate renders all templates used for the login page
+func render2FATemplate(w http.ResponseWriter, r *http.Request, user *users.User) {
+
+ funcMap := template.FuncMap{
+ "WebAuthnID": WebAuthnCredentialID,
+ "CredentialName": GetCredentialName,
+ }
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ Funcs(funcMap).
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/account/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "2fa.tmpl", createPageData("account", user))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ QRcode string
+ User *users.User
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ QRcode: user.TOTPQRCode,
+ User: user,
+ }
+}
+
+// WebAuthnCredentials returns credentials owned by the user
+func WebAuthnCredentialID(cred webauthn.Credential) []byte {
+ return cred.ID[:5]
+}
+
+func GetCredentialName(user *users.User, cred webauthn.Credential) string {
+
+ for _, WebauthnCredentialName := range user.WebauthnCredentialNames {
+ if bytes.Compare(WebauthnCredentialName.Id, cred.ID) == 0 {
+ return WebauthnCredentialName.Name
+ }
+ }
+
+ return "Unnamed Authenticator"
+}
diff --git a/pkg/app/handler/admin/edit.go b/pkg/app/handler/admin/edit.go
new file mode 100644
index 0000000..8cf9291
--- /dev/null
+++ b/pkg/app/handler/admin/edit.go
@@ -0,0 +1,293 @@
+package admin
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/totp"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models/users"
+ "math/rand"
+ "net/http"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// Show renders a template to show the landing page of the application
+func EditUsers(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Admin.ManageUsers {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var allUsers []*users.User
+ connection.DB.Model(&allUsers).Order("email ASC").Select()
+
+ if r.Method == "POST" {
+
+ r.ParseForm()
+
+ if !(getStringParam("edit", r) == "1") {
+ http.Redirect(w, r, "/admin", 301)
+ }
+
+ userIds := getArrayParam("userId", r)
+ userNicks := getArrayParam("userNick", r)
+ userNames := getArrayParam("userName", r)
+ userEmails := getArrayParam("userEmail", r)
+ userPasswordRotations := getArrayParam("userPasswordRotation", r)
+ userForce2FA := getArrayParam("userForce2FA", r)
+ userActive := getArrayParam("userActive", r)
+
+ newUserIndex := -1
+
+ for index, userId := range userIds {
+
+ parsedUserId, err := strconv.ParseInt(userId, 10, 64)
+
+ if err != nil {
+ continue
+ }
+
+ count, _ := connection.DB.Model((*users.User)(nil)).Where("id = ?", parsedUserId).Count()
+
+ // user is present
+ if count == 1 {
+
+ updatedUser := users.User{
+ Id: parsedUserId,
+ Email: userEmails[index],
+ Nick: userNicks[index],
+ Name: userNames[index],
+ //Badge: users.Badge{},
+ ForcePasswordRotation: containsStr(userPasswordRotations, userId),
+ Force2FA: containsStr(userForce2FA, userId),
+ Disabled: !containsStr(userActive, userId),
+ }
+
+ connection.DB.Model(&updatedUser).
+ Column("email").
+ Column("nick").
+ Column("name").
+ Column("force_password_rotation").
+ Column("force2fa").
+ Column("disabled").
+ WherePK().Update()
+
+ } else {
+
+ newUserIndex = index
+
+ }
+
+ }
+
+ if newUserIndex != -1 {
+
+ newPassword := generateNewPassword(14)
+
+ createNewUser(
+ userNicks[newUserIndex],
+ userNames[newUserIndex],
+ userEmails[newUserIndex],
+ newPassword,
+ containsStr(userForce2FA, "-1"),
+ !containsStr(userActive, "-1"))
+
+ var updatedUsers []*users.User
+ connection.DB.Model(&updatedUsers).Order("email ASC").Select()
+
+ renderAdminNewUserTemplate(w, user, updatedUsers, userNicks[newUserIndex], newPassword)
+ return
+
+ } else {
+
+ http.Redirect(w, r, "/admin", 301)
+ return
+
+ }
+
+ }
+
+ renderEditUsersTemplate(w, user, allUsers)
+}
+
+// Show renders a template to show the landing page of the application
+func EditPermissions(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Admin.ManageUsers {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var allUsers []*users.User
+ connection.DB.Model(&allUsers).Order("email ASC").Select()
+
+ if r.Method == "POST" {
+
+ r.ParseForm()
+
+ if !(getStringParam("edit", r) == "1") {
+ http.Redirect(w, r, "/admin", 301)
+ }
+
+ glsaView := getArrayParam("glsa-view", r)
+ glsaUpdateBugs := getArrayParam("glsa-updateBugs", r)
+ glsaComment := getArrayParam("glsa-comment", r)
+ glsaCreate := getArrayParam("glsa-create", r)
+ glsaEdit := getArrayParam("glsa-edit", r)
+ glsaDelete := getArrayParam("glsa-delete", r)
+ glsaApprove := getArrayParam("glsa-approve", r)
+ glsaApproveOwnGlsa := getArrayParam("glsa-approveOwnGlsa", r)
+ glsaDecline := getArrayParam("glsa-decline", r)
+ glsaRelease := getArrayParam("glsa-release", r)
+ glsaConfidential := getArrayParam("glsa-confidential", r)
+
+ cveView := getArrayParam("cve-view", r)
+ cveUpdateCVEs := getArrayParam("cve-updateCVEs", r)
+ cveComment := getArrayParam("cve-comment", r)
+ cveAddPackage := getArrayParam("cve-addPackage", r)
+ cveChangeState := getArrayParam("cve-changeState", r)
+ cveAssignBug := getArrayParam("cve-assignBug", r)
+
+ adminView := getArrayParam("admin-view", r)
+ adminCreateTemplates := getArrayParam("admin-createTemplates", r)
+ adminGlobalSettings := getArrayParam("admin-globalSettings", r)
+ adminManageUsers := getArrayParam("admin-manageUsers", r)
+
+ for _, changedUser := range allUsers {
+
+ updatedUserPermissions := users.Permissions{
+ Glsa: users.GlsaPermissions{
+ View: containsInt(glsaView, changedUser.Id),
+ UpdateBugs: containsInt(glsaUpdateBugs, changedUser.Id),
+ Comment: containsInt(glsaComment, changedUser.Id),
+ Create: containsInt(glsaCreate, changedUser.Id),
+ Edit: containsInt(glsaEdit, changedUser.Id),
+ Approve: containsInt(glsaApprove, changedUser.Id),
+ ApproveOwnGlsa: containsInt(glsaApproveOwnGlsa, changedUser.Id),
+ Decline: containsInt(glsaDecline, changedUser.Id),
+ Delete: containsInt(glsaDelete, changedUser.Id),
+ Release: containsInt(glsaRelease, changedUser.Id),
+ Confidential: containsInt(glsaConfidential, changedUser.Id),
+ },
+ CVETool: users.CVEToolPermissions{
+ View: containsInt(cveView, changedUser.Id),
+ UpdateCVEs: containsInt(cveUpdateCVEs, changedUser.Id),
+ Comment: containsInt(cveComment, changedUser.Id),
+ AddPackage: containsInt(cveAddPackage, changedUser.Id),
+ ChangeState: containsInt(cveChangeState, changedUser.Id),
+ AssignBug: containsInt(cveAssignBug, changedUser.Id),
+ },
+ Admin: users.AdminPermissions{
+ View: containsInt(adminView, changedUser.Id),
+ CreateTemplates: containsInt(adminCreateTemplates, changedUser.Id),
+ ManageUsers: containsInt(adminManageUsers, changedUser.Id),
+ GlobalSettings: containsInt(adminGlobalSettings, changedUser.Id),
+ },
+ }
+
+ updatedUser := users.User{
+ Id: changedUser.Id,
+ Permissions: updatedUserPermissions,
+ }
+
+ connection.DB.Model(&updatedUser).Column("permissions").WherePK().Update()
+ }
+
+ http.Redirect(w, r, "/admin", 301)
+ return
+ }
+
+ renderEditPermissionsTemplate(w, user, allUsers)
+}
+
+func containsInt(arr []string, element int64) bool {
+ return containsStr(arr, strconv.FormatInt(element, 10))
+}
+
+func containsStr(arr []string, element string) bool {
+ for _, a := range arr {
+ if a == element {
+ return true
+ }
+ }
+ return false
+}
+
+func getStringParam(key string, r *http.Request) string {
+ if len(r.Form[key]) > 0 {
+ return r.Form[key][0]
+ }
+
+ return ""
+}
+
+func getArrayParam(key string, r *http.Request) []string {
+ return r.Form[key]
+}
+
+func createNewUser(nick, name, email, password string, force2FA, disabled bool) {
+
+ token, qrcode := totp.Generate("user@gentoo.org")
+
+ badge := users.Badge{
+ Name: "user",
+ Description: "Normal user",
+ Color: "#54487A",
+ }
+
+ passwordParameters := users.Argon2Parameters{
+ Type: "argon2id",
+ Time: 1,
+ Memory: 64 * 1024,
+ Threads: 4,
+ KeyLen: 32,
+ }
+ passwordParameters.GenerateSalt(32)
+ passwordParameters.GeneratePassword(password)
+
+ defaultUser := &users.User{
+ Email: email,
+ Nick: nick,
+ Name: name,
+ Password: passwordParameters,
+ Role: "user",
+ ForcePasswordChange: false,
+ TOTPSecret: token,
+ TOTPQRCode: qrcode,
+ IsUsingTOTP: false,
+ WebauthnCredentials: nil,
+ IsUsingWebAuthn: false,
+ Show2FANotice: true,
+ Badge: badge,
+ Disabled: disabled,
+ ForcePasswordRotation: true,
+ Force2FA: force2FA,
+ }
+
+ _, err := connection.DB.Model(defaultUser).OnConflict("(id) DO Nothing").Insert()
+ if err != nil {
+ logger.Error.Println("Err during creating default admin user")
+ logger.Error.Println(err)
+ }
+}
+
+func generateNewPassword(length int) string {
+ rand.Seed(time.Now().UnixNano())
+ chars := []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ" +
+ "abcdefghijklmnopqrstuvwxyz" +
+ "0123456789" +
+ "!&!$%&/()=?")
+ var b strings.Builder
+ for i := 0; i < length; i++ {
+ b.WriteRune(chars[rand.Intn(len(chars))])
+ }
+ return b.String()
+}
diff --git a/pkg/app/handler/admin/index.go b/pkg/app/handler/admin/index.go
new file mode 100644
index 0000000..5f1f579
--- /dev/null
+++ b/pkg/app/handler/admin/index.go
@@ -0,0 +1,27 @@
+// Used to show the landing page of the application
+
+package admin
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models/users"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Admin.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var users []*users.User
+ connection.DB.Model(&users).Order("email ASC").Select()
+
+ renderAdminTemplate(w, user, users)
+}
diff --git a/pkg/app/handler/admin/passwordreset.go b/pkg/app/handler/admin/passwordreset.go
new file mode 100644
index 0000000..e4d36b9
--- /dev/null
+++ b/pkg/app/handler/admin/passwordreset.go
@@ -0,0 +1,73 @@
+package admin
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models/users"
+ "net/http"
+ "strconv"
+)
+
+// Show renders a template to show the landing page of the application
+func ResetPassword(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Admin.ManageUsers {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ userPasswordResetId := r.URL.Path[len("/admin/edit/password/reset/"):]
+
+ parsedUserPasswordResetId, err := strconv.ParseInt(userPasswordResetId, 10, 64)
+
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ selectedUser := &users.User{Id: parsedUserPasswordResetId}
+ err = connection.DB.Model(selectedUser).WherePK().Select()
+
+ if err != nil || selectedUser == nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ if r.Method == "POST" {
+
+ newPassword := generateNewPassword(14)
+ passwordParameters := users.Argon2Parameters{
+ Type: "argon2id",
+ Time: 1,
+ Memory: 64 * 1024,
+ Threads: 4,
+ KeyLen: 32,
+ }
+ passwordParameters.GenerateSalt(32)
+ passwordParameters.GeneratePassword(newPassword)
+
+ updatedUser := &users.User{
+ Id: parsedUserPasswordResetId,
+ Password: passwordParameters,
+ ForcePasswordRotation: true,
+ }
+
+ _, err = connection.DB.Model(updatedUser).Column("password").WherePK().Update()
+ _, err = connection.DB.Model(updatedUser).Column("force_password_rotation").WherePK().Update()
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ var updatedUsers []*users.User
+ connection.DB.Model(&updatedUsers).Order("email ASC").Select()
+
+ renderAdminNewUserTemplate(w, user, updatedUsers, selectedUser.Nick, newPassword)
+ return
+ }
+
+ renderPasswordResetTemplate(w, user, selectedUser.Id, selectedUser.Nick)
+}
diff --git a/pkg/app/handler/admin/utils.go b/pkg/app/handler/admin/utils.go
new file mode 100644
index 0000000..85a25ec
--- /dev/null
+++ b/pkg/app/handler/admin/utils.go
@@ -0,0 +1,112 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package admin
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderAdminTemplate(w http.ResponseWriter, user *users.User, allUsers []*users.User) {
+ templates := template.Must(
+ template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/admin/components/*.tmpl")).
+ ParseGlob("web/templates/admin/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "view.tmpl", createPageData("admin", user, allUsers, "", ""))
+}
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderAdminNewUserTemplate(w http.ResponseWriter, user *users.User, allUsers []*users.User, newUserNick, newUserPass string) {
+ templates := template.Must(
+ template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/admin/components/*.tmpl")).
+ ParseGlob("web/templates/admin/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "view.tmpl", createPageData("admin", user, allUsers, newUserNick, newUserPass))
+}
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderEditUsersTemplate(w http.ResponseWriter, user *users.User, allUsers []*users.User) {
+ templates := template.Must(
+ template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/admin/components/*.tmpl")).
+ ParseGlob("web/templates/admin/edit/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "users.tmpl", createPageData("admin", user, allUsers, "", ""))
+}
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderPasswordResetTemplate(w http.ResponseWriter, user *users.User, userId int64, userNick string) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/admin/passwordreset.tmpl"))
+
+ templates.ExecuteTemplate(w, "passwordreset.tmpl", createPasswordResetData("admin", user, userId, userNick))
+}
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderEditPermissionsTemplate(w http.ResponseWriter, user *users.User, allUsers []*users.User) {
+ templates := template.Must(
+ template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/admin/components/*.tmpl")).
+ ParseGlob("web/templates/admin/edit/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "permissions.tmpl", createPageData("admin", user, allUsers, "", ""))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, allUsers []*users.User, newUserNick, newUserPassword string) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Users []*users.User
+ NewUserNick string
+ NewUserPassword string
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ Users: allUsers,
+ NewUserNick: newUserNick,
+ NewUserPassword: newUserPassword,
+ }
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPasswordResetData(page string, user *users.User, userId int64, userNick string) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Users []*users.User
+ NewUserNick string
+ NewUserPassword string
+ UserId int64
+ UserNick string
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ UserId: userId,
+ UserNick: userNick,
+ }
+}
diff --git a/pkg/app/handler/all/index.go b/pkg/app/handler/all/index.go
new file mode 100644
index 0000000..ef6104a
--- /dev/null
+++ b/pkg/app/handler/all/index.go
@@ -0,0 +1,40 @@
+// Used to show the landing page of the application
+
+package all
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var all []*models.Glsa
+ err := user.CanAccess(connection.DB.Model(&all).
+ Relation("Bugs").
+ Relation("Creator").
+ Relation("Comments")).
+ Select()
+
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ for _, glsa := range all {
+ glsa.ComputeStatus(user)
+ }
+
+ renderAllTemplate(w, user, all)
+}
diff --git a/pkg/app/handler/all/utils.go b/pkg/app/handler/all/utils.go
new file mode 100644
index 0000000..a0cfc65
--- /dev/null
+++ b/pkg/app/handler/all/utils.go
@@ -0,0 +1,36 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package all
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderAllTemplate(w http.ResponseWriter, user *users.User, all []*models.Glsa) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/all/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "all.tmpl", createPageData("all", user, all))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, all []*models.Glsa) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ All []*models.Glsa
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ All: all,
+ }
+}
diff --git a/pkg/app/handler/archive/index.go b/pkg/app/handler/archive/index.go
new file mode 100644
index 0000000..61d77dd
--- /dev/null
+++ b/pkg/app/handler/archive/index.go
@@ -0,0 +1,44 @@
+// Used to show the landing page of the application
+
+package archive
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var glsas []*models.Glsa
+ err := user.CanAccess(connection.DB.Model(&glsas).
+ Where("type = ?", "glsa").
+ Relation("Bugs").
+ Relation("Creator").
+ Relation("Comments")).
+ Select()
+
+ if err != nil {
+ logger.Info.Println("Error during glsa selection")
+ logger.Info.Println(err)
+ http.NotFound(w, r)
+ return
+ }
+
+ for _, glsa := range glsas {
+ glsa.ComputeStatus(user)
+ }
+
+ renderArchiveTemplate(w, user, glsas)
+}
diff --git a/pkg/app/handler/archive/utils.go b/pkg/app/handler/archive/utils.go
new file mode 100644
index 0000000..6653691
--- /dev/null
+++ b/pkg/app/handler/archive/utils.go
@@ -0,0 +1,36 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package archive
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderArchiveTemplate(w http.ResponseWriter, user *users.User, glsas []*models.Glsa) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/archive/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "archive.tmpl", createPageData("archive", user, glsas))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, glsas []*models.Glsa) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ GLSAs []*models.Glsa
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ GLSAs: glsas,
+ }
+}
diff --git a/pkg/app/handler/authentication/accessDenied.go b/pkg/app/handler/authentication/accessDenied.go
new file mode 100644
index 0000000..de06ab2
--- /dev/null
+++ b/pkg/app/handler/authentication/accessDenied.go
@@ -0,0 +1,10 @@
+package authentication
+
+import (
+ "glsamaker/pkg/app/handler/authentication/templates"
+ "net/http"
+)
+
+func AccessDenied(w http.ResponseWriter, r *http.Request) {
+ templates.RenderAccessDeniedTemplate(w, r)
+}
diff --git a/pkg/app/handler/authentication/auth_session/authsession.go b/pkg/app/handler/authentication/auth_session/authsession.go
new file mode 100644
index 0000000..c86ca99
--- /dev/null
+++ b/pkg/app/handler/authentication/auth_session/authsession.go
@@ -0,0 +1,177 @@
+package auth_session
+
+import (
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "github.com/google/uuid"
+ "net/http"
+ "strings"
+ "time"
+)
+
+func Create(w http.ResponseWriter, r *http.Request, user *users.User, bindSessionToIP bool, secondFactorMissing bool) {
+ sessionID := createSessionID()
+ sessionIP := "*"
+ expires := time.Now().AddDate(0, 1, 0)
+
+ if bindSessionToIP {
+ sessionIP = getIP(r)
+ }
+
+ if secondFactorMissing {
+ expires = time.Now().Add(10 * time.Minute)
+ }
+
+ session := &models.Session{
+ Id: sessionID,
+ UserId: user.Id,
+ IP: sessionIP,
+ SecondFactorMissing: secondFactorMissing,
+ Expires: expires,
+ }
+
+ _, err := connection.DB.Model(session).OnConflict("(id) DO UPDATE").Insert()
+ if err != nil {
+ logger.Error.Println("Err during creating session")
+ logger.Error.Println(err)
+ }
+
+ createSessionCookie(w, sessionID)
+}
+
+func createSessionID() string {
+ id, _ := uuid.NewUUID()
+ return id.String()
+}
+
+func createSessionCookie(w http.ResponseWriter, sessionID string) {
+
+ expires := time.Now().AddDate(0, 1, 0)
+
+ ck := http.Cookie{
+ Name: "session",
+ Domain: "localhost",
+ Path: "/",
+ Expires: expires,
+ }
+
+ ck.Value = sessionID
+
+ http.SetCookie(w, &ck)
+
+}
+
+func GetUserId(sessionId, userIP string) int64 {
+ session := &models.Session{Id: sessionId}
+ err := connection.DB.Model(session).Relation("User").WherePK().Select()
+
+ if err != nil || session.User.Disabled {
+ return -1
+ }
+
+ if session != nil &&
+ session.Expires.After(time.Now()) &&
+ isValidIP(session.IP, userIP) {
+ return session.UserId
+ } else {
+ return -1
+ }
+}
+
+func Only2FAMissing(sessionId, userIP string) bool {
+ session := &models.Session{Id: sessionId}
+ err := connection.DB.Model(session).Relation("User").WherePK().Select()
+
+ if err != nil {
+ return false
+ }
+
+ invalidateExpiredSession(session)
+
+ return session != nil &&
+ session.Expires.After(time.Now()) &&
+ !session.User.Disabled &&
+ session.SecondFactorMissing &&
+ isValidIP(session.IP, userIP)
+}
+
+func IsLoggedIn(sessionId, userIP string) bool {
+
+ session := &models.Session{Id: sessionId}
+ err := connection.DB.Model(session).Relation("User").WherePK().Select()
+
+ if err != nil {
+ return false
+ }
+
+ invalidateExpiredSession(session)
+
+ return session != nil &&
+ !session.SecondFactorMissing &&
+ !session.User.Disabled &&
+ session.Expires.After(time.Now()) &&
+ isValidIP(session.IP, userIP)
+}
+
+func IsLoggedInAndNeedsNewPassword(sessionId, userIP string) bool {
+
+ session := &models.Session{Id: sessionId}
+ err := connection.DB.Model(session).Relation("User").WherePK().Select()
+
+ if err != nil {
+ return false
+ }
+
+ invalidateExpiredSession(session)
+
+ return session != nil &&
+ !session.SecondFactorMissing &&
+ !session.User.Disabled &&
+ session.User.ForcePasswordRotation &&
+ session.Expires.After(time.Now()) &&
+ isValidIP(session.IP, userIP)
+}
+
+func IsLoggedInAndNeeds2FA(sessionId, userIP string) bool {
+
+ session := &models.Session{Id: sessionId}
+ err := connection.DB.Model(session).Relation("User").WherePK().Select()
+
+ if err != nil {
+ return false
+ }
+
+ invalidateExpiredSession(session)
+
+ return session != nil &&
+ !session.SecondFactorMissing &&
+ !session.User.Disabled &&
+ session.User.Force2FA &&
+ !session.User.IsUsing2FA() &&
+ session.Expires.After(time.Now()) &&
+ isValidIP(session.IP, userIP)
+}
+
+func invalidateExpiredSession(session *models.Session) {
+ if session.Expires.Before(time.Now()) {
+ _, err := connection.DB.Model(session).WherePK().Delete()
+ if err != nil {
+ logger.Error.Println("Error deleting expired session.")
+ logger.Error.Println(err)
+ }
+ }
+}
+
+func isValidIP(sessionIP, userIP string) bool {
+ return sessionIP == "*" || userIP == sessionIP
+}
+
+func getIP(r *http.Request) string {
+ forwarded := r.Header.Get("X-FORWARDED-FOR")
+ if forwarded != "" {
+ return strings.Split(forwarded, ":")[0]
+ }
+ return strings.Split(r.RemoteAddr, ":")[0]
+}
diff --git a/pkg/app/handler/authentication/login.go b/pkg/app/handler/authentication/login.go
new file mode 100644
index 0000000..7cd5c87
--- /dev/null
+++ b/pkg/app/handler/authentication/login.go
@@ -0,0 +1,100 @@
+package authentication
+
+import (
+ "glsamaker/pkg/app/handler/authentication/auth_session"
+ "glsamaker/pkg/app/handler/authentication/templates"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models/users"
+ "golang.org/x/crypto/argon2"
+ "net/http"
+)
+
+func Login(w http.ResponseWriter, r *http.Request) {
+
+ // in case '/login' is request but the user is
+ // already authenticated we will redirect to '/'
+ if utils.IsAuthenticated(w, r) {
+ http.Redirect(w, r, "/", 301)
+ }
+
+ username, pass, cameFrom, bindLoginToIP, _ := getParams(r)
+
+ if IsValidPassword(username, pass) {
+ user, _ := getLoginUser(username)
+ auth_session.Create(w, r, user, bindLoginToIP, user.IsUsing2FA())
+ if user.IsUsing2FA() {
+ http.Redirect(w, r, "/login/2fa", 301)
+ } else {
+ http.Redirect(w, r, cameFrom, 301)
+ }
+ } else {
+ templates.RenderLoginTemplate(w, r)
+ }
+
+}
+
+func SecondFactorLogin(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+
+ if user == nil || !user.IsUsing2FA() {
+ // this should not occur
+ http.NotFound(w, r)
+ return
+ }
+
+ if user.IsUsingTOTP {
+ templates.RenderTOTPTemplate(w, r)
+ } else if user.IsUsingWebAuthn {
+ templates.RenderWebAuthnTemplate(w, r)
+ } else {
+ // this should not occur
+ http.NotFound(w, r)
+ }
+}
+
+// utility functions
+
+func getLoginUser(username string) (*users.User, bool) {
+ var potenialUsers []*users.User
+ err := connection.DB.Model(&potenialUsers).Where("nick = ?", username).Select()
+ isValidUser := err == nil
+
+ if len(potenialUsers) < 1 {
+ return &users.User{}, false
+ }
+
+ return potenialUsers[0], isValidUser
+}
+
+func getParams(r *http.Request) (string, string, string, bool, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", "", "", false, err
+ }
+ username := r.Form.Get("username")
+ password := r.Form.Get("password")
+ cameFrom := r.Form.Get("cameFrom")
+ restrictLogin := r.Form.Get("restrictlogin")
+ return username, password, cameFrom, restrictLogin == "on", err
+}
+
+func IsValidPassword(username string, password string) bool {
+ user, isValidUser := getLoginUser(username)
+ if !isValidUser {
+ return false
+ }
+
+ hashedPassword := argon2.IDKey(
+ []byte(password),
+ user.Password.Salt,
+ user.Password.Time,
+ user.Password.Memory,
+ user.Password.Threads,
+ user.Password.KeyLen)
+
+ if user != nil && !user.Disabled && string(user.Password.Hash) == string(hashedPassword) {
+ return true
+ }
+ return false
+}
diff --git a/pkg/app/handler/authentication/logout.go b/pkg/app/handler/authentication/logout.go
new file mode 100644
index 0000000..87d17f4
--- /dev/null
+++ b/pkg/app/handler/authentication/logout.go
@@ -0,0 +1,29 @@
+package authentication
+
+import (
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "net/http"
+)
+
+func Logout(w http.ResponseWriter, r *http.Request) {
+
+ sessionID, err := r.Cookie("session")
+
+ if err != nil || sessionID == nil {
+ // TODO Error
+ }
+
+ session := &models.Session{Id: sessionID.Value}
+ _, err = connection.DB.Model(session).WherePK().Delete()
+
+ if err != nil {
+ logger.Info.Println("Error deleting session")
+ logger.Error.Println("Error deleting session")
+ logger.Error.Println(err)
+ }
+
+ http.Redirect(w, r, "/", 301)
+
+}
diff --git a/pkg/app/handler/authentication/templates/admin.go b/pkg/app/handler/authentication/templates/admin.go
new file mode 100644
index 0000000..12d039e
--- /dev/null
+++ b/pkg/app/handler/authentication/templates/admin.go
@@ -0,0 +1,36 @@
+package templates
+
+import (
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the login page
+func RenderAccessDeniedTemplate(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/authentication/accessDenied.tmpl"))
+
+ templates.ExecuteTemplate(w, "accessDenied.tmpl", createAccessDeniedData(user))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createAccessDeniedData(user *users.User) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ }{
+ Page: "",
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ }
+}
diff --git a/pkg/app/handler/authentication/templates/login.go b/pkg/app/handler/authentication/templates/login.go
new file mode 100644
index 0000000..2e3b241
--- /dev/null
+++ b/pkg/app/handler/authentication/templates/login.go
@@ -0,0 +1,32 @@
+package templates
+
+import (
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the login page
+func RenderLoginTemplate(w http.ResponseWriter, r *http.Request) {
+
+ data := struct {
+ CameFrom string
+ }{
+ CameFrom: getPath(r),
+ }
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/authentication/login.tmpl"))
+
+ templates.ExecuteTemplate(w, "login.tmpl", data)
+}
+
+func getPath(r *http.Request) string {
+ if r.URL.RawQuery == "" {
+ return r.URL.Path
+ } else {
+ return r.URL.Path + "?" + r.URL.RawQuery
+ }
+}
diff --git a/pkg/app/handler/authentication/templates/totp.go b/pkg/app/handler/authentication/templates/totp.go
new file mode 100644
index 0000000..acb34e5
--- /dev/null
+++ b/pkg/app/handler/authentication/templates/totp.go
@@ -0,0 +1,23 @@
+package templates
+
+import (
+ "html/template"
+ "net/http"
+)
+
+func RenderTOTPTemplate(w http.ResponseWriter, r *http.Request) {
+
+ data := struct {
+ CameFrom string
+ }{
+ CameFrom: getPath(r),
+ }
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/authentication/totp.tmpl"))
+
+ templates.ExecuteTemplate(w, "totp.tmpl", data)
+}
diff --git a/pkg/app/handler/authentication/templates/webauthn.go b/pkg/app/handler/authentication/templates/webauthn.go
new file mode 100644
index 0000000..148f475
--- /dev/null
+++ b/pkg/app/handler/authentication/templates/webauthn.go
@@ -0,0 +1,23 @@
+package templates
+
+import (
+ "html/template"
+ "net/http"
+)
+
+func RenderWebAuthnTemplate(w http.ResponseWriter, r *http.Request) {
+
+ data := struct {
+ CameFrom string
+ }{
+ CameFrom: getPath(r),
+ }
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/authentication/webauthn.tmpl"))
+
+ templates.ExecuteTemplate(w, "webauthn.tmpl", data)
+}
diff --git a/pkg/app/handler/authentication/totp/totp.go b/pkg/app/handler/authentication/totp/totp.go
new file mode 100644
index 0000000..00e6b83
--- /dev/null
+++ b/pkg/app/handler/authentication/totp/totp.go
@@ -0,0 +1,60 @@
+package totp
+
+import (
+ "glsamaker/pkg/app/handler/authentication/auth_session"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/models/users"
+ "bytes"
+ "encoding/base64"
+ "github.com/pquerna/otp/totp"
+ "image/png"
+ "net/http"
+ "time"
+)
+
+func Login(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+ token, err := getParam(r)
+
+ if user == nil || err != nil || !IsValidTOTPToken(user, token) {
+ http.Redirect(w, r, "/login/2fa", 301)
+ } else {
+ auth_session.Create(w, r, user, true, false)
+ http.Redirect(w, r, "/", 301)
+ }
+
+}
+
+func IsValidTOTPToken(user *users.User, token string) bool {
+ return totp.Validate(token, user.TOTPSecret)
+}
+
+func GetToken(user *users.User) string {
+ token, _ := totp.GenerateCode(user.TOTPSecret, time.Now())
+ return token
+}
+
+func Generate(email string) (string, string) {
+
+ key, _ := totp.Generate(totp.GenerateOpts{
+ Issuer: "glsamakertest.gentoo.org",
+ AccountName: email,
+ })
+
+ var buf bytes.Buffer
+ img, _ := key.Image(250, 250)
+
+ png.Encode(&buf, img)
+
+ return key.Secret(), base64.StdEncoding.EncodeToString(buf.Bytes())
+}
+
+func getParam(r *http.Request) (string, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", err
+ }
+ token := r.Form.Get("token")
+ return token, err
+}
diff --git a/pkg/app/handler/authentication/utils/utils.go b/pkg/app/handler/authentication/utils/utils.go
new file mode 100644
index 0000000..d06a2d7
--- /dev/null
+++ b/pkg/app/handler/authentication/utils/utils.go
@@ -0,0 +1,81 @@
+package utils
+
+import (
+ "glsamaker/pkg/app/handler/authentication/auth_session"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models/users"
+ "net/http"
+ "strings"
+)
+
+// utility methods to check whether a user is authenticated
+
+func Only2FAMissing(w http.ResponseWriter, r *http.Request) bool {
+ sessionID, err := r.Cookie("session")
+ userIP := getIP(r)
+
+ return err == nil && sessionID != nil && auth_session.Only2FAMissing(sessionID.Value, userIP)
+}
+
+func IsAuthenticated(w http.ResponseWriter, r *http.Request) bool {
+ sessionID, err := r.Cookie("session")
+ userIP := getIP(r)
+
+ return err == nil && sessionID != nil && auth_session.IsLoggedIn(sessionID.Value, userIP)
+}
+
+func IsAuthenticatedAndNeedsNewPassword(w http.ResponseWriter, r *http.Request) bool {
+ sessionID, err := r.Cookie("session")
+ userIP := getIP(r)
+
+ return err == nil && sessionID != nil && auth_session.IsLoggedInAndNeedsNewPassword(sessionID.Value, userIP)
+}
+
+func IsAuthenticatedAndNeeds2FA(w http.ResponseWriter, r *http.Request) bool {
+ sessionID, err := r.Cookie("session")
+ userIP := getIP(r)
+
+ return err == nil && sessionID != nil && auth_session.IsLoggedInAndNeeds2FA(sessionID.Value, userIP)
+}
+
+func IsAuthenticatedAsAdmin(w http.ResponseWriter, r *http.Request) bool {
+ sessionID, err := r.Cookie("session")
+ userIP := getIP(r)
+
+ if err != nil || sessionID == nil || !auth_session.IsLoggedIn(sessionID.Value, userIP) {
+ return false
+ }
+
+ user := GetAuthenticatedUser(r)
+
+ return user != nil && user.Permissions.Admin.View
+
+}
+
+func GetAuthenticatedUser(r *http.Request) *users.User {
+ sessionID, err := r.Cookie("session")
+ userIP := getIP(r)
+
+ if err != nil || sessionID == nil || !(auth_session.IsLoggedIn(sessionID.Value, userIP) || auth_session.Only2FAMissing(sessionID.Value, userIP)) {
+ return nil
+ }
+
+ userId := auth_session.GetUserId(sessionID.Value, userIP)
+
+ user := &users.User{Id: userId}
+ err = connection.DB.Select(user)
+
+ if err != nil {
+ return nil
+ }
+
+ return user
+}
+
+func getIP(r *http.Request) string {
+ forwarded := r.Header.Get("X-FORWARDED-FOR")
+ if forwarded != "" {
+ return strings.Split(forwarded, ":")[0]
+ }
+ return strings.Split(r.RemoteAddr, ":")[0]
+}
diff --git a/pkg/app/handler/authentication/webauthn/login.go b/pkg/app/handler/authentication/webauthn/login.go
new file mode 100644
index 0000000..7bf9c1d
--- /dev/null
+++ b/pkg/app/handler/authentication/webauthn/login.go
@@ -0,0 +1,118 @@
+package webauthn
+
+import (
+ "glsamaker/pkg/app/handler/authentication/auth_session"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "encoding/json"
+ "fmt"
+ "github.com/duo-labs/webauthn.io/session"
+ webauthn_lib "github.com/duo-labs/webauthn/webauthn"
+ "log"
+ "net/http"
+)
+
+var (
+ WebAuthn *webauthn_lib.WebAuthn
+ SessionStore *session.Store
+)
+
+
+func BeginLogin(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ CreateWebAuthn()
+ CreateSessionStore()
+
+ // user doesn't exist
+ if user == nil {
+ log.Println("Error fetching the user.")
+ JsonResponse(w, "Error fetching the user.", http.StatusBadRequest)
+ return
+ }
+
+ // generate PublicKeyCredentialRequestOptions, session data
+ options, sessionData, err := WebAuthn.BeginLogin(user)
+ if err != nil {
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // store session data as marshaled JSON
+ err = SessionStore.SaveWebauthnSession("authentication", sessionData, r, w)
+ if err != nil {
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ JsonResponse(w, options, http.StatusOK)
+}
+
+func FinishLogin(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ // user doesn't exist
+ if user == nil {
+ log.Println("Error fetching the user.")
+ JsonResponse(w, "Error fetching the user.", http.StatusBadRequest)
+ return
+ }
+
+ // load the session data
+ sessionData, err := SessionStore.GetWebauthnSession("authentication", r)
+ if err != nil {
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ // in an actual implementation, we should perform additional checks on
+ // the returned 'credential', i.e. check 'credential.Authenticator.CloneWarning'
+ // and then increment the credentials counter
+ _, err = WebAuthn.FinishLogin(user, sessionData, r)
+ if err != nil {
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ // handle successful login
+ // TODO handle bindLoginToIP correctly
+ auth_session.Create(w, r, user, true, false)
+ JsonResponse(w, "Login Success", http.StatusOK)
+}
+
+// from: https://github.com/duo-labs/webauthn.io/blob/3f03b482d21476f6b9fb82b2bf1458ff61a61d41/server/response.go#L15
+func JsonResponse(w http.ResponseWriter, d interface{}, c int) {
+ dj, err := json.Marshal(d)
+ if err != nil {
+ http.Error(w, "Error creating JSON response", http.StatusInternalServerError)
+ }
+ w.Header().Set("Content-Type", "application/json")
+ w.WriteHeader(c)
+ fmt.Fprintf(w, "%s", dj)
+}
+
+func CreateWebAuthn() {
+
+ if WebAuthn == nil {
+ authn, _ := webauthn_lib.New(&webauthn_lib.Config{
+ RPDisplayName: "Gentoo GLSAMaker", // Display Name for your site
+ RPID: "glsamakertest.gentoo.org", // Generally the domain name for your site
+ RPOrigin: "https://glsamakertest.gentoo.org", // The origin URL for WebAuthn requests
+ RPIcon: "https://assets.gentoo.org/tyrian/site-logo.png", // Optional icon URL for your site
+ })
+
+ WebAuthn = authn
+ }
+
+}
+
+func CreateSessionStore() {
+ if SessionStore == nil {
+ SessionStore, _ = session.NewStore()
+ }
+}
diff --git a/pkg/app/handler/authentication/webauthn/register.go b/pkg/app/handler/authentication/webauthn/register.go
new file mode 100644
index 0000000..4e299b3
--- /dev/null
+++ b/pkg/app/handler/authentication/webauthn/register.go
@@ -0,0 +1,111 @@
+package webauthn
+
+import (
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "fmt"
+ "github.com/duo-labs/webauthn/protocol"
+ "log"
+ "net/http"
+)
+
+func BeginRegistration(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+
+ CreateWebAuthn()
+ CreateSessionStore()
+
+ if user == nil {
+ JsonResponse(w, fmt.Errorf("must supply a valid username i.e. foo@bar.com"), http.StatusBadRequest)
+ return
+ }
+
+ registerOptions := func(credCreationOpts *protocol.PublicKeyCredentialCreationOptions) {
+ credCreationOpts.CredentialExcludeList = user.CredentialExcludeList()
+ }
+
+ // generate PublicKeyCredentialCreationOptions, session data
+ //var options *protocol.CredentialCreation
+ //var err error
+ options, sessionData, err := WebAuthn.BeginRegistration(
+ user,
+ registerOptions,
+ )
+
+ if err != nil {
+ log.Println("Error begin register")
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ // store session data as marshaled JSON
+ err = SessionStore.SaveWebauthnSession("registration", sessionData, r, w)
+ if err != nil {
+ log.Println("Error store session")
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+
+ JsonResponse(w, options, http.StatusOK)
+}
+
+func FinishRegistration(w http.ResponseWriter, r *http.Request) {
+
+ authname := getParams(r)
+ user := utils.GetAuthenticatedUser(r)
+
+ if user == nil {
+ JsonResponse(w, "Cannot find User", http.StatusBadRequest)
+ return
+ }
+
+ // load the session data
+ sessionData, err := SessionStore.GetWebauthnSession("registration", r)
+ if err != nil {
+ log.Println("Error loading session")
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ credential, err := WebAuthn.FinishRegistration(user, sessionData, r)
+ if err != nil {
+ log.Println("Error finish session")
+ log.Println(err)
+ JsonResponse(w, err.Error(), http.StatusBadRequest)
+ return
+ }
+
+ user.AddCredential(*credential, authname)
+
+ _, err = connection.DB.Model(user).Column("webauthn_credentials").WherePK().Update()
+ _, err = connection.DB.Model(user).Column("webauthn_credential_names").WherePK().Update()
+ if err != nil {
+ logger.Error.Println("Error adding WebAuthn credentials.")
+ logger.Error.Println(err)
+ }
+
+ JsonResponse(w, "Registration Success", http.StatusOK)
+}
+
+func getParams(r *http.Request) string {
+
+ keys, ok := r.URL.Query()["name"]
+
+ if !ok || len(keys[0]) < 1 {
+ logger.Info.Println("Url Param 'name' is missing")
+ return "Unnamed Authenticator"
+ }
+
+ // we only want the single item.
+ key := keys[0]
+
+ if len(key) > 20 {
+ key = key[0:20]
+ }
+
+ return key
+}
diff --git a/pkg/app/handler/cvetool/bug.go b/pkg/app/handler/cvetool/bug.go
new file mode 100644
index 0000000..7725c88
--- /dev/null
+++ b/pkg/app/handler/cvetool/bug.go
@@ -0,0 +1,85 @@
+package cvetool
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/cve"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func AssignBug(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.AssignBug {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ cveId, bugId, err := getBugAssignParams(r)
+
+ // TODO validate bug using bugzilla api before continue
+
+ cveItem := &cve.DefCveItem{Id: cveId}
+ err = connection.DB.Select(cveItem)
+
+ if err != nil {
+ w.Write([]byte("err"))
+ return
+ }
+
+ cveItem.State = "Assigned"
+
+ logger.Info.Println("bugId")
+ logger.Info.Println(bugId)
+
+ //assign bug
+ newBugs := bugzilla.GetBugsByIds([]string{bugId})
+
+ for _, newBug := range newBugs {
+ _, err = connection.DB.Model(&newBug).OnConflict("(id) DO UPDATE").Insert()
+
+ if err != nil {
+ logger.Info.Println("Error creating bug")
+ logger.Info.Println(err)
+ }
+
+ cveToBug := &cve.DefCveItemToBug{
+ DefCveItemId: cveId,
+ BugId: newBug.Id,
+ }
+
+ connection.DB.Model(cveToBug).Insert()
+
+ }
+
+ // TODO MIGRATION
+ //cveItem.Bugs = append(cveItem.Bugs, bugId)
+
+ _, err = connection.DB.Model(cveItem).Column("bugs").WherePK().Update()
+ _, err = connection.DB.Model(cveItem).Column("state").WherePK().Update()
+
+ if err != nil {
+ logger.Info.Println("Err")
+ logger.Info.Println(err)
+ w.Write([]byte("err"))
+ return
+ }
+
+ w.Write([]byte("ok"))
+
+}
+
+func getBugAssignParams(r *http.Request) (string, string, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", "", err
+ }
+ cveid := r.Form.Get("cveid")
+ bugid := r.Form.Get("bugid")
+ return cveid, bugid, err
+}
diff --git a/pkg/app/handler/cvetool/comments.go b/pkg/app/handler/cvetool/comments.go
new file mode 100644
index 0000000..d36122a
--- /dev/null
+++ b/pkg/app/handler/cvetool/comments.go
@@ -0,0 +1,74 @@
+package cvetool
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models/cve"
+ "encoding/json"
+ "net/http"
+ "time"
+)
+
+// Show renders a template to show the landing page of the application
+func AddComment(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.Comment {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ id, comment, err := getParams(r)
+
+ newComment, err := addNewCommment(id, user.Id, comment)
+
+ if err != nil {
+ logger.Info.Println("Err")
+ logger.Info.Println(err)
+ w.Write([]byte("err"))
+ return
+ }
+
+ newCommentString, _ := json.Marshal(newComment)
+
+ w.Write(newCommentString)
+
+}
+
+func addNewCommment(id string, userID int64, comment string) (cve.Comment, error) {
+
+ cveItem := &cve.DefCveItem{Id: id}
+ err := connection.DB.Select(cveItem)
+
+ if err != nil {
+ return cve.Comment{}, err
+ }
+
+ newComment := cve.Comment{
+ CVEId: id,
+ User: userID,
+ Message: comment,
+ Date: time.Now(),
+ }
+
+ //cveItem.Comments = append(cveItem.Comments, newComment)
+
+ //_, err = connection.DB.Model(cveItem).Column("comments").WherePK().Update()
+ _, err = connection.DB.Model(&newComment).Insert()
+
+ return newComment, err
+
+}
+
+func getParams(r *http.Request) (string, string, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", "", err
+ }
+ id := r.Form.Get("cveid")
+ comment := r.Form.Get("comment")
+ return id, comment, err
+}
diff --git a/pkg/app/handler/cvetool/index.go b/pkg/app/handler/cvetool/index.go
new file mode 100644
index 0000000..9c54a01
--- /dev/null
+++ b/pkg/app/handler/cvetool/index.go
@@ -0,0 +1,169 @@
+// Used to show the landing page of the application
+
+package cvetool
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models/cve"
+ "encoding/json"
+ "fmt"
+ "github.com/go-pg/pg/v9/orm"
+ "net/http"
+ "strconv"
+ "strings"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ renderIndexTemplate(w, user)
+}
+
+// Show renders a template to show the landing page of the application
+func ShowFullscreen(w http.ResponseWriter, r *http.Request) {
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ renderIndexFullscreenTemplate(w, user)
+}
+
+// Show renders a template to show the landing page of the application
+func Add(w http.ResponseWriter, r *http.Request) {
+ //renderIndexTemplate(w)
+}
+
+// Show renders a template to show the landing page of the application
+func CveData(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ type DataTableData struct {
+ Draw int `json:"draw"`
+ RecordsTotal int `json:"recordsTotal"`
+ RecordsFiltered int `json:"recordsFiltered"`
+ Data [][]string `json:"data"`
+ }
+
+ draw, _ := strconv.Atoi(getParam(r, "draw"))
+ start, _ := strconv.Atoi(getParam(r, "start"))
+ length, _ := strconv.Atoi(getParam(r, "length"))
+ order_column := getParam(r, "order[0][column]")
+ order_dir := strings.ToUpper(getParam(r, "order[0][dir]"))
+ search_value := strings.ToUpper(getParam(r, "search[value]"))
+
+ state_value := getParam(r, "columns[10][search][value]")
+ logger.Info.Println("state_value")
+ logger.Info.Println(state_value)
+
+ count_overall, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Count()
+ count, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state LIKE " + "'%" + state_value + "%'").WhereGroup(func(q *orm.Query) (*orm.Query, error) {
+ q = q.WhereOr("description LIKE " + "'%" + search_value + "%'").
+ WhereOr("id LIKE " + "'%" + search_value + "%'")
+ return q, nil
+ }).Count()
+
+ order := "id"
+ if order_column == "0" {
+ order = "id"
+ } else if order_column == "8" {
+ order = "last_modified_date"
+ } else if order_column == "9" {
+ order = "published_date"
+ } else if order_column == "10" {
+ order = "state"
+ }
+
+ var dataTableEntries [][]string
+ var cves []*cve.DefCveItem
+ err := connection.DB.Model(&cves).Order(order + " " + order_dir).Offset(start).Limit(length).Where("state LIKE " + "'%" + state_value + "%'").WhereGroup(func(q *orm.Query) (*orm.Query, error) {
+ q = q.WhereOr("description LIKE " + "'%" + search_value + "%'").
+ WhereOr("id LIKE " + "'%" + search_value + "%'")
+ return q, nil
+ }).Relation("Bugs").Relation("Comments").Select()
+
+ if err != nil || len(cves) == 0 {
+ logger.Info.Println("Error finding cves:")
+ logger.Info.Println(err)
+ w.Header().Set("Content-Type", "application/json")
+ w.Write([]byte(`{"draw":` + strconv.Itoa(draw) + `,"recordsTotal":` + strconv.Itoa(count_overall) + `,"recordsFiltered":0,"data":[]}`))
+ return
+ } else {
+ for _, cve := range cves {
+
+ // TODO handle empty
+
+ baseScore := ""
+ impact := ""
+ if cve.Impact != nil {
+ baseScore = fmt.Sprintf("%.2f", cve.Impact.BaseMetricV3.CvssV3.BaseScore)
+ impact = cve.Impact.BaseMetricV3.CvssV3.VectorString
+ }
+
+ var referenceList []string
+ for _, reference := range cve.Cve.References.ReferenceData {
+ referenceList = append(referenceList, "<a href=\""+reference.Url+"\">source</a>")
+ //referenceList = append(referenceList, "<a href=\"" + reference.Url + "\">" + strings.ToLower(reference.Refsource) + "</a>")
+ }
+ references := strings.Join(referenceList, ", ")
+
+ comments, _ := json.Marshal(cve.Comments)
+
+ packages, _ := json.Marshal(cve.Packages)
+ bugs, _ := json.Marshal(cve.Bugs)
+
+ dataTableEntries = append(dataTableEntries, []string{
+ cve.Id,
+ cve.Description,
+ string(packages), // TODO MIGRATION strings.Join(cve.Packages, ","),
+ string(bugs), // TODO MIGRATION strings.Join(cve.Bugs, ","),
+ baseScore,
+ impact,
+ references,
+ string(comments),
+ cve.LastModifiedDate,
+ cve.PublishedDate,
+ cve.State,
+ "changelog"})
+ }
+ }
+
+ dataTableData := DataTableData{
+ Draw: draw,
+ RecordsTotal: count_overall,
+ RecordsFiltered: count,
+ Data: dataTableEntries,
+ }
+
+ res, _ := json.Marshal(dataTableData)
+
+ w.Header().Set("Content-Type", "application/json")
+ w.Write(res)
+}
+
+func getParam(r *http.Request, keyname string) string {
+ keys, ok := r.URL.Query()[keyname]
+ if !ok || len(keys[0]) < 1 {
+ return ""
+ }
+ result := keys[0]
+ return result
+}
diff --git a/pkg/app/handler/cvetool/state.go b/pkg/app/handler/cvetool/state.go
new file mode 100644
index 0000000..608691c
--- /dev/null
+++ b/pkg/app/handler/cvetool/state.go
@@ -0,0 +1,75 @@
+package cvetool
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models/cve"
+ "encoding/json"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func ChangeState(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.ChangeState {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ if !user.CanEditCVEs() {
+ logger.Error.Println("Err, user can not edit.")
+ w.Write([]byte("err"))
+ return
+ }
+
+ id, newState, reason, err := getStateParams(r)
+
+ cveItem := &cve.DefCveItem{Id: id}
+ err = connection.DB.Select(cveItem)
+
+ if err != nil || reason == "" || cveItem.State == "Assigned" || !(newState == "NFU" || newState == "Later" || newState == "Invalid") {
+ logger.Error.Println("Err, invalid data")
+ logger.Error.Println(err)
+ w.Write([]byte("err"))
+ return
+ }
+
+ cveItem.State = newState
+ _, err = connection.DB.Model(cveItem).Column("state").WherePK().Update()
+
+ if err != nil {
+ logger.Error.Println("Err")
+ logger.Error.Println(err)
+ w.Write([]byte("err"))
+ return
+ }
+
+ newComment, err := addNewCommment(id, user.Id, "Changed status to "+newState+": "+reason)
+
+ if err != nil {
+ logger.Error.Println("Err")
+ logger.Error.Println(err)
+ w.Write([]byte("err"))
+ return
+ }
+
+ newCommentString, _ := json.Marshal(newComment)
+
+ w.Write(newCommentString)
+
+}
+
+func getStateParams(r *http.Request) (string, string, string, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", "", "", err
+ }
+ id := r.Form.Get("cveid")
+ newstate := r.Form.Get("newstate")
+ reason := r.Form.Get("reason")
+ return id, newstate, reason, err
+}
diff --git a/pkg/app/handler/cvetool/update.go b/pkg/app/handler/cvetool/update.go
new file mode 100644
index 0000000..8ce12f5
--- /dev/null
+++ b/pkg/app/handler/cvetool/update.go
@@ -0,0 +1,23 @@
+package cvetool
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/cveimport"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Update(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.CVETool.UpdateCVEs {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ go cveimport.IncrementalCVEImport()
+
+ http.Redirect(w, r, "/", 301)
+}
diff --git a/pkg/app/handler/cvetool/utils.go b/pkg/app/handler/cvetool/utils.go
new file mode 100644
index 0000000..7e78660
--- /dev/null
+++ b/pkg/app/handler/cvetool/utils.go
@@ -0,0 +1,47 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package cvetool
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderIndexTemplate(w http.ResponseWriter, user *users.User) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/index/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "show.tmpl", createPageData("cvetool", user))
+}
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderIndexFullscreenTemplate(w http.ResponseWriter, user *users.User) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/index/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "showFullscreen.tmpl", createPageData("cvetool", user))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ CanEdit bool
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ CanEdit: user.CanEditCVEs(),
+ }
+}
diff --git a/pkg/app/handler/dashboard/index.go b/pkg/app/handler/dashboard/index.go
new file mode 100644
index 0000000..82fd858
--- /dev/null
+++ b/pkg/app/handler/dashboard/index.go
@@ -0,0 +1,58 @@
+// Used to show the landing page of the application
+
+package dashboard
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/app/handler/statistics"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/cve"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !(user.Permissions.Glsa.View && user.Permissions.CVETool.View) {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var glsas []*models.Glsa
+ user.CanAccess(connection.DB.Model(&glsas).Relation("Creator").Order("updated DESC").Limit(5)).Select()
+
+ var cves []*cve.DefCveItem
+ connection.DB.Model(&cves).Order("last_modified_date DESC").Limit(5).Select()
+
+ var comments []*cve.Comment
+ connection.DB.Model(&comments).Order("date DESC").Limit(5).Select()
+
+ requests, _ := connection.DB.Model((*models.Glsa)(nil)).Where("type = ?", "request").Count()
+ drafts, _ := connection.DB.Model((*models.Glsa)(nil)).Where("type = ?", "draft").Count()
+ glsasCount, _ := connection.DB.Model((*models.Glsa)(nil)).Where("type = ?", "glsa").Count()
+ allGlsas, _ := connection.DB.Model((*models.Glsa)(nil)).Count()
+
+ new, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "New").Count()
+ assigned, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "Assigned").Count()
+ nfu, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "NFU").Count()
+ later, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "Later").Count()
+ invalid, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "Invalid").Count()
+ allCVEs, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Count()
+
+ statisticsData := statistics.StatisticsData{
+ Requests: float64(requests) / float64(allGlsas),
+ Drafts: float64(drafts) / float64(allGlsas),
+ Glsas: float64(glsasCount) / float64(allGlsas),
+ New: float64(new) / float64(allCVEs),
+ Assigned: float64(assigned) / float64(allCVEs),
+ NFU: float64(nfu) / float64(allCVEs),
+ Later: float64(later) / float64(allCVEs),
+ Invalid: float64(invalid) / float64(allCVEs),
+ }
+
+ renderDashboardTemplate(w, user, glsas, cves, comments, &statisticsData)
+}
diff --git a/pkg/app/handler/dashboard/utils.go b/pkg/app/handler/dashboard/utils.go
new file mode 100644
index 0000000..ed0bc91
--- /dev/null
+++ b/pkg/app/handler/dashboard/utils.go
@@ -0,0 +1,44 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package dashboard
+
+import (
+ "glsamaker/pkg/app/handler/statistics"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/cve"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderDashboardTemplate(w http.ResponseWriter, user *users.User, glsas []*models.Glsa, cves []*cve.DefCveItem, comments []*cve.Comment, statisticsData *statistics.StatisticsData) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/dashboard/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "dashboard.tmpl", createPageData("dashboard", user, glsas, cves, comments, statisticsData))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, glsas []*models.Glsa, cves []*cve.DefCveItem, comments []*cve.Comment, statisticsData *statistics.StatisticsData) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ GLSAs []*models.Glsa
+ CVEs []*cve.DefCveItem
+ Comments []*cve.Comment
+ StatisticsData *statistics.StatisticsData
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ GLSAs: glsas,
+ CVEs: cves,
+ Comments: comments,
+ StatisticsData: statisticsData,
+ }
+}
diff --git a/pkg/app/handler/drafts/index.go b/pkg/app/handler/drafts/index.go
new file mode 100644
index 0000000..cfc699f
--- /dev/null
+++ b/pkg/app/handler/drafts/index.go
@@ -0,0 +1,44 @@
+// Used to show the landing page of the application
+
+package drafts
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var drafts []*models.Glsa
+ err := user.CanAccess(connection.DB.Model(&drafts).
+ Where("type = ?", "draft").
+ Relation("Bugs").
+ Relation("Creator").
+ Relation("Comments")).
+ Select()
+
+ if err != nil {
+ logger.Info.Println("Error during draft selection")
+ logger.Info.Println(err)
+ http.NotFound(w, r)
+ return
+ }
+
+ for _, draft := range drafts {
+ draft.ComputeStatus(user)
+ }
+
+ renderDraftsTemplate(w, user, drafts)
+}
diff --git a/pkg/app/handler/drafts/utils.go b/pkg/app/handler/drafts/utils.go
new file mode 100644
index 0000000..f7f4f57
--- /dev/null
+++ b/pkg/app/handler/drafts/utils.go
@@ -0,0 +1,37 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package drafts
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderDraftsTemplate(w http.ResponseWriter, user *users.User, drafts []*models.Glsa) {
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/drafts/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "drafts.tmpl", createPageData("drafts", user, drafts))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, drafts []*models.Glsa) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Drafts []*models.Glsa
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ Drafts: drafts,
+ }
+}
diff --git a/pkg/app/handler/glsa/bugs.go b/pkg/app/handler/glsa/bugs.go
new file mode 100644
index 0000000..9b3d32e
--- /dev/null
+++ b/pkg/app/handler/glsa/bugs.go
@@ -0,0 +1,63 @@
+package glsa
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/bugzilla"
+ "net/http"
+ "strconv"
+)
+
+// Show renders a template to show the landing page of the application
+func UpdateBugs(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.UpdateBugs {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ go bugUpdate()
+
+ http.Redirect(w, r, "/", 301)
+}
+
+func bugUpdate() {
+
+ var allBugs []*bugzilla.Bug
+ connection.DB.Model(&allBugs).Select()
+
+ var bugIdsLists [][]string
+ bugIdsLists = append(bugIdsLists, []string{})
+ for _, bug := range allBugs {
+ lastElem := bugIdsLists[len(bugIdsLists)-1]
+
+ if len(lastElem) < 100 {
+ bugIdsLists[len(bugIdsLists)-1] = append(lastElem, strconv.FormatInt(bug.Id, 10))
+ } else {
+ bugIdsLists = append(bugIdsLists, []string{strconv.FormatInt(bug.Id, 10)})
+ }
+ }
+
+ for _, bugIdsList := range bugIdsLists {
+ updatedBugs := bugzilla.GetBugsByIds(bugIdsList)
+
+ for _, updatedBug := range updatedBugs {
+ _, err := connection.DB.Model(&updatedBug).WherePK().Update()
+ if err != nil {
+ logger.Error.Println("Error during bug data update")
+ logger.Error.Println(err)
+ }
+ }
+ }
+
+ // Possibly delete deleted bugs
+ // Do we even delete bugs?
+
+ // update the time of the last bug update
+ models.SetApplicationValue("LastBugUpdate", "")
+}
diff --git a/pkg/app/handler/glsa/comments.go b/pkg/app/handler/glsa/comments.go
new file mode 100644
index 0000000..9412b62
--- /dev/null
+++ b/pkg/app/handler/glsa/comments.go
@@ -0,0 +1,110 @@
+package glsa
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/cve"
+ "glsamaker/pkg/models/users"
+ "encoding/json"
+ "errors"
+ "net/http"
+ "strconv"
+ "time"
+)
+
+// Show renders a template to show the landing page of the application
+func AddComment(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.Comment {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ if !user.CanEditCVEs() {
+ w.Write([]byte("err"))
+ return
+ }
+
+ id, comment, commentType, err := getParams(r)
+
+ newComment, err := AddNewCommment(id, user, comment, commentType)
+
+ if err != nil {
+ logger.Info.Println("Err")
+ logger.Info.Println(err)
+ w.Write([]byte("err"))
+ return
+ }
+
+ newCommentString, _ := json.Marshal(newComment)
+
+ w.Write(newCommentString)
+
+}
+
+func AddNewCommment(id string, user *users.User, comment string, commentType string) (cve.Comment, error) {
+
+ glsaID, err := strconv.ParseInt(id, 10, 64)
+
+ if err != nil {
+ return cve.Comment{}, err
+ }
+
+ glsa := &models.Glsa{Id: glsaID}
+ err = user.CanAccess(connection.DB.Model(glsa).WherePK()).Select()
+
+ if err != nil {
+ return cve.Comment{}, err
+ }
+
+ // TODO: VALIDATE !!
+
+ if commentType == "approve" && !user.Permissions.Glsa.Approve {
+ return cve.Comment{}, errors.New("ACCESS DENIED")
+ } else if commentType == "approve" && glsa.CreatorId == user.Id && !user.Permissions.Glsa.ApproveOwnGlsa {
+ return cve.Comment{}, errors.New("ACCESS DENIED")
+ } else if commentType == "decline" && !user.Permissions.Glsa.Decline {
+ return cve.Comment{}, errors.New("ACCESS DENIED")
+ }
+
+ if commentType == "approve" {
+ glsa.ApprovedBy = append(glsa.ApprovedBy, user.Id)
+ _, err = connection.DB.Model(glsa).Column("approved_by").WherePK().Update()
+ } else if commentType == "decline" {
+ glsa.DeclinedBy = append(glsa.DeclinedBy, user.Id)
+ _, err = connection.DB.Model(glsa).Column("declined_by").WherePK().Update()
+ }
+
+ newComment := cve.Comment{
+ GlsaId: glsaID,
+ User: user.Id,
+ UserBadge: user.Badge,
+ Type: commentType,
+ Message: comment,
+ Date: time.Now(),
+ }
+
+ glsa.Comments = append(glsa.Comments, newComment)
+
+ //_, err = connection.DB.Model(glsa).Column("comments").WherePK().Update()
+ _, err = connection.DB.Model(&newComment).Insert()
+
+ return newComment, err
+
+}
+
+func getParams(r *http.Request) (string, string, string, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", "", "", err
+ }
+ id := r.Form.Get("glsaid")
+ comment := r.Form.Get("comment")
+ commentType := r.Form.Get("commentType")
+ return id, comment, commentType, err
+}
diff --git a/pkg/app/handler/glsa/delete.go b/pkg/app/handler/glsa/delete.go
new file mode 100644
index 0000000..b036319
--- /dev/null
+++ b/pkg/app/handler/glsa/delete.go
@@ -0,0 +1,42 @@
+// Used to show the landing page of the application
+
+package glsa
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/cve"
+ "net/http"
+ "strconv"
+)
+
+// Show renders a template to show the landing page of the application
+func Delete(w http.ResponseWriter, r *http.Request) {
+
+ // TODO delete confidential bugs?
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.Delete {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ glsaID := r.URL.Path[len("/glsa/delete/"):]
+
+ if _, err := strconv.Atoi(glsaID); err != nil {
+ http.Redirect(w, r, "/", 301)
+ w.Write([]byte("err"))
+ }
+
+ var glsa *models.Glsa
+ var glsaToBug *models.GlsaToBug
+ var comment *cve.Comment
+ connection.DB.Model(glsa).Where("id = ?", glsaID).Delete()
+ connection.DB.Model(glsaToBug).Where("glsa_id = ?", glsaID).Delete()
+ connection.DB.Model(comment).Where("glsa_id = ?", glsaID).Delete()
+
+ w.Write([]byte("ok"))
+}
diff --git a/pkg/app/handler/glsa/edit.go b/pkg/app/handler/glsa/edit.go
new file mode 100644
index 0000000..04e67b3
--- /dev/null
+++ b/pkg/app/handler/glsa/edit.go
@@ -0,0 +1,185 @@
+package glsa
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/gpackage"
+ "net/http"
+ "strconv"
+ "time"
+)
+
+func getStringParam(key string, r *http.Request) string {
+ if len(r.Form[key]) > 0 {
+ return r.Form[key][0]
+ }
+
+ return ""
+}
+
+func getArrayParam(key string, r *http.Request) []string {
+ return r.Form[key]
+}
+
+// Show renders a template to show the landing page of the application
+func Edit(w http.ResponseWriter, r *http.Request) {
+
+ // TODO edit confidential bugs?
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.Edit {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ glsaID := r.URL.Path[len("/glsa/edit/"):]
+
+ parsedGlsaId, _ := strconv.ParseInt(glsaID, 10, 64)
+ currentGlsa := &models.Glsa{Id: parsedGlsaId}
+ err := user.CanAccess(connection.DB.Model(currentGlsa).
+ Relation("Bugs").
+ Relation("Creator").
+ Relation("Comments").
+ WherePK()).
+ Select()
+
+ if r.Method == "POST" {
+
+ r.ParseForm()
+
+ id, err := strconv.ParseInt(glsaID, 10, 64)
+
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ // if
+ var packages []gpackage.Package
+ for k, _ := range getArrayParam("package_atom", r) {
+ newPackage := gpackage.Package{
+ Affected: r.Form["package_vulnerable"][k] == "true",
+ Atom: r.Form["package_atom"][k],
+ Identifier: r.Form["package_identifier"][k],
+ Version: r.Form["package_version"][k],
+ Slot: r.Form["package_slot"][k],
+ Arch: r.Form["package_arch"][k],
+ Auto: r.Form["package_auto"][k] == "true",
+ }
+ packages = append(packages, newPackage)
+ }
+
+ var references []models.Reference
+ for k, _ := range getArrayParam("reference_title", r) {
+ newReference := models.Reference{
+ Title: r.Form["reference_title"][k],
+ URL: r.Form["reference_url"][k],
+ }
+ references = append(references, newReference)
+ }
+
+ // Update Bugs: delete old mapping first
+ _, err = connection.DB.Model(&[]models.GlsaToBug{}).Where("glsa_id = ?", glsaID).Delete()
+ if err != nil {
+ logger.Error.Println("ERR during delete")
+ logger.Error.Println(err)
+ }
+
+ newBugs := bugzilla.GetBugsByIds(getArrayParam("bugs", r))
+
+ for _, newBug := range newBugs {
+ _, err = connection.DB.Model(&newBug).OnConflict("(id) DO UPDATE").Insert()
+
+ if err != nil {
+ logger.Error.Println("Error creating bug")
+ logger.Error.Println(err)
+ }
+
+ parsedGlsaID, _ := strconv.ParseInt(glsaID, 10, 64)
+
+ glsaToBug := &models.GlsaToBug{
+ GlsaId: parsedGlsaID,
+ BugId: newBug.Id,
+ }
+
+ connection.DB.Model(glsaToBug).Insert()
+
+ }
+
+ glsa := &models.Glsa{
+ Id: id,
+ // Alias: getStringParam("alias", r),
+ // Type: getStringParam("status", r),
+ Title: getStringParam("title", r),
+ Synopsis: getStringParam("synopsis", r),
+ Packages: packages,
+ Description: getStringParam("description", r),
+ Impact: getStringParam("impact", r),
+ Workaround: getStringParam("workaround", r),
+ Resolution: getStringParam("resolution", r),
+ References: references,
+ Permission: getStringParam("permission", r),
+ Access: getStringParam("access", r),
+ Severity: getStringParam("severity", r),
+ Keyword: getStringParam("keyword", r),
+ Background: getStringParam("background", r),
+ //TODO
+ //Bugs: ,
+ //Comments: nil,
+ Revision: "r9999",
+ // Created: time.Time{},
+ Updated: time.Time{},
+ }
+
+ if currentGlsa.Type == "request" && glsa.Description != "" {
+ glsa.Type = "draft"
+ } else {
+ glsa.Type = currentGlsa.Type
+ }
+
+ _, err = connection.DB.Model(glsa).Column(
+ "type",
+ "title",
+ "synopsis",
+ "packages",
+ "description",
+ "impact",
+ "workaround",
+ "resolution",
+ "references",
+ "permission",
+ "access",
+ "severity",
+ "keyword",
+ "background",
+ "updated",
+ "revision").WherePK().Update()
+
+ if err != nil {
+ http.NotFound(w, r)
+ logger.Error.Println("ERR NOT FOUND")
+ logger.Error.Println(err)
+ return
+ }
+
+ http.Redirect(w, r, "/glsa/"+glsaID, 301)
+ return
+ }
+
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ currentGlsa.ComputeStatus(user)
+ currentGlsa.ComputeCommentBadges()
+
+ glsaCount, err := connection.DB.Model((*models.Glsa)(nil)).Count()
+
+ renderEditTemplate(w, user, currentGlsa, int64(glsaCount))
+}
diff --git a/pkg/app/handler/glsa/release.go b/pkg/app/handler/glsa/release.go
new file mode 100644
index 0000000..c24e5b0
--- /dev/null
+++ b/pkg/app/handler/glsa/release.go
@@ -0,0 +1,70 @@
+package glsa
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "net/http"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// Show renders a template to show the landing page of the application
+func Release(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.Release {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ glsaID := r.URL.Path[len("/glsa/release/"):]
+
+ currentGlsa := new(models.Glsa)
+ err := user.CanAccess(connection.DB.Model(currentGlsa).
+ Where("id = ?", glsaID)).
+ Select()
+
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ currentGlsa.Type = "glsa"
+ currentGlsa.Alias = computeNextGLSAId()
+
+ _, err = connection.DB.Model(currentGlsa).Column("type").WherePK().Update()
+ _, err = connection.DB.Model(currentGlsa).Column("alias").WherePK().Update()
+
+ http.Redirect(w, r, "/archive", 301)
+}
+
+func computeNextGLSAId() string {
+
+ logger.Info.Println("compute Next GLSA")
+
+ newGLSAID := ""
+ var glsas []*models.Glsa
+ err := connection.DB.Model(&glsas).Where("type = ?", "glsa").Order("alias DESC").Limit(1).Select()
+
+ if err != nil || len(glsas) == 0 {
+ newGLSAID = time.Now().Format("200601") + "-" + "01"
+ } else if !strings.HasPrefix(glsas[0].Alias, time.Now().Format("200601")+"-") {
+ newGLSAID = time.Now().Format("200601") + "-" + "01"
+ } else {
+ oldId := strings.Replace(glsas[0].Alias, time.Now().Format("200601")+"-", "", 1)
+ parsedOldId, _ := strconv.Atoi(oldId)
+ parsedOldId = parsedOldId + 1
+ newID := strconv.Itoa(parsedOldId)
+ if len(newID) < 2 {
+ newID = "0" + newID
+ }
+ newGLSAID = time.Now().Format("200601") + "-" + newID
+ }
+
+ return newGLSAID
+}
diff --git a/pkg/app/handler/glsa/utils.go b/pkg/app/handler/glsa/utils.go
new file mode 100644
index 0000000..b417a80
--- /dev/null
+++ b/pkg/app/handler/glsa/utils.go
@@ -0,0 +1,79 @@
+package glsa
+
+import (
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderViewTemplate(w http.ResponseWriter, user *users.User, glsa *models.Glsa, glsaCount int64) {
+
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ Funcs(getFuncMap()).
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/glsa/show.tmpl"))
+
+ templates.ExecuteTemplate(w, "show.tmpl", createPageData("show", user, glsa, glsaCount))
+}
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderEditTemplate(w http.ResponseWriter, user *users.User, glsa *models.Glsa, glsaCount int64) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ Funcs(getFuncMap()).
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/glsa/edit.tmpl"))
+
+ templates.ExecuteTemplate(w, "edit.tmpl", createPageData("edit", user, glsa, glsaCount))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, glsa *models.Glsa, glsaCount int64) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Glsa *models.Glsa
+ GlsaCount int64
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ Glsa: glsa,
+ GlsaCount: glsaCount,
+ }
+}
+
+func getFuncMap() template.FuncMap {
+ return template.FuncMap{
+ "bugIsReady": BugIsReady,
+ "prevGLSA": PrevGLSA,
+ "nextGLSA": NextGLSA,
+ }
+}
+
+func BugIsReady(bug bugzilla.Bug) bool {
+ return bug.IsReady()
+}
+
+func PrevGLSA(id int64, min int64) int64 {
+ logger.Info.Println("prev glsa")
+ if id == min {
+ return id
+ }
+ return id - 1
+}
+
+func NextGLSA(id int64, max int64) int64 {
+ if id == max {
+ return id
+ }
+ return id + 1
+}
diff --git a/pkg/app/handler/glsa/view.go b/pkg/app/handler/glsa/view.go
new file mode 100644
index 0000000..d84273c
--- /dev/null
+++ b/pkg/app/handler/glsa/view.go
@@ -0,0 +1,48 @@
+package glsa
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models"
+ "net/http"
+ "strconv"
+)
+
+// Show renders a template to show the landing page of the application
+func View(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ glsaID := r.URL.Path[len("/glsa/"):]
+
+ parsedGlsaId, _ := strconv.ParseInt(glsaID, 10, 64)
+ glsa := &models.Glsa{Id: parsedGlsaId}
+ err := user.CanAccess(connection.DB.Model(glsa).
+ Relation("Bugs").
+ Relation("Creator").
+ Relation("Comments").WherePK()).
+ Select()
+
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+
+ if glsa.Permission == "confidential" && user.Confidential() != "confidential" {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ glsa.ComputeStatus(user)
+ glsa.ComputeCommentBadges()
+
+ glsaCount, err := connection.DB.Model((*models.Glsa)(nil)).Count()
+
+ renderViewTemplate(w, user, glsa, int64(glsaCount))
+}
diff --git a/pkg/app/handler/home/index.go b/pkg/app/handler/home/index.go
new file mode 100644
index 0000000..8f514f7
--- /dev/null
+++ b/pkg/app/handler/home/index.go
@@ -0,0 +1,16 @@
+// Used to show the landing page of the application
+
+package home
+
+import (
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ renderHomeTemplate(w, user)
+}
diff --git a/pkg/app/handler/home/utils.go b/pkg/app/handler/home/utils.go
new file mode 100644
index 0000000..5f6e0b5
--- /dev/null
+++ b/pkg/app/handler/home/utils.go
@@ -0,0 +1,34 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package home
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderHomeTemplate(w http.ResponseWriter, user *users.User) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/home/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "home.tmpl", createPageData("home", user))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ }
+}
diff --git a/pkg/app/handler/newRequest/index.go b/pkg/app/handler/newRequest/index.go
new file mode 100644
index 0000000..929ac5b
--- /dev/null
+++ b/pkg/app/handler/newRequest/index.go
@@ -0,0 +1,186 @@
+// Used to show the landing page of the application
+
+package newRequest
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/app/handler/glsa"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/cve"
+ "crypto/sha256"
+ "fmt"
+ "github.com/go-pg/pg/v9"
+ "net/http"
+ "strconv"
+ "strings"
+ "time"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.Create {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ bugs, title, synopsis, description, workaround, impact, background, resolution, importReferences, permissions, access, severity, keyword, comment, err := getParams(r)
+ newID := getNextGLSAId()
+
+ if err != nil || bugs == "" {
+ // render without message
+ renderNewTemplate(w, user, strconv.FormatInt(newID, 10))
+ return
+ }
+
+ // create bugs
+ newBugs := bugzilla.GetBugsByIds(strings.Split(bugs, ","))
+
+ for _, newBug := range newBugs {
+ _, err = connection.DB.Model(&newBug).OnConflict("(id) DO UPDATE").Insert()
+
+ if err != nil {
+ logger.Error.Println("Error creating bug")
+ logger.Error.Println(err)
+ }
+
+ glsaToBug := &models.GlsaToBug{
+ GlsaId: newID,
+ BugId: newBug.Id,
+ }
+
+ connection.DB.Model(glsaToBug).Insert()
+
+ }
+
+ var references []models.Reference
+
+ // TODO if title is empty try to import from bug
+ // TODO validate permissions
+ if importReferences {
+ // TODO import references
+
+ // import from CVE
+ for _, bug := range strings.Split(bugs, ",") {
+ var cves []cve.DefCveItem
+ connection.DB.Model(&cves).Where("bugs::jsonb @> ?", "\""+bug+"\"").Select()
+
+ for _, cve := range cves {
+ references = append(references, models.Reference{
+ Title: cve.Id,
+ URL: "https://nvd.nist.gov/vuln/detail/" + cve.Id,
+ })
+ }
+
+ }
+
+ // import from BUG
+ for _, bug := range newBugs {
+ for _, alias := range bug.Alias {
+ if strings.HasPrefix(alias, "CVE-") {
+ alreadyPresent := false
+ for _, reference := range references {
+ if reference.Title == alias {
+ alreadyPresent = true
+ }
+ }
+ if !alreadyPresent {
+ references = append(references, models.Reference{
+ Title: alias,
+ URL: "https://nvd.nist.gov/vuln/detail/" + alias,
+ })
+ }
+ }
+ }
+ }
+
+ }
+
+ id := title + bugs + time.Now().String()
+ id = fmt.Sprintf("%x", sha256.Sum256([]byte(id)))
+
+ glsaType := "request"
+ if description != "" {
+ glsaType = "draft"
+ }
+
+ newGlsa := &models.Glsa{
+ //Id: id,
+ Type: glsaType,
+ Title: title,
+ Synopsis: synopsis,
+ Description: description,
+ Workaround: workaround,
+ Impact: impact,
+ Background: background,
+ Resolution: resolution,
+ References: references,
+ Permission: permissions,
+ Access: access,
+ Severity: severity,
+ Keyword: keyword,
+ Revision: "r0",
+ CreatorId: user.Id,
+ Created: time.Now(),
+ Updated: time.Now(),
+ }
+
+ _, err = connection.DB.Model(newGlsa).OnConflict("(id) DO Nothing").Insert()
+ if err != nil {
+ logger.Error.Println("Err during creating new GLSA")
+ logger.Error.Println(err)
+ }
+
+ if comment != "" {
+ glsa.AddNewCommment(strconv.FormatInt(newID, 10), user, comment, "comment")
+ }
+
+ if glsaType == "draft" {
+ http.Redirect(w, r, "/drafts", 301)
+ } else {
+ http.Redirect(w, r, "/requests", 301)
+ }
+}
+
+func getParams(r *http.Request) (string, string, string, string, string, string, string, string, bool, string, string, string, string, string, error) {
+ err := r.ParseForm()
+ if err != nil {
+ return "", "", "", "", "", "", "", "", false, "", "", "", "", "", err
+ }
+ bugs := r.Form.Get("bugs")
+ title := r.Form.Get("title")
+ synopsis := r.Form.Get("synopsis")
+ description := r.Form.Get("description")
+ workaround := r.Form.Get("workaround")
+ impact := r.Form.Get("impact")
+ background := r.Form.Get("background")
+ resolution := r.Form.Get("resolution")
+ importReferences := r.Form.Get("importReferences")
+ permissions := r.Form.Get("permissions")
+ access := r.Form.Get("access")
+ severity := r.Form.Get("severity")
+ keyword := r.Form.Get("keyword")
+ comment := r.Form.Get("comment")
+ return bugs, title, synopsis, description, workaround, impact, background, resolution, importReferences == "on", permissions, access, severity, keyword, comment, err
+}
+
+func getNextGLSAId() int64 {
+ var newID int64
+ newID = 1
+ var glsas []*models.Glsa
+ err := connection.DB.Model(&glsas).Order("id DESC").Limit(1).Select()
+
+ if err != nil && err != pg.ErrNoRows {
+ newID = -1
+ } else if glsas != nil && len(glsas) == 1 {
+ newID = glsas[0].Id + 1
+ }
+
+ return newID
+}
diff --git a/pkg/app/handler/newRequest/utils.go b/pkg/app/handler/newRequest/utils.go
new file mode 100644
index 0000000..7192939
--- /dev/null
+++ b/pkg/app/handler/newRequest/utils.go
@@ -0,0 +1,36 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package newRequest
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderNewTemplate(w http.ResponseWriter, user *users.User, newID string) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/new/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "new.tmpl", createPageData("new", user, newID))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, newID string) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ NewID string
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ NewID: newID,
+ }
+}
diff --git a/pkg/app/handler/requests/index.go b/pkg/app/handler/requests/index.go
new file mode 100644
index 0000000..fddbd86
--- /dev/null
+++ b/pkg/app/handler/requests/index.go
@@ -0,0 +1,44 @@
+// Used to show the landing page of the application
+
+package requests
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ if !user.Permissions.Glsa.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var requests []*models.Glsa
+ err := user.CanAccess(connection.DB.Model(&requests).
+ Where("type = ?", "request").
+ Relation("Bugs").
+ Relation("Creator").
+ Relation("Comments")).
+ Select()
+
+ if err != nil {
+ logger.Info.Println("Error during request selection")
+ logger.Info.Println(err)
+ http.NotFound(w, r)
+ return
+ }
+
+ for _, request := range requests {
+ request.ComputeStatus(user)
+ }
+
+ renderRequestsTemplate(w, user, requests)
+}
diff --git a/pkg/app/handler/requests/utils.go b/pkg/app/handler/requests/utils.go
new file mode 100644
index 0000000..85bc472
--- /dev/null
+++ b/pkg/app/handler/requests/utils.go
@@ -0,0 +1,36 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package requests
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderRequestsTemplate(w http.ResponseWriter, user *users.User, requests []*models.Glsa) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/requests/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "requests.tmpl", createPageData("requests", user, requests))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, requests []*models.Glsa) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Requests []*models.Glsa
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ Requests: requests,
+ }
+}
diff --git a/pkg/app/handler/search/index.go b/pkg/app/handler/search/index.go
new file mode 100644
index 0000000..1503d9c
--- /dev/null
+++ b/pkg/app/handler/search/index.go
@@ -0,0 +1,126 @@
+// Used to show the landing page of the application
+
+package search
+
+import (
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "github.com/go-pg/pg/v9/orm"
+ "net/http"
+ "strconv"
+)
+
+// Show renders a template to show the landing page of the application
+func Search(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ keys, ok := r.URL.Query()["q"]
+
+ if !ok || len(keys[0]) < 1 {
+ http.NotFound(w, r)
+ return
+ }
+
+ // Query()["key"] will return an array of items,
+ // we only want the single item.
+ key := keys[0]
+
+ // redirect to glsa if isNumeric
+ if _, err := strconv.Atoi(key); err == nil {
+ http.Redirect(w, r, "/glsa/"+key, 301)
+ }
+
+ if key == "#home" {
+ http.Redirect(w, r, "/", 301)
+ return
+ } else if key == "#dashboard" {
+ http.Redirect(w, r, "/dashboard", 301)
+ return
+ } else if key == "#new" {
+ http.Redirect(w, r, "/new", 301)
+ return
+ } else if key == "#cvetool" {
+ http.Redirect(w, r, "/cve/tool", 301)
+ return
+ } else if key == "#requests" {
+ http.Redirect(w, r, "/requests", 301)
+ return
+ } else if key == "#drafts" {
+ http.Redirect(w, r, "/drafts", 301)
+ return
+ } else if key == "#all" {
+ http.Redirect(w, r, "/all", 301)
+ return
+ } else if key == "#archive" {
+ http.Redirect(w, r, "/archive", 301)
+ return
+ } else if key == "#about" {
+ http.Redirect(w, r, "/about", 301)
+ return
+ } else if key == "#bugzilla" {
+ http.Redirect(w, r, "https://bugs.gentoo.org/", 301)
+ return
+ } else if key == "#admin" {
+ http.Redirect(w, r, "/admin", 301)
+ return
+ } else if key == "#password" {
+ http.Redirect(w, r, "/account/password", 301)
+ return
+ } else if key == "#2fa" {
+ http.Redirect(w, r, "/account/2fa", 301)
+ return
+ } else if key == "#statistics" {
+ http.Redirect(w, r, "/statistics", 301)
+ return
+ }
+
+ if key == "#logout" {
+ http.Redirect(w, r, "/logout", 301)
+ return
+ }
+
+ if !user.Permissions.Glsa.View {
+ authentication.AccessDenied(w, r)
+ return
+ }
+
+ var glsas []*models.Glsa
+ err := user.CanAccess(connection.DB.Model(&glsas).
+ Relation("Bugs").
+ Relation("Comments").
+ Relation("Creator").
+ WhereGroup(func(q *orm.Query) (*orm.Query, error) {
+ q = q.WhereOr("title LIKE " + "'%" + key + "%'").
+ WhereOr("type LIKE " + "'%" + key + "%'").
+ WhereOr("synopsis LIKE " + "'%" + key + "%'").
+ WhereOr("description LIKE " + "'%" + key + "%'").
+ WhereOr("workaround LIKE " + "'%" + key + "%'").
+ WhereOr("resolution LIKE " + "'%" + key + "%'").
+ WhereOr("keyword LIKE " + "'%" + key + "%'").
+ WhereOr("background LIKE " + "'%" + key + "%'")
+ //WhereOr("creator LIKE " + "'%" + key + "%'")
+ return q, nil
+ })).
+ Select()
+
+ // TODO search in comments
+ // TODO search in bugs
+
+ if err != nil {
+ logger.Info.Println("Error during searching")
+ logger.Info.Println(err)
+ http.NotFound(w, r)
+ return
+ }
+
+ for _, glsa := range glsas {
+ glsa.ComputeStatus(user)
+ }
+
+ renderSearchTemplate(w, user, key, glsas)
+
+}
diff --git a/pkg/app/handler/search/utils.go b/pkg/app/handler/search/utils.go
new file mode 100644
index 0000000..81e4e88
--- /dev/null
+++ b/pkg/app/handler/search/utils.go
@@ -0,0 +1,38 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package search
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderSearchTemplate(w http.ResponseWriter, user *users.User, searchQuery string, searchResults []*models.Glsa) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/search/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "search.tmpl", createPageData("search", user, searchQuery, searchResults))
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, searchQuery string, searchResults []*models.Glsa) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ GLSAs []*models.Glsa
+ SearchQuery string
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ GLSAs: searchResults,
+ SearchQuery: searchQuery,
+ }
+}
diff --git a/pkg/app/handler/statistics/index.go b/pkg/app/handler/statistics/index.go
new file mode 100644
index 0000000..d4b3a4d
--- /dev/null
+++ b/pkg/app/handler/statistics/index.go
@@ -0,0 +1,42 @@
+// Used to show the landing page of the application
+
+package statistics
+
+import (
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/cve"
+ "net/http"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ user := utils.GetAuthenticatedUser(r)
+
+ requests, _ := connection.DB.Model((*models.Glsa)(nil)).Where("type = ?", "request").Count()
+ drafts, _ := connection.DB.Model((*models.Glsa)(nil)).Where("type = ?", "draft").Count()
+ glsas, _ := connection.DB.Model((*models.Glsa)(nil)).Where("type = ?", "glsa").Count()
+ allGlsas, _ := connection.DB.Model((*models.Glsa)(nil)).Count()
+
+ new, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "New").Count()
+ assigned, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "Assigned").Count()
+ nfu, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "NFU").Count()
+ later, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "Later").Count()
+ invalid, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Where("state = ?", "Invalid").Count()
+ allCVEs, _ := connection.DB.Model((*cve.DefCveItem)(nil)).Count()
+
+ statisticsData := StatisticsData{
+ Requests: float64(requests) / float64(allGlsas),
+ Drafts: float64(drafts) / float64(allGlsas),
+ Glsas: float64(glsas) / float64(allGlsas),
+ New: float64(new) / float64(allCVEs),
+ Assigned: float64(assigned) / float64(allCVEs),
+ NFU: float64(nfu) / float64(allCVEs),
+ Later: float64(later) / float64(allCVEs),
+ Invalid: float64(invalid) / float64(allCVEs),
+ }
+
+ renderStatisticsTemplate(w, user, &statisticsData)
+}
diff --git a/pkg/app/handler/statistics/utils.go b/pkg/app/handler/statistics/utils.go
new file mode 100644
index 0000000..3e64ddf
--- /dev/null
+++ b/pkg/app/handler/statistics/utils.go
@@ -0,0 +1,48 @@
+// miscellaneous utility functions used for the landing page of the application
+
+package statistics
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/users"
+ "html/template"
+ "net/http"
+)
+
+// renderIndexTemplate renders all templates used for the landing page
+func renderStatisticsTemplate(w http.ResponseWriter, user *users.User, statisticsData *StatisticsData) {
+ templates := template.Must(
+ template.Must(
+ template.New("Show").
+ ParseGlob("web/templates/layout/*.tmpl")).
+ ParseGlob("web/templates/statistics/*.tmpl"))
+
+ templates.ExecuteTemplate(w, "statistics.tmpl", createPageData("statistics", user, statisticsData))
+}
+
+type StatisticsData struct {
+ Requests float64
+ Drafts float64
+ Glsas float64
+ // CVEs
+ New float64
+ Assigned float64
+ NFU float64
+ Later float64
+ Invalid float64
+}
+
+// createPageData creates the data used in the template of the landing page
+func createPageData(page string, user *users.User, statisticsData *StatisticsData) interface{} {
+ return struct {
+ Page string
+ Application *models.GlobalSettings
+ User *users.User
+ Data *StatisticsData
+ }{
+ Page: page,
+ Application: models.GetDefaultGlobalSettings(),
+ User: user,
+ Data: statisticsData,
+ }
+}
diff --git a/pkg/app/serve.go b/pkg/app/serve.go
new file mode 100644
index 0000000..1f16d9a
--- /dev/null
+++ b/pkg/app/serve.go
@@ -0,0 +1,214 @@
+// Entrypoint for the web application
+
+package app
+
+import (
+ "glsamaker/pkg/app/handler/about"
+ "glsamaker/pkg/app/handler/account"
+ "glsamaker/pkg/app/handler/admin"
+ "glsamaker/pkg/app/handler/all"
+ "glsamaker/pkg/app/handler/archive"
+ "glsamaker/pkg/app/handler/authentication"
+ "glsamaker/pkg/app/handler/authentication/totp"
+ "glsamaker/pkg/app/handler/authentication/utils"
+ "glsamaker/pkg/app/handler/authentication/webauthn"
+ "glsamaker/pkg/app/handler/cvetool"
+ "glsamaker/pkg/app/handler/dashboard"
+ "glsamaker/pkg/app/handler/drafts"
+ "glsamaker/pkg/app/handler/glsa"
+ "glsamaker/pkg/app/handler/home"
+ "glsamaker/pkg/app/handler/newRequest"
+ "glsamaker/pkg/app/handler/requests"
+ "glsamaker/pkg/app/handler/search"
+ "glsamaker/pkg/app/handler/statistics"
+ "glsamaker/pkg/config"
+ "glsamaker/pkg/database"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "log"
+ "net/http"
+ "strings"
+)
+
+// Serve is used to serve the web application
+func Serve() {
+
+ database.Connect()
+ defer connection.DB.Close()
+
+ CreateDefaultAdmin()
+ models.SeedInitialApplicationData()
+
+ // public login page
+ loginPage("/login", authentication.Login)
+
+ // second factor login page
+ // (either totp or webauthn, depending on the user settings)
+ twoFactorLogin("/login/2fa", authentication.SecondFactorLogin)
+
+ // webauthn login endpoints
+ twoFactorLogin("/login/2fa/totp", totp.Login)
+
+ // webauthn login endpoints
+ twoFactorLogin("/login/2fa/webauthn/begin", webauthn.BeginLogin)
+ twoFactorLogin("/login/2fa/webauthn/finish", webauthn.FinishLogin)
+
+ requireLogin("/", home.Show)
+
+ requireLogin("/dashboard", dashboard.Show)
+
+ requireLogin("/statistics", statistics.Show)
+
+ requireLogin("/search", search.Search)
+
+ requireLogin("/about", about.Show)
+ requireLogin("/about/search", about.ShowSearch)
+ requireLogin("/about/cli", about.ShowCLI)
+
+ requireLogin("/archive", archive.Show)
+
+ requireLogin("/drafts", drafts.Show)
+
+ requireLogin("/requests", requests.Show)
+
+ requireLogin("/all", all.Show)
+
+ requireLogin("/new", newRequest.Show)
+
+ requireLogin("/cve/update", cvetool.Update)
+ requireLogin("/cve/tool", cvetool.Show)
+ requireLogin("/cve/tool/fullscreen", cvetool.ShowFullscreen)
+ requireLogin("/cve/data", cvetool.CveData)
+ requireLogin("/cve/add", cvetool.Add)
+ requireLogin("/cve/comment/add", cvetool.AddComment)
+ requireLogin("/cve/bug/assign", cvetool.AssignBug)
+ requireLogin("/cve/state/change", cvetool.ChangeState)
+
+ requireLogin("/logout", authentication.Logout)
+
+ requireLogin("/account/password", account.ChangePassword)
+ requireLogin("/account/2fa", account.TwoFactorAuth)
+ requireLogin("/account/2fa/notice/disable", account.Disable2FANotice)
+ requireLogin("/account/2fa/totp/activate", account.ActivateTOTP)
+ requireLogin("/account/2fa/totp/disable", account.DisableTOTP)
+ requireLogin("/account/2fa/totp/verify", account.VerifyTOTP)
+ requireLogin("/account/2fa/webauthn/activate", account.ActivateWebAuthn)
+ requireLogin("/account/2fa/webauthn/disable", account.DisableWebAuthn)
+ requireLogin("/account/2fa/webauthn/register/begin", webauthn.BeginRegistration)
+ requireLogin("/account/2fa/webauthn/register/finish", webauthn.FinishRegistration)
+
+ requireLogin("/glsa/", glsa.View)
+ requireLogin("/glsa/edit/", glsa.Edit)
+ requireLogin("/glsa/comment/add", glsa.AddComment)
+ requireLogin("/glsa/delete/", glsa.Delete)
+ requireLogin("/glsa/release/", glsa.Release)
+ requireLogin("/glsa/bugs/update", glsa.UpdateBugs)
+
+ requireAdmin("/admin", admin.Show)
+ requireAdmin("/admin/", admin.Show)
+ requireAdmin("/admin/edit/users", admin.EditUsers)
+ requireAdmin("/admin/edit/permissions", admin.EditPermissions)
+ requireAdmin("/admin/edit/password/reset/", admin.ResetPassword)
+
+ fs := http.StripPrefix("/assets/", http.FileServer(http.Dir("/go/src/glsamaker/assets")))
+ requireLogin("/assets/", fs.ServeHTTP)
+
+ logger.Info.Println("Serving on port " + config.Port())
+ log.Fatal(http.ListenAndServe(":"+config.Port(), nil))
+}
+
+func loginPage(path string, handler http.HandlerFunc) {
+ http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
+ setDefaultHeaders(w)
+
+ if utils.IsAuthenticated(w, r) {
+ http.Redirect(w, r, "/", 301)
+ } else if utils.Only2FAMissing(w, r) {
+ http.Redirect(w, r, "/login/2fa", 301)
+ } else {
+ handler(w, r)
+ }
+ })
+}
+
+func twoFactorLogin(path string, handler http.HandlerFunc) {
+ http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
+ setDefaultHeaders(w)
+
+ if utils.IsAuthenticated(w, r) {
+ http.Redirect(w, r, "/", 301)
+ } else if utils.Only2FAMissing(w, r) {
+ handler(w, r)
+ } else {
+ http.Redirect(w, r, "/login", 301)
+ }
+ })
+}
+
+// define a route using the default middleware and the given handler
+func requireLogin(path string, handler http.HandlerFunc) {
+ http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
+ setDefaultHeaders(w)
+
+ if utils.IsAuthenticatedAndNeedsNewPassword(w, r) {
+ if strings.HasPrefix(path, "/logout") ||
+ strings.HasPrefix(path, "/assets/") ||
+ strings.HasPrefix(path, "/account/password") {
+ handler(w, r)
+ } else {
+ http.Redirect(w, r, "/account/password", 301)
+ }
+ } else if utils.IsAuthenticatedAndNeeds2FA(w, r) {
+ if strings.HasPrefix(path, "/logout") ||
+ strings.HasPrefix(path, "/assets/") ||
+ strings.HasPrefix(path, "/account/2fa") {
+ handler(w, r)
+ } else {
+ http.Redirect(w, r, "/account/2fa", 301)
+ }
+ } else if utils.IsAuthenticated(w, r) {
+ handler(w, r)
+ } else if utils.Only2FAMissing(w, r) {
+ http.Redirect(w, r, "/login/2fa", 301)
+ } else {
+ http.Redirect(w, r, "/login", 301)
+ }
+ })
+}
+
+// define a route using the default middleware and the given handler
+func requireAdmin(path string, handler http.HandlerFunc) {
+ http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
+ setDefaultHeaders(w)
+
+ if utils.IsAuthenticatedAndNeedsNewPassword(w, r) {
+ if strings.HasPrefix(path, "/logout") ||
+ strings.HasPrefix(path, "/assets/") ||
+ strings.HasPrefix(path, "/account/password") {
+ handler(w, r)
+ } else {
+ http.Redirect(w, r, "/account/password", 301)
+ }
+ } else if utils.IsAuthenticatedAndNeeds2FA(w, r) {
+ if strings.HasPrefix(path, "/logout") ||
+ strings.HasPrefix(path, "/assets/") ||
+ strings.HasPrefix(path, "/account/2fa") {
+ handler(w, r)
+ } else {
+ http.Redirect(w, r, "/account/2fa", 301)
+ }
+ } else if utils.IsAuthenticatedAsAdmin(w, r) {
+ handler(w, r)
+ } else if utils.IsAuthenticated(w, r) {
+ authentication.AccessDenied(w, r)
+ } else {
+ http.Redirect(w, r, "/login", 301)
+ }
+ })
+}
+
+// setDefaultHeaders sets the default headers that apply for all pages
+func setDefaultHeaders(w http.ResponseWriter) {
+ w.Header().Set("Cache-Control", "no-store")
+}
diff --git a/pkg/app/utils.go b/pkg/app/utils.go
new file mode 100644
index 0000000..9d66c13
--- /dev/null
+++ b/pkg/app/utils.go
@@ -0,0 +1,89 @@
+package app
+
+import (
+ "glsamaker/pkg/app/handler/authentication/totp"
+ "glsamaker/pkg/config"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models/users"
+)
+
+func defaultAdminPermissions() users.Permissions {
+ return users.Permissions{
+ Glsa: users.GlsaPermissions{
+ View: true,
+ UpdateBugs: true,
+ Comment: true,
+ Create: true,
+ Edit: true,
+ Approve: true,
+ ApproveOwnGlsa: true,
+ Decline: true,
+ Delete: true,
+ Release: true,
+ Confidential: true,
+ },
+ CVETool: users.CVEToolPermissions{
+ View: true,
+ UpdateCVEs: true,
+ Comment: true,
+ AddPackage: true,
+ ChangeState: true,
+ AssignBug: true,
+ CreateBug: true,
+ },
+ Admin: users.AdminPermissions{
+ View: true,
+ CreateTemplates: true,
+ ManageUsers: true,
+ GlobalSettings: true,
+ },
+ }
+}
+
+func CreateDefaultAdmin() {
+
+ token, qrcode := totp.Generate(config.AdminEmail())
+
+ badge := users.Badge{
+ Name: "admin",
+ Description: "Admin Account",
+ Color: "orange",
+ }
+
+ passwordParameters := users.Argon2Parameters{
+ Type: "argon2id",
+ Time: 1,
+ Memory: 64 * 1024,
+ Threads: 4,
+ KeyLen: 32,
+ }
+ passwordParameters.GenerateSalt(32)
+ passwordParameters.GeneratePassword(config.AdminInitialPassword())
+
+ defaultUser := &users.User{
+ Email: config.AdminEmail(),
+ Password: passwordParameters,
+ Nick: "admin",
+ Name: "Admin Account",
+ Role: "admin",
+ ForcePasswordChange: false,
+ TOTPSecret: token,
+ TOTPQRCode: qrcode,
+ IsUsingTOTP: false,
+ WebauthnCredentials: nil,
+ IsUsingWebAuthn: false,
+ Show2FANotice: true,
+ Badge: badge,
+ Disabled: false,
+ ForcePasswordRotation: false,
+ Force2FA: false,
+ Permissions: defaultAdminPermissions(),
+ }
+
+ _, err := connection.DB.Model(defaultUser).OnConflict("(email) DO Nothing").Insert()
+ if err != nil {
+ logger.Error.Println("Err during creating default admin user")
+ logger.Error.Println(err)
+ }
+}
diff --git a/pkg/config/config.go b/pkg/config/config.go
new file mode 100644
index 0000000..bab084d
--- /dev/null
+++ b/pkg/config/config.go
@@ -0,0 +1,63 @@
+package config
+
+import "os"
+
+func PostgresUser() string {
+ return getEnv("GLSAMAKER_POSTGRES_USER", "root")
+}
+
+func PostgresPass() string {
+ return getEnv("GLSAMAKER_POSTGRES_PASS", "root")
+}
+
+func PostgresDb() string {
+ return getEnv("GLSAMAKER_POSTGRES_DB", "glsamaker")
+}
+
+func PostgresHost() string {
+ return getEnv("GLSAMAKER_POSTGRES_HOST", "db")
+}
+
+func PostgresPort() string {
+ return getEnv("GLSAMAKER_POSTGRES_PORT", "5432")
+}
+
+func Debug() string {
+ return getEnv("GLSAMAKER_DEBUG", "false")
+}
+
+func Quiet() string {
+ return getEnv("GLSAMAKER_QUIET", "false")
+}
+
+func LogFile() string {
+ return getEnv("GLSAMAKER_LOG_FILE", "/var/log/glsamaker/errors.log")
+}
+
+func Version() string {
+ return getEnv("GLSAMAKER_VERSION", "v0.1.0")
+}
+
+func Port() string {
+ return getEnv("GLSAMAKER_PORT", "5000")
+}
+
+func AdminEmail() string {
+ return getEnv("GLSAMAKER_EMAIL", "admin@gentoo.org")
+}
+
+func AdminInitialPassword() string {
+ return getEnv("GLSAMAKER_INITIAL_ADMIN_PASSWORD", "admin")
+}
+
+func CacheControl() string {
+ return getEnv("GLSAMAKER_CACHE_CONTROL", "max-age=300")
+}
+
+func getEnv(key string, fallback string) string {
+ if os.Getenv(key) != "" {
+ return os.Getenv(key)
+ } else {
+ return fallback
+ }
+}
diff --git a/pkg/cveimport/update.go b/pkg/cveimport/update.go
new file mode 100644
index 0000000..a15e447
--- /dev/null
+++ b/pkg/cveimport/update.go
@@ -0,0 +1,96 @@
+package cveimport
+
+import (
+ "glsamaker/pkg/database"
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/logger"
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/cve"
+ "compress/gzip"
+ "encoding/json"
+ "io"
+ "io/ioutil"
+ "net/http"
+ "strconv"
+)
+
+func Update() {
+ database.Connect()
+ defer connection.DB.Close()
+
+ logger.Info.Println("Start update...")
+ IncrementalCVEImport()
+ logger.Info.Println("Finished update...")
+}
+
+func FullUpdate() {
+ database.Connect()
+ defer connection.DB.Close()
+
+ logger.Info.Println("Start full update...")
+ FullCVEImport()
+ logger.Info.Println("Finished full update...")
+}
+
+func IncrementalCVEImport() {
+ logger.Info.Println("Start importing recent CVEs")
+ importCVEs("recent")
+ logger.Info.Println("Finished importing recent CVEs")
+}
+
+func FullCVEImport() {
+ for i := 2002; i <= 2020; i++ {
+ year := strconv.Itoa(i)
+ logger.Info.Println("Import CVEs from " + year)
+ importCVEs(year)
+ logger.Info.Println("Finished importing recent CVEs")
+ }
+}
+
+func importCVEs(year string) {
+ resp, err := http.Get("https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-" + year + ".json.gz")
+ if err != nil {
+ logger.Error.Println("err")
+ logger.Error.Println(err)
+ return
+ }
+ defer resp.Body.Close()
+
+ var reader io.ReadCloser
+ reader, err = gzip.NewReader(resp.Body)
+ defer reader.Close()
+
+ s, _ := ioutil.ReadAll(reader)
+
+ var data cve.NVDFeed
+
+ err = json.Unmarshal([]byte(s), &data)
+
+ if err != nil {
+ logger.Info.Println("ERROR during unmarshal:")
+ logger.Info.Println(err)
+ }
+
+ for _, cveitem := range data.CVEItems {
+ cveitem.Id = cveitem.Cve.CVEDataMeta.ID
+ cveitem.State = "New"
+
+ description := ""
+ for _, langstring := range cveitem.Cve.Description.DescriptionData {
+ if langstring.Lang == "en" {
+ description = langstring.Value
+ }
+ }
+ cveitem.Description = description
+
+ _, err := connection.DB.Model(cveitem).OnConflict("(id) DO UPDATE").Insert()
+ if err != nil {
+ logger.Error.Println("Err during CVE insert")
+ logger.Error.Println(err)
+ }
+ }
+
+ // update the time of the last bug update
+ models.SetApplicationValue("LastCVEUpdate", "")
+
+}
diff --git a/pkg/database/connection/connection.go b/pkg/database/connection/connection.go
new file mode 100644
index 0000000..733aee2
--- /dev/null
+++ b/pkg/database/connection/connection.go
@@ -0,0 +1,42 @@
+// Contains utility functions around the database
+
+package connection
+
+import (
+ "glsamaker/pkg/config"
+ "glsamaker/pkg/logger"
+ "context"
+ "github.com/go-pg/pg/v9"
+)
+
+// DBCon is the connection handle
+// for the database
+var (
+ DB *pg.DB
+)
+
+type dbLogger struct{}
+
+func (d dbLogger) BeforeQuery(c context.Context, q *pg.QueryEvent) (context.Context, error) {
+ return c, nil
+}
+
+// AfterQuery is used to log SQL queries
+func (d dbLogger) AfterQuery(c context.Context, q *pg.QueryEvent) error {
+ logger.Debug.Println(q.FormattedQuery())
+ return nil
+}
+
+// Connect is used to connect to the database
+// and turn on logging if desired
+func Connect() {
+ DB = pg.Connect(&pg.Options{
+ User: config.PostgresUser(),
+ Password: config.PostgresPass(),
+ Database: config.PostgresDb(),
+ Addr: config.PostgresHost() + ":" + config.PostgresPort(),
+ })
+
+ DB.AddQueryHook(dbLogger{})
+
+}
diff --git a/pkg/database/init.go b/pkg/database/init.go
new file mode 100644
index 0000000..1949e27
--- /dev/null
+++ b/pkg/database/init.go
@@ -0,0 +1,23 @@
+// Contains utility functions around the database
+
+package database
+
+import (
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/database/schema"
+ "glsamaker/pkg/logger"
+ "log"
+)
+
+// Connect is used to connect to the database
+// and turn on logging if desired
+func Connect() {
+ connection.Connect()
+ err := schema.CreateSchema(connection.DB)
+ if err != nil {
+ logger.Error.Println("ERROR: Could not create database schema")
+ logger.Error.Println(err)
+ log.Fatalln(err)
+ }
+
+}
diff --git a/pkg/database/schema/create.go b/pkg/database/schema/create.go
new file mode 100644
index 0000000..d87d962
--- /dev/null
+++ b/pkg/database/schema/create.go
@@ -0,0 +1,36 @@
+package schema
+
+import (
+ "glsamaker/pkg/models"
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/cve"
+ "glsamaker/pkg/models/users"
+ "github.com/go-pg/pg/v9"
+ "github.com/go-pg/pg/v9/orm"
+)
+
+// CreateSchema creates the tables in the database
+// in case they don't alreay exist
+func CreateSchema(dbCon *pg.DB) error {
+ for _, model := range []interface{}{
+ (*models.GlobalSettings)(nil),
+ (*models.ApplicationSetting)(nil),
+ (*users.User)(nil),
+ (*models.Session)(nil),
+ (*bugzilla.Bug)(nil),
+ (*models.Glsa)(nil),
+ (*models.GlsaToBug)(nil),
+ (*cve.Comment)(nil),
+ (*cve.DefCveItem)(nil),
+ (*cve.DefCveItemToBug)(nil)} {
+
+ err := dbCon.CreateTable(model, &orm.CreateTableOptions{
+ IfNotExists: true,
+ })
+ if err != nil {
+ return err
+ }
+
+ }
+ return nil
+}
diff --git a/pkg/logger/loggers.go b/pkg/logger/loggers.go
new file mode 100644
index 0000000..0ef51e9
--- /dev/null
+++ b/pkg/logger/loggers.go
@@ -0,0 +1,39 @@
+package logger
+
+import (
+ "io"
+ "log"
+ "os"
+)
+
+var (
+ Debug *log.Logger
+ Info *log.Logger
+ Error *log.Logger
+)
+
+func Init(
+ debugHandle io.Writer,
+ infoHandle io.Writer,
+ errorHandle io.Writer) {
+
+ Debug = log.New(debugHandle,
+ "DEBUG: ",
+ log.Ldate|log.Ltime|log.Lshortfile)
+
+ Info = log.New(infoHandle,
+ "INFO: ",
+ log.Ldate|log.Ltime|log.Lshortfile)
+
+ Error = log.New(errorHandle,
+ "ERROR: ",
+ log.Ldate|log.Ltime|log.Lshortfile)
+}
+
+func CreateLogFile(path string) *os.File {
+ f, err := os.OpenFile(path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+ if err != nil {
+ log.Println(err)
+ }
+ return f
+}
diff --git a/pkg/models/application.go b/pkg/models/application.go
new file mode 100644
index 0000000..56e673c
--- /dev/null
+++ b/pkg/models/application.go
@@ -0,0 +1,69 @@
+// Contains the model of the application data
+
+package models
+
+import (
+ "glsamaker/pkg/config"
+ "glsamaker/pkg/database/connection"
+ "time"
+)
+
+type ApplicationSetting struct {
+ Key string `pg:",pk"`
+ Value string
+ LastUpdate time.Time
+ //LastBugUpdate time.Time
+ //LastCVEUpdate time.Time
+}
+
+type GlobalSettings struct {
+ LastBugUpdate time.Time
+ LastCVEUpdate time.Time
+ Version string
+ Force2FALogin bool
+ Force2FAGLSARelease bool
+}
+
+func GetApplicationKey(key string) *ApplicationSetting {
+ applicationData := &ApplicationSetting{Key: key}
+ connection.DB.Model(applicationData).WherePK().Select()
+ return applicationData
+}
+
+func SetApplicationValue(key string, value string) {
+ applicationData := &ApplicationSetting{
+ Key: key,
+ Value: value,
+ LastUpdate: time.Now(),
+ }
+
+ connection.DB.Model(applicationData).WherePK().OnConflict("(key) DO Update").Insert()
+}
+
+func SeedApplicationValue(key string, value string) {
+ applicationData := &ApplicationSetting{
+ Key: key,
+ Value: value,
+ LastUpdate: time.Now(),
+ }
+
+ connection.DB.Model(applicationData).WherePK().OnConflict("(key) DO Nothing").Insert()
+}
+
+func GetDefaultGlobalSettings() *GlobalSettings {
+ return &GlobalSettings{
+ LastBugUpdate: GetApplicationKey("LastBugUpdate").LastUpdate,
+ LastCVEUpdate: GetApplicationKey("LastCVEUpdate").LastUpdate,
+ Version: GetApplicationKey("Version").Value,
+ Force2FALogin: GetApplicationKey("Force2FALogin").Value == "1",
+ Force2FAGLSARelease: GetApplicationKey("Force2FAGLSARelease").Value == "1",
+ }
+}
+
+func SeedInitialApplicationData() {
+ SeedApplicationValue("LastBugUpdate", "")
+ SeedApplicationValue("LastCVEUpdate", "")
+ SeedApplicationValue("Version", config.Version())
+ SeedApplicationValue("Force2FALogin", "0")
+ SeedApplicationValue("Force2FAGLSARelease", "0")
+}
diff --git a/pkg/models/bugzilla/bugs.go b/pkg/models/bugzilla/bugs.go
new file mode 100644
index 0000000..9654841
--- /dev/null
+++ b/pkg/models/bugzilla/bugs.go
@@ -0,0 +1,156 @@
+package bugzilla
+
+import (
+ "encoding/json"
+ "glsamaker/pkg/database/connection"
+ "io/ioutil"
+ "net/http"
+ "strconv"
+ "strings"
+)
+
+type Bugs struct {
+ Bugs []Bug
+}
+
+// missing flags
+type Bug struct {
+ Id int64 `json:"id" pg:",pk"`
+ Alias []string `json:"alias"`
+ AssignedTo string `json:"assigned_to"`
+ AssignedToDetail Contributor `json:"assigned_to"`
+ Blocks []int64 `json:"blocks"`
+ CC []string `json:"cc"`
+ CCDetail []Contributor `json:"cc_detail"`
+ Classification string `json:"classification"`
+ Component string `json:"component"`
+ CreationTime string `json:"creation_time"`
+ Creator string `json:"creator"`
+ CreatorDetail Contributor `json:"creator_detail"`
+ DependsOn []int64 `json:"depends_on"`
+ DupeOf int64 `json:"dupe_of"`
+ Groups []string `json:"groups"`
+ IsCCAccessible bool `json:"is_cc_accessible"`
+ IsConfirmed bool `json:"is_confirmed"`
+ IsCreatorAccessible bool `json:"is_creator_accessible"`
+ IsOpen bool `json:"is_open"`
+ Keywords []string `json:"keywords"`
+ LastChangeTime string `json:"last_change_time"`
+ OpSys string `json:"op_sys"`
+ Platform string `json:"platform"`
+ Priority string `json:"priority"`
+ Product string `json:"product"`
+ QAContact string `json:"qa_contact"`
+ Resolution string `json:"resolution"`
+ SeeAlso []string `json:"see_also"`
+ Severity string `json:"severity"`
+ Status string `json:"status"`
+ Summary string `json:"summary"`
+ TargetMilestone string `json:"target_milestone"`
+ Url string `json:"url"`
+ Version string `json:"version"`
+ Whiteboard string `json:"whiteboard"`
+}
+
+type Contributor struct {
+ Email string `json:"email"`
+ Id int64 `json:"id"`
+ Name string `json:"name"`
+ RealName string `json:"real_name"`
+}
+
+func (bug *Bug) IsReady() bool {
+ return strings.Contains(bug.Whiteboard, "[glsa")
+}
+
+func GetBugById(id string) Bug {
+
+ parsedId, err := strconv.ParseInt(id, 10, 64)
+ if err != nil {
+ return Bug{}
+ }
+
+ bug := &Bug{Id: parsedId}
+ err = connection.DB.Model(bug).WherePK().Select()
+
+ if err == nil && bug != nil {
+ return *bug
+ }
+
+ resp, err := http.Get("https://bugs.gentoo.org/rest/bug?id=" + id)
+ if err != nil {
+ return Bug{}
+ }
+
+ // Read body
+ b, err := ioutil.ReadAll(resp.Body)
+ defer resp.Body.Close()
+ if err != nil {
+ return Bug{}
+ }
+
+ // Unmarshal
+ var bugs Bugs
+ err = json.Unmarshal(b, &bugs)
+ if err != nil || bugs.Bugs == nil || len(bugs.Bugs) == 0 {
+ return Bug{}
+ }
+
+ return bugs.Bugs[0]
+}
+
+func GetBugsByIds(ids []string) []Bug {
+
+ var result []Bug
+
+ if len(ids) < 1 {
+ return result
+ }
+
+ // get existing bugs from database
+ var newBugIds []string
+ for _, id := range ids {
+
+ parsedId, err := strconv.ParseInt(id, 10, 64)
+ if err != nil {
+ continue
+ }
+
+ bug := &Bug{Id: parsedId}
+ err = connection.DB.Model(bug).WherePK().Select()
+
+ if err == nil && bug != nil {
+ result = append(result, *bug)
+ } else {
+ newBugIds = append(newBugIds, id)
+ }
+
+ }
+
+ // if there are new bugs, import them
+ if len(newBugIds) > 0 {
+ var bugs Bugs
+ resp, err := http.Get("https://bugs.gentoo.org/rest/bug?id=" + strings.Join(newBugIds, ","))
+
+ if err != nil {
+ return bugs.Bugs
+ }
+
+ // Read body
+ b, err := ioutil.ReadAll(resp.Body)
+ defer resp.Body.Close()
+ if err != nil {
+ return bugs.Bugs
+ }
+
+ // Unmarshal
+ err = json.Unmarshal(b, &bugs)
+ if err != nil || bugs.Bugs == nil || len(bugs.Bugs) == 0 {
+ return result
+ }
+
+ result = append(result, bugs.Bugs...)
+ }
+
+ return result
+}
diff --git a/pkg/models/cve/cve.go b/pkg/models/cve/cve.go
new file mode 100644
index 0000000..397b156
--- /dev/null
+++ b/pkg/models/cve/cve.go
@@ -0,0 +1,86 @@
+package cve
+
+// CVE
+type CVE struct {
+ Affects *Affects `json:"affects,omitempty"`
+ CVEDataMeta *CVEDataMeta `json:"CVE_data_meta"`
+ DataFormat string `json:"data_format"`
+ DataType string `json:"data_type"`
+ DataVersion string `json:"data_version"`
+ Description *Description `json:"description"`
+ Problemtype *Problemtype `json:"problemtype"`
+ References *References `json:"references"`
+}
+
+// Affects
+type Affects struct {
+ Vendor *Vendor `json:"vendor"`
+}
+
+// CVEDataMeta
+type CVEDataMeta struct {
+ ASSIGNER string `json:"ASSIGNER"`
+ ID string `json:"ID"`
+ STATE string `json:"STATE,omitempty"`
+}
+
+// Description
+type Description struct {
+ DescriptionData []*LangString `json:"description_data"`
+}
+
+// LangString
+type LangString struct {
+ Lang string `json:"lang"`
+ Value string `json:"value"`
+}
+
+// Problemtype
+type Problemtype struct {
+ ProblemtypeData []*ProblemtypeDataItems `json:"problemtype_data"`
+}
+
+// ProblemtypeDataItems
+type ProblemtypeDataItems struct {
+ Description []*LangString `json:"description"`
+}
+
+// Product
+type Product struct {
+ ProductData []*Product `json:"product_data"`
+}
+
+// Reference
+type Reference struct {
+ Name string `json:"name,omitempty"`
+ Refsource string `json:"refsource,omitempty"`
+ Tags []string `json:"tags,omitempty"`
+ Url string `json:"url"`
+}
+
+// References
+type References struct {
+ ReferenceData []*Reference `json:"reference_data"`
+}
+
+// Vendor
+type Vendor struct {
+ VendorData []*VendorDataItems `json:"vendor_data"`
+}
+
+// VendorDataItems
+type VendorDataItems struct {
+ Product *Product `json:"product"`
+ VendorName string `json:"vendor_name"`
+}
+
+// Version
+type Version struct {
+ VersionData []*VersionDataItems `json:"version_data"`
+}
+
+// VersionDataItems
+type VersionDataItems struct {
+ VersionAffected string `json:"version_affected,omitempty"`
+ VersionValue string `json:"version_value"`
+}
diff --git a/pkg/models/cve/cvss.go b/pkg/models/cve/cvss.go
new file mode 100644
index 0000000..987a5d5
--- /dev/null
+++ b/pkg/models/cve/cvss.go
@@ -0,0 +1,62 @@
+package cve
+
+// CvssV2 Common Vulnerability Scoring System version 2.0
+type CvssV2 struct {
+ AccessComplexity string `json:"accessComplexity,omitempty"`
+ AccessVector string `json:"accessVector,omitempty"`
+ Authentication string `json:"authentication,omitempty"`
+ AvailabilityImpact string `json:"availabilityImpact,omitempty"`
+ AvailabilityRequirement string `json:"availabilityRequirement,omitempty"`
+ BaseScore float64 `json:"baseScore"`
+ CollateralDamagePotential string `json:"collateralDamagePotential,omitempty"`
+ ConfidentialityImpact string `json:"confidentialityImpact,omitempty"`
+ ConfidentialityRequirement string `json:"confidentialityRequirement,omitempty"`
+ EnvironmentalScore float64 `json:"environmentalScore,omitempty"`
+ Exploitability string `json:"exploitability,omitempty"`
+ IntegrityImpact string `json:"integrityImpact,omitempty"`
+ IntegrityRequirement string `json:"integrityRequirement,omitempty"`
+ RemediationLevel string `json:"remediationLevel,omitempty"`
+ ReportConfidence string `json:"reportConfidence,omitempty"`
+ TargetDistribution string `json:"targetDistribution,omitempty"`
+ TemporalScore float64 `json:"temporalScore,omitempty"`
+ VectorString string `json:"vectorString"`
+
+ // CVSS Version
+ Version string `json:"version"`
+}
+
+// CvssV3 Common Vulnerability Scoring System version 3.x (BETA)
+type CvssV3 struct {
+ AttackComplexity string `json:"attackComplexity,omitempty"`
+ AttackVector string `json:"attackVector,omitempty"`
+ AvailabilityImpact string `json:"availabilityImpact,omitempty"`
+ AvailabilityRequirement string `json:"availabilityRequirement,omitempty"`
+ BaseScore float64 `json:"baseScore"`
+ BaseSeverity string `json:"baseSeverity"`
+ ConfidentialityImpact string `json:"confidentialityImpact,omitempty"`
+ ConfidentialityRequirement string `json:"confidentialityRequirement,omitempty"`
+ EnvironmentalScore float64 `json:"environmentalScore,omitempty"`
+ EnvironmentalSeverity string `json:"environmentalSeverity,omitempty"`
+ ExploitCodeMaturity string `json:"exploitCodeMaturity,omitempty"`
+ IntegrityImpact string `json:"integrityImpact,omitempty"`
+ IntegrityRequirement string `json:"integrityRequirement,omitempty"`
+ ModifiedAttackComplexity string `json:"modifiedAttackComplexity,omitempty"`
+ ModifiedAttackVector string `json:"modifiedAttackVector,omitempty"`
+ ModifiedAvailabilityImpact string `json:"modifiedAvailabilityImpact,omitempty"`
+ ModifiedConfidentialityImpact string `json:"modifiedConfidentialityImpact,omitempty"`
+ ModifiedIntegrityImpact string `json:"modifiedIntegrityImpact,omitempty"`
+ ModifiedPrivilegesRequired string `json:"modifiedPrivilegesRequired,omitempty"`
+ ModifiedScope string `json:"modifiedScope,omitempty"`
+ ModifiedUserInteraction string `json:"modifiedUserInteraction,omitempty"`
+ PrivilegesRequired string `json:"privilegesRequired,omitempty"`
+ RemediationLevel string `json:"remediationLevel,omitempty"`
+ ReportConfidence string `json:"reportConfidence,omitempty"`
+ Scope string `json:"scope,omitempty"`
+ TemporalScore float64 `json:"temporalScore,omitempty"`
+ TemporalSeverity string `json:"temporalSeverity,omitempty"`
+ UserInteraction string `json:"userInteraction,omitempty"`
+ VectorString string `json:"vectorString"`
+
+ // CVSS Version
+ Version string `json:"version"`
+}
diff --git a/pkg/models/cve/feed.go b/pkg/models/cve/feed.go
new file mode 100644
index 0000000..527f233
--- /dev/null
+++ b/pkg/models/cve/feed.go
@@ -0,0 +1,116 @@
+package cve
+
+import (
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/gpackage"
+ "glsamaker/pkg/models/users"
+ "time"
+)
+
+// NVDFeed
+type NVDFeed struct {
+ CVEDataFormat string `json:"CVE_data_format"`
+
+ // NVD adds number of CVE in this feed
+ CVEDataNumberOfCVEs string `json:"CVE_data_numberOfCVEs,omitempty"`
+
+ // NVD adds feed date timestamp
+ CVEDataTimestamp string `json:"CVE_data_timestamp,omitempty"`
+ CVEDataType string `json:"CVE_data_type"`
+ CVEDataVersion string `json:"CVE_data_version"`
+
+ // NVD feed array of CVE
+ CVEItems []*DefCveItem `json:"CVE_Items"`
+}
+
+// DefConfigurations Defines the set of product configurations for a NVD applicability statement.
+type DefConfigurations struct {
+ CVEDataVersion string `json:"CVE_data_version"`
+ Nodes []*DefNode `json:"nodes,omitempty"`
+}
+
+// DefCpeMatch CPE match string or range
+type DefCpeMatch struct {
+ Cpe22Uri string `json:"cpe22Uri,omitempty"`
+ Cpe23Uri string `json:"cpe23Uri"`
+ CpeName []*DefCpeName `json:"cpe_name,omitempty"`
+ VersionEndExcluding string `json:"versionEndExcluding,omitempty"`
+ VersionEndIncluding string `json:"versionEndIncluding,omitempty"`
+ VersionStartExcluding string `json:"versionStartExcluding,omitempty"`
+ VersionStartIncluding string `json:"versionStartIncluding,omitempty"`
+ Vulnerable bool `json:"vulnerable"`
+}
+
+// DefCpeName CPE name
+type DefCpeName struct {
+ Cpe22Uri string `json:"cpe22Uri,omitempty"`
+ Cpe23Uri string `json:"cpe23Uri"`
+ LastModifiedDate string `json:"lastModifiedDate,omitempty"`
+}
+
+// DefCveItem Defines a vulnerability in the NVD data feed.
+type DefCveItem struct {
+ Id string `pg:",pk"`
+ State string `pg:"state"`
+ Configurations *DefConfigurations `json:"configurations,omitempty"`
+ Cve CVE `json:"cve"`
+ Description string
+ Impact *DefImpact `json:"impact,omitempty"`
+ LastModifiedDate string `json:"lastModifiedDate,omitempty"`
+ PublishedDate string `json:"publishedDate,omitempty"`
+
+ Comments []Comment `pg:",fk:cve_id"`
+ Packages []gpackage.Package
+ Bugs []bugzilla.Bug `pg:"many2many:def_cve_item_to_bugs,joinFK:bug_id"`
+}
+
+type DefCveItemToBug struct {
+ DefCveItemId string `pg:",unique:cve_to_bug"`
+ BugId int64 `pg:",unique:cve_to_bug"`
+}
+
+type Comment struct {
+ Id int64 `pg:",pk,unique"`
+ GlsaId int64
+ CVEId string
+ User int64
+ UserBadge users.Badge
+ Type string
+ Message string
+ // Date time.Time `pg:"-"`
+ Date time.Time
+}
+
+// DefNode Defines a node or sub-node in an NVD applicability statement.
+type DefNode struct {
+ Children []*DefNode `json:"children,omitempty"`
+ CpeMatch []*DefCpeMatch `json:"cpe_match,omitempty"`
+ Negate bool `json:"negate,omitempty"`
+ Operator string `json:"operator,omitempty"`
+}
+
+// DefImpact Impact scores for a vulnerability as found on NVD.
+type DefImpact struct {
+ BaseMetricV3 BaseMetricV3 `json:"baseMetricV3"`
+ BaseMetricV2 BaseMetricV2 `json:"baseMetricV2"`
+}
+
+// BaseMetricV2 CVSS V2.0 score.
+type BaseMetricV2 struct {
+ CvssV2 CvssV2 `json:"cvssV2"`
+ Severity string `json:"severity"`
+ ExploitabilityScore float32 `json:"exploitabilityScore"`
+ ImpactScore float32 `json:"impactScore"`
+ AcInsufInfo bool `json:"acInsufInfo"`
+ ObtainAllPrivilege bool `json:"obtainAllPrivilege"`
+ ObtainUserPrivilege bool `json:"obtainUserPrivilege"`
+ ObtainOtherPrivilege bool `json:"obtainOtherPrivilege"`
+ UserInteractionRequired bool `json:"userInteractionRequired"`
+}
+
+// BaseMetricV3 CVSS V3.x score.
+type BaseMetricV3 struct {
+ CvssV3 CvssV3 `json:"cvssV3"`
+ ExploitabilityScore float32 `json:"exploitabilityScore"`
+ ImpactScore float32 `json:"impactScore"`
+}
diff --git a/pkg/models/glsa.go b/pkg/models/glsa.go
new file mode 100644
index 0000000..9f8c3ec
--- /dev/null
+++ b/pkg/models/glsa.go
@@ -0,0 +1,115 @@
+package models
+
+import (
+ "glsamaker/pkg/database/connection"
+ "glsamaker/pkg/models/bugzilla"
+ "glsamaker/pkg/models/cve"
+ "glsamaker/pkg/models/gpackage"
+ "glsamaker/pkg/models/users"
+ "time"
+)
+
+type Glsa struct {
+ // Id string
+ Id int64 `pg:",pk,unique"`
+ Alias string
+ Type string
+ Title string
+ Synopsis string
+ Packages []gpackage.Package
+ Description string
+ Impact string
+ Workaround string
+ Resolution string
+ References []Reference
+ Permission string
+ Access string
+ Severity string
+ Keyword string
+ Background string
+ Bugs []bugzilla.Bug `pg:"many2many:glsa_to_bugs,joinFK:bug_id"`
+ Comments []cve.Comment `pg:",fk:glsa_id"`
+ Revision string
+ ApprovedBy []int64
+ DeclinedBy []int64
+ CreatorId int64
+ Creator *users.User
+ Created time.Time
+ Updated time.Time
+ Status Status `pg:"-"`
+}
+
+type GlsaToBug struct {
+ GlsaId int64 `pg:",unique:glsa_to_bug"`
+ BugId int64 `pg:",unique:glsa_to_bug"`
+}
+
+type Reference struct {
+ Title string
+ URL string
+}
+
+type Status struct {
+ BugReady bool
+ Approval string
+ WorkflowStatus string
+ Permission string
+}
+
+func (glsa *Glsa) IsBugReady() bool {
+ bugReady := true
+ for _, bug := range glsa.Bugs {
+ bugReady = bugReady && bug.IsReady()
+ }
+ return bugReady
+}
+
+func (glsa *Glsa) ComputeStatus(user *users.User) {
+ status := Status{
+ BugReady: glsa.IsBugReady(),
+ Approval: "none",
+ WorkflowStatus: "todo",
+ Permission: glsa.Permission,
+ }
+
+ if glsa.DeclinedBy != nil && len(glsa.DeclinedBy) > 0 {
+ status.Approval = "declined"
+ } else if glsa.ApprovedBy != nil && len(glsa.ApprovedBy) > 0 {
+ status.Approval = "approved"
+ } else if glsa.Comments != nil && len(glsa.Comments) > 0 {
+ status.Approval = "comments"
+ }
+
+ if glsa.CreatorId == user.Id {
+ status.WorkflowStatus = "own"
+ } else if contains(glsa.ApprovedBy, user.Id) {
+ status.WorkflowStatus = "approved"
+ } else {
+ for _, comment := range glsa.Comments {
+ if comment.User == user.Id {
+ status.WorkflowStatus = "commented"
+ break
+ }
+ }
+ }
+
+ glsa.Status = status
+}
+
+func (glsa *Glsa) ComputeCommentBadges() {
+ for _, comment := range glsa.Comments {
+ user := new(users.User)
+ connection.DB.Model(user).Where("id = ?", comment.User).Select()
+
+ comment.UserBadge = user.Badge
+ }
+}
+
+func contains(arr []int64, element int64) bool {
+ for _, a := range arr {
+ if a == element {
+ return true
+ }
+ }
+ return false
+}
diff --git a/pkg/models/gpackage/package.go b/pkg/models/gpackage/package.go
new file mode 100644
index 0000000..76166b7
--- /dev/null
+++ b/pkg/models/gpackage/package.go
@@ -0,0 +1,11 @@
+package gpackage
+
+type Package struct {
+ Affected bool
+ Atom string
+ Identifier string
+ Version string
+ Slot string
+ Arch string
+ Auto bool
+}
diff --git a/pkg/models/session.go b/pkg/models/session.go
new file mode 100644
index 0000000..b83da06
--- /dev/null
+++ b/pkg/models/session.go
@@ -0,0 +1,15 @@
+package models
+
+import (
+ "glsamaker/pkg/models/users"
+ "time"
+)
+
+type Session struct {
+ Id string `pg:",pk"`
+ UserId int64
+ User *users.User
+ SecondFactorMissing bool
+ IP string
+ Expires time.Time
+}
diff --git a/pkg/models/users/user.go b/pkg/models/users/user.go
new file mode 100644
index 0000000..b8a60d6
--- /dev/null
+++ b/pkg/models/users/user.go
@@ -0,0 +1,214 @@
+// Contains the model of the application data
+
+package users
+
+import (
+ "crypto/rand"
+ "errors"
+ "github.com/duo-labs/webauthn/protocol"
+ "github.com/duo-labs/webauthn/webauthn"
+ "github.com/go-pg/pg/v9/orm"
+ "golang.org/x/crypto/argon2"
+ "strconv"
+ "strings"
+)
+
+type User struct {
+ Id int64 `pg:",pk,unique"`
+
+ Email string `pg:",unique"`
+ Nick string
+ Name string
+ Password Argon2Parameters
+ ForcePasswordChange bool
+ Role string
+ TOTPSecret string
+ TOTPQRCode string
+ IsUsingTOTP bool
+ WebauthnCredentials []webauthn.Credential
+ WebauthnCredentialNames []*WebauthnCredentialName
+ IsUsingWebAuthn bool
+ Show2FANotice bool
+
+ Permissions Permissions
+
+ Badge Badge
+
+ ForcePasswordRotation bool
+ Force2FA bool
+
+ Disabled bool
+}
+
+type Argon2Parameters struct {
+ Type string
+ Salt []byte
+ Time uint32
+ Memory uint32
+ Threads uint8
+ KeyLen uint32
+ Hash []byte
+}
+
+func (a *Argon2Parameters) GenerateSalt(n uint32) error {
+ b := make([]byte, n)
+ _, err := rand.Read(b)
+ if err != nil {
+ return err
+ }
+ a.Salt = b
+
+ return nil
+}
+
+func (a *Argon2Parameters) GeneratePassword(password string) error {
+ if a.Salt == nil || a.Time == 0 || a.Memory == 0 || a.Threads == 0 || a.KeyLen == 0 {
+ return errors.New("Invalid parameters")
+ }
+ a.Hash = argon2.IDKey([]byte(password), a.Salt, a.Time, a.Memory, a.Threads, a.KeyLen)
+ return nil
+}
+
+func (u *User) UpdatePassword(password string) error {
+ err := u.Password.GeneratePassword(password)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func (u *User) CheckPassword(password string) bool {
+ return string(u.Password.Hash) == string(argon2.IDKey(
+ []byte(password),
+ u.Password.Salt,
+ u.Password.Time,
+ u.Password.Memory,
+ u.Password.Threads,
+ u.Password.KeyLen))
+}
+
+type Permissions struct {
+ Glsa GlsaPermissions
+ CVETool CVEToolPermissions
+ Admin AdminPermissions
+}
+
+type GlsaPermissions struct {
+ View bool
+ UpdateBugs bool
+ Comment bool
+ Create bool
+ Edit bool
+ Approve bool
+ ApproveOwnGlsa bool
+ Decline bool
+ Delete bool
+ Release bool
+ Confidential bool
+}
+
+type CVEToolPermissions struct {
+ View bool
+ UpdateCVEs bool
+ Comment bool
+ AddPackage bool
+ ChangeState bool
+ AssignBug bool
+ CreateBug bool
+}
+
+type AdminPermissions struct {
+ View bool
+ CreateTemplates bool
+ ManageUsers bool
+ GlobalSettings bool
+}
+
+type WebauthnCredentialName struct {
+ Id []byte
+ Name string
+}
+
+type Badge struct {
+ Name string `pg:",pk"`
+ Description string
+ Color string
+}
+
+func (u User) IsUsing2FA() bool {
+ return u.IsUsingTOTP || u.IsUsingWebAuthn
+}
+
+// WebAuthnID returns the user's ID
+func (u User) WebAuthnID() []byte {
+ return []byte(strconv.FormatInt(u.Id, 10))
+}
+
+// WebAuthnName returns the user's username
+func (u User) WebAuthnName() string {
+ return strings.TrimRight(u.Nick, "@")
+}
+
+// WebAuthnDisplayName returns the user's display name
+func (u User) WebAuthnDisplayName() string {
+ return strings.TrimRight(u.Nick, "@")
+}
+
+// WebAuthnIcon is not (yet) implemented
+func (u User) WebAuthnIcon() string {
+ return ""
+}
+
+// WebAuthnCredentials returns credentials owned by the user
+func (u User) WebAuthnCredentials() []webauthn.Credential {
+ return u.WebauthnCredentials
+}
+
+// CredentialExcludeList returns a CredentialDescriptor array filled
+// with all the user's credentials
+func (u User) CredentialExcludeList() []protocol.CredentialDescriptor {
+
+ credentialExcludeList := []protocol.CredentialDescriptor{}
+ for _, cred := range u.WebauthnCredentials {
+ descriptor := protocol.CredentialDescriptor{
+ Type: protocol.PublicKeyCredentialType,
+ CredentialID: cred.ID,
+ }
+ credentialExcludeList = append(credentialExcludeList, descriptor)
+ }
+
+ return credentialExcludeList
+}
+
+// AddCredential associates the credential to the user
+func (u *User) AddCredential(cred webauthn.Credential, credentialName string) {
+ u.WebauthnCredentials = append(u.WebauthnCredentials, cred)
+
+ webauthnCredentialName := &WebauthnCredentialName{
+ Id: cred.ID,
+ Name: credentialName,
+ }
+
+ u.WebauthnCredentialNames = append(u.WebauthnCredentialNames, webauthnCredentialName)
+
+}
+
+func (u *User) CanEditCVEs() bool {
+ return u.Role == "admin" || u.Role == "editor"
+}
+
+func (u *User) Confidential() string {
+ confidential := "public"
+ if u.Permissions.Glsa.Confidential {
+ confidential = "confidential"
+ }
+ return confidential
+}
+
+func (u *User) CanAccess(query *orm.Query) *orm.Query {
+ return query.WhereGroup(func(q *orm.Query) (*orm.Query, error) {
+ q = q.WhereOr("permission = ?", "public").
+ WhereOr("permission = ?", u.Confidential())
+ return q, nil
+ })
+}
diff --git a/public/404.html b/public/404.html
deleted file mode 100644
index 7f701e2..0000000
--- a/public/404.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>The page you were looking for doesn't exist (404)</title>
- <style type="text/css">
- body { background-color: #D3CFE5; color: #666; text-align: center; font-family: arial, sans-serif; }
- div.dialog {
- width: 25em;
- padding: 0 4em;
- margin: 4em auto 0 auto;
- border: 1px solid #ccc;
- border-right-color: #999;
- border-bottom-color: #999;
- background: url(/error-404.png) center left no-repeat;
- background-color: white;
- padding-left: 150px;
- }
- h1 { font-size: 100%; color: #5B4A73; line-height: 1.5em; }
- </style>
-</head>
-
-<body>
- <!-- This file lives in public/404.html -->
- <div class="dialog">
- <h1>Good Sir, the page thou were looking for indeed doeseth not exist.</h1>
- <p>You may have mistyped the address or the page may have moved.</p>
- <p>(Or you just had too much wine.)</p>
- </div>
-</body>
-</html>
diff --git a/public/422.html b/public/422.html
deleted file mode 100644
index 83660ab..0000000
--- a/public/422.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>The change you wanted was rejected (422)</title>
- <style type="text/css">
- body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
- div.dialog {
- width: 25em;
- padding: 0 4em;
- margin: 4em auto 0 auto;
- border: 1px solid #ccc;
- border-right-color: #999;
- border-bottom-color: #999;
- }
- h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
- </style>
-</head>
-
-<body>
- <!-- This file lives in public/422.html -->
- <div class="dialog">
- <h1>The change you wanted was rejected.</h1>
- <p>Maybe you tried to change something you didn't have access to.</p>
- </div>
-</body>
-</html>
diff --git a/public/500.html b/public/500.html
deleted file mode 100644
index 4ba71a9..0000000
--- a/public/500.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <title>We're sorry, but something went wrong (500)</title>
- <style type="text/css">
- body { background-color: #D3CFE5; color: #666; text-align: center; font-family: arial, sans-serif; }
- div.dialog {
- width: 25em;
- padding: 0 4em;
- margin: 4em auto 0 auto;
- border: 1px solid #ccc;
- border-right-color: #999;
- border-bottom-color: #999;
- background: url(/error-500.png) bottom right no-repeat;
- background-color: white;
- }
- h1 { font-size: 100%; color: #5B4A73; line-height: 1.5em; }
- </style>
-</head>
-
-<body>
- <!-- This file lives in public/500.html -->
- <div class="dialog">
- <h1>We're sorry, but something went wrong.</h1>
- <p>We've been notified about this issue and we'll take a look at it shortly.</p>
- <p>(umad?)</p>
- </div>
-</body>
-</html>
diff --git a/public/error-404.png b/public/error-404.png
deleted file mode 100644
index 0676c0a..0000000
--- a/public/error-404.png
+++ /dev/null
Binary files differ
diff --git a/public/error-500.png b/public/error-500.png
deleted file mode 100644
index 1027855..0000000
--- a/public/error-500.png
+++ /dev/null
Binary files differ
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index e69de29..0000000
--- a/public/favicon.ico
+++ /dev/null
diff --git a/public/robots.txt b/public/robots.txt
deleted file mode 100644
index 085187f..0000000
--- a/public/robots.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
-#
-# To ban all spiders from the entire site uncomment the next two lines:
-# User-Agent: *
-# Disallow: /
diff --git a/public/xsl/ads.xsl b/public/xsl/ads.xsl
deleted file mode 100644
index bf5e446..0000000
--- a/public/xsl/ads.xsl
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:template name="ads2">
- <xsl:param name="images"/>
-<!-- we already have <table> and <tbody> inherited, hence -->
- <!-- Load sidebar.gentoo.org in iframe -->
- <tr lang="en">
- <td align="center">
- <iframe src="http://sidebar.gentoo.org" scrolling="no" width="125" height="850" frameborder="0" style="border:0px padding:0x" marginwidth="0" marginheight="0">
- <p>Your browser does not support iframes.</p>
- </iframe>
- </td>
- </tr>
- <!-- end of iframe content -->
-</xsl:template>
-
-
-<xsl:template name="ads">
- <xsl:param name="images"/>
-
- <!-- OSL -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://osuosl.org/contribute">
- <img src="{concat($images,'images/osuosl.png')}" width="125" height="50" alt="Support OSL" title="Support OSL" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /OSL -->
-
- <!-- VR -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://www.vr.org">
- <img src="{concat($images,'images/sponsors/vr-ad.png')}" width="125" height="144" alt="Gentoo Centric Hosting: vr.org" title="Gentoo Centric Hosting: vr.org" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /VR -->
-
- <!-- Tek -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://www.tek.net" target="_top">
- <img src="{concat($images,'images/tek-gentoo.gif')}" width="125" height="125" alt="Tek Alchemy" title="Tek Alchemy" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /Tek -->
-
- <!-- SevenL -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="https://www.sevenl.net/?utm_source=gentoo-org&amp;utm_medium=sponsored-banner&amp;utm_campaign=gentoo-dedicated-servers" target="_top">
- <img src="{concat($images,'images/sponsors/sevenl_ad.png')}" width="125" height="125" alt="SevenL.net" title="SevenL.net" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /SevenL -->
-
- <!-- GNi -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://www.gni.com" target="_top">
- <img src="{concat($images,'images/gni_logo.png')}" width="125" alt="Global Netoptex Inc." title="Global Netoptex Inc." border="0"/>
- </a>
- </td>
- </tr>
- <!-- /GNi -->
-
- <!-- SD-France -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://www.euro-web.fr" target="_top">
- <img src="{concat($images,'images/sdfrance-logo-small.png')}" width="125" alt="Euro-Web/SD-France" title="Euro-Web/SD-France" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /SD-France -->
-
- <!-- bytemark -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://www.bytemark.co.uk/r/gentoo-home" target="_top">
- <img src="{concat($images,'images/sponsors/bytemark_ad.png')}" width="125" alt="Bytemark" title="Bytemark" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /bytemark -->
-
- <!-- kredit -->
- <tr lang="en">
- <td align="center" class="topsep">
- <a href="http://www.edurium.de/" target="_top">
- <img src="{concat($images,'images/sponsors/edurium-ad.gif')}" width="125" alt="Edurium" title="Edurium" border="0"/>
- </a>
- </td>
- </tr>
- <!-- /kredit -->
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/content.xsl b/public/xsl/content.xsl
deleted file mode 100644
index 303da59..0000000
--- a/public/xsl/content.xsl
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:template name="content">
- <xsl:param name="chapnum"/>
- <xsl:param name="partnum"/>
- <xsl:if test="local-name() = 'guide'">
- <!-- Inside /guide -->
- <xsl:call-template name="guidecontent" />
- </xsl:if>
- <xsl:if test="local-name() = 'book'">
- <!-- Inside /book -->
- <xsl:call-template name="bookcontent" />
- </xsl:if>
- <xsl:if test="local-name() = 'sections'">
- <!-- Inside /sections -->
- <xsl:apply-templates select="/sections/section">
- <xsl:with-param name="chapnum" select="1"/>
- <xsl:with-param name="partnum" select="1"/>
- </xsl:apply-templates>
- </xsl:if>
- <xsl:if test="local-name() = 'part'">
- <!-- Inside /book/part -->
- <xsl:call-template name="bookpartcontent" />
- </xsl:if>
- <xsl:if test="local-name() = 'chapter'">
- <!-- Inside /book/part/chapter -->
- <xsl:call-template name="bookpartchaptercontent">
- <xsl:with-param name="chapnum" select="$chapnum"/>
- <xsl:with-param name="partnum" select="$partnum"/>
- </xsl:call-template>
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/devmap.xsl b/public/xsl/devmap.xsl
deleted file mode 100644
index 8ba7615..0000000
--- a/public/xsl/devmap.xsl
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
-<xsl:variable name="devmap-js">
-<![CDATA[
-var req;
-var map;
-var doc;
-var markers = new Array;
-
-function load() {
- if (GBrowserIsCompatible()) {
- map = new GMap2(document.getElementById("map"));
- map.addControl(new GLargeMapControl());
- map.addControl(new GMapTypeControl());
- map.setCenter(new GLatLng(40.0, -38.0), 2);
-
- req = GXmlHttp.create();
- req.open("GET", "/proj/en/devrel/roll-call/devlist.xml?mode=yaml", true);
- req.onreadystatechange = onGet;
- req.send(null);
- window.setTimeout(function() {
- map.checkResize();
- }, 8000);
- }
-}
-
-function onGet() {
- if (req.readyState == 4) {
- doc = eval("(" + req.responseText + ")");
- for (var x = 0; x < doc.developers.length; x++) {
-
- function createMarker(point) {
- var marker = new GMarker(point);
- GEvent.addListener(marker, "click", function() {
- marker.openInfoWindowHtml(marker.text);
- });
- return marker;
- }
-
- var point = new GLatLng(doc.developers[x].lat, doc.developers[x].lon);
- var marker = new createMarker(point);
- marker.text = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'"
- + " 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>"
- + "<html xmlns='http://www.w3.org/1999/xhtml'>"
- + "<head>"
- + "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>"
- + "</head><body>"
- + doc.developers[x].nick + "<br/>"
- + "<b>" + doc.developers[x].name + "</b><br/>"
- + "<i>" + doc.developers[x].roles + "</i></body></html>";
- marker.name = doc.developers[x].nick;
- markers.push(marker);
- map.addOverlay(marker);
- }
-
- var t = document.getElementById("devlinks");
- var selectDev = -1;
- var nCol = 8;
- var nLines = parseInt(markers.length / nCol);
- if (markers.length / nCol)
- ++nLines;
- for (var r = 0; r < nLines; ++r) {
- var tr = document.createElement("tr");
- for (var c = 0; c < nCol; ++c) {
- var td = document.createElement("td");
- var i = c * nLines + r;
- if (i < markers.length) {
- var a = document.createElement("a");
- if (markers[i].name == "X-PLACEHOLDER")
- selectDev = i;
- a.setAttribute("href", "javascript:markers["+i+"].openInfoWindowHtml(markers["+i+"].text)");
- a.textContent = markers[i].name;
- td.appendChild(a);
- }
- tr.appendChild(td);
- }
- t.appendChild(tr);
- }
- if (selectDev >= 0)
- markers[selectDev].openInfoWindowHtml(markers[selectDev].text);
- }
-}
-]]>
-</xsl:variable>
-</xsl:stylesheet>
diff --git a/public/xsl/doc-struct.xsl b/public/xsl/doc-struct.xsl
deleted file mode 100644
index 6c5846c..0000000
--- a/public/xsl/doc-struct.xsl
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:func="http://exslt.org/functions"
- xmlns:exslt="http://exslt.org/common"
- xmlns:date="http://exslt.org/dates-and-times"
- xmlns:str="http://exslt.org/strings"
- xmlns:dyn="http://exslt.org/dynamic"
- extension-element-prefixes="exslt func date str dyn">
-
-<!-- Go through doc, parse tests & includes to build
- result doc structure with all chapters/sections/bodies -->
-
-<xsl:variable name="doc-struct" xmlns="">
- <xsl:call-template name="build-doc-struct">
- <xsl:with-param name="doc" select="/"/>
- </xsl:call-template>
-</xsl:variable>
-
-<xsl:template name="build-doc-struct" xmlns="">
- <xsl:param name="doc"/>
- <doc-struct>
- <xsl:attribute name="type"><xsl:value-of select="name($doc/*[1])"/></xsl:attribute>
- <file><xsl:value-of select="$link"/></file>
- <xsl:if test="$doc/*[1]/date">
- <date><xsl:value-of select="$doc/*[1]/date"/></date>
- </xsl:if>
- <xsl:if test="$doc/*[1]/version">
- <version><xsl:value-of select="$doc/*[1]/version"/></version>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="$doc/book">
- <xsl:for-each select="$doc/book/part">
- <xsl:variable name="curpart" select="position()"/>
- <bookpart pos="{$curpart}">
- <xsl:for-each select="chapter">
- <xsl:variable name="curchap" select="position()"/>
- <bookchap pos="{$curchap}">
- <xsl:if test="$full='1' or ($curpart=$part and $curchap=$chap)">
- <xsl:variable name="inc" select="document(include/@href)"/>
- <file><xsl:value-of select="include/@href"/></file>
- <xsl:if test="$inc/sections/date">
- <date><xsl:value-of select="$inc/sections/date"/></date>
- </xsl:if>
- <xsl:if test="$inc/sections/version">
- <version><xsl:value-of select="$inc/sections/version"/></version>
- </xsl:if>
- <xsl:for-each select="$inc/sections/section[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-chapters">
- <xsl:with-param name="chapter" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:if>
- </bookchap>
- </xsl:for-each>
- </bookpart>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <xsl:for-each select="$doc//faqindex | $doc/*[1]/chapter[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-chapters">
- <xsl:with-param name="chapter" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:otherwise>
- </xsl:choose>
- </doc-struct>
-</xsl:template>
-
-<xsl:template name="doc-struct-chapters" xmlns="">
-<xsl:param name="chapter"/>
- <xsl:choose>
- <xsl:when test="$chapter/include">
- <xsl:variable name="inc" select="document($chapter/include/@href)"/>
- <file><xsl:value-of select="$chapter/include/@href"/></file>
- <xsl:if test="$inc//date">
- <date><xsl:value-of select="$inc//date"/></date>
- </xsl:if>
- <xsl:if test="$inc//version">
- <version><xsl:value-of select="$inc//version"/></version>
- </xsl:if>
- <xsl:for-each select="$inc//chapter[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-chapters">
- <xsl:with-param name="chapter" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <chapter uid="{generate-id($chapter)}" title="{$chapter/title}">
- <xsl:if test="$chapter/@id"><xsl:attribute name="id"><xsl:value-of select="$chapter/@id"/></xsl:attribute></xsl:if>
- <xsl:choose>
- <xsl:when test="body">
- <!-- Handbook section without subsection(s), bodies only -->
- <xsl:for-each select="$chapter/body[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-bodies">
- <xsl:with-param name="body" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <xsl:for-each select="$chapter/section[not(@test) or dyn:evaluate(@test)] | $chapter/subsection[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-sections">
- <xsl:with-param name="section" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:otherwise>
- </xsl:choose>
- </chapter>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="doc-struct-sections" xmlns="">
-<xsl:param name="section"/>
- <xsl:choose>
- <xsl:when test="$section/include">
- <xsl:variable name="inc" select="document($section/include/@href)"/>
- <file><xsl:value-of select="$section/include/@href"/></file>
- <xsl:if test="$inc//date">
- <date><xsl:value-of select="$inc//date"/></date>
- </xsl:if>
- <xsl:if test="$inc//version">
- <version><xsl:value-of select="$inc//version"/></version>
- </xsl:if>
- <xsl:for-each select="$inc//section[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-sections">
- <xsl:with-param name="section" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:when>
- <xsl:when test="$section/body">
- <section uid="{generate-id($section)}" title="{$section/title}">
- <xsl:if test="$section/@id"><xsl:attribute name="id"><xsl:value-of select="$section/@id"/></xsl:attribute></xsl:if>
- <xsl:for-each select="$section/body[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-bodies">
- <xsl:with-param name="body" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </section>
- </xsl:when>
- <xsl:otherwise>
- <section uid="{generate-id($section)}" title="{$section/title}">
- <!-- bodyless section in old invalid files -->
- <xsl:call-template name="doc-struct-bodies">
- <xsl:with-param name="body" select="$section"/>
- </xsl:call-template>
- </section>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="doc-struct-bodies" xmlns="">
-<xsl:param name="body"/>
- <xsl:choose>
- <xsl:when test="$body/include">
- <xsl:variable name="inc" select="document($body/include/@href)"/>
- <file><xsl:value-of select="$body/include/@href"/></file>
- <xsl:if test="$inc//date">
- <date><xsl:value-of select="$inc//date"/></date>
- </xsl:if>
- <xsl:if test="$inc//version">
- <version><xsl:value-of select="$inc//version"/></version>
- </xsl:if>
- <xsl:for-each select="$inc//body[not(@test) or dyn:evaluate(@test)]">
- <xsl:call-template name="doc-struct-bodies">
- <xsl:with-param name="body" select="."/>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <body uid="{generate-id($body)}">
-
- <xsl:for-each select="$body/pre[not(@test) or dyn:evaluate(@test)] | $body/figure[not(@test) or dyn:evaluate(@test)]">
- <xsl:element name="{name()}">
- <xsl:attribute name="uid">
- <xsl:value-of select="generate-id(.)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:for-each>
-
- </body>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/glsa.xsl b/public/xsl/glsa.xsl
deleted file mode 100644
index 139e384..0000000
--- a/public/xsl/glsa.xsl
+++ /dev/null
@@ -1,412 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:exslt="http://exslt.org/common"
- xmlns:str="http://exslt.org/strings"
- xmlns:func="http://exslt.org/functions"
- exclude-result-prefixes="exslt str func">
-
-<xsl:output encoding="UTF-8"
- method="xml"
- indent="yes"
- doctype-system="/dtd/guide.dtd"/>
-
-<xsl:include href="/xsl/inserts.xsl"/>
-
-<xsl:template match="glsa">
-<guide>
-<title><xsl:value-of select="title"/></title>
-<author title="Contact Address">
- <mail link="security@gentoo.org">Security Team</mail>
-</author>
-<abstract>
-This is a Gentoo Linux Security Advisory
-</abstract>
-
-<xsl:if test="license">
- <license />
-</xsl:if>
-
-<version><xsl:value-of select="@id"/></version>
-<date><xsl:value-of select="announced"/></date>
-
-<chapter>
-<title>Gentoo Linux Security Advisory</title>
-<section>
-<title>Version Information</title>
-<body>
-
-<table>
-<tr>
- <th>Advisory Reference</th>
- <ti>GLSA <xsl:value-of select="@id"/> / <xsl:value-of select="product/text()"/></ti>
-</tr>
-<tr>
- <th>Release Date</th>
- <ti><xsl:value-of select="func:format-date(announced)"/></ti>
-</tr>
-<tr>
- <th>Latest Revision</th>
- <ti>
- <xsl:choose>
- <xsl:when test="revised/@count and func:is-date(revised)='YES'">
- <xsl:value-of select="concat(func:format-date(revised,'en'),'; ',revised/@count)"/>
- </xsl:when>
- <xsl:when test="func:is-date(revised)='YES'">
- <xsl:value-of select="func:format-date(revised,'en')"/>
- </xsl:when>
- <xsl:when test="func:is-date(substring(revised,1,10))='YES'">
- <xsl:value-of select="concat(func:format-date(substring(revised,1,10),'en'),substring(revised,11))"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="revised"/>
- </xsl:otherwise>
- </xsl:choose>
- </ti>
-</tr>
-<tr>
- <th>Impact</th>
- <ti><xsl:value-of select="impact/@type"/></ti>
-</tr>
-<tr>
- <th>Exploitable</th>
- <ti><xsl:value-of select="access"/></ti>
-</tr>
-</table>
-
-<xsl:apply-templates select="affected">
- <xsl:with-param name="type" select="product/@type"/>
-</xsl:apply-templates>
-
-<p>
-Related bugreports:
-<xsl:choose>
- <xsl:when test="bug">
-
-<xsl:for-each select="bug">
- <uri link="http://bugs.gentoo.org/show_bug.cgi?id={text()}">#<xsl:value-of select="text()"/></uri>
- <xsl:if test="not(position() = last())">, </xsl:if>
-</xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- No related gentoo bugreports
- </xsl:otherwise>
-</xsl:choose>
-
-</p>
-
-</body>
-</section>
-<section>
-<title>Synopsis</title>
-<body>
-
-<p><xsl:apply-templates select="synopsis"/></p>
-
-</body>
-</section>
-</chapter>
-<chapter>
-<title>Impact Information</title>
-<xsl:if test="background">
-<section>
-<title>Background</title>
-<body>
-
-<xsl:apply-templates select="background"/>
-
-</body>
-</section>
-</xsl:if>
-<section>
-<title>Description</title>
-<body>
-
-<xsl:apply-templates select="description"/>
-
-</body>
-</section>
-<section>
-<title>Impact</title>
-<body>
-
-<xsl:apply-templates select="impact"/>
-
-</body>
-</section>
-</chapter>
-<chapter>
-<title>Resolution Information</title>
-<section>
-<title>Workaround</title>
-<body>
-
-<xsl:apply-templates select="workaround"/>
-
-</body>
-</section>
-<section>
-<title>Resolution</title>
-<body>
-
-<xsl:apply-templates select="resolution"/>
-
-</body>
-</section>
-</chapter>
-<xsl:if test="references/uri">
-<chapter>
-<title>References</title>
-<section>
-<body>
-
-<ul>
-<xsl:for-each select="references/uri">
- <li><xsl:apply-templates select="."/></li>
-</xsl:for-each>
-</ul>
-
-</body>
-</section>
-</chapter>
-</xsl:if>
-</guide>
-</xsl:template>
-
-<xsl:template match="affected">
-<xsl:param name="type"/>
-<xsl:choose>
- <xsl:when test="$type = 'ebuild'">
- <table>
- <tr>
- <th>Package</th>
- <th>Vulnerable versions</th>
- <th>Unaffected versions</th>
- <th>Architecture(s)</th>
- </tr>
- <xsl:for-each select="package">
- <tr>
- <ti><xsl:value-of select="@name"/></ti>
- <ti>
- <xsl:for-each select="vulnerable">
- <xsl:choose>
- <xsl:when test="@range = 'le'">
- &lt;=
- </xsl:when>
- <xsl:when test="@range = 'lt'">
- &lt;
- </xsl:when>
- <xsl:when test="@range = 'eq'">
- =
- </xsl:when>
- <xsl:when test="@range = 'gt'">
- &gt;
- </xsl:when>
- <xsl:when test="@range = 'ge'">
- &gt;=
- </xsl:when>
- <xsl:when test="@range = 'rlt'">
- revision &lt;
- </xsl:when>
- <xsl:when test="@range = 'rle'">
- revision &lt;=
- </xsl:when>
- <xsl:when test="@range = 'rgt'">
- revision &gt;
- </xsl:when>
- <xsl:when test="@range = 'rge'">
- revision &gt;=
- </xsl:when>
- </xsl:choose>
- <xsl:value-of select="text()"/>
- <xsl:if test="not(position() = last())">, </xsl:if>
- </xsl:for-each>
- </ti>
- <ti>
- <xsl:for-each select="unaffected">
- <xsl:choose>
- <xsl:when test="@range = 'le'">
- &lt;=
- </xsl:when>
- <xsl:when test="@range = 'lt'">
- &lt;
- </xsl:when>
- <xsl:when test="@range = 'eq'">
- =
- </xsl:when>
- <xsl:when test="@range = 'gt'">
- &gt;
- </xsl:when>
- <xsl:when test="@range = 'ge'">
- &gt;=
- </xsl:when>
- <xsl:when test="@range = 'rlt'">
- revision &lt;
- </xsl:when>
- <xsl:when test="@range = 'rle'">
- revision &lt;=
- </xsl:when>
- <xsl:when test="@range = 'rgt'">
- revision &gt;
- </xsl:when>
- <xsl:when test="@range = 'rge'">
- revision &gt;=
- </xsl:when>
- </xsl:choose>
- <xsl:if test="@name">
- <xsl:value-of select="@name"/>-
- </xsl:if>
- <xsl:value-of select="text()"/>
- <xsl:if test="not(position() = last())">, </xsl:if>
- </xsl:for-each>
- <xsl:if test="@auto = 'no'"><brite>*</brite></xsl:if>
- </ti>
- <ti>
- <xsl:choose>
- <xsl:when test="@arch = '*'">
- All supported architectures
- </xsl:when>
- <xsl:when test="@arch = 'x86'">
- Intel compatible
- </xsl:when>
- <xsl:when test="@arch = 'ppc'">
- PowerPC
- </xsl:when>
- <xsl:when test="@arch = 'sparc'">
- Sparc
- </xsl:when>
- <xsl:when test="@arch = 'hppa'">
- HP-PA
- </xsl:when>
- <xsl:when test="@arch = 'alpha'">
- Alpha
- </xsl:when>
- <xsl:when test="@arch = 'amd64'">
- AMD64
- </xsl:when>
- <xsl:when test="@arch = 'arm'">
- ARM
- </xsl:when>
- <xsl:when test="@arch = 'ia64'">
- ia64
- </xsl:when>
- <xsl:when test="@arch = 'mips'">
- mips
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@arch"/>
- </xsl:otherwise>
- </xsl:choose>
- </ti>
- </tr>
- </xsl:for-each>
- </table>
-
- <xsl:if test="//affected/package/@auto = 'no'">
- <warn>
- <brite>*</brite>: Needs to be manually updated
- </warn>
- </xsl:if>
-
- </xsl:when>
- <xsl:when test="$type = 'infrastructure'">
- <table>
- <tr>
- <th>Affected Service</th>
- <th>Affected Server</th>
- </tr>
- <xsl:for-each select="service">
- <tr>
- <ti><xsl:value-of select="@type"/></ti>
- <ti><xsl:value-of select="text()"/>
- <xsl:if test="@fixed = 'yes'"> (fixed)</xsl:if>
- </ti>
- </tr>
- </xsl:for-each>
- </table>
- </xsl:when>
- <xsl:otherwise>
-
- </xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-
-<xsl:template match="p">
-<p><xsl:apply-templates /></p>
-</xsl:template>
-
-<xsl:template match="code">
-<pre caption="{concat(translate(substring(name(..),1,1),'wrd','WRD'),substring(name(..),2))}">
-<xsl:for-each select="str:tokenize(text(),'&#xA;')">
- <xsl:value-of select="concat(substring-after(.,' '), '&#xA;')"/>
-</xsl:for-each>
-</pre>
-</xsl:template>
-
-<xsl:template match="description">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="background">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="impact">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="resolution">
-<xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="ul">
-<ul>
- <xsl:for-each select="li">
- <li><xsl:apply-templates/></li>
- </xsl:for-each>
-</ul>
-</xsl:template>
-
-<xsl:template match="ol">
-<ol>
- <xsl:for-each select="li">
- <li><xsl:apply-templates/></li>
- </xsl:for-each>
-</ol>
-</xsl:template>
-
-<xsl:template match="b">
-<b><xsl:apply-templates/></b>
-</xsl:template>
-
-<xsl:template match="i">
-<c><xsl:apply-templates/></c>
-</xsl:template>
-
-<xsl:template match="br">
-<br/>
-</xsl:template>
-
-<xsl:template match="mail|uri">
- <xsl:element name="{name(.)}">
- <xsl:choose>
- <xsl:when test="translate(normalize-space(text()),' ','') = @link">
- <xsl:value-of select="@link"/>
- </xsl:when>
- <xsl:when test="@link">
- <xsl:attribute name="link">
- <xsl:value-of select="@link"/>
- </xsl:attribute>
- <xsl:value-of select="normalize-space(.)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="normalize-space(.)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="metadata">
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/guide.xsl b/public/xsl/guide.xsl
deleted file mode 100644
index 3264274..0000000
--- a/public/xsl/guide.xsl
+++ /dev/null
@@ -1,2015 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:exslt="http://exslt.org/common"
- xmlns:func="http://exslt.org/functions"
- xmlns:dyn="http://exslt.org/dynamic"
- xmlns:str="http://exslt.org/strings"
-
- xmlns:feed="http://www.w3.org/2005/Atom"
-
- xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"
- exclude-result-prefixes="opensearch feed"
-
- extension-element-prefixes="exslt func dyn str" >
-
-<xsl:output encoding="UTF-8"
- method="html"
- indent="yes"
- doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
- doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>
-
-<!-- Include external stylesheets -->
-<xsl:include href="/xsl/content.xsl" />
-<xsl:include href="/xsl/handbook.xsl" />
-<xsl:include href="/xsl/util.xsl"/>
-<xsl:include href="/xsl/inserts.xsl" />
-
-<xsl:include href="/xsl/mail.xsl" />
-
-<xsl:include href="/xsl/menu.xsl" />
-
-<xsl:include href="/xsl/devmap.xsl" />
-
-<xsl:include href="/xsl/doc-struct.xsl" />
-
-<xsl:include href="/xsl/ads.xsl" />
-
-<!-- When using <pre>, whitespaces should be preserved -->
-<xsl:preserve-space elements="pre script"/>
-
-<!-- Global definition of style parameter -->
-<xsl:param name="style">0</xsl:param>
-<xsl:param name="newsitemcount">9</xsl:param>
-
-<!-- Category from metadoc -->
-<xsl:param name="catid">0</xsl:param>
-
-<!-- Nick to select on dev map -->
-<xsl:param name="dev"/>
-
-<!-- testing ads mode -->
-<xsl:param name="ads">ads2</xsl:param>
-
-<!-- Where is this xsl being run? -->
-<xsl:param name="httphost">www</xsl:param>
-
-<xsl:variable name="basename">
- <xsl:call-template name="filename">
- <xsl:with-param name="path" select="$link"/>
- </xsl:call-template>
-</xsl:variable>
-
-<!-- Debug mode, when /debug.xml exists, should never be available on www.g.o -->
-<xsl:variable name="debug">
- <xsl:if test="document('/debug.xml')/debug/@on='1'">1</xsl:if>
-</xsl:variable>
-
-<!-- img tag -->
-<xsl:template match="img">
- <img src="{@src}" alt=""/>
-</xsl:template>
-
-<xsl:template name="show-disclaimer">
- <!-- Disclaimer stuff -->
- <xsl:if test="/*[1][@disclaimer] or /*[1][@redirect]">
- <table class="ncontent" align="center" width="90%" border="2px" cellspacing="0" cellpadding="4px">
- <xsl:if test="/*[1]/@disclaimer='obsolete'">
- <xsl:attribute name="style">margin-top:40px;margin-bottom:30px</xsl:attribute>
- </xsl:if>
- <tr>
- <td bgcolor="#ddddff">
- <p class="note">
- <xsl:if test="/*[1][@disclaimer]">
- <xsl:if test="/*[1]/@disclaimer='obsolete'">
- <xsl:attribute name="style">font-size:1.3em</xsl:attribute>
- </xsl:if>
- <b><xsl:value-of select="func:gettext('disclaimer')"/>: </b>
- <xsl:apply-templates select="func:gettext(/*[1]/@disclaimer)"/>
- </xsl:if>
- <xsl:if test="/*[1][@redirect]">
- <xsl:apply-templates select="func:gettext('redirect')">
- <xsl:with-param name="paramlink" select="/*[1]/@redirect"/>
- </xsl:apply-templates>
- </xsl:if>
- </p>
- </td>
- </tr>
- </table>
- </xsl:if>
-</xsl:template>
-
-
-<!-- Content of /guide -->
-<xsl:template name="guidecontent">
- <xsl:if test="$style != 'printable'">
- <br />
- </xsl:if>
-
- <h1>
- <xsl:choose>
- <xsl:when test="/guide/subtitle"><xsl:value-of select="/guide/title"/>: <xsl:value-of select="/guide/subtitle"/></xsl:when>
- <xsl:otherwise><xsl:value-of select="/guide/title"/></xsl:otherwise>
- </xsl:choose>
- </h1>
-
- <xsl:choose>
- <xsl:when test="$style = 'printable'">
- <xsl:apply-templates select="author" />
- <br/>
- <i><xsl:call-template name="contentdate"/></i>
- <xsl:variable name="outdated">
- <xsl:call-template name="outdated-translation"/>
- </xsl:variable>
- <xsl:if test="string-length($outdated) &gt; 1">
- <br/><b><i><xsl:copy-of select="$outdated"/></i></b>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test="count(exslt:node-set($doc-struct)//chapter)&gt;1">
- <form name="contents" action="https://www.gentoo.org">
- <b><xsl:value-of select="func:gettext('Content')"/></b>:
- <select name="url" size="1" OnChange="location.href=form.url.options[form.url.selectedIndex].value" style="font-family:sans-serif,Arial,Helvetica">
- <xsl:for-each select="exslt:node-set($doc-struct)//chapter">
- <option value="#doc_chap{position()}"><xsl:number/>. <xsl:value-of select="@title"/></option>
- </xsl:for-each>
- </select>
- </form>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:choose>
- <xsl:when test="/guide">
- <xsl:apply-templates select="faqindex|chapter"/>
- </xsl:when>
- <xsl:when test="/sections">
- <xsl:apply-templates select="/sections/section"/>
- </xsl:when>
- </xsl:choose>
- <br/>
- <xsl:if test="/guide/license">
- <xsl:apply-templates select="license" />
- </xsl:if>
- <br/>
-</xsl:template>
-
-<!-- Layout for documentation -->
-<xsl:template name="doclayout">
- <xsl:param name="chapnum"/>
- <xsl:param name="partnum"/>
-<html>
- <xsl:if test="string-length($glang)>1">
- <xsl:attribute name="lang"><xsl:value-of select="translate($glang,'_','-')"/></xsl:attribute>
- </xsl:if>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link title="new" rel="stylesheet" href="{concat($ROOT,'css/main.css')}" type="text/css"/>
- <link REL="shortcut icon" HREF="{concat($ROOT,'favicon.ico')}" TYPE="image/x-icon"/>
-
- <!-- Support for opensearch -->
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/www-gentoo-org.xml" title="Gentoo Website"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/forums-gentoo-org.xml" title="Gentoo Forums"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/bugs-gentoo-org.xml" title="Gentoo Bugzilla"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/packages-gentoo-org.xml" title="Gentoo Packages"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/archives-gentoo-org.xml" title="Gentoo List Archives"/>
-
- <xsl:if test="//glsaindex or //glsa-latest">
- <link rel="alternate" type="application/rss+xml">
- <xsl:attribute name="href">
- <xsl:text>/rdf/en/glsa-index.rdf</xsl:text>
- <xsl:if test="//glsa-latest">
- <xsl:text>?num=9</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </link>
- </xsl:if>
-
- <xsl:if test="/*[1][@redirect]">
- <!-- HTML refresh in case redirect is not supported -->
- <meta http-equiv="Refresh">
- <xsl:attribute name="content"><xsl:value-of select="concat('15; URL=', /*[1]/@redirect)"/></xsl:attribute>
- </meta>
- <xsl:message>
- <!-- Redirect using http header when supported -->
- <xsl:value-of select="concat('%%GORG%%Redirect=',/*[1]/@redirect)"/>
- </xsl:message>
- </xsl:if>
-
-<title>
- <xsl:choose>
- <xsl:when test="/guide/@type='project'">Gentoo Linux Projects</xsl:when>
- <xsl:when test="/guide/@type='newsletter'">Gentoo Linux Newsletter</xsl:when>
- <xsl:when test="/sections">Gentoo Linux Handbook Page</xsl:when>
- <xsl:otherwise><xsl:value-of select="func:gettext('GLinuxDoc')"/></xsl:otherwise>
- </xsl:choose>
---
- <xsl:choose>
- <xsl:when test="subtitle"><xsl:if test="/guide/@type!='newsletter'"><xsl:value-of select="title"/>:</xsl:if> <xsl:value-of select="subtitle"/></xsl:when>
- <xsl:otherwise><xsl:value-of select="title"/></xsl:otherwise>
- </xsl:choose>
-</title>
-
-</head>
-<xsl:choose>
- <xsl:when test="$style = 'printable'">
- <!-- Insert the node-specific content -->
-<body bgcolor="#ffffff">
- <!-- Test for RTL languages -->
- <xsl:if test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:if>
-
- <xsl:call-template name="show-disclaimer"/>
- <xsl:call-template name="content">
- <xsl:with-param name="chapnum" select="$chapnum"/>
- <xsl:with-param name="partnum" select="$partnum"/>
- </xsl:call-template>
-</body>
- </xsl:when>
- <xsl:otherwise>
-<body style="margin:0px;" bgcolor="#ffffff">
-<table width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td valign="top" height="125" bgcolor="#45347b">
- <a href="/"><img border="0" src="{concat($ROOT,'images/gtop-www.jpg')}" alt="Gentoo Logo"/></a>
- </td>
- </tr>
- <tr>
- <td valign="top" align="right" colspan="1" bgcolor="#ffffff">
- <table border="0" cellspacing="0" cellpadding="0" width="100%">
- <tr>
- <td width="99%" class="content" valign="top">
- <!-- Test for RTL languages -->
- <xsl:choose>
- <xsl:when test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="align">left</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- <!-- Insert the node-specific content -->
- <xsl:call-template name="show-disclaimer"/>
- <xsl:call-template name="content">
- <xsl:with-param name="chapnum" select="$chapnum"/>
- <xsl:with-param name="partnum" select="$partnum"/>
- </xsl:call-template>
- </td>
- <td width="1%" bgcolor="#dddaec" valign="top">
- <xsl:call-template name="rhcol"/>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- <tr>
- <td colspan="2" align="right" class="infohead">
- <xsl:call-template name="copyright-footer"/>
- </td>
- </tr>
-</table>
-
-</body>
- </xsl:otherwise>
- </xsl:choose>
-</html>
-</xsl:template>
-
-
-<xsl:template match="/included|/gleps|/devaway|/uris|/inserts|/glsa-index|opensearch:OpenSearchDescription">
- <xsl:message>
- <xsl:value-of select="concat('%%GORG%%Redirect=',$link,'?passthru=1')"/>
- </xsl:message>
-</xsl:template>
-
-<!-- Guide template -->
-<xsl:template match="/guide">
-<xsl:call-template name="doclayout" />
-</xsl:template>
-
-<!-- {Mainpage, News, Email} template -->
-<xsl:template match="/mainpage | /news">
-<html>
- <xsl:if test="string-length($glang)>1">
- <xsl:attribute name="lang"><xsl:value-of select="translate($glang,'_','-')"/></xsl:attribute>
- </xsl:if>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
- <link title="new" rel="stylesheet" href="{concat($ROOT,'css/main.css')}" type="text/css"/>
- <link REL="shortcut icon" HREF="{concat($ROOT,'favicon.ico')}" TYPE="image/x-icon"/>
-
- <!-- Support for opensearch -->
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/www-gentoo-org.xml" title="Gentoo Website"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/forums-gentoo-org.xml" title="Gentoo Forums"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/bugs-gentoo-org.xml" title="Gentoo Bugzilla"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/packages-gentoo-org.xml" title="Gentoo Packages"/>
- <link rel="search" type="application/opensearchdescription+xml" href="https://www.gentoo.org/search/archives-gentoo-org.xml" title="Gentoo List Archives"/>
-
- <xsl:if test="/*[1][@redirect]">
- <!-- Immediate HTML refresh in case redirect is not supported -->
- <meta http-equiv="Refresh">
- <xsl:attribute name="content"><xsl:value-of select="concat('0; URL=', /*[1]/@redirect)"/></xsl:attribute>
- </meta>
- <xsl:message>
- <!-- Redirect using http header when supported -->
- <xsl:value-of select="concat('%%GORG%%Redirect=',/*[1]/@redirect)"/>
- </xsl:message>
- </xsl:if>
-
- <xsl:if test="/mainpage/newsitems">
- <link rel="alternate" type="application/rss+xml" title="Gentoo Linux News RDF" href="https://www.gentoo.org/rdf/en/gentoo-news.rdf" />
- </xsl:if>
- <xsl:choose>
- <xsl:when test="/mainpage | /news">
- <title>
- Gentoo Linux -- <xsl:value-of select="title"/>
- </title>
- </xsl:when>
- </xsl:choose>
-
- <xsl:if test="/mainpage/devmap">
- <xsl:variable name="gkey" select="document('/gmaps-key.xml')/gkey"/>
- <script src="{concat('http://maps.google.com/maps?file=api&amp;v=2&amp;key=', $gkey)}" type="text/javascript"></script>
-
- <xsl:variable name="selectdev">
- <xsl:choose>
- <xsl:when test="string-length(translate($dev,'qwertyuioplkjhgfdsazxcvbnm-_0987654321QWERTYUIOPLKJHGFDSAZXCVBNM',''))=0 and string-length($dev)&lt;24">
- <xsl:value-of select="translate($dev,'QWERTYUIOPLKJHGFDSAZXCVBNM','qwertyuioplkjhgfdsazxcvbnm')"/>
- </xsl:when>
- <xsl:otherwise>NotADev</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="newscript" select="str:replace($devmap-js, 'X-PLACEHOLDER', string($selectdev))"/>
- <script type="text/javascript">//<xsl:comment><xsl:value-of select="$newscript"/>//</xsl:comment></script>
- </xsl:if>
-
-</head>
-<body style="margin:0px;" bgcolor="#000000">
-
-<xsl:if test="/mainpage/devmap">
- <xsl:attribute name="onload">load()</xsl:attribute>
- <xsl:attribute name="onunload">GUnload()</xsl:attribute>
-</xsl:if>
-
-<table border="0" width="100%" cellspacing="0" cellpadding="0">
- <xsl:variable name="www"><xsl:if test="$httphost!='www'">https://www.gentoo.org</xsl:if></xsl:variable>
- <tr>
- <td valign="top" height="125" width="1%" bgcolor="#45347b">
- <a href="{concat($www,'/')}"><img border="0" src="{concat($ROOT,'images/gtop-www.jpg')}" alt="Gentoo Logo"/></a>
- </td>
- <!-- Top bar menu -->
- <td valign="bottom" align="left" bgcolor="#000000" colspan="2" lang="en">
- <p class="menu">
- <xsl:apply-templates select="document('/xsl/menu.xml')//group[@top='Y']"/>
- </p>
- </td>
- </tr>
- <tr>
- <td valign="top" align="right" width="1%" bgcolor="#dddaec">
- <table width="100%" cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td height="1%" valign="top" align="right">
- <img src="{concat($ROOT,'images/gridtest.gif')}" alt="Gentoo Spaceship"/>
- </td>
- </tr>
- <tr>
- <td height="99%" valign="top" align="left">
- <!--info goes here-->
- <table cellspacing="0" cellpadding="5" border="0">
- <tr>
- <td valign="top" class="leftmenu" lang="en">
- <p class="altmenu">
- <xsl:apply-templates select="document('/xsl/menu.xml')//group[@top='N']"/>
- </p>
- <br/><br/>
- </td>
- </tr>
- </table>
- </td>
- </tr>
- </table>
- </td>
- <!-- Content below top menu and between left menu and ads -->
- <td valign="top" bgcolor="#ffffff">
- <!-- Test for RTL languages -->
- <xsl:if test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="/mainpage/newsitems">
- <p class="news">
- <img class="newsicon" src="{concat($ROOT,'images/gentoo-new.gif')}" alt="Gentoo logo"/>
- <span class="newsitem" lang="en">We produce Gentoo Linux, a special flavor of Linux that
- can be automatically optimized and customized for just
- about any application or need. Extreme performance,
- configurability and a top-notch user and developer
- community are all hallmarks of the Gentoo experience.
- To learn more, read our <b><a href="/main/en/about.xml">about
- page</a></b>.</span>
- </p>
-
- <xsl:variable name="GLSAs" select="document('/dyn/glsa-index2.xml')"/>
- <xsl:variable name="new-packages" select="document('/dyn/new-packages.xml')"/>
- <xsl:variable name="planet" select="document('/dyn/planet.xml')"/>
-
- <xsl:variable name="all-news" xmlns="">
- <news>
- <!-- News from news-index.xml, i.e. list of files under /news/ -->
- <xsl:for-each select="document('/dyn/news-index.xml')/uris/uri[position()&lt;=$newsitemcount]/text()">
- <xsl:variable name="tlink" select="."/>
- <newsitem date="{document($tlink)/news/date}" link="{$tlink}"/>
- </xsl:for-each>
-
- <!-- GLSAs from my own glsa-index.xml, i.e. not Gentoo's -->
- <xsl:for-each select="$GLSAs//glsa">
- <!-- <xsl:sort select="date" order="descending"/> Can't sort on English dates, they should be sorted in the source file -->
- <xsl:if test="position() &lt;=$newsitemcount">
- <!-- convert bloody dates like 'July 29, 2006: 02' to YYYY-MM-DD -->
- <xsl:variable name="yydate">
- <xsl:choose>
- <xsl:when test="string-length(substring(date,1,10))=10 and substring(date,5,1)='-' and substring(date,8,1)='-' and contains('|01|02|03|04|05|06|07|08|09|10|11|12|',concat('|',substring(date,6,2),'|'))">
- <xsl:value-of select="substring(date,1,10)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="substring(substring-after(substring-after(date,' '),' '),1,4)"/>
- <xsl:text>-</xsl:text>
- <xsl:choose>
- <xsl:when test="substring-before(date,' ')='January'">01</xsl:when>
- <xsl:when test="substring-before(date,' ')='February'">02</xsl:when>
- <xsl:when test="substring-before(date,' ')='March'">03</xsl:when>
- <xsl:when test="substring-before(date,' ')='April'">04</xsl:when>
- <xsl:when test="substring-before(date,' ')='May'">05</xsl:when>
- <xsl:when test="substring-before(date,' ')='June'">06</xsl:when>
- <xsl:when test="substring-before(date,' ')='July'">07</xsl:when>
- <xsl:when test="substring-before(date,' ')='August'">08</xsl:when>
- <xsl:when test="substring-before(date,' ')='September'">09</xsl:when>
- <xsl:when test="substring-before(date,' ')='October'">10</xsl:when>
- <xsl:when test="substring-before(date,' ')='November'">11</xsl:when>
- <xsl:when test="substring-before(date,' ')='December'">12</xsl:when>
- <xsl:otherwise>00</xsl:otherwise>
- </xsl:choose>
- <xsl:text>-</xsl:text>
- <xsl:value-of select="substring-before(substring-after(date,' '),',')"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:if test="func:is-date($yydate)='YES'">
- <newsitem date="{$yydate}" glsaid="{@id}"/>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
-
- <!-- New packages from packages.gentoo.org/feed/newpackage-->
- <xsl:if test="$new-packages//feed:entry/feed:updated">
- <newsitem date="{substring($new-packages//feed:entry[1]/feed:updated,1,10)}" package="{generate-id($new-packages//feed:entry[1])}"/>
- </xsl:if>
-
- <!-- Latest posts on planet.g.o from planet.gentoo.org/rss20.xml -->
- <xsl:for-each select="$planet/rss/channel/item">
- <xsl:variable name="pubDate" select="substring(pubDate,1,16)"/>
- <xsl:if test="count(preceding-sibling::item[substring(pubDate,1,16)=$pubDate])=0">
- <xsl:variable name="postdate">
- <xsl:value-of select="substring(substring-after(substring-after(substring-after(pubDate,' '),' '), ' '),1,4)"/>
- <xsl:choose>
- <xsl:when test="'Jan' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-01-</xsl:when>
- <xsl:when test="'Feb' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-02-</xsl:when>
- <xsl:when test="'Mar' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-03-</xsl:when>
- <xsl:when test="'Apr' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-04-</xsl:when>
- <xsl:when test="'May' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-05-</xsl:when>
- <xsl:when test="'Jun' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-06-</xsl:when>
- <xsl:when test="'Jul' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-07-</xsl:when>
- <xsl:when test="'Aug' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-08-</xsl:when>
- <xsl:when test="'Sep' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-09-</xsl:when>
- <xsl:when test="'Oct' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-10-</xsl:when>
- <xsl:when test="'Nov' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-11-</xsl:when>
- <xsl:when test="'Dec' = substring(substring-after(substring-after(pubDate,' '),' '),1,3)">-12-</xsl:when>
- <xsl:otherwise>-00-</xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="format-number(number(substring-before(substring-after(pubDate,' '),' ')),'00')"/>
- </xsl:variable>
- <xsl:if test="$planet//item[substring(pubDate,1,16)=$pubDate and not(contains(link, 'https://www.gentoo.org/news'))]">
- <newsitem date="{$postdate}" planet="{$pubDate}"/>
- </xsl:if>
- </xsl:if>
- </xsl:for-each>
- </news>
- </xsl:variable>
-
- <xsl:variable name="all-news1" xmlns="">
- <news>
- <xsl:for-each select="exslt:node-set($all-news)/news/newsitem">
- <xsl:sort select="@date" order="descending"/>
- <xsl:copy-of select="."/>
- </xsl:for-each>
- </news>
- </xsl:variable>
-
- <xsl:variable name="all-news0" xmlns="">
- <news>
- <xsl:for-each select="exslt:node-set($all-news1)/news/newsitem">
- <xsl:choose>
- <xsl:when test="@link or @package or @glsaid">
- <xsl:copy-of select="."/>
- </xsl:when>
-
- <xsl:when test="@planet">
- <xsl:if test="not(preceding-sibling::newsitem[1]/@planet)">
- <!-- group consecutive blog days into a single item -->
- <newsitem date="{@date}" blog='1'>
- <xsl:copy-of select="."/>
- <xsl:apply-templates select="following-sibling::*[position()=1 and @planet]" mode="moreblogs"/>
- </newsitem>
- </xsl:if>
- </xsl:when>
- </xsl:choose>
- </xsl:for-each>
- </news>
- </xsl:variable>
-
- <!-- Display news items -->
-
- <xsl:for-each select="exslt:node-set($all-news0)/news/newsitem">
- <xsl:sort select="@date" order="descending"/>
-
- <!-- Build a newsitem that can be passed to the template that displays a newsitem -->
- <xsl:variable name="thenews" xmlns="">
- <news>
- <xsl:choose>
- <xsl:when test="@link">
- <xsl:variable name="newsitem" select="document(@link)/news"/>
- <xsl:attribute name="category"><xsl:value-of select="$newsitem/@category"/></xsl:attribute>
- <title><xsl:copy-of select="$newsitem/title"/></title>
- <date><xsl:value-of select="@date"/></date>
- <!--
- <xsl:variable name="poster">
- <xsl:call-template name="smart-mail">
- <xsl:with-param name="mail" select="$newsitem/poster"/>
- </xsl:call-template>
- </xsl:variable>
- <poster><xsl:copy-of select="$poster"/></poster>
- -->
- <poster><xsl:value-of select="$newsitem/poster"/></poster>
- <xsl:choose>
- <xsl:when test="$newsitem/summary"><summary><xsl:copy-of select="$newsitem/summary"/></summary></xsl:when>
- <xsl:otherwise><body><xsl:copy-of select="$newsitem/body"/></body></xsl:otherwise>
- </xsl:choose>
- </xsl:when>
-
- <xsl:when test="@blog">
- <xsl:attribute name="category">planet</xsl:attribute>
- <title>Blog posts</title>
- <date><xsl:value-of select="@date"/></date>
- <xsl:if test="@date != ./newsitem[position()=last()]/@date">
- <until><xsl:value-of select="./newsitem[position()=last()]/@date"/></until>
- </xsl:if>
- <poster>planet.gentoo.org</poster>
- <body><table>
- <xsl:variable name="blogentries" xmlns="">
- <xsl:for-each select="./newsitem">
- <xsl:variable name="pubDate" select="@planet"/>
- <xsl:for-each select="$planet//item[substring(pubDate,1,16)=$pubDate and not(contains(link, 'https://www.gentoo.org/news'))]">
- <tr>
- <xsl:choose>
- <xsl:when test="contains(title,': ')">
- <ti><xsl:value-of select="substring-before(title,': ')"/></ti>
- <ti><uri link="{link}"><xsl:value-of select="substring-after(title,': ')"/></uri></ti>
- </xsl:when>
- <xsl:otherwise>
- <ti><xsl:value-of select="title"/></ti>
- <ti><uri link="{link}">. . .</uri></ti>
- </xsl:otherwise>
- </xsl:choose>
- </tr>
- </xsl:for-each>
- </xsl:for-each>
- </xsl:variable>
-
- <xsl:variable name="sortedblogentries" xmlns="">
- <xsl:for-each select="exslt:node-set($blogentries)/tr">
- <xsl:sort select="ti[1]"/>
- <tr>
- <xsl:copy-of select="ti"/>
- </tr>
- </xsl:for-each>
- </xsl:variable>
-
- <xsl:for-each select="exslt:node-set($sortedblogentries)/tr">
- <xsl:variable name="blogposter" select="ti[1]"/>
- <tr>
- <xsl:choose>
- <xsl:when test="preceding-sibling::tr[1]/ti[1]/text()=$blogposter">
- </xsl:when>
- <xsl:when test="following-sibling::tr[1]/ti[1]/text()=$blogposter">
- <ti rowspan="{1+count(following-sibling::tr[ti[1]/text()=$blogposter])}"><xsl:value-of select="ti[1]"/></ti>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="ti[1]"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:copy-of select="ti[2]"/>
- </tr>
- </xsl:for-each>
- </table></body>
- </xsl:when>
-
- <xsl:when test="@glsaid">
- <xsl:attribute name="category">plans</xsl:attribute>
- <xsl:variable name="glsaid" select="@glsaid"/>
- <title>GLSA <xsl:value-of select="$glsaid"/>: <xsl:value-of select="$GLSAs//glsa[@id=$glsaid]/package[1]"/><xsl:if test="count($GLSAs//glsa[@id=$glsaid]/package)>1"> (and <xsl:value-of select="count($GLSAs//glsa[@id=$glsaid]/package)-1"/> more package<xsl:if test="count($GLSAs//glsa[@id=$glsaid]/package)>2">s</xsl:if>)</xsl:if></title>
- <date><xsl:value-of select="@date"/></date>
- <poster>Gentoo Security Team</poster>
- <body><p><b><xsl:value-of select="$GLSAs//glsa[@id=$glsaid]/title"/></b><br/><xsl:value-of select="$GLSAs//glsa[@id=$glsaid]/synopsis/text()"/><br/>See <uri link="{$GLSAs//glsa[@id=$glsaid]/link}">GLSA <xsl:value-of select="$glsaid"/></uri> for more information.</p></body>
- </xsl:when>
-
- <xsl:when test="@package">
- <xsl:attribute name="category">moo</xsl:attribute>
- <xsl:variable name="pid" select="@package"/>
- <title>New Packages</title>
- <date><xsl:value-of select="@date"/></date>
- <poster>packages.gentoo.org</poster>
- <body><table>
- <xsl:for-each select="$new-packages//feed:entry">
- <tr>
- <ti><uri link="{feed:id}"><xsl:value-of select="feed:title/feed:div/feed:span[1]"/></uri></ti>
- <ti><xsl:value-of select="feed:title/feed:div/feed:span[2]"/></ti>
- </tr>
- </xsl:for-each>
- </table></body>
- </xsl:when>
- </xsl:choose>
- </news>
- </xsl:variable>
-
- <xsl:call-template name="newscontent">
- <xsl:with-param name="thenews" select="exslt:node-set($thenews)/news"/>
- <xsl:with-param name="summary" select="'yes'"/>
- <xsl:with-param name="link" select="@link"/>
- </xsl:call-template>
- </xsl:for-each>
-
-
-
-
- <!-- Links to older news below news items -->
- <div class="news">
- <p class="newshead" lang="en">
- <b>Older News</b>
- </p>
- <ul>
- <xsl:for-each select="document('/dyn/news-index.xml')/uris/uri[position()&gt;$newsitemcount][position()&lt;20]/text()">
- <xsl:variable name="newsuri" select="."/>
- <li><b><a class="altlink" href="{$newsuri}"><xsl:value-of select="document(.)/news/title"/></a></b></li>
- </xsl:for-each>
- </ul>
- </div>
- </xsl:when>
-
- <xsl:when test="/news">
- <xsl:call-template name="newscontent">
- <xsl:with-param name="thenews" select="/news"/>
- <xsl:with-param name="summary" select="no"/>
- </xsl:call-template>
- </xsl:when>
- </xsl:choose>
- <br/>
- <table border="0" class="content">
- <tr>
- <td>
- <xsl:apply-templates select="chapter|devmap"/>
- </td>
- </tr>
- </table>
- <br/>
- <xsl:if test="/mainpage/license">
- <xsl:apply-templates select="license" />
- </xsl:if>
- <br/>
- <!--content end-->
- </td>
- <td width="1%" bgcolor="#dddaec" valign="top">
- <xsl:call-template name="rhcol"/>
- </td>
- </tr>
- <tr lang="en">
- <td align="right" class="infohead" colspan="3">
- <xsl:call-template name="copyright-footer"/>
- </td>
- </tr>
-</table>
-
-</body>
-</html>
-</xsl:template>
-
-<xsl:template match="newsitem" mode="moreblogs">
- <xsl:copy-of select="."/>
- <xsl:if test="following-sibling::*[1]/@planet">
- <xsl:apply-templates select="following-sibling::newsitem[position()=1 and @planet]" mode="moreblogs"/>
- </xsl:if>
-</xsl:template>
-
-<xsl:template name="copyright-footer">
- <xsl:variable name="isEnglish">
- <xsl:if test="string-length($glang)=0 or $glang='en'">Y</xsl:if>
- </xsl:variable>
- <xsl:variable name="www">
- <xsl:if test="$httphost!='www'">https://www.gentoo.org</xsl:if>
- </xsl:variable>
- <xsl:variable name="contact">
- <xsl:choose>
- <xsl:when test="not($isEnglish='Y' or document(concat('/main/', $glang, '/contact.xml'))/missing)">
- <xsl:value-of select="concat('/main/', $glang, '/contact.xml')"/>
- </xsl:when>
- <xsl:otherwise>/main/en/contact.xml</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-Copyright 2001-<xsl:value-of select="substring(func:today(),1,4)"/> Gentoo Foundation, Inc. Questions, Comments? <a class="highlight" href="{concat($www, $contact)}">Contact us</a>.
-</xsl:template>
-
-<!-- Mail template -->
-<xsl:template match="mail">
- <xsl:variable name="mail">
- <xsl:call-template name="smart-mail">
- <xsl:with-param name="mail" select="."/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="string-length(exslt:node-set($mail)/mail/@link)>0">
- <a href="{concat('mailto:',exslt:node-set($mail)/mail/@link)}">
- <xsl:choose>
- <xsl:when test="name(..)='author'">
- <xsl:attribute name="class">altlink</xsl:attribute>
- <b><xsl:value-of select="exslt:node-set($mail)/mail/text()"/></b>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="exslt:node-set($mail)/mail/text()"/>
- </xsl:otherwise>
- </xsl:choose>
- </a>
- </xsl:when>
- <xsl:otherwise><xsl:value-of select="exslt:node-set($mail)/mail/text()"/></xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- Author -->
-<xsl:template match="author">
- <xsl:apply-templates/>
- <xsl:if test="@title">
- <xsl:if test="$style != 'printable'"><br/></xsl:if>
- <xsl:if test="$style = 'printable'">&#160;</xsl:if>
- <i><xsl:value-of select="@title"/></i>
- </xsl:if>
- <br/>
- <xsl:if test="$style != 'printable' and position() != last()"><br/></xsl:if>
-</xsl:template>
-
-<!-- FAQ Index & Chapter -->
-<xsl:template match="faqindex|chapter|/sections/section">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <xsl:variable name="uid" select="generate-id(.)" />
- <xsl:variable name="chid">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//chapter[@uid=$uid]/preceding-sibling::chapter)"/>
- </xsl:variable>
-
- <xsl:variable name="partnum">
- <xsl:value-of select="exslt:node-set($doc-struct)//bookpart[descendant::*[@uid=$uid]]/@pos"/>
- </xsl:variable>
- <xsl:variable name="chapnum">
- <xsl:value-of select="exslt:node-set($doc-struct)//bookchap[descendant::*[@uid=$uid]]/@pos"/>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="include">
- <xsl:choose>
- <xsl:when test="$debug='1'">
- <div style="border-left:4px solid #AAA;padding-left:4px;">
- <div style="color:white;background:#AAA;font-weight:bold;padding:4px;margin-left:-4px;"><xsl:value-of select="include/@href"/></div>
- <xsl:apply-templates select="document(include/@href)//chapter"/>
- </div>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="document(include/@href)//chapter"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
-
- <xsl:when test="title">
- <p class="chaphead">
- <xsl:if test="@id">
- <a name="{@id}"/>
- </xsl:if>
-
- <xsl:choose>
- <xsl:when test="$TTOP='book' and $full != 0">
- <a name="book_part{$partnum}_chap{$chapnum}__chap{$chid}"/>
- </xsl:when>
- <xsl:otherwise>
- <a name="doc_chap{$chid}"/>
- </xsl:otherwise>
- </xsl:choose>
-
- <span class="chapnum">
- <xsl:choose>
- <xsl:when test="$TTOP='book'">
- <xsl:value-of select="$chapnum" />.<xsl:number level="multiple" format="a. " value="$chid"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$chid"/>.&#160;
- </xsl:otherwise>
- </xsl:choose>
- </span>
- <xsl:value-of select="title"/>
- </p>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test="/guide">
- <p class="chaphead">
- <span class="chapnum">
- <a name="doc_chap{$chid}"><xsl:number/>.</a>
- </span>
- </p>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:apply-templates select="section|subsection|body"/>
-
- <xsl:if test="name()='faqindex'">
- <!-- Generate FAQ index -->
-
- <xsl:for-each select="exslt:node-set($doc-struct)//chapter[position()>1]">
- <xsl:if test="section[@title]">
- <p class="secthead">
- <xsl:value-of select="@title"/>
- </p>
- <xsl:variable name="nchap"><xsl:value-of select="1+position()"/></xsl:variable>
- <ul>
- <xsl:for-each select="section">
- <xsl:if test="@title">
- <li>
- <a>
- <xsl:attribute name="href">
- <xsl:choose>
- <xsl:when test="@id">
- #<xsl:value-of select="@id"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat('#doc_chap', $nchap, '_sect')"/><xsl:number/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:value-of select="@title"/>
- </a>
- </li>
- </xsl:if>
- </xsl:for-each>
- </ul>
- </xsl:if>
- </xsl:for-each>
- </xsl:if>
- </xsl:if>
-</xsl:template>
-
-
-<!-- Section template -->
-<xsl:template match="section|/sections/section/subsection">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
-
- <xsl:variable name="uid" select="generate-id(.)" />
- <xsl:variable name="chid">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//chapter[descendant::section[@uid=$uid]]/preceding-sibling::chapter)"/>
- </xsl:variable>
- <xsl:variable name="seid">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//section[@uid=$uid]/preceding-sibling::section)"/>
- </xsl:variable>
-
- <xsl:variable name="partnum">
- <xsl:value-of select="exslt:node-set($doc-struct)//bookpart[descendant::*[@uid=$uid]]/@pos"/>
- </xsl:variable>
- <xsl:variable name="chapnum">
- <xsl:value-of select="exslt:node-set($doc-struct)//bookchap[descendant::*[@uid=$uid]]/@pos"/>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="include">
- <xsl:choose>
- <xsl:when test="$debug='1'">
- <div style="border-left:4px solid #888;padding-left:4px;">
- <div style="color:white;background:#888;font-weight:bold;padding:4px;margin-left:-4px;"><xsl:value-of select="include/@href"/></div>
- <xsl:apply-templates select="document(include/@href)//section"/>
- </div>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="document(include/@href)//section"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
-
- <xsl:when test="title">
- <xsl:variable name="sectid">
- <xsl:choose>
- <xsl:when test="$TTOP='book' and $full != 0">
- <xsl:value-of select="concat('book_part', $partnum, '_chap', $chapnum, '__chap', $chid, '_sect', $seid)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat('doc_chap', $chid, '_sect', $seid)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <p class="secthead">
- <xsl:if test="@id">
- <a name="{@id}"/></xsl:if>
- <a name="{$sectid}"><xsl:value-of select="title"/></a>
- </p>
- </xsl:when>
- </xsl:choose>
-
- <xsl:apply-templates select="body"/>
- </xsl:if>
-</xsl:template>
-
-<!-- Figure template -->
-<xsl:template match="figure">
- <xsl:variable name="uid" select="generate-id(.)" />
- <xsl:variable name="chid">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//chapter[descendant::figure[@uid=$uid]]/preceding-sibling::chapter)"/>
- </xsl:variable>
- <xsl:variable name="fignum">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//chapter[descendant::figure[@uid=$uid]]//figure[following::figure[@uid=$uid]])"/>
- </xsl:variable>
- <xsl:variable name="figid">
- <xsl:choose>
- <xsl:when test="($TTOP = 'book') and ($full != 0)">
- <xsl:value-of select="concat('book_part', exslt:node-set($doc-struct)//bookpart[descendant::figure[@uid=$uid]]/@pos, '_chap', exslt:node-set($doc-struct)//bookchap[descendant::figure[@uid=$uid]]/@pos, '__chap', $chid, '_fig', $fignum)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat('doc_chap', $chid, '_fig', $fignum)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="llink">
- <xsl:choose>
- <xsl:when test="starts-with(@link,'https://www.gentoo.org/')">
- <xsl:value-of select="concat($ROOT, substring-after(@link, 'https://www.gentoo.org/'))"/>
- </xsl:when>
- <xsl:when test="starts-with(@link,'/')">
- <xsl:value-of select="concat($ROOT, substring-after(@link, '/'))"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@link"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <br/>
- <a name="{$figid}"/>
- <table cellspacing="0" cellpadding="0" border="0">
- <tr>
- <td bgcolor="#7a5ada">
- <p class="codetitle">
- <xsl:choose>
- <xsl:when test="@caption">
- <xsl:value-of select="func:gettext('Figure')"/>&#160;<xsl:value-of select="$chid"/>.<xsl:value-of select="$fignum"/><xsl:value-of select="func:gettext('SpaceBeforeColon')"/>: <xsl:value-of select="@caption"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="func:gettext('Figure')"/>&#160;<xsl:value-of select="$chid"/>.<xsl:value-of select="$fignum"/>
- </xsl:otherwise>
- </xsl:choose>
- </p>
- </td>
- </tr>
- <tr>
- <td align="center" bgcolor="#ddddff">
- <xsl:choose>
- <xsl:when test="@short">
- <img src="{$llink}" alt="Fig. {$fignum}: {@short}"/>
- </xsl:when>
- <xsl:otherwise>
- <img src="{$llink}" alt="Fig. {$fignum}"/>
- </xsl:otherwise>
- </xsl:choose>
- </td>
- </tr>
- </table>
- <br/>
-</xsl:template>
-
-<!--figure without a caption; just a graphical element-->
-<xsl:template match="fig">
- <xsl:variable name="llink">
- <xsl:choose>
- <xsl:when test="starts-with(@link,'https://www.gentoo.org/')">
- <xsl:value-of select="concat($ROOT, substring-after(@link, 'https://www.gentoo.org/'))"/>
- </xsl:when>
- <xsl:when test="starts-with(@link,'/')">
- <xsl:value-of select="concat($ROOT, substring-after(@link, '/'))"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@link"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <center>
- <xsl:choose>
- <xsl:when test="@linkto">
- <a href="{@linkto}"><img border="0" src="{$llink}" alt="{@short}"/></a>
- </xsl:when>
- <xsl:otherwise>
- <img src="{$llink}" alt="{@short}"/>
- </xsl:otherwise>
- </xsl:choose>
- </center>
-</xsl:template>
-
-<xsl:template match="devmap">
- <h1>Gentoo Developers Map</h1>
- <p id="map" style="height:460px"/>
- <br/>
- <table id="devlinks" style="width:100%"/>
-</xsl:template>
-
-<!-- Line break -->
-<xsl:template match="br">
-<br/>
-</xsl:template>
-
-<!-- Note -->
-<xsl:template match="note">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <table class="ncontent" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td bgcolor="#bbffbb">
- <p class="note">
- <b><xsl:value-of select="func:gettext('Note')"/>: </b>
- <xsl:apply-templates/>
- </p>
- </td>
- </tr>
- </table>
- </xsl:if>
-</xsl:template>
-
-<!-- Important item -->
-<xsl:template match="impo">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <table class="ncontent" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td bgcolor="#ffffbb">
- <p class="note">
- <b><xsl:value-of select="func:gettext('Important')"/>: </b>
- <xsl:apply-templates/>
- </p>
- </td>
- </tr>
- </table>
- </xsl:if>
-</xsl:template>
-
-<!-- Warning -->
-<xsl:template match="warn">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <table class="ncontent" width="100%" border="0" cellspacing="0" cellpadding="0">
- <tr>
- <td bgcolor="#ffbbbb">
- <p class="note">
- <b><xsl:value-of select="func:gettext('Warning')"/>: </b>
- <xsl:apply-templates/>
- </p>
- </td>
- </tr>
- </table>
- </xsl:if>
-</xsl:template>
-
-<!-- Code note -->
-<xsl:template match="codenote">
-<span class="comment">
- <xsl:if test='not(starts-with(., "("))'>(</xsl:if>
- <xsl:apply-templates/>
- <xsl:if test='not(starts-with(., "("))'>)</xsl:if>
-</span>
-</xsl:template>
-
-<!-- Regular comment -->
-<xsl:template match="comment">
-<span class="code-comment"><xsl:apply-templates/></span>
-</xsl:template>
-
-<!-- Colour coding inside <pre> -->
-<xsl:template match="i">
-<span class="code-input"><xsl:apply-templates/></span>
-</xsl:template>
-
-<xsl:template match="var">
-<span class="code-variable"><xsl:apply-templates/></span>
-</xsl:template>
-
-<xsl:template match="ident">
-<span class="code-identifier"><xsl:apply-templates/></span>
-</xsl:template>
-
-<xsl:template match="keyword">
-<span class="code-keyword"><xsl:apply-templates/></span>
-</xsl:template>
-
-<xsl:template match="stmt">
-<span class="code-statement"><xsl:apply-templates/></span>
-</xsl:template>
-
-<xsl:template match="const">
-<span class="code-constant"><xsl:apply-templates/></span>
-</xsl:template>
-
-
-<!-- Bold -->
-<xsl:template match="b">
-<b><xsl:apply-templates/></b>
-</xsl:template>
-
-<!-- Superscript -->
-<xsl:template match="sup">
- <sup><xsl:apply-templates/></sup>
-</xsl:template>
-
-<!-- Subscript -->
-<xsl:template match="sub">
- <sub><xsl:apply-templates/></sub>
-</xsl:template>
-
-<!-- Brite -->
-<xsl:template match="brite">
-<font color="#ff0000">
- <b><xsl:apply-templates/></b>
-</font>
-</xsl:template>
-
-<!-- Body -->
-<xsl:template match="body">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <xsl:choose>
- <xsl:when test="include">
- <xsl:choose>
- <xsl:when test="$debug='1'">
- <div style="border-left:4px solid #666;padding-left:4px;">
- <div style="color:white;background:#666;font-weight:bold;padding:4px;margin-left:-4px;"><xsl:value-of select="include/@href"/></div>
- <xsl:apply-templates select="document(include/@href)//body"/>
- </div>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="document(include/@href)//body"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="./*[not(@test) or dyn:evaluate(@test)]"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
-</xsl:template>
-
-<!-- Command or input, not to use inside <pre> -->
-<xsl:template match="c">
-<span class="code" dir="ltr"><xsl:apply-templates/></span>
-</xsl:template>
-
-<!-- Preserve whitespace, aka Code Listing -->
-<xsl:template match="pre">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <xsl:variable name="uid" select="generate-id(.)" />
- <xsl:variable name="chid">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//chapter[descendant::pre[@uid=$uid]]/preceding-sibling::chapter)"/>
- </xsl:variable>
- <xsl:variable name="prenum">
- <xsl:value-of select="1+count(exslt:node-set($doc-struct)//chapter[descendant::pre[@uid=$uid]]//pre[following::pre[@uid=$uid]])"/>
- </xsl:variable>
- <xsl:variable name="preid">
- <xsl:choose>
- <xsl:when test="($TTOP = 'book') and ($full != 0)">
- <xsl:value-of select="concat('book_part', exslt:node-set($doc-struct)//bookpart[descendant::pre[@uid=$uid]]/@pos, '_chap', exslt:node-set($doc-struct)//bookchap[descendant::pre[@uid=$uid]]/@pos, '__chap', $chid, '_pre', $prenum)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat('doc_chap', $chid, '_pre', $prenum)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <a name="{$preid}"/>
- <table class="ntable" width="100%" cellspacing="0" cellpadding="0" border="0">
- <xsl:if test="not($httphost='archives')">
- <tr>
- <td bgcolor="#7a5ada">
- <p class="codetitle">
- <xsl:value-of select="func:gettext('CodeListing')"/>&#160;<xsl:if test="$chid"><xsl:value-of select="$chid"/>.</xsl:if><xsl:value-of select="$prenum"/>
- <xsl:if test="@caption">
- <xsl:value-of select="func:gettext('SpaceBeforeColon')"/>: <xsl:value-of select="@caption"/>
- </xsl:if>
- </p>
- </td>
- </tr>
- </xsl:if>
- <tr>
- <td bgcolor="#eeeeff" align="left" dir="ltr">
- <pre>
- <xsl:apply-templates/>
- </pre>
- </td>
- </tr>
- </table>
- </xsl:if>
-</xsl:template>
-
-<!-- Path -->
-<xsl:template match="path">
-<span class="path" dir="ltr"><xsl:apply-templates/></span>
-</xsl:template>
-
-<!-- Url -->
-<xsl:template match="uri">
-<xsl:param name="paramlink"/>
-<!-- expand templates to handle things like <uri link="http://bar"><c>foo</c></uri> -->
-<xsl:variable name="theurl">
- <xsl:choose>
- <xsl:when test="@link and contains(@link, '__FILE_')">
- <xsl:value-of select="concat(substring-before(@link,'__FILE__'),$basename,substring-after(@link,'__FILE__'))" />
- </xsl:when>
- <xsl:when test="@link"><xsl:value-of select="@link" /></xsl:when>
- <xsl:when test="contains(text(), '__FILE_')">
- <xsl:value-of select="concat(substring-before(text(),'__FILE__'),$basename,substring-after(text(),'__FILE__'))" />
- </xsl:when>
- <xsl:otherwise><xsl:value-of select="text()" /></xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:choose>
- <xsl:when test="@link">
- <xsl:choose>
- <xsl:when test="($TTOP = 'sections') and (starts-with(@link, '?'))">
- <!-- Handbook link pointing to another part/chapter when viewing a single page,
- cannot be a link because we have no idea where to link to
- Besides, we have no way of knowing the language unless told via a param -->
- <xsl:variable name="nolink"><xsl:value-of select="func:gettext('hb_file', $glang)"/></xsl:variable>
- <span title="{$nolink}"><font color="#404080">(<xsl:apply-templates/>)</font></span>
- </xsl:when>
- <xsl:when test="($TTOP = 'book') and ($full = 0) and (starts-with(@link, '?'))">
- <!-- Handbook link pointing to another part/chapter, normal case -->
- <xsl:choose>
- <xsl:when test="$style != 'printable'">
- <a href="{$link}{$theurl}"><xsl:apply-templates/></a>
- </xsl:when>
- <xsl:otherwise>
- <a href="{$link}{$theurl}&amp;style=printable"><xsl:apply-templates/></a>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:when test="($TTOP = 'book') and ($full = 1) and (starts-with(@link, '?'))">
- <!-- Handbook link pointing to another part/chapter
- Handbook is being rendered in a single page (full=1)
- Hence link needs to be rewritten as a local one
- i.e. ?part=1&chap=3#doc_chap1 must become #book_part1_chap3__chap1 Case 1a
- i.e. ?part=1&chap=3#anID must become #anID Case 1b
- or ?part=1&chap=3 must become #book_part1_chap3 Case 2
- or ?part=2 must become #book_part2 Case 3-->
- <xsl:choose>
- <xsl:when test="contains(@link, 'chap=') and contains(@link, '#doc_')">
- <!-- Link points inside a chapter (Case 1a)-->
- <xsl:variable name="linkpart" select="substring-after(substring-before($theurl, '&amp;'), '=')" />
- <xsl:variable name="linkchap" select="substring-before(substring-after(substring-after($theurl, '&amp;'), '='), '#doc_')" />
- <xsl:variable name="linkanch" select="substring-after($theurl, '#doc_')" />
- <a href="#book_part{$linkpart}_chap{$linkchap}__{$linkanch}"><xsl:apply-templates /></a>
- </xsl:when>
- <xsl:when test="contains(@link, 'chap=') and contains(@link, '#')">
- <!-- Link points inside a chapter via an ID (Case 1b)
- (IDs are expected to be unique throughout a handbook) -->
- <xsl:variable name="linkanch" select="substring-after(@link, '#')" />
- <a href="#{$linkanch}"><xsl:apply-templates /></a>
- </xsl:when>
- <xsl:when test="contains(@link, 'chap=')">
- <!-- Link points to a chapter (Case 2)-->
- <xsl:variable name="linkpart" select="substring-after(substring-before($theurl, '&amp;'), '=')" />
- <xsl:variable name="linkchap" select="substring-after(substring-after($theurl, '&amp;'), '=')" />
- <a href="#book_part{$linkpart}_chap{$linkchap}"><xsl:apply-templates /></a>
- </xsl:when>
- <xsl:otherwise>
- <!-- Link points to a part (Case 3)-->
- <xsl:variable name="linkpart" select="substring-after($theurl, '=')" />
- <a href="#book_part{$linkpart}"><xsl:apply-templates/></a>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:when test="($TTOP = 'book') and ($full = 1) and (starts-with(@link, '#'))">
- <!-- Handbook link pointing to another place in same part/chapter
- Handbook is being rendered in a single page (full=1)
- Hence link needs to be rewritten as an internal one that is unique
- for the whole handbook, i.e.
- #doc_part1_chap3 becomes #book_{UNIQUEID}_part1_chap3, but
- #anything_else_like_an_ID is left unchanged (IDs are expected to be unique throughout a handbook)-->
- <xsl:choose>
- <xsl:when test="starts-with(@link, '#doc_')">
- <xsl:variable name="locallink" select="substring-after(@link, 'doc_')" />
- <xsl:variable name="bodyid" select="generate-id(ancestor::body)"/>
- <a href="{concat('#book_part',exslt:node-set($doc-struct)//bookpart[descendant::body[@uid=$bodyid]]/@pos,'_chap',exslt:node-set($doc-struct)//bookchap[descendant::body[@uid=$bodyid]]/@pos,'__',$locallink)}"><xsl:apply-templates /></a>
- </xsl:when>
- <xsl:otherwise>
- <a href="{$theurl}"><xsl:apply-templates/></a>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
-
- <xsl:variable name="thelink">
- <xsl:choose>
- <xsl:when test="name(..)='insert' and $theurl='$redirect' and $paramlink"><xsl:value-of select="$paramlink" /></xsl:when>
- <xsl:when test="name(..)='insert' and $theurl='$originalversion' and $paramlink">
- <xsl:variable name="temp">
- <xsl:value-of select="$paramlink"/>
- <xsl:if test="$style = 'printable'">&amp;style=printable</xsl:if>
- <xsl:if test="$full != '0'">&amp;full=1</xsl:if>
- <xsl:if test="$part != '0'">&amp;part=<xsl:value-of select="$part"/></xsl:if>
- <xsl:if test="$chap != '0'">&amp;chap=<xsl:value-of select="$chap"/></xsl:if>
- </xsl:variable>
- <xsl:choose>
- <xsl:when test="contains($temp, '&amp;')">
- <xsl:value-of select="concat(substring-before($temp,'&amp;'), '?', substring-after($temp,'&amp;'))"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$temp"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise><xsl:value-of select="$theurl" /></xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <!-- Strip https://www.gentoo.org from links if running on www.g.o
- Has no effect on actual www.g.o but helps when surfing on a local copy as long as httphost is set to www as well
- Rewrite http://www.gentoo.org/cgi-bin/viewcvs/ to use sources.gentoo.org/
- -->
- <xsl:variable name="llink">
- <xsl:choose>
- <xsl:when test="starts-with($thelink, 'https://www.gentoo.org/cgi-bin/viewcvs.cgi')"><xsl:value-of select="concat('https://sources.gentoo.org/viewcvs.py', substring-after($thelink, 'https://www.gentoo.org/cgi-bin/viewcvs.cgi'))" /></xsl:when>
- <xsl:when test="starts-with($thelink, '/cgi-bin/viewcvs.cgi')"><xsl:value-of select="concat('https://sources.gentoo.org/viewcvs.py', substring-after($thelink, '/cgi-bin/viewcvs.cgi'))" /></xsl:when>
- <xsl:when test="$httphost='www' and starts-with($thelink, 'https://www.gentoo.org/')"><xsl:value-of select="substring-after($thelink, 'https://www.gentoo.org')" /></xsl:when>
- <xsl:when test="not($httphost='www') and starts-with($thelink, '/') and not(starts-with($thelink, '/~'))"><xsl:value-of select="concat('https://www.gentoo.org', $thelink)" /></xsl:when>
- <!-- Add catid to links to /doc/LL/index.xml -->
- <xsl:when test="$catid != '0' and starts-with($thelink, '/doc/') and (substring-after(substring-after($thelink, '/doc/'), '/')='' or substring-after(substring-after($thelink, '/doc/'), '/')='index.xml')">
- <xsl:value-of select="concat($thelink, '?catid=', $catid)"/>
- </xsl:when>
- <xsl:otherwise><xsl:value-of select="$thelink" /></xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <!-- Now, insert style=printable in the URL if necessary -->
- <xsl:variable name="alink">
- <xsl:choose>
- <xsl:when test="$style != 'printable' or contains($llink, 'style=printable')">
- <!-- Not printable style or style=printable already in URL, copy link -->
- <xsl:value-of select="$llink" />
- </xsl:when>
- <xsl:when test="contains($llink, '://')">
- <!-- External link, copy link -->
- <xsl:value-of select="$llink" />
- </xsl:when>
- <xsl:when test="starts-with($llink, '#')">
- <!-- Anchor, copy link -->
- <xsl:value-of select="$llink" />
- </xsl:when>
- <xsl:otherwise>
- <!-- We should have eliminated all other cases,
- style printable, local link, then insert ?style=printable -->
- <xsl:choose>
- <xsl:when test="starts-with($llink, '?')">
- <xsl:value-of select="concat( '?style=printable&amp;', substring-after($llink, '?'))" />
- </xsl:when>
- <xsl:when test="contains($llink, '.xml?')">
- <xsl:value-of select="concat(substring-before($llink, '.xml?'), '.xml?style=printable&amp;', substring-after($llink, '.xml?'))" />
- </xsl:when>
- <xsl:when test="contains($llink, '.xml#')">
- <xsl:value-of select="concat(substring-before($llink, '.xml#'), '.xml?style=printable#', substring-after($llink, '.xml#'))" />
- </xsl:when>
- <xsl:when test="substring-after($llink, '.xml') = ''">
- <xsl:value-of select="concat($llink, '?style=printable')" />
- </xsl:when>
- <xsl:otherwise>
- <!-- Have I forgotten anything?
- Copy link -->
- <xsl:value-of select="$llink" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <a href="{$alink}"><xsl:apply-templates/></a>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="loc" select="."/>
- <a href="{$loc}"><xsl:apply-templates/></a>
- </xsl:otherwise>
-</xsl:choose>
-</xsl:template>
-
-<!-- Paragraph -->
-<xsl:template match="p">
-<xsl:param name="chid"/>
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <p>
- <!-- Keep this for old files with <p class="secthead"> -->
- <xsl:if test="@class">
- <xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute>
- </xsl:if>
-
- <xsl:if test="@by">
- <xsl:attribute name="class">epigraph</xsl:attribute>
- </xsl:if>
-
- <xsl:apply-templates>
- <xsl:with-param name="chid" select="$chid"/>
- </xsl:apply-templates>
-
- <xsl:if test="@by">
- <br/><br/><span class="episig">—<xsl:value-of select="@by"/></span><br/><br/>
- </xsl:if>
- </p>
- </xsl:if>
-</xsl:template>
-
-<!-- Emphasize -->
-<xsl:template match="e">
- <span class="emphasis"><xsl:apply-templates/></span>
-</xsl:template>
-
-<!-- Table -->
-<xsl:template match="table">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <table class="ntable">
- <xsl:apply-templates/>
- </table>
- </xsl:if>
-</xsl:template>
-
-<!-- Table Row -->
-<xsl:template match="tr">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <tr>
- <xsl:if test="@id">
- <xsl:attribute name="id">
- <xsl:value-of select="@id"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </tr>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="tcolumn">
-<col width="{@width}"/>
-</xsl:template>
-
-<!-- Table Item -->
-<xsl:template match="ti">
-<td class="tableinfo">
- <xsl:if test="@align='center' or @align='right'">
- <xsl:attribute name="style"><xsl:value-of select="concat('text-align:',@align)"/></xsl:attribute>
- </xsl:if>
- <xsl:if test="@colspan">
- <xsl:attribute name="colspan"><xsl:value-of select="@colspan"/></xsl:attribute>
- </xsl:if>
- <xsl:if test="@rowspan">
- <xsl:attribute name="rowspan"><xsl:value-of select="@rowspan"/></xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
-</td>
-</xsl:template>
-
-<!-- Table Heading, no idea why <th> hasn't been used -->
-<xsl:template match="th">
-<td class="infohead">
- <xsl:if test="@colspan">
- <xsl:attribute name="colspan"><xsl:value-of select="@colspan"/></xsl:attribute>
- <!-- Center only when item spans several columns as
- centering all <th> might disrupt some pages.
- We might want to use a plain html <th> tag later.
- Tip: to center a single-cell title, use <th colspan="1">
- -->
- <xsl:attribute name="style">text-align:center</xsl:attribute>
- </xsl:if>
- <xsl:if test="@rowspan">
- <xsl:attribute name="rowspan"><xsl:value-of select="@rowspan"/></xsl:attribute>
- </xsl:if>
- <b>
- <xsl:apply-templates/>
- </b>
-</td>
-</xsl:template>
-
-<!-- Unnumbered List -->
-<xsl:template match="ul">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <ul>
- <xsl:apply-templates/>
- </ul>
- </xsl:if>
-</xsl:template>
-
-<!-- Ordered List -->
-<xsl:template match="ol">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <ol>
- <xsl:apply-templates/>
- </ol>
- </xsl:if>
-</xsl:template>
-
-<!-- List Item -->
-<xsl:template match="li">
- <xsl:if test="not(@test) or dyn:evaluate(@test)">
- <li>
- <xsl:apply-templates/>
- </li>
- </xsl:if>
-</xsl:template>
-
-<!-- Definition Lists -->
-<xsl:template match="dl">
-<dl><xsl:apply-templates/></dl>
-</xsl:template>
-
-<xsl:template match="dt">
-<dt><xsl:apply-templates/></dt>
-</xsl:template>
-
-<xsl:template match="dd">
-<dd><xsl:apply-templates/></dd>
-</xsl:template>
-
-<!-- NOP -->
-<xsl:template match="ignoreinemail">
-<xsl:apply-templates/>
-</xsl:template>
-
-<!-- NOP -->
-<xsl:template match="ignoreinguide">
-</xsl:template>
-
-<!-- License Tag -->
-<xsl:template match="license">
-<p class="copyright">
- <!-- Test for RTL languages -->
- <xsl:if test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:if>
- <xsl:apply-templates select="func:gettext('License')"/>
-</p>
-<xsl:comment>
- &lt;rdf:RDF xmlns="http://web.resource.org/cc/"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"&gt;
- &lt;License rdf:about="http://creativecommons.org/licenses/by-sa/2.5/"&gt;
- &lt;permits rdf:resource="http://web.resource.org/cc/Reproduction" /&gt;
- &lt;permits rdf:resource="http://web.resource.org/cc/Distribution" /&gt;
- &lt;requires rdf:resource="http://web.resource.org/cc/Notice" /&gt;
- &lt;requires rdf:resource="http://web.resource.org/cc/Attribution" /&gt;
- &lt;permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" /&gt;
- &lt;requires rdf:resource="http://web.resource.org/cc/ShareAlike" /&gt;
- &lt;/License&gt;
- &lt;/rdf:RDF&gt;
-</xsl:comment>
-</xsl:template>
-
-<!-- GLEP index -->
-<xsl:template match="glepindex">
- <table class="ntable">
- <tr>
- <td class="infohead">Number</td><td class="infohead">Type</td><td class="infohead">Status</td><td class="infohead">Title</td>
- </tr>
- <xsl:apply-templates select="document(@index)/gleps/glep">
- <xsl:with-param name="status" select="string(@status)"/>
- </xsl:apply-templates>
- </table>
-</xsl:template>
-
-<!-- One GLEP table row -->
-<xsl:template match="glep">
-<xsl:param name="status" select="''"/>
- <xsl:if test="string-length($status)=0 or contains($status, @status)">
- <tr>
- <td class="tableinfo"><a href="{@file}"><xsl:value-of select="@id"/></a></td>
- <td class="tableinfo"><xsl:value-of select="@type"/></td>
- <td class="tableinfo"><xsl:value-of select="@status"/></td>
- <td class="tableinfo"><xsl:apply-templates select="node()"/></td>
- </tr>
- </xsl:if>
-</xsl:template>
-
-
-<!-- GLSA Index -->
-<xsl:template match="glsaindex">
- <xsl:apply-templates select="document('/dyn/glsa-index.xml')/guide/chapter[1]/section[1]/body"/>
-</xsl:template>
-
-<!-- GLSA Latest (max 10) -->
-<xsl:template match="glsa-latest">
- <xsl:variable name="src" select="'/dyn/glsa-index.xml'"/>
- <table>
- <xsl:for-each select="document($src)/guide/chapter[1]/section[1]/body/table[1]/tr[position()&lt;11]">
- <tr><xsl:apply-templates/></tr>
- </xsl:for-each>
- </table>
-</xsl:template>
-
-
-<!-- Compare versions between two documents, scan handbooks if need be -->
-<xsl:template name="compare-versions">
-<xsl:param name="original"/>
-<xsl:param name="translation"/>
-
- <xsl:choose>
- <xsl:when test="$original/doc-struct/@type != $translation/doc-struct/@type">
- <xsl:text>NoOriginal</xsl:text>
- </xsl:when>
-
- <xsl:when test="/book and $full='0' and $chap != '0' and $part != '0' and not($original/doc-struct/bookpart[@pos=$part]/bookchap[@pos=$chap])">
- <xsl:text>NoOriginal</xsl:text>
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:variable name="orig-versions">
- <xsl:for-each select="$original//version">
- <xsl:value-of select="concat(.,' ')"/>
- </xsl:for-each>
- </xsl:variable>
-
- <xsl:variable name="trans-versions">
- <xsl:for-each select="$translation//version">
- <xsl:value-of select="concat(.,' ')"/>
- </xsl:for-each>
- </xsl:variable>
-
- <xsl:if test="$orig-versions != $trans-versions">Different</xsl:if>
- </xsl:otherwise>
- </xsl:choose>
-
-</xsl:template>
-
-<xsl:template name="maxdate">
-<xsl:param name="thedoc"/>
- <xsl:for-each select="$thedoc//date">
- <xsl:sort select="." order="descending" />
- <xsl:if test="position()=1"><xsl:value-of select="."/></xsl:if>
- </xsl:for-each>
-</xsl:template>
-
-<xsl:template name="contentdate">
- <xsl:variable name="docdate">
- <xsl:call-template name="maxdate">
- <xsl:with-param name="thedoc" select="exslt:node-set($doc-struct)"/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="func:gettext('Updated')/docdate">
- <xsl:apply-templates select="func:gettext('Updated')">
- <xsl:with-param name="docdate" select="$docdate"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat(func:gettext('Updated'),' ')"/> <xsl:copy-of select="func:format-date($docdate)"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template name="outdated-translation">
- <!-- Add mention that translation is outdated whenever possible in /main and /doc-->
- <xsl:if test="$glang != '' and not (//*[1]/@metadoc = 'yes') and (starts-with($link, '/doc/') or starts-with($link, '/main/') or (starts-with($link, '/proj/') and contains($link, '/gdp/'))) and not(starts-with($link, '/doc/en/') or starts-with($link, '/main/en/') or starts-with($link, '/proj/en/'))">
- <!-- We have a translation, is it up-to-date? -->
- <xsl:variable name="metadoc" select="document(concat('/doc/', $glang, '/metadoc.xml'))"/>
- <xsl:variable name="fileid" select="$metadoc/metadoc/files/file[text()=$link]/@id"/>
- <xsl:choose>
- <xsl:when test="not($fileid)">
- <!-- File is not even listed in local metadoc.xml -->
- <xsl:value-of select="func:gettext('NoIndex')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="pmetadoc" select="document($metadoc/metadoc/@parent)"/>
- <xsl:choose>
- <xsl:when test="not($pmetadoc/metadoc/files/file[@id=$fileid])">
- <!-- File is not listed in original metadoc.xml -->
- <xsl:value-of select="func:gettext('NoOriginal')"/>
- </xsl:when>
- <xsl:otherwise>
- <!-- Document is listed in both local metadoc.xml and English one, compare version numbers -->
- <xsl:variable name="pfile" select="$pmetadoc/metadoc/files/file[@id=$fileid]"/>
-
- <xsl:variable name="orig-struct" xmlns="">
- <xsl:call-template name="build-doc-struct">
- <xsl:with-param name="doc" select="document($pfile)"/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:variable name="versions">
- <xsl:call-template name="compare-versions">
- <xsl:with-param name="translation" select ="exslt:node-set($doc-struct)"/>
- <xsl:with-param name="original" select ="exslt:node-set($orig-struct)"/>
- </xsl:call-template>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="$versions = 'Different'">
- <xsl:variable name="pdocdate">
- <xsl:call-template name="maxdate">
- <xsl:with-param name="thedoc" select="exslt:node-set($orig-struct)"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="res">
- <xsl:apply-templates select="func:gettext('Outdated')">
- <xsl:with-param name="docdate" select="$pdocdate"/>
- <xsl:with-param name="paramlink" select="$pfile"/>
- </xsl:apply-templates>
- </xsl:variable>
- <xsl:copy-of select="$res"/>
- </xsl:when>
- <xsl:when test="contains($versions,'NoOriginal')">
- <xsl:value-of select="func:gettext('NoOriginal')"/>
- </xsl:when>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="docdate">
-<xsl:param name="docdate"/>
- <xsl:copy-of select="func:format-date($docdate)"/>
-</xsl:template>
-
-
-<xsl:template name="rhcol">
-<!-- Right-hand column with date/authors/ads -->
-
- <xsl:variable name="images">
- <!-- Source images from www.gentoo.org when on another server to
- prevent missing images after an update -->
- <xsl:choose>
- <xsl:when test="$httphost != 'www'">https://www.gentoo.org/</xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$ROOT"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <table border="0" cellspacing="4px" cellpadding="4px">
- <!-- Add a "printer-friendly" -->
- <xsl:if test="/book or /guide">
- <tr>
- <td class="topsep" align="center">
- <p class="altmenu">
- <xsl:variable name="PrintTip"><xsl:value-of select="func:gettext('PrintTip')"/></xsl:variable>
- <xsl:variable name="href">
- <xsl:choose>
- <xsl:when test="/book and $full != 0">
- <xsl:value-of select="concat($link, '?full=1&amp;style=printable')"/>
- </xsl:when>
- <xsl:when test="/book">
- <xsl:value-of select="concat($link, '?style=printable')"/>
- <xsl:if test="$part != '0'">&amp;part=<xsl:value-of select="$part"/></xsl:if>
- <xsl:if test="$chap != '0'">&amp;chap=<xsl:value-of select="$chap"/></xsl:if>
- </xsl:when>
- <xsl:when test="/guide">
- <xsl:value-of select="concat($link, '?style=printable')"/>
- </xsl:when>
- </xsl:choose>
- </xsl:variable>
- <a title="{$PrintTip}" class="altlink" href="{$href}"><xsl:value-of select="func:gettext('Print')"/></a>
- </p>
- </td>
- </tr>
- </xsl:if>
- <!-- Add link to full handbook -->
- <xsl:if test="$TTOP='book' and $full=0">
- <tr>
- <td class="topsep" align="center">
- <p class="altmenu">
- <xsl:variable name="ShowFullHBTip"><xsl:value-of select="func:gettext('ShowFullHBTip')"/></xsl:variable>
- <xsl:variable name="href">
- <xsl:choose>
- <xsl:when test="$part != 0 and $chap != 0">
- <xsl:value-of select="concat($link, '?full=1#book_part',$part,'_chap',$chap)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat($link, '?full=1')"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <a title="{$ShowFullHBTip}" class="altlink" href="{$href}"><xsl:value-of select="func:gettext('ShowFullHB')"/></a>
- </p>
- </td>
- </tr>
- </xsl:if>
- <xsl:if test="/book/date or /guide/date or /sections/date or /mainpage/date or /news/date">
- <tr>
- <td class="topsep">
- <!-- Test for RTL languages -->
- <xsl:choose>
- <xsl:when test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="align">center</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
-
- <p class="alttext">
- <xsl:call-template name="contentdate"/>
- </p>
- </td>
- </tr>
- <xsl:if test="/book/date or /guide/date or /sections/date or /mainpage/date">
- <xsl:variable name="outdated">
- <xsl:call-template name="outdated-translation"/>
- </xsl:variable>
- <xsl:if test="string-length($outdated) &gt; 1">
- <tr>
- <td class="topsep">
- <!-- Test for RTL languages -->
- <xsl:choose>
- <xsl:when test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="align">left</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
-
- <p class="alttext">
- <b><xsl:copy-of select="$outdated"/></b>
- </p>
- </td>
- </tr>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- <xsl:if test="abstract or document(include/@href)/*[1]/abstract">
- <tr>
- <td class="topsep">
- <!-- Test for RTL languages -->
- <xsl:choose>
- <xsl:when test="$RTL='Y'">
- <xsl:attribute name="dir">RTL</xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="align">left</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
-
- <p class="alttext">
- <!-- Abstract (summary) of the document -->
- <b><xsl:value-of select="func:gettext('Summary')"/>: </b>
- <xsl:choose>
- <xsl:when test="abstract">
- <xsl:value-of select="abstract" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="document(include/@href)/*[1]/abstract" />
- </xsl:otherwise>
- </xsl:choose>
- </p>
- </td>
- </tr>
- </xsl:if>
- <xsl:if test="/book/author or /guide/author">
- <tr>
- <td align="left" class="topsep">
- <p class="alttext">
- <!-- Authors -->
- <xsl:apply-templates select="/guide/author|/book/author"/>
- </p>
- </td>
- </tr>
- </xsl:if>
-
- <tr lang="en">
- <td align="center" class="topsep">
- <p class="alttext">
- <b>Donate</b> to support our development efforts.
- </p>
-
- <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
- <input type="hidden" name="cmd" value="_xclick"/>
- <input type="hidden" name="business" value="paypal@gentoo.org"/>
- <input type="hidden" name="item_name" value="Gentoo Linux Support"/>
- <input type="hidden" name="item_number" value="1000"/>
- <input type="hidden" name="image_url" value="/images/paypal.png"/>
- <input type="hidden" name="no_shipping" value="1"/>
- <input type="hidden" name="return" value="https://www.gentoo.org"/>
- <input type="hidden" name="cancel_return" value="https://www.gentoo.org"/>
-
- <input type="image" src="https://images.paypal.com/images/x-click-but21.gif" name="submit" alt="Donate to Gentoo"/>
- </form>
- </td>
- </tr>
- <xsl:choose>
- <xsl:when test="$ads='ads2'">
- <xsl:call-template name="ads2">
- <xsl:with-param name="images" select="$images"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="ads">
- <xsl:with-param name="images" select="$images"/>
- </xsl:call-template>
- </xsl:otherwise>
- <tr>
- <td align="center" class="topsep"/>
- </tr>
- </xsl:choose>
- </table>
-</xsl:template>
-
-<xsl:template name="newscontent">
-<xsl:param name="thenews"/>
-<xsl:param name="summary"/>
-<xsl:param name="link"/>
-
- <div class="news">
- <p class="newshead" lang="en">
- <b><xsl:value-of select="$thenews/title"/></b>
- <br/>
- <font size="0.90em">
- <xsl:choose>
- <xsl:when test="$thenews/until">
- Posted between <xsl:copy-of select="func:format-date($thenews/date)"/> and <xsl:copy-of select="func:format-date($thenews/until)"/>
- </xsl:when>
- <xsl:otherwise>
- Posted on <xsl:copy-of select="func:format-date($thenews/date)"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:variable name="poster">
- <xsl:call-template name="smart-mail">
- <xsl:with-param name="mail" select="$thenews/poster"/>
- </xsl:call-template>
- </xsl:variable>
- by <xsl:value-of select="$poster"/>
- </font>
- </p>
-
- <xsl:choose>
- <xsl:when test="$thenews/@category='birthday'">
- <img class="newsicon" src="/images/birthday_cake.png" alt="Happy Birthday"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='gentoo'">
- <img class="newsicon" src="/images/icon-gentoo.png" alt="gentoo"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='main'">
- <img class="newsicon" src="/images/icon-stick.png" alt="stick man"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='linux'">
- <img class="newsicon" src="/images/icon-penguin.png" alt="tux"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='moo'">
- <img class="newsicon" src="/images/icon-cow.png" alt="Larry the Cow"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='plans'">
- <img class="newsicon" src="/images/icon-clock.png" alt="Clock"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='planet'">
- <img class="newsicon" src="/images/G-Earth.png" alt="Planet Earth"/>
- </xsl:when>
- <!-- old ones, kept to display very very old news items -->
- <xsl:when test="$thenews/@category='alpha'">
- <img class="newsicon" src="/images/icon-alpha.gif" alt="AlphaServer GS160"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='kde'">
- <img class="newsicon" src="/images/icon-kde.png" alt="KDE"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='ibm'">
- <img class="newsicon" src="/images/icon-ibm.gif" alt="ibm"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='nvidia'">
- <img class="newsicon" src="/images/icon-nvidia.png" alt="Nvidia"/>
- </xsl:when>
- <xsl:when test="$thenews/@category='freescale'">
- <img class="newsicon" src="/images/icon-freescale.gif" alt="Freescale Semiconductor"/>
- </xsl:when>
- </xsl:choose>
-
- <div class="newsitem">
- <xsl:choose>
- <xsl:when test="$thenews/summary and $summary='yes'">
- <xsl:apply-templates select="$thenews/summary"/>
- <br/>
- <a href="{$link}"><b>(full story)</b></a>
- </xsl:when>
- <xsl:when test="$thenews/body">
- <xsl:apply-templates select="$thenews/body"/>
- </xsl:when>
- </xsl:choose>
- </div>
- </div>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/handbook.xsl b/public/xsl/handbook.xsl
deleted file mode 100644
index 491070b..0000000
--- a/public/xsl/handbook.xsl
+++ /dev/null
@@ -1,323 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:dyn="http://exslt.org/dynamic"
- xmlns:func="http://exslt.org/functions"
- xmlns:exslt="http://exslt.org/common"
- extension-element-prefixes="exslt func dyn">
-
-<!-- Define global variables; if a user has
- already defined those, this is a NOP -->
-<xsl:param name="part">0</xsl:param>
-<xsl:param name="chap">0</xsl:param>
-<xsl:param name="full">0</xsl:param>
-
-<!-- A book -->
-<xsl:template match="/book">
- <!-- If chap = 0, show an index -->
- <xsl:choose>
- <xsl:when test="$part != 0">
- <xsl:apply-templates select="part" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="doclayout"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- <sections>, i.e. when user tries to access a book file directly -->
-<xsl:template match="/sections">
- <xsl:call-template name="doclayout"/>
-</xsl:template>
-
-<!-- Content of /book -->
-<xsl:template name="bookcontent">
- <xsl:call-template name="menubar" />
- <h1><xsl:value-of select="title" /></h1>
- <xsl:if test="$style = 'printable'">
- <xsl:apply-templates select="author" />
- <br/>
- <i><xsl:call-template name="contentdate"/></i>
- <xsl:variable name="outdated">
- <xsl:call-template name="outdated-translation"/>
- </xsl:variable>
- <xsl:if test="string-length($outdated) &gt; 1">
- <br/><i><xsl:copy-of select="$outdated"/></i>
- </xsl:if>
- </xsl:if>
- <p><xsl:value-of select="func:gettext('Content')"/>:</p>
- <ul>
- <xsl:for-each select="part">
- <xsl:variable name="curpart" select="position()" />
- <li>
- <xsl:choose>
- <xsl:when test="$full = 0">
- <xsl:choose>
- <xsl:when test="$style != 'printable'">
- <b><a href="?part={$curpart}"><xsl:value-of select="title" /></a></b>
- </xsl:when>
- <xsl:otherwise>
- <b><a href="?part={$curpart}&amp;style=printable"><xsl:value-of select="title" /></a></b>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <b><a href="#book_part{$curpart}"><xsl:value-of select="title" /></a></b>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:if test="abstract">
- <br />
- <xsl:value-of select="abstract" />
- </xsl:if>
- <ol>
- <xsl:for-each select="chapter">
- <xsl:variable name="curchap" select="position()" />
- <li>
- <xsl:choose>
- <xsl:when test="$full = 0">
- <xsl:choose>
- <xsl:when test="$style != 'printable'">
- <b><a href="?part={$curpart}&amp;chap={$curchap}"><xsl:value-of select="title" /></a></b>
- </xsl:when>
- <xsl:otherwise>
- <b><a href="?part={$curpart}&amp;chap={$curchap}&amp;style=printable"><xsl:value-of select="title" /></a></b>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <b><a href="#book_part{$curpart}_chap{$curchap}"><xsl:value-of select="title" /></a></b>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:choose>
- <xsl:when test="abstract">
- <br/>
- <xsl:value-of select="abstract" />
- </xsl:when>
- <xsl:otherwise>
- <br/>
- <xsl:value-of select="document(include/@href)/*[1]/abstract" />
- </xsl:otherwise>
- </xsl:choose>
- </li>
- </xsl:for-each>
- </ol>
- </li>
- </xsl:for-each>
- </ul>
- <xsl:call-template name="menubar" />
-
- <xsl:if test="$full =1">
- <xsl:apply-templates select="part" />
- </xsl:if>
-
- <xsl:apply-templates select="/book/license" />
-</xsl:template>
-
-<!-- Part inside a book -->
-<xsl:template match="/book/part">
- <xsl:if test="(($chap != 0) and ($part = position())) or ($full = 1)">
- <xsl:variable name="pos" select="position()"/>
- <xsl:if test="$full = 1">
- <a name="book_part{$pos}"/>
- <h2><xsl:number level="multiple" format="A. " value="$pos"/><xsl:value-of select="title" /></h2>
- </xsl:if>
- <xsl:apply-templates select="chapter">
- <xsl:with-param name="partnum" select="$pos"/>
- </xsl:apply-templates>
- </xsl:if>
- <xsl:if test="($chap = 0) and ($part = position())">
- <xsl:call-template name="doclayout" />
- </xsl:if>
-</xsl:template>
-
-<!-- Content of /book/part -->
-<xsl:template name="bookpartcontent">
- <xsl:call-template name="menubar" />
- <xsl:if test="@id">
- <a name="{@id}"/>
- </xsl:if>
- <h1><xsl:number level="multiple" format="1. " value="position()"/><xsl:value-of select="title" /></h1>
- <xsl:if test="abstract">
- <p><xsl:value-of select="abstract" /></p>
- </xsl:if>
- <p><xsl:value-of select="func:gettext('Content')"/>:</p>
- <ol>
- <xsl:for-each select="chapter">
- <xsl:variable name="curpos" select="position()" />
- <xsl:if test="title">
- <li>
- <b><a href="?part={$part}&amp;chap={$curpos}"><xsl:value-of select="title" /></a></b>
- <xsl:choose>
- <xsl:when test="abstract">
- <br/>
- <xsl:value-of select="abstract" />
- </xsl:when>
- <xsl:otherwise>
- <br/>
- <xsl:value-of select="document(include/@href)/*[1]/abstract" />
- </xsl:otherwise>
- </xsl:choose>
- </li>
- </xsl:if>
- </xsl:for-each>
- </ol>
-
- <xsl:call-template name="menubar" />
- <xsl:apply-templates select="/book/license" />
-</xsl:template>
-
-<!-- Menu bar -->
-<xsl:template name="menubar">
- <xsl:variable name="prevpart" select="number($part) - 1" />
- <xsl:variable name="prevchap" select="number($chap) - 1" />
- <xsl:variable name="nextpart" select="number($part) + 1" />
- <xsl:variable name="nextchap" select="number($chap) + 1" />
- <xsl:if test="($style != 'printable') and ($full = 0)">
- <hr />
- <p>
- <!-- Previous Parts -->
- <xsl:choose>
- <xsl:when test="number($prevpart) &lt; 1">
- [ &lt;&lt; ]
- </xsl:when>
- <xsl:otherwise>
- [ <a href="{concat($link, '?part=', $prevpart)}">&lt;&lt;</a> ]
- </xsl:otherwise>
- </xsl:choose>
- <!-- Previous Chapter -->
- <xsl:choose>
- <xsl:when test="number($prevchap) &lt; 1">
- [ &lt; ]
- </xsl:when>
- <xsl:otherwise>
- [ <a href="{concat($link, '?part=', $part, '&amp;chap=', $prevchap)}">&lt;</a> ]
- </xsl:otherwise>
- </xsl:choose>
- <!-- Content -->
- [ <a href="{$link}"><xsl:value-of select="func:gettext('Home')"/></a> ]
- <!-- Next Chapter -->
- <xsl:if test="name() = 'book'">
- [ <a href="{concat($link, '?part=1')}">&gt;</a> ]
- </xsl:if>
- <xsl:if test="name() = 'part'">
- [ <a href="{concat($link, '?part=', $part, '&amp;chap=1')}">&gt;</a> ]
- </xsl:if>
- <xsl:if test="name() = 'chapter'">
- <xsl:choose>
- <xsl:when test="last() = position()">
- [ &gt; ]
- </xsl:when>
- <xsl:otherwise>
- [ <a href="{concat($link, '?part=', $part, '&amp;chap=', $nextchap)}">&gt;</a> ]
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <!-- Next Part -->
- <xsl:if test="name() = 'book'">
- [ <a href="{concat($link, '?part=', $nextpart)}">&gt;&gt;</a> ]
- </xsl:if>
- <xsl:if test="name() = 'part'">
- <xsl:choose>
- <xsl:when test="number($part) = last()">
- [ &gt;&gt; ]
- </xsl:when>
- <xsl:otherwise>
- [ <a href="{concat($link, '?part=', $nextpart)}">&gt;&gt;</a> ]
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <xsl:if test="name() = 'chapter'">
- <xsl:choose>
- <xsl:when test="count(/book/part) = number($part)">
- [ &gt;&gt; ]
- </xsl:when>
- <xsl:otherwise>
- [ <a href="{concat($link, '?part=', $nextpart)}">&gt;&gt;</a> ]
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </p>
- <hr />
- </xsl:if>
-</xsl:template>
-
-
-<!-- Chapter inside a part -->
-<xsl:template match="/book/part/chapter">
- <xsl:param name="partnum"/>
- <xsl:variable name="pos" select="position()"/>
- <xsl:if test="($chap = position()) and ($full = 0)">
- <xsl:call-template name="doclayout">
- <xsl:with-param name="partnum" select="$partnum"/>
- <xsl:with-param name="chapnum" select="$pos"/>
- </xsl:call-template>
- </xsl:if>
- <xsl:if test="$full = 1">
- <xsl:call-template name="bookpartchaptercontent">
- <xsl:with-param name="partnum" select="$partnum"/>
- <xsl:with-param name="chapnum" select="$pos"/>
- </xsl:call-template>
- </xsl:if>
-</xsl:template>
-
-<!-- Content of /book/part/chapter -->
-<xsl:template name="bookpartchaptercontent">
- <xsl:param name="partnum"/>
- <xsl:param name="chapnum"/>
- <xsl:call-template name="menubar" />
- <xsl:if test="@id">
- <a name="{@id}"/>
- </xsl:if>
-
- <xsl:if test="$debug='1'">
- <xsl:text disable-output-escaping="yes">&lt;div style="border-left:4px solid #AAA; margin-top:4px; padding-left:4px;"&gt;</xsl:text>
- <div style="color:white;background:#AAA;font-weight:bold;padding:4px;margin-left:-4px;"><xsl:value-of select="include/@href"/></div>
- </xsl:if>
-
- <xsl:if test="$full = 1">
- <a name="book_part{$partnum}_chap{$chapnum}"/>
- <h3><xsl:number level="multiple" format="1. " value="position()"/><xsl:value-of select="title" /></h3>
- </xsl:if>
- <xsl:if test="$full = 0">
- <h1><xsl:number level="multiple" format="1. " value="position()"/><xsl:value-of select="title" /></h1>
- </xsl:if>
- <xsl:variable name="doc" select="include/@href"/>
- <xsl:variable name="FILE" select="document($doc)" />
- <xsl:if test="$full = 0">
- <!-- Chapter content only when rendering a single page -->
- <xsl:if test="count(exslt:node-set($doc-struct)//chapter)&gt;1">
- <b><xsl:value-of select="func:gettext('Content')"/>: </b>
- <ul>
- <xsl:for-each select="exslt:node-set($doc-struct)//chapter">
- <li><a href="#doc_chap{position()}" class="altlink"><xsl:value-of select="@title" /></a></li>
- </xsl:for-each>
- </ul>
- </xsl:if>
- </xsl:if>
-
- <xsl:choose>
- <xsl:when test="$full = 1">
- <xsl:apply-templates select="$FILE/sections/section[not(@test) or dyn:evaluate(@test)]">
- <xsl:with-param name="chapnum" select="$chapnum"/>
- <xsl:with-param name="partnum" select="$partnum"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="$FILE/sections/section[not(@test) or dyn:evaluate(@test)]">
- <xsl:with-param name="chapnum" select="$chapnum"/>
- <xsl:with-param name="partnum" select="$partnum"/>
- </xsl:apply-templates>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:if test="$debug='1'">
- <xsl:text disable-output-escaping="yes">&lt;/div&gt;</xsl:text>
- </xsl:if>
-
- <xsl:call-template name="menubar" />
-
- <xsl:if test="$full = 0">
- <xsl:apply-templates select="/book/license" />
- </xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/inserts.xsl b/public/xsl/inserts.xsl
deleted file mode 100644
index 6fe8fbd..0000000
--- a/public/xsl/inserts.xsl
+++ /dev/null
@@ -1,401 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:func="http://exslt.org/functions"
- xmlns:exslt="http://exslt.org/common"
- xmlns:date="http://exslt.org/dates-and-times"
- xmlns:str="http://exslt.org/strings"
- extension-element-prefixes="func date str">
-
-<xsl:variable name="alllang" select="'|ar|bg|ca|cs|da|de|el|en|es|fi|fr|he|hu|id|it|ko|ja|lt|nl|pl|pt_br|ro|ru|sr|sv|tr|vi|zh_cn|zh_tw|'"/>
-
-<func:function name="func:gettext">
- <xsl:param name="str"/>
- <xsl:param name="PLANG"/>
-
-<!-- For Debugging:
-<xsl:message>PLANG=<xsl:value-of select="$PLANG"/> || str=<xsl:value-of select="$str"/> || gLang=<xsl:value-of select="$glang"/></xsl:message>
--->
-
- <!-- Default to English version when $LANG is undefined, the lang does not
- exist, or is improperly set. Default to 'UNDEFINED STRING' when the
- requested text is unavailable.
-
- Use either the passed parameter (e.g. from metadoc.xsl)
- or the Global $glang that was initialized when loading a guide or a book or part of uri for book parts
- -->
- <xsl:variable name="LANG">
- <xsl:choose>
- <xsl:when test="$PLANG"><xsl:value-of select="$PLANG"/></xsl:when>
- <xsl:when test="$glang"><xsl:value-of select="$glang"/></xsl:when>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="contains($alllang, concat('|', $LANG,'|'))">
- <xsl:variable name="insert" select="document(concat('/doc/', $LANG, '/inserts.xml'))/inserts/insert[@name=$str]"/>
- <xsl:choose>
- <xsl:when test="$insert">
- <func:result select="$insert"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="insert-en" select="document('/doc/en/inserts.xml')/inserts/insert[@name=$str]"/>
- <xsl:choose>
- <xsl:when test="$insert-en">
- <func:result select="$insert-en"/>
- </xsl:when>
- <xsl:otherwise>
- <func:result select="'UNDEFINED STRING'"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="insert-en" select="document('/doc/en/inserts.xml')/inserts/insert[@name=$str]"/>
- <xsl:choose>
- <xsl:when test="$insert-en">
- <func:result select="$insert-en" />
- </xsl:when>
- <xsl:otherwise>
- <func:result select="'UNDEFINED STRING'"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
-</func:function>
-
-
-<!-- D A T E F O R M A T T I N G R O U T I N E S -->
-
-<func:function name="func:today">
- <func:result select="substring(date:date(),1,10)"/>
-</func:function>
-
-<func:function name="func:format-date">
- <xsl:param name="datum" />
- <xsl:param name="lingua" select="//*[1]/@lang"/>
-
- <xsl:variable name="mensis" select="document('/xsl/months.xml')"/>
-
- <xsl:variable name="NormlzD">
- <xsl:choose>
- <xsl:when test="translate(normalize-space($datum),'TODAY','today')='today'">
- <xsl:value-of select="func:today()"/>
- </xsl:when>
- <xsl:when test="starts-with($datum,'&#36;Date: ') and 'YES'=func:is-date(translate(substring($datum,8,10),'/','-'))">
- <xsl:value-of select="translate(substring($datum,8,10),'/','-')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="normalize-space($datum)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="func:is-date($NormlzD)='YES'">
- <xsl:variable name="Y"><xsl:value-of select="number(substring($NormlzD,1,4))"/></xsl:variable>
- <xsl:variable name="M"><xsl:value-of select="number(substring($NormlzD,6,2))"/></xsl:variable>
- <xsl:variable name="D"><xsl:value-of select="number(substring($NormlzD,9,2))"/></xsl:variable>
- <xsl:choose>
- <!-- Formatting per language happens here -->
-
- <!-- For complex and/or repeated cases, better use a dedicated function -->
-
- <!-- RFC-822 -->
- <xsl:when test="$lingua='RFC822'">
- <func:result select="func:format-date-rfc822($mensis, $Y, $M, $D)"/>
- </xsl:when>
-
- <!-- English -->
- <xsl:when test="$lingua='en'">
- <func:result select="func:format-date-en($mensis, $Y, $M, $D)"/>
- </xsl:when>
-
- <!-- Danish / German / Finnish / Serbian -->
- <xsl:when test="$lingua='da' or $lingua='de' or $lingua='fi' or $lingua='cs' or $lingua='sr'">
- <func:result select="concat($D, '. ', $mensis//months[@lang=$lingua]/month[position()=$M], ' ', $Y)"/>
- </xsl:when>
-
- <!-- Spanish -->
- <xsl:when test="$lingua='es' or $lingua='ca'">
- <func:result select="concat($D, ' de ', $mensis//months[@lang=$lingua]/month[position()=$M], ', ', $Y)"/>
- </xsl:when>
-
- <!-- Brazilian Portuguese -->
- <xsl:when test="$lingua='pt_br'">
- <func:result select="concat($D, ' de ', $mensis//months[@lang=$lingua]/month[position()=$M], ' de ', $Y)"/>
- </xsl:when>
-
- <!-- Hungarian -->
- <xsl:when test="$lingua='hu'">
- <func:result select="concat($Y, '. ', $mensis//months[@lang=$lingua]/month[position()=$M], ' ', $D, '.')"/>
- </xsl:when>
-
- <!-- Chinese / Japanese -->
- <xsl:when test="$lingua='zh_cn' or $lingua='zh_tw' or $lingua='ja'">
- <func:result select="concat($Y, '年 ', $M, '月 ', $D, '日 ')"/>
- </xsl:when>
-
- <!-- Korean -->
- <xsl:when test="$lingua='ko'">
- <func:result select="concat($Y, '년 ', $M, '월 ', $D, '일')"/>
- </xsl:when>
-
- <!-- French -->
- <xsl:when test="$lingua='fr'">
- <func:result select="func:format-date-fr($mensis, $Y, $M, $D)" />
- </xsl:when>
-
- <!-- Lithuanian -->
- <xsl:when test="$lingua='lt'">
- <func:result select="concat($Y, ' ', $mensis//months[@lang=$lingua]/month[position()=$M], ' ', $D)"/>
- </xsl:when>
-
- <!-- Hebrew -->
- <xsl:when test="$lingua='he'">
- <func:result select="concat($D, ' ב', $mensis//months[@lang=$lingua]/month[position()=$M], ', ', $Y)"/>
- </xsl:when>
-
- <!-- Bulgarian / Dutch / Greek / Indonesian / Italian / Polish / Romanian / Russian / Swedish / Turkish / Vietnamese -->
- <xsl:when test="$lingua='bg' or $lingua='nl' or $lingua='el' or $lingua='id' or $lingua='it' or $lingua='pl' or $lingua='ro' or $lingua='ru' or $lingua='sv' or $lingua='tr' or $lingua='vi'">
- <func:result select="concat($D, ' ', $mensis//months[@lang=$lingua]/month[position()=$M], ' ', $Y)"/>
- </xsl:when>
-
- <xsl:otherwise> <!-- Default to English -->
- <func:result select="func:format-date-en($mensis, $Y, $M, $D)" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <func:result select="$datum" />
- </xsl:otherwise>
- </xsl:choose>
-</func:function>
-
-<!-- Validate date, 1000<=YYYY<=9999, 01<=MM<=12, 01<=DD<={days in month} -->
-<func:function name="func:is-date">
- <xsl:param name="YMD" />
-
- <func:result>
- <xsl:if test="string-length($YMD)=10 and substring($YMD,5,1)='-' and substring($YMD,8,1)='-' and contains('|01|02|03|04|05|06|07|08|09|10|11|12|',concat('|',substring($YMD,6,2),'|'))">
- <xsl:variable name="Y"><xsl:value-of select="number(substring($YMD,1,4))"/></xsl:variable>
- <xsl:variable name="M"><xsl:value-of select="number(substring($YMD,6,2))"/></xsl:variable>
- <xsl:variable name="D"><xsl:value-of select="number(substring($YMD,9,2))"/></xsl:variable>
- <xsl:if test="$Y &gt;= 1000 and $Y &lt;= 9999 and $D &gt;= 1 and $D &lt;= 31">
- <xsl:choose>
- <xsl:when test="$M=4 or $M=6 or $M=9 or $M=11">
- <xsl:if test="$D&lt;=30">YES</xsl:if>
- </xsl:when>
- <xsl:when test="$M=2 and ((($Y mod 4 = 0) and ($Y mod 100 != 0)) or ($Y mod 400 = 0))">
- <xsl:if test="$D&lt;=29">YES</xsl:if>
- </xsl:when>
- <xsl:when test="$M=2">
- <xsl:if test="$D&lt;=28">YES</xsl:if>
- </xsl:when>
- <xsl:otherwise>YES</xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:if>
- </func:result>
-</func:function>
-
-<!-- Return number of days between YYYY-MM-DD formatted dates
- Nan if invalid or ill-formatted dates are passed
- Negative if D0 > D1
--->
-<func:function name="func:days-between">
- <xsl:param name="D0"/>
- <xsl:param name="D1"/>
- <xsl:choose>
- <xsl:when test="func:is-date($D0)='YES' and func:is-date($D1)='YES'">
- <xsl:variable name="Y0"><xsl:value-of select="substring($D0,1,4)"/></xsl:variable>
- <xsl:variable name="Y1"><xsl:value-of select="substring($D1,1,4)"/></xsl:variable>
- <xsl:choose>
- <xsl:when test="$Y0 = $Y1">
- <func:result select="date:day-in-year($D1) - date:day-in-year($D0)" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="ndays" xmlns="">
- <xsl:choose>
- <xsl:when test="number($Y0) &lt; number($Y1)">
- <!-- Days left in first year -->
- <d><xsl:value-of select="365 - date:day-in-year($D0)"/></d>
- <!-- Extra day in 1st year? -->
- <xsl:if test="date:leap-year($D0)"><d>1</d></xsl:if>
- <!-- Days into last year -->
- <d><xsl:value-of select="date:day-in-year($D1)"/></d>
- <!-- Years in ]y0,y1[ -->
- <xsl:if test="(number($Y1)-number($Y0)) > 1">
- <!-- Add all 29/02 -->
- <xsl:call-template name="add-leap-years-in-between">
- <xsl:with-param name="y0" select="$Y0+1"/>
- <xsl:with-param name="y1" select="$Y1"/>
- </xsl:call-template>
- <!-- 365 * years -->
- <d><xsl:value-of select="(number($Y1)-number($Y0)-1)*365"/></d>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <!-- Same thing, but swap dates & change sign -->
- <d><xsl:value-of select="date:day-in-year($D1) - 365"/></d>
- <xsl:if test="date:leap-year($D1)"><d>-1</d></xsl:if>
- <d><xsl:value-of select="-date:day-in-year($D0)"/></d>
- <xsl:if test="(number($Y0)-number($Y1)) > 1">
- <xsl:call-template name="add-leap-years-in-between">
- <xsl:with-param name="y0" select="$Y1+1"/>
- <xsl:with-param name="y1" select="$Y0"/>
- <xsl:with-param name="plusmin" select="-1"/>
- </xsl:call-template>
- <d><xsl:value-of select="(number($Y1)-number($Y0)+1)*365"/></d>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <func:result select="sum(exslt:node-set($ndays)/d)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <func:result select="number('NaN')" />
- </xsl:otherwise>
- </xsl:choose>
-</func:function>
-
-<xsl:template name="add-leap-years-in-between">
- <xsl:param name="y0"/>
- <xsl:param name="y1"/>
- <xsl:param name="plusmin" select="1"/>
- <xsl:if test="number($y1)>number($y0)">
- <xsl:if test="date:leap-year($y0)"><d xmlns=""><xsl:value-of select="$plusmin"/></d></xsl:if>
- <xsl:call-template name="add-leap-years-in-between">
- <xsl:with-param name="y0" select="$y0+1"/>
- <xsl:with-param name="y1" select="$y1"/>
- <xsl:with-param name="plusmin" select="$plusmin"/>
- </xsl:call-template>
- </xsl:if>
-</xsl:template>
-
-
-<!-- Format date according to RFC822, time is set to 00:00:00 UTC,
- Day of the week is optional, we do not output it
- RFC says YY but YYYY is widely accepted
- -->
-<func:function name="func:format-date-rfc822">
- <xsl:param name="mensis" />
- <xsl:param name="Y" />
- <xsl:param name="M" />
- <xsl:param name="D" />
- <func:result select="concat($D, ' ', substring($mensis//months[@lang='en']/month[position()=$M],1,3), ' ', $Y, ' 00:00:00 GMT')" />
-</func:function>
-
-<!-- Format date in ENGLISH -->
-<func:function name="func:format-date-en">
- <xsl:param name="mensis" />
- <xsl:param name="Y" />
- <xsl:param name="M" />
- <xsl:param name="D" />
- <func:result select="concat($mensis//months[@lang='en']/month[position()=$M], ' ', $D, ', ', $Y)" />
-</func:function>
-
-<!-- Format date in FRENCH -->
-<func:function name="func:format-date-fr">
- <xsl:param name="mensis" />
- <xsl:param name="Y" />
- <xsl:param name="M" />
- <xsl:param name="D" />
- <func:result>
- <xsl:value-of select="$D"/>
- <xsl:if test="$D=1"><sup>er</sup></xsl:if>
- <xsl:value-of select="concat(' ', $mensis//months[@lang='fr']/month[position()=$M], ' ', $Y)"/>
- </func:result>
-</func:function>
-
-
-<!-- Eval dynamic test on conditional tags -->
-<func:function name="func:keyval">
- <xsl:param name="key"/>
- <xsl:if test="not(exslt:node-set($VALUES)/values/key[@id=$key])">
- <xsl:message><xsl:value-of select="concat('Missing value for key ', $key)"/></xsl:message>
- </xsl:if>
- <func:result select="exslt:node-set($VALUES)/values/key[@id=$key]"/>
-</func:function>
-
-<!-- Handle key values -->
-<xsl:variable name="VALUES">
- <xsl:if test="/*[1]/values">
- <xsl:copy-of select="/*[1]/values"/>
- </xsl:if>
-</xsl:variable>
-
-<xsl:template match="keyval">
- <xsl:variable name="id" select="@id"/>
- <xsl:choose>
- <xsl:when test="exslt:node-set($VALUES)/values/key[@id=$id]">
- <xsl:value-of select="exslt:node-set($VALUES)/values/key[@id=$id]"/>
- </xsl:when>
- <xsl:otherwise>
- <span class="missing-value">${<xsl:value-of select="$id"/>}</span>
- <xsl:message><xsl:value-of select="concat('Missing value for key ', $id)"/></xsl:message>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-<!-- Use as many ../ as necessary to go back to / from current dir -->
-<xsl:template name="relative-root">
-<xsl:param name="path"/>
- <xsl:for-each select="str:tokenize($path, '/')">
- <xsl:choose>
- <xsl:when test="position()=1 and position()=last()">
- <xsl:text>/</xsl:text>
- </xsl:when>
- <xsl:when test="position()>1">
- <xsl:text>../</xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:for-each>
-</xsl:template>
-
-
-<!-- Define some globals that can be used throughout the stylesheets -->
-
-<!-- Top element name e.g. "book" -->
-<xsl:variable name="TTOP"><xsl:value-of select="name(//*[1])" /></xsl:variable>
-
-<!-- Value of top element's link attribute e.g. "handbook.xml" -->
-<xsl:param name="link"><xsl:value-of select="//*[1]/@link" /></xsl:param>
-
-<!-- Value of top element's lang attribute e.g. "pt_br" -->
-<xsl:variable name="glang">
- <xsl:choose>
- <xsl:when test="//*[1]/@lang and contains($alllang, concat('|', //*[1]/@lang,'|'))">
- <xsl:value-of select="//*[1]/@lang" />
- </xsl:when>
- <!-- Default to language in path when @lang is undefined -->
- <xsl:when test="contains($alllang, concat('|', substring-before(substring-after(substring-after($link,'/'),'/'),'/'), '|'))">
- <xsl:value-of select="substring-before(substring-after(substring-after($link,'/'),'/'),'/')" />
- </xsl:when>
- <xsl:otherwise>en</xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:variable name="RTL"><xsl:if test="$glang='he' or $glang='ar'">Y</xsl:if></xsl:variable>
-
-<xsl:variable name="ROOT">
- <xsl:choose>
- <xsl:when test="not(starts-with($link, '/errors/'))">
- <xsl:call-template name="relative-root">
- <xsl:with-param name="path" select="$link"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>/</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:template match="/">
- <xsl:apply-templates/>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/mail.xsl b/public/xsl/mail.xsl
deleted file mode 100644
index a094105..0000000
--- a/public/xsl/mail.xsl
+++ /dev/null
@@ -1,183 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:exslt="http://exslt.org/common"
- extension-element-prefixes="exslt">
-
-<!-- Process <mail> tags, in a separate .xsl to be included by both
- guide.xsl and GWN-to-text converter
- -->
-
-<!-- Get the list of devs from the roll-call -->
-<xsl:variable name="ALL-DEVS" xmlns="">
- <!-- The following embedded <xsl:choose> tags may look a bit verbose,
- but they save using document() twice, once to test, once to load.
- The roll-call is a large file and using document() twice on it is quite slow -->
- <xsl:choose>
- <xsl:when test="$httphost='www'">
- <!-- On www.g.o (default case), roll-call must be userinfo.xml -->
- <xsl:call-template name="load-devs">
- <xsl:with-param name="roll-call" select="document('/proj/en/devrel/roll-call/userinfo.xml')"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <!-- Just in case the roll-call is available, wherever we are -->
- <xsl:variable name="local" select="document('/proj/en/devrel/roll-call/userinfo.xml')"/>
- <xsl:choose>
- <xsl:when test="not($local/missing)">
- <xsl:call-template name="load-devs">
- <xsl:with-param name="roll-call" select="$local"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <!-- On dev.g.o, try /doc/roll-call.xml as a fallback -->
- <xsl:variable name="fallback" select="document('/doc/roll-call.xml')"/>
- <xsl:choose>
- <xsl:when test="$httphost='dev' and not($fallback/missing)">
- <xsl:call-template name="load-devs">
- <xsl:with-param name="roll-call" select="$fallback"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <!-- No other choice than to hit www.g.o which could fail, *is slow* AND *disables caching* -->
- <xsl:call-template name="load-devs">
- <xsl:with-param name="roll-call" select="document('http://www.gentoo.org/proj/en/devrel/roll-call/devlist.xml?mode=xml')"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:variable>
-
-<xsl:template name="load-devs" xmlns="">
-<xsl:param name="roll-call"/>
- <devs>
- <xsl:for-each select="$roll-call/userlist/user">
- <user username="{translate(@username,'QWERTYUIOPLKJHGFDSAZXCVBNM','qwertyuioplkjhgfdsazxcvbnm')}">
- <xsl:if test="translate(status,'TIRED','tired')='retired'">
- <xsl:attribute name="retired"/>
- </xsl:if>
- <xsl:copy-of select="realname"/>
- <xsl:copy-of select="email"/>
- </user>
- <!-- Add another entry for each alias, much easier later on to find right email/name based on an alias -->
- <xsl:for-each select="alias">
- <user username="{.}">
- <xsl:if test="translate(../status,'TIRED','tired')='retired'">
- <xsl:attribute name="retired"/>
- </xsl:if>
- <xsl:copy-of select="../realname"/>
- <xsl:copy-of select="../email"/>
- </user>
- </xsl:for-each>
- </xsl:for-each>
- </devs>
-</xsl:template>
-
-<!-- Process mail tag, see if we have a Gentoo dev, add @gentoo.org if required
- and pull name from roll-call if required
- Returns an xml element named mail with optional link attribute
- -->
-<xsl:template name="smart-mail" xmlns="">
-<xsl:param name="mail"/>
-<xsl:if test="string-length($mail/@link)>0 or string-length($mail/text())>0">
-
- <xsl:variable name="gnick">
- <xsl:choose>
- <xsl:when test="string-length($mail/@link)=0 and not(contains($mail/text(),'@'))">
- <!-- <mail>nick</mail> -->
- <xsl:value-of select="translate($mail/text(),'QWERTYUIOPLKJHGFDSAZXCVBNM','qwertyuioplkjhgfdsazxcvbnm')"/>
- </xsl:when>
- <xsl:when test="string-length($mail/@link)=0 and contains($mail/text(),'@gentoo.org')">
- <!-- <mail>nick@gentoo.org</mail> -->
- <xsl:value-of select="translate(substring-before($mail/text(), '@'),'QWERTYUIOPLKJHGFDSAZXCVBNM','qwertyuioplkjhgfdsazxcvbnm')"/>
- </xsl:when>
- <xsl:when test="string-length($mail/@link)>0 and not(contains($mail/@link,'@'))">
- <!-- <mail link="nick">blah blah</mail> -->
- <xsl:value-of select="translate($mail/@link,'QWERTYUIOPLKJHGFDSAZXCVBNM','qwertyuioplkjhgfdsazxcvbnm')"/>
- </xsl:when>
- <xsl:when test="contains($mail/@link,'@gentoo.org')">
- <!-- <mail link="nick@gentoo.org">blah blah</mail> -->
- <xsl:value-of select="translate(substring-before($mail/@link, '@gentoo.org'),'QWERTYUIOPLKJHGFDSAZXCVBNM','qwertyuioplkjhgfdsazxcvbnm')"/>
- </xsl:when>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="gmail">
- <xsl:if test="string-length($gnick)>0">
- <xsl:choose>
- <xsl:when test="exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick and @retired]">
- <xsl:value-of select="exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/email[substring-after(text(),'@')!='gentoo.org'][1]"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/email[substring-after(text(),'@')='gentoo.org'][1]"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:variable>
-
- <xsl:variable name="gname">
- <xsl:if test="string-length($gnick)>0">
- <xsl:choose>
- <xsl:when test="exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/realname/@fullname">
- <xsl:value-of select="exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/realname/@fullname"/>
- </xsl:when>
- <xsl:when test="exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/realname[firstname or familyname]">
- <xsl:value-of select="concat(exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/realname/firstname,' ',exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick]/realname/familyname)"/>
- </xsl:when>
- </xsl:choose>
- </xsl:if>
- </xsl:variable>
-
- <xsl:variable name="href">
- <xsl:choose>
- <xsl:when test="string-length($gname)>0 and string-length($gmail)=0 and exslt:node-set($ALL-DEVS)/devs/user[@username=$gnick and @retired]"/>
- <xsl:when test="string-length($gmail)>0">
- <xsl:value-of select="$gmail"/>
- </xsl:when>
- <xsl:when test="string-length($mail/@link)>0 and not(contains($mail/@link,'@'))">
- <xsl:value-of select="concat($mail/@link, '@gentoo.org')"/>
- </xsl:when>
- <xsl:when test="string-length($mail/@link)>0">
- <xsl:value-of select="$mail/@link"/>
- </xsl:when>
- <xsl:when test="string-length($mail/text())>0">
- <xsl:value-of select="$mail/text()"/>
- </xsl:when>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:variable name="content">
- <xsl:choose>
- <xsl:when test="string-length($mail/@link)>0 and string-length($mail/text())>0">
- <xsl:value-of select="$mail/text()"/>
- </xsl:when>
- <xsl:when test="string-length($gname)>0">
- <xsl:value-of select="$gname"/>
- </xsl:when>
- <xsl:when test="string-length($gmail)>0 and string-length($mail/text())=0">
- <xsl:value-of select="$gmail"/>
- </xsl:when>
- <xsl:when test="string-length($mail/text())=0 and string-length($mail/@link)>0">
- <xsl:value-of select="$mail/@link"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$mail/text()"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <mail>
- <xsl:if test="string-length($href)>0">
- <xsl:attribute name="link">
- <xsl:value-of select="$href"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:value-of select="$content"/>
- </mail>
-
-</xsl:if>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/menu.xsl b/public/xsl/menu.xsl
deleted file mode 100644
index 01ce2c7..0000000
--- a/public/xsl/menu.xsl
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
- xmlns:exslt="http://exslt.org/common"
- xmlns:func="http://exslt.org/functions"
- xmlns:dyn="http://exslt.org/dynamic"
- xmlns:str="http://exslt.org/strings"
-
- extension-element-prefixes="exslt func dyn str" >
-
-<xsl:template match="/menu/group">
- <xsl:if test="@title and @top='N'">
- <xsl:value-of select="@title"/><br/>
- </xsl:if>
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="/menu/group/item">
- <xsl:variable name="www"><xsl:if test="$httphost!='www'">http://www.gentoo.org</xsl:if></xsl:variable>
-
- <xsl:variable name="href">
- <xsl:choose>
- <xsl:when test="not(starts-with(@href, '/'))">
- <xsl:value-of select="@href"/>
- </xsl:when>
- <xsl:when test="string-length($glang)=0 or $glang='en'">
- <xsl:value-of select="concat($www, @href)"/>
- </xsl:when>
- <xsl:when test="(substring(@href,string-length(@href))='/') and not(document(concat(substring-before(@href,'/en/'), '/', $glang, '/', substring-after(@href,'/en/'), 'index.xml'))/missing)">
- <xsl:value-of select="concat($www, substring-before(@href,'/en/'), '/', $glang, '/', substring-after(@href,'/en/'))"/>
- </xsl:when>
- <xsl:when test="not (substring(@href,string-length(@href))='/') and not(document(concat(substring-before(@href,'/en/'), '/', $glang, '/', substring-after(@href,'/en/')))/missing)">
- <xsl:value-of select="concat($www, substring-before(@href,'/en/'), '/', $glang, '/', substring-after(@href,'/en/'))"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat($www, @href)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="../@top='N'">
- <a class="altlink" href="{concat($href,@param)}"><xsl:value-of select="@label"/></a>
- <br/><xsl:if test="not(following-sibling::item)"><br/></xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <a class="menulink" href="{concat($href,@param)}">
- <xsl:if test="starts-with($link, $href)">
- <xsl:attribute name="class">highlight</xsl:attribute>
- </xsl:if>
- <xsl:value-of select="@label"/>
- </a>
- <xsl:if test="following-sibling::item"> | </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-</xsl:stylesheet>
diff --git a/public/xsl/util.xsl b/public/xsl/util.xsl
deleted file mode 100644
index 3e5a5b3..0000000
--- a/public/xsl/util.xsl
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:exslt="http://exslt.org/common"
- extension-element-prefixes="exslt">
-
-<xsl:template name="fullname">
- <xsl:param name="nick" select="none"/>
- <xsl:param name="fallback" select="false"/>
- <xsl:param name="parent" select="false"/>
- <xsl:param name="rollcall" select='document("/proj/en/devrel/roll-call/userinfo.xml")'/>
- <xsl:if test='not($nick="none")'>
- <xsl:variable name="user" select='exslt:node-set($rollcall)//user[@username=translate($nick, "ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")]'/>
- <xsl:choose>
- <xsl:when test='$user'>
- <xsl:for-each select='$user'>
- <xsl:if test='$parent="true"'><xsl:text>(</xsl:text></xsl:if>
- <xsl:choose>
- <xsl:when test="realname/@fullname">
- <xsl:value-of select="realname/@fullname"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="realname/firstname/text()"/>
- <xsl:text> </xsl:text>
- <xsl:value-of select="realname/familyname/text()"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:if test='$parent="true"'><xsl:text>)</xsl:text></xsl:if>
- </xsl:for-each>
- </xsl:when>
- <xsl:otherwise>
- <xsl:if test='$fallback="true"'>
- <xsl:if test='$parent="true"'><xsl:text>(</xsl:text></xsl:if>
- <xsl:value-of select="$nick"/>
- <xsl:if test='$parent="true"'><xsl:text>)</xsl:text></xsl:if>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
-</xsl:template>
-
-
-
-<!-- Extract file name from a link -->
-<xsl:template name="filename">
-<xsl:param name="path"/>
- <xsl:choose>
- <!-- $path is a directory, assume file name is index.xml -->
- <xsl:when test="'/'=substring($path,string-length($path))">index.xml</xsl:when>
- <xsl:when test="contains($path, '/')">
- <xsl:call-template name="filename">
- <xsl:with-param name="path" select="substring-after($path, '/')"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$path"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-
-</xsl:stylesheet>
diff --git a/script/config_init b/script/config_init
deleted file mode 100755
index c4d81e2..0000000
--- a/script/config_init
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env ruby
-PWD = File.dirname(__FILE__)
-
-begin
- require 'yaml'
-
- puts "Initializing GLSAMaker 2 configuration in '#{File.expand_path(PWD + '/../')}'..."
-
- File.umask 0077
-
- puts "Reading configuration..."
- require PWD + '/../tmp/deploy.private.rb'
-
- Dir.chdir(File.join(PWD, '../config')) do
- puts "Setting database.yml..."
- y = YAML.load(open('database.yml.mysql'))
-
- if DB_CONN == :tcp
- y['production']['host'] = DB_HOST
- y['production']['port'] = DB_PORT
- elsif DB_CONN == :sock
- y['production']['socket'] = DB_SOCK
- end
-
- y['production']['username'] = DB_USER
- y['production']['password'] = DB_PASS
- y['production']['database'] = DB_DB
-
- File.open('database.yml', 'w') {|f| YAML.dump(y, f) }
-
- puts "Creating initializers/glsamaker.rb..."
- File.open('initializers/glsamaker.rb', 'w') do |f|
- f.write INITIALIZER
- end
- end
-
- puts "Removing deploy configuration"
- File.unlink(PWD + '/../tmp/deploy.private.rb')
-
- puts 'all done!'
-rescue Exception => e
- $stderr.puts "!! Failed: #{e.message}"
- exit 1
-end
diff --git a/script/db-backup b/script/db-backup
deleted file mode 100755
index e89cd38..0000000
--- a/script/db-backup
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env ruby
-
-# Log to STDOUT if in Rails
-if ENV.include?('RAILS_ENV') && !Object.const_defined?('RAILS_DEFAULT_LOGGER') && ENV.include?('RAILS_LOG_SQL')
- require 'logger'
- RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
-end
-
-DUMP_CMD = '/usr/bin/mk-parallel-dump'
-
-require(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
-
-dbc = Cve.configurations[RAILS_ENV]
-opts = []
-opts << '-u' << dbc['username']
-opts << '-p' << dbc['password']
-if dbc.include?('socket') then
- opts << '-S' << dbc['socket']
-else
- opts << '-h' << dbc['host']
- opts << '--port' << dbc['port'] if dbc.include?('port')
-end
-opts << '--databases' << dbc['database']
-
-cmd = ([DUMP_CMD]+opts+ARGV).join(' ')
-#print "#{cmd}\n"
-exec cmd
-
-# vim: ts=2 sw=2 et ft=ruby sts=2 tw=72 nospell:
diff --git a/script/rails b/script/rails
deleted file mode 100755
index f8da2cf..0000000
--- a/script/rails
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env ruby
-# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
-
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require File.expand_path('../../config/boot', __FILE__)
-require 'rails/commands'
diff --git a/script/update-portage-cache b/script/update-portage-cache
deleted file mode 100755
index 451a7ba..0000000
--- a/script/update-portage-cache
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-# This populates the cache for GLSAMaker to fetch data about packages, and is only meant for running on production.
-DESTDIR=/var/cache/glsamaker-portage/
-SYNC='rsync://rsync.gentoo.org/gentoo-portage'
-RSYNC='/usr/bin/rsync'
-OPTIONS="-aq --delete-after"
-OPTIONS+=" --include=*/*/metadata.xml"
-OPTIONS+=" --include=metadata/*/* --include=metadata/*/*/*"
-OPTIONS+=" --exclude=licenses/ --exclude=eclass/ --exclude=packages/"
-OPTIONS+=" --exclude=skel.* --exclude=distfiles/ --exclude=profiles/"
-OPTIONS+=" --exclude=header.txt"
-OPTIONS+=" --exclude=*/*/*"
-
-"${RSYNC}" ${OPTIONS} "${SYNC}" "${DESTDIR}"
diff --git a/test/fixtures/.gitkeep b/test/fixtures/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/test/fixtures/.gitkeep
+++ /dev/null
diff --git a/test/fixtures/bugs.yml b/test/fixtures/bugs.yml
deleted file mode 100644
index f275338..0000000
--- a/test/fixtures/bugs.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-bug_one:
- bug_id: 236060
- title: dev-lang/ruby <1.8.6_p287-r1 REXML DoS Vulnerability (CVE-2008-3790)
- whiteboard: "B3? [glsa]"
- revision_id: 1
-
-bug_two:
- bug_id: 260006
- title: "<dev-lang/ruby-{1.8.6_p287-r{5, 12}, 1.8.7_p72-r2}: X.509 certificate spoofing vulnerability (CVE-2009-0642)"
- whiteboard: "B4 [noglsa]"
- revision_id: 1 \ No newline at end of file
diff --git a/test/fixtures/comments.yml b/test/fixtures/comments.yml
deleted file mode 100644
index 09bb9c0..0000000
--- a/test/fixtures/comments.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-comment:
- glsa_id: 2
- user_id: 7
- text: Regular comment
- rating: neutral
-
-approval:
- glsa_id: 2
- user_id: 7
- text: Approval
- rating: approval \ No newline at end of file
diff --git a/test/fixtures/cpes.yml b/test/fixtures/cpes.yml
deleted file mode 100644
index 5bf0293..0000000
--- a/test/fixtures/cpes.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/test/fixtures/cve_assignments.yml b/test/fixtures/cve_assignments.yml
deleted file mode 100644
index fc3f7d3..0000000
--- a/test/fixtures/cve_assignments.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# This model initially had no columns defined. If you add columns to the
-# model remove the '{}' from the fixture names and add the columns immediately
-# below each fixture, per the syntax in the comments below
-#
-# column: value
-#
-# column: value
diff --git a/test/fixtures/cve_changes.yml b/test/fixtures/cve_changes.yml
deleted file mode 100644
index 5bf0293..0000000
--- a/test/fixtures/cve_changes.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/test/fixtures/cve_comments.yml b/test/fixtures/cve_comments.yml
deleted file mode 100644
index 5bf0293..0000000
--- a/test/fixtures/cve_comments.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/test/fixtures/cve_references.yml b/test/fixtures/cve_references.yml
deleted file mode 100644
index 5bf0293..0000000
--- a/test/fixtures/cve_references.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-# one:
-# column: value
-#
-# two:
-# column: value
diff --git a/test/fixtures/cves.yml b/test/fixtures/cves.yml
deleted file mode 100644
index 50372d2..0000000
--- a/test/fixtures/cves.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-cve_one:
- cve_id: CVE-2004-1776
- summary: Cisco IOS 12.1(3) and 12.1(3)T allows remote attackers to read and modify device configuration data via the cable-docsis read-write community string used by the Data Over Cable Service Interface Specification (DOCSIS) standard.
- cvss: 7.5/AV:N/AC:L/Au:N/C:P/I:P/A:P
- state: NFU
- published_at: 2004-01-01 20:42:00
-
-cve_two:
- cve_id: CVE-2004-1777
- summary: "A 'range check error' in Skype for Windows before 0.98.0.28 allows local and remote attackers to cause a denial of service (application crash) via long command line arguments or a long callto:// URL, a different vulnerability than CVE-2004-1114."
- cvss: 7.5/AV:N/AC:L/Au:N/C:P/I:P/A:P
- state: NEW
- published_at: 2004-01-01 20:42:00 \ No newline at end of file
diff --git a/test/fixtures/glsa_mailer/approval b/test/fixtures/glsa_mailer/approval
deleted file mode 100644
index f5bb7ef..0000000
--- a/test/fixtures/glsa_mailer/approval
+++ /dev/null
@@ -1,3 +0,0 @@
-GlsaMailer#approval
-
-Find me in app/views/glsa_mailer/approval.erb
diff --git a/test/fixtures/glsa_mailer/comment b/test/fixtures/glsa_mailer/comment
deleted file mode 100644
index 28c3480..0000000
--- a/test/fixtures/glsa_mailer/comment
+++ /dev/null
@@ -1,3 +0,0 @@
-GlsaMailer#comment
-
-Find me in app/views/glsa_mailer/comment.erb
diff --git a/test/fixtures/glsa_mailer/edit b/test/fixtures/glsa_mailer/edit
deleted file mode 100644
index d95acb2..0000000
--- a/test/fixtures/glsa_mailer/edit
+++ /dev/null
@@ -1,3 +0,0 @@
-GlsaMailer#edit
-
-Find me in app/views/glsa_mailer/edit.erb
diff --git a/test/fixtures/glsa_mailer/request b/test/fixtures/glsa_mailer/request
deleted file mode 100644
index 71590e3..0000000
--- a/test/fixtures/glsa_mailer/request
+++ /dev/null
@@ -1,3 +0,0 @@
-GlsaMailer#request
-
-Find me in app/views/glsa_mailer/request.erb
diff --git a/test/fixtures/glsa_mailer/sent b/test/fixtures/glsa_mailer/sent
deleted file mode 100644
index e7a8755..0000000
--- a/test/fixtures/glsa_mailer/sent
+++ /dev/null
@@ -1,3 +0,0 @@
-GlsaMailer#sent
-
-Find me in app/views/glsa_mailer/sent.erb
diff --git a/test/fixtures/glsas.yml b/test/fixtures/glsas.yml
deleted file mode 100644
index af96ba5..0000000
--- a/test/fixtures/glsas.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-glsa_one:
- id: 1
- glsa_id: GLSA-200901-01
-
-glsa_two:
- id: 2
- glsa_id: GLSA-200901-02
- requester: 1
- submitter: 1
-
-restricted_glsa:
- id: 3
- glsa_id: GLSA-201101-01
- restricted: true
- status: draft
- requester: 1
- submitter: 1
-
-contributor_draft:
- id: 4
- glsa_id: deadbabe
- status: draft
- requester: 4
- submitter: 4 \ No newline at end of file
diff --git a/test/fixtures/packages.yml b/test/fixtures/packages.yml
deleted file mode 100644
index a1b44ba..0000000
--- a/test/fixtures/packages.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-package_one:
- my_type: vulnerable
- atom: dev-lang/ruby
- version: 1.8.7_p334
- comp: '<'
- slot: '1.8'
- arch: '*'
- automatic: 1
- revision_id: 1
-
-package_two:
- my_type: unaffected
- atom: dev-lang/ruby
- version: 1.8.7_p334
- comp: '>='
- arch: '*'
- slot: '1.8'
- automatic: 1
- revision_id: 1
diff --git a/test/fixtures/references.yml b/test/fixtures/references.yml
deleted file mode 100644
index 50867bd..0000000
--- a/test/fixtures/references.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-reference_one:
- id: 1
- revision_id: 2
- title: Reference 1 Title
- url: http://reference-1-title.com/ref.html
-
-reference_two:
- id: 2
- revision_id: 1
- title: Reference 2 Title
- url: http://reference-2-title.com/ref.html \ No newline at end of file
diff --git a/test/fixtures/revisions.yml b/test/fixtures/revisions.yml
deleted file mode 100644
index 1edba9e..0000000
--- a/test/fixtures/revisions.yml
+++ /dev/null
@@ -1,58 +0,0 @@
-# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
-
-revision_one:
- id: 1
- glsa_id: 1
- revid: 0
- user_id: 1
- title: GLSA 1
- access: remote
- severity: normal
- description: lol hi
- product: product
- category: category
- synopsis: synopsis
- background: background
- impact: impact
- workaround: workaround
- resolution: resolution
-
-revision_two:
- id: 2
- glsa_id: 1
- revid: 0
- user_id: 1
- title: GLSA 1
- access: local
- severity: low
- description: test blah
-
-revision_three:
- id: 3
- glsa_id: 2
- revid: 0
- user_id: 1
- title: GLSA 2
- access: remote
- severity: high
- description: blah
-
-revision_four:
- id: 4
- glsa_id: 3
- revid: 0
- user_id: 1
- title: GLSA 3 (restricted)
- access: remote
- severity: high
- description: blah
-
-revision_five:
- id: 5
- glsa_id: 4
- revid: 0
- user_id: 1
- title: GLSA 4 (contributor draft)
- access: remote
- severity: high
- description: blah
diff --git a/test/fixtures/templates.yml b/test/fixtures/templates.yml
deleted file mode 100644
index 744e493..0000000
--- a/test/fixtures/templates.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-# Read about fixtures at http://api.rubyonrails.org/classes/Fixtures.html
-
-one:
- name: DoS
- text: A remote attacker could exploit these vulnerabilities to cause a Denial of Service condition.
- target: impact
- enabled: false
-
-two:
- name: DoS
- text: Muiltiple vulnerabilities in [Product] allow remote attackers to cause Denial of Service conditions.
- target: synopsis
- enabled: true
diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml
deleted file mode 100644
index fb9a792..0000000
--- a/test/fixtures/users.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-test_user:
- id: 1
- login: test
- name: Tim Est
- email: user@localhost.invalid
- access: 3
-
-test_admin:
- id: 2
- login: admin
- name: Alex Dmin
- email: admin@localhost.invalid
- jefe: true
- access: 3
-
-test_locked:
- id: 3
- login: locked
- name: Leroy Ocked
- email: locked@localhost.invalid
- disabled: true
-
-test_contributor:
- id: 4
- login: contributor
- name: Carl Ontributor
- email: contributor@localhost.invalid
- access: 0
-
-test_padawan:
- id: 5
- login: padawan
- name: Peter Adawan
- email: padawan@localhost.invalid
- access: 1
-
-test_member:
- id: 6
- login: member
- name: Mike Ember
- email: member@localhost.invalid
- access: 2
-
-test_confidential_member:
- id: 7
- login: confidential_member
- name: James Bond
- email: confidential_member@localhost.invalid
- access: 3 \ No newline at end of file
diff --git a/test/functional/.gitkeep b/test/functional/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/test/functional/.gitkeep
+++ /dev/null
diff --git a/test/functional/admin/index_controller_test.rb b/test/functional/admin/index_controller_test.rb
deleted file mode 100644
index 443aec6..0000000
--- a/test/functional/admin/index_controller_test.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-require 'test_helper'
-
-class Admin::IndexControllerTest < ActionController::TestCase
- test "should work for admins" do
- log_in_as :admin
- get :index
- assert_response :success
- end
-
- test "should not grant access to regular users" do
- log_in_as :user
- get :index
- assert_redirected_to :controller => '/index', :action => 'error', :type => 'access'
- end
-end
diff --git a/test/functional/admin/templates_controller_test.rb b/test/functional/admin/templates_controller_test.rb
deleted file mode 100644
index 8a0459e..0000000
--- a/test/functional/admin/templates_controller_test.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-require 'test_helper'
-
-class Admin::TemplatesControllerTest < ActionController::TestCase
- setup do
- @template = templates(:one)
- log_in_as :admin
- end
-
- test "should not grant access to regular users" do
- log_in_as :user
- get :index
- assert_redirected_to :controller => '/index', :action => 'error', :type => 'access'
- end
-
- test "should get index" do
- get :index
- assert_response :success
- assert_not_nil assigns(:templates)
- end
-
- test "should get new" do
- get :new
- assert_response :success
- end
-
- test "should create admin_template" do
- assert_difference('Template.count') do
- post :create, template: @template.attributes
- end
-
- assert_redirected_to admin_template_path(assigns(:template))
- end
-
- test "should show admin_template" do
- get :show, :id => @template.to_param
- assert_response :success
- end
-
- test "should get edit" do
- get :edit, :id => @template.to_param
- assert_response :success
- end
-
- test "should update admin_template" do
- put :update, :id => @template.to_param, :template => @template.attributes
- assert_redirected_to admin_template_path(assigns(:template))
- end
-
- test "should destroy admin_template" do
- assert_difference('Template.count', -1) do
- delete :destroy, :id => @template.to_param
- end
-
- assert_redirected_to admin_templates_path
- end
-end
diff --git a/test/functional/admin/users_controller_test.rb b/test/functional/admin/users_controller_test.rb
deleted file mode 100644
index 03976e7..0000000
--- a/test/functional/admin/users_controller_test.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-require 'test_helper'
-
-class Admin::UsersControllerTest < ActionController::TestCase
- test "should work for admins" do
- log_in_as :admin
- get :index
- assert_response :success
- end
-
- test "should not grant access to regular users" do
- log_in_as :user
- get :index
- assert_redirected_to :controller => '/index', :action => 'error', :type => 'access'
- end
-end
diff --git a/test/functional/bug_controller_test.rb b/test/functional/bug_controller_test.rb
deleted file mode 100644
index 25d2c5d..0000000
--- a/test/functional/bug_controller_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class BugControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/functional/bugs_controller_test.rb b/test/functional/bugs_controller_test.rb
deleted file mode 100644
index 428da4c..0000000
--- a/test/functional/bugs_controller_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class BugsControllerTest < ActionController::TestCase
-end
diff --git a/test/functional/comments_controller_test.rb b/test/functional/comments_controller_test.rb
deleted file mode 100644
index b4c996b..0000000
--- a/test/functional/comments_controller_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class CommentsControllerTest < ActionController::TestCase
-end
diff --git a/test/functional/cve_controller_test.rb b/test/functional/cve_controller_test.rb
deleted file mode 100644
index 28b33b0..0000000
--- a/test/functional/cve_controller_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class CveControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/functional/glsa_controller_test.rb b/test/functional/glsa_controller_test.rb
deleted file mode 100644
index e68c570..0000000
--- a/test/functional/glsa_controller_test.rb
+++ /dev/null
@@ -1,83 +0,0 @@
-require 'test_helper'
-
-class GlsaControllerTest < ActionController::TestCase
- fixtures :glsas
-
- def setup
- @actions = [:show, :edit, :update, :diff, :prepare_release, :release, :import_references]
- end
-
- # Basic tests for the four permission groups
- test "should apply contributor permissions for restricted advisories correctly" do
- @actions.each do |action|
- log_in_as :contributor
- get action, :id => glsas(:restricted_glsa).id
- assert_access_denied "Failed action: #{action.to_s}"
- end
- end
-
- test "should apply padawan permissions for restricted advisories correctly" do
- @actions.each do |action|
- log_in_as :padawan
- get action, :id => glsas(:restricted_glsa).id
- assert_access_denied "Failed action: #{action.to_s}"
- end
- end
-
- test "should apply regular member permissions for restricted advisories correctly" do
- @actions.each do |action|
- log_in_as :full_member
- get action, :id => glsas(:restricted_glsa).id
- assert_access_denied "Failed action: #{action.to_s}"
- end
- end
-
- test "should apply confidential member permissions for restricted advisories correctly" do
- @actions.each do |action|
- next if action == :update # TODO
- next if action == :diff # TODO
-
- next if action == :prepare_release # Confidential drafts cannot be released
- next if action == :release # ditto
-
- log_in_as :confidential_member
- get action, :id => glsas(:restricted_glsa).id
- assert_response :success, "Failed action: #{action.to_s}"
- end
- end
-
- # Specific tests for contributors
- test "should apply contributor permissions for their own drafts correctly" do
- @actions.each do |action|
- next if action == :update # TODO
- next if action == :diff # TODO
-
- next if action == :prepare_release # Off-limits for contributors
- next if action == :release # ditto
-
- log_in_as :contributor
- get action, :id => glsas(:contributor_draft).id
- assert_response :success, "Failed action: #{action.to_s}"
- end
- end
-
- test "should apply contributor permissions for other drafts correctly" do
- @actions.each do |action|
- log_in_as :contributor
- get action, :id => glsas(:glsa_one).id
- assert_access_denied "Failed action #{action.to_s}"
- end
- end
-
- test "should not allow padawans to release advisories" do
- log_in_as :padawan
- get :prepare_release, :id => glsas(:glsa_one).id
- assert_access_denied "Prepare release test failed"
-
- log_in_as :padawan
- get :release, :id => glsas(:glsa_one).id
- assert_access_denied "Release tes failed"
- end
-
- # TODO: listing pages
-end
diff --git a/test/functional/glsa_mailer_test.rb b/test/functional/glsa_mailer_test.rb
deleted file mode 100644
index 5963931..0000000
--- a/test/functional/glsa_mailer_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class GlsaMailerTest < ActionMailer::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/functional/index_controller_test.rb b/test/functional/index_controller_test.rb
deleted file mode 100644
index 319e4a4..0000000
--- a/test/functional/index_controller_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class IndexControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb
deleted file mode 100644
index bfbf22d..0000000
--- a/test/functional/search_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class SearchControllerTest < ActionController::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/functional/tools_controller_test.rb b/test/functional/tools_controller_test.rb
deleted file mode 100644
index e022569..0000000
--- a/test/functional/tools_controller_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class ToolsControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/integration/.gitkeep b/test/integration/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/test/integration/.gitkeep
+++ /dev/null
diff --git a/test/integration/authentication_test.rb b/test/integration/authentication_test.rb
deleted file mode 100644
index 9ace8f8..0000000
--- a/test/integration/authentication_test.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'test_helper'
-
-class AuthenticationTest < ActionDispatch::IntegrationTest
- fixtures :all
-
- test "successful login" do
- get '/', {}, { 'HTTP_AUTHORIZATION' => basic_auth_creds(users(:test_member).login, GLSAMAKER_DEVEL_PASSWORD) }
- assert_response :success
- end
-
- test "unknown user login" do
- get '/', {}, { 'HTTP_AUTHORIZATION' => basic_auth_creds("doesnotexist", "invalidpassword") }
- assert_response 401
- end
-
- test "locked user login" do
- get '/', {}, { 'HTTP_AUTHORIZATION' => basic_auth_creds(users(:test_locked).login, GLSAMAKER_DEVEL_PASSWORD) }
- assert_response 401
- end
-end
diff --git a/test/test_helper.rb b/test/test_helper.rb
deleted file mode 100644
index 317d547..0000000
--- a/test/test_helper.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-ENV["RAILS_ENV"] = "test"
-require File.expand_path('../../config/environment', __FILE__)
-require 'rails/test_help'
-
-class ActiveSupport::TestCase
- # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
- #
- # Note: You'll currently still have to declare fixtures explicitly in integration tests
- # -- they do not yet inherit this setting
- set_fixture_class :cves => Cve
-
- fixtures :all
-
- # Add more helper methods to be used by all tests here...
-
- def basic_auth_creds(user, password)
- ActionController::HttpAuthentication::Basic.encode_credentials(user, password)
- end
-
- # Logs in as a user. Available users are
- # :user, :admin, :contributor, :padawan, :full_member, :confidential_member, :locked_user
- def log_in_as(who)
- user = nil
- case who
- when :user
- user = users(:test_user).login
- when :locked_user
- user = users(:test_locked).login
- when :admin
- user = users(:test_admin).login
- when :contributor
- user = users(:test_contributor).login
- when :padawan
- user = users(:test_padawan).login
- when :full_member
- user = users(:test_member).login
- when :confidential_member
- user = users(:test_confidential_member).login
- end
-
- raise "Invalid user" if user.nil?
- @request.env['HTTP_AUTHORIZATION'] = basic_auth_creds(user, GLSAMAKER_DEVEL_PASSWORD)
- end
-
- def assert_access_denied(message = nil)
- assert_redirected_to({:controller => '/index', :action => 'error', :type => 'access'}, message)
- end
-end
diff --git a/test/unit/.gitkeep b/test/unit/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/test/unit/.gitkeep
+++ /dev/null
diff --git a/test/unit/bug_test.rb b/test/unit/bug_test.rb
deleted file mode 100644
index 14af505..0000000
--- a/test/unit/bug_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class BugTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/comment_test.rb b/test/unit/comment_test.rb
deleted file mode 100644
index 6e0de8b..0000000
--- a/test/unit/comment_test.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require 'test_helper'
-
-class CommentTest < ActiveSupport::TestCase
- fixtures :all
-
- test "padawans should not be able to make approvals" do
- c = Comment.new
- c.glsa_id = 1
- c.user = users(:test_padawan)
- c.text = "test"
- c.rating = "approval"
- c.save
-
- assert c.errors.any?
- assert_includes c.errors[:rating], "You may not approve or reject drafts"
- end
-
- test "padawans should not be able to make rejections" do
- c = Comment.new
- c.glsa_id = 1
- c.user = users(:test_padawan)
- c.text = "test"
- c.rating = "rejection"
- c.save
-
- assert c.errors.any?
- assert_includes c.errors[:rating], "You may not approve or reject drafts"
- end
-
- test "advisory owners should not be able to approve their own drafts" do
- c = Comment.new
- c.user_id = 1
- c.text = "test"
- c.rating = "approval"
- c.glsa_id = 2
- c.save
-
- assert c.errors.any?
- assert_equal ["The owner of a draft cannot make approvals or rejections"], c.errors[:rating]
- end
-
- test "users should not be able to approve a draft twice" do
- # second comment loaded from fixtures
- c = Comment.new
- c.user_id = 7
- c.text = "test"
- c.rating = "approval"
- c.glsa_id = 2
- c.save
-
- assert c.errors.any?
- assert_equal ["You have already approved or rejected this draft"], c.errors[:rating]
- end
-end
diff --git a/test/unit/cpe_test.rb b/test/unit/cpe_test.rb
deleted file mode 100644
index e671d82..0000000
--- a/test/unit/cpe_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class CpeTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/cve_assignment_test.rb b/test/unit/cve_assignment_test.rb
deleted file mode 100644
index 9c132b2..0000000
--- a/test/unit/cve_assignment_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class CveAssignmentTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/cve_change_test.rb b/test/unit/cve_change_test.rb
deleted file mode 100644
index 6d34a62..0000000
--- a/test/unit/cve_change_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class CveChangeTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/cve_comment_test.rb b/test/unit/cve_comment_test.rb
deleted file mode 100644
index a6ee432..0000000
--- a/test/unit/cve_comment_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class CveCommentTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/cve_reference_test.rb b/test/unit/cve_reference_test.rb
deleted file mode 100644
index f2462ab..0000000
--- a/test/unit/cve_reference_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class CveReferenceTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/cve_test.rb b/test/unit/cve_test.rb
deleted file mode 100644
index c874e9b..0000000
--- a/test/unit/cve_test.rb
+++ /dev/null
@@ -1,92 +0,0 @@
-require 'test_helper'
-
-class CveTest < ActiveSupport::TestCase
- test "URL generation" do
- cve = cves(:cve_one)
-
- assert_equal('https://nvd.nist.gov/vuln/detail/CVE-2004-1776', cve.url)
- assert_equal('https://nvd.nist.gov/vuln/detail/CVE-2004-1776', cve.url(:nvd))
- assert_equal('https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-1776', cve.url(:mitre))
- assert_raise(ArgumentError) { cve.url(:invalid_site) }
- end
-
- test "to_s" do
- assert_equal(
- "CVE-2004-1776 (https://nvd.nist.gov/vuln/detail/CVE-2004-1776):\n Cisco IOS 12.1(3) and 12.1(3)T allows remote attackers to read and modify\n device configuration data via the cable-docsis read-write community string\n used by the Data Over Cable Service Interface Specification (DOCSIS)\n standard.",
- cves(:cve_one).to_s
- )
- end
-
- test "assigning" do
- cve = cves(:cve_two)
- user = users(:test_user)
-
- assert_nothing_raised(Exception) {
- cve.assign(99999, user)
- }
-
- assert_equal("ASSIGNED", cve.state)
- assert_equal(user.id, cve.cve_changes.first.user_id)
- assert_equal(99999, cve.assignments.first.bug)
- end
-
- test "nfu" do
- cve = cves(:cve_two)
- user = users(:test_user)
-
- assert_nothing_raised(Exception) {
- cve.nfu(user)
- }
-
- assert_equal("NFU", cve.state)
- assert_equal(user.id, cve.cve_changes.first.user_id)
- end
-
- test "invalid" do
- cve = cves(:cve_two)
- user = users(:test_user)
-
- assert_nothing_raised(Exception) {
- cve.invalidate(user)
- }
-
- assert_equal("INVALID", cve.state)
- assert_equal(user.id, cve.cve_changes.first.user_id)
- end
-
- test "later" do
- cve = cves(:cve_two)
- user = users(:test_user)
-
- assert_nothing_raised(Exception) {
- cve.later(user)
- }
-
- assert_equal("LATER", cve.state)
- assert_equal(user.id, cve.cve_changes.first.user_id)
- end
-
- test "mark as new" do
- cve = cves(:cve_two)
- user = users(:test_user)
-
- assert_nothing_raised(Exception) {
- cve.mark_new(user)
- }
-
- assert_equal("NEW", cve.state)
- assert_equal(user.id, cve.cve_changes.first.user_id)
- end
-
- test "add comment" do
- cve = cves(:cve_two)
- user = users(:test_user)
-
- assert_nothing_raised(Exception) {
- cve.add_comment(user, "Comment Text")
- }
-
- assert_equal("Comment Text", cve.comments.first.comment)
- assert_equal(user.id, cve.comments.first.user_id)
- end
-end
diff --git a/test/unit/glsa_mailer_test.rb b/test/unit/glsa_mailer_test.rb
deleted file mode 100644
index 2c554fc..0000000
--- a/test/unit/glsa_mailer_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class GlsaMailerTest < ActionMailer::TestCase
-end
diff --git a/test/unit/glsa_test.rb b/test/unit/glsa_test.rb
deleted file mode 100644
index 15bd63d..0000000
--- a/test/unit/glsa_test.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'test_helper'
-
-class GlsaTest < ActiveSupport::TestCase
- fixtures :glsas, :users
-
- test "uniqueness" do
- glsa = Glsa.new(:glsa_id => glsas(:glsa_one).glsa_id)
-
- assert !glsa.save
- assert glsa.invalid?(:glsa_id)
- end
-
- test "successful creation" do
- glsa = Glsa.new(:glsa_id => "GLSA-2004-99")
-
- glsa.submitter = users(:test_user)
- glsa.requester = users(:test_user)
- glsa.bugreadymaker = users(:test_user)
-
- assert glsa.save
- end
-
- test "new request" do
- glsa = Glsa.new_request(
- "Some title",
- "236060, 260006",
- "some comment",
- "public",
- false,
- users(:test_user)
- )
-
- assert_equal(glsa.last_revision.title, "Some title")
- assert_equal(glsa.last_revision.bugs.map{|bug| bug.bug_id}.sort, [236060, 260006])
- assert !glsa.restricted
- end
-
- test "adding bulk references" do
- glsa = glsas(:glsa_two)
-
- glsa.add_references([
- {:title => "REF1", :url => "http://ref1/"},
- {:title => "REF2", :url => "http://ref2/"}
- ])
-
- assert glsa.valid?
-
- rev = glsa.last_revision
- assert rev.valid?
- assert_equal 'REF1', rev.references[0].title
- assert_equal 'http://ref1/', rev.references[0].url
- assert_equal 'REF2', rev.references[1].title
- assert_equal 'http://ref2/', rev.references[1].url
- end
-end
diff --git a/test/unit/helpers/bug_helper_test.rb b/test/unit/helpers/bug_helper_test.rb
deleted file mode 100644
index 6074d6d..0000000
--- a/test/unit/helpers/bug_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class BugHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/bugs_helper_test.rb b/test/unit/helpers/bugs_helper_test.rb
deleted file mode 100644
index 1f3a2a5..0000000
--- a/test/unit/helpers/bugs_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class BugsHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/comments_helper_test.rb b/test/unit/helpers/comments_helper_test.rb
deleted file mode 100644
index 2518c16..0000000
--- a/test/unit/helpers/comments_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class CommentsHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/cve_helper_test.rb b/test/unit/helpers/cve_helper_test.rb
deleted file mode 100644
index ea901ba..0000000
--- a/test/unit/helpers/cve_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class CveHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/glsa_helper_test.rb b/test/unit/helpers/glsa_helper_test.rb
deleted file mode 100644
index de7b8ef..0000000
--- a/test/unit/helpers/glsa_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class GlsaHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/index_helper_test.rb b/test/unit/helpers/index_helper_test.rb
deleted file mode 100644
index 104f529..0000000
--- a/test/unit/helpers/index_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class IndexHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/search_helper_test.rb b/test/unit/helpers/search_helper_test.rb
deleted file mode 100644
index 3034163..0000000
--- a/test/unit/helpers/search_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class SearchHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/templates_helper_test.rb b/test/unit/helpers/templates_helper_test.rb
deleted file mode 100644
index 6aa6ac7..0000000
--- a/test/unit/helpers/templates_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class TemplatesHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/tools_helper_test.rb b/test/unit/helpers/tools_helper_test.rb
deleted file mode 100644
index 0677abe..0000000
--- a/test/unit/helpers/tools_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class ToolsHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/helpers/user_helper_test.rb b/test/unit/helpers/user_helper_test.rb
deleted file mode 100644
index ad44a53..0000000
--- a/test/unit/helpers/user_helper_test.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-require 'test_helper'
-
-class UserHelperTest < ActionView::TestCase
-end
diff --git a/test/unit/package_test.rb b/test/unit/package_test.rb
deleted file mode 100644
index 7fb7c58..0000000
--- a/test/unit/package_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class PackageTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/reference_test.rb b/test/unit/reference_test.rb
deleted file mode 100644
index 77911d9..0000000
--- a/test/unit/reference_test.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-require 'test_helper'
-
-class ReferenceTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
-end
diff --git a/test/unit/revision_test.rb b/test/unit/revision_test.rb
deleted file mode 100644
index 52016dd..0000000
--- a/test/unit/revision_test.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-require 'test_helper'
-
-class RevisionTest < ActiveSupport::TestCase
- test "deep copy" do
- revision = revisions(:revision_one)
- new_revision = revision.deep_copy
-
- assert_equal(revision.title, new_revision.title)
- assert_equal(revision.glsa_id, new_revision.glsa_id)
- assert_equal(revision.access, new_revision.access)
- assert_equal(revision.product, new_revision.product)
- assert_equal(revision.category, new_revision.category)
- assert_equal(revision.severity, new_revision.severity)
- assert_equal(revision.synopsis, new_revision.synopsis)
- assert_equal(revision.background, new_revision.background)
- assert_equal(revision.description, new_revision.description)
- assert_equal(revision.impact, new_revision.impact)
- assert_equal(revision.workaround, new_revision.workaround)
- assert_equal(revision.resolution, new_revision.resolution)
-
- # Assuming that if the bug ID is copied, so is the rest
- assert_equal(revision.bugs.map{|bug| bug.bug_id}.sort, new_revision.bugs.map{|bug| bug.bug_id}.sort)
-
- assert_equal(revision.references.map{|ref| ref.url}.sort, new_revision.references.map{|ref| ref.url}.sort)
- assert_equal(
- revision.packages.map{|pkg| "#{pkg.comp}#{pkg.atom}-#{pkg.version}"}.sort,
- new_revision.packages.map{|pkg| "#{pkg.comp}#{pkg.atom}-#{pkg.version}"}.sort
- )
- end
-
- test "linked bugs" do
- assert_equal([236060, 260006], revisions(:revision_one).get_linked_bugs.sort)
- end
-
- test "malformed XML" do
- revision = revisions(:revision_one)
- revision.description = "<h1>hi"
-
- revision.save
- #assert revision.errors.any?
- #assert_equal [:description, "is not well-formed XML"], revision.errors.first
-
- revision.description = "hi"
- revision.save
- #assert_equal false, revision.errors.any?
- end
-end
diff --git a/test/unit/template_test.rb b/test/unit/template_test.rb
deleted file mode 100644
index a8346d6..0000000
--- a/test/unit/template_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class TemplateTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb
deleted file mode 100644
index 8ca01c5..0000000
--- a/test/unit/user_test.rb
+++ /dev/null
@@ -1,47 +0,0 @@
-# GLSAMaker v2
-# Copyright (C) 2009-2011 Alex Legler <a3li@gentoo.org>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# For more information, see the LICENSE file.
-
-require 'test_helper'
-
-class UserTest < ActiveSupport::TestCase
- fixtures :users
-
- test "invalid user name" do
- user = User.new
- assert !user.valid?
- assert user.invalid?(:login)
- end
-
- test "unique user name" do
- user = User.new(:login => users(:test_user).login,
- :name => "Mr. T",
- :email => "foo@gentoo.org")
-
- assert !user.save
- assert_equal ["User name must be unique"], user.errors[:login]
- end
-
- test "invalid email" do
- user = User.new(:login => 'notyetthere',
- :name => 'doesntmatteranyway',
- :email => 'THIScouldNEVERbeAvalidEMAIL@ADDRESS')
-
- assert !user.valid?
- assert user.invalid?(:email)
- end
-
- test "successful creation" do
- user = User.new(:login => 'not_yet_taken_login',
- :name => 'doesntmatteranyway',
- :email => 'foo@bar.org',
- :access => 0)
-
- assert user.save
- end
-end
diff --git a/tmp/cache/.gitignore b/tmp/cache/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/tmp/cache/.gitignore
+++ /dev/null
diff --git a/tmp/pids/.gitignore b/tmp/pids/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/tmp/pids/.gitignore
+++ /dev/null
diff --git a/tmp/sessions/.gitignore b/tmp/sessions/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/tmp/sessions/.gitignore
+++ /dev/null
diff --git a/tmp/sockets/.gitignore b/tmp/sockets/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/tmp/sockets/.gitignore
+++ /dev/null
diff --git a/vendor/assets/stylesheets/.gitkeep b/vendor/assets/stylesheets/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/vendor/assets/stylesheets/.gitkeep
+++ /dev/null
diff --git a/vendor/dictionaries/README_en_US.txt b/vendor/dictionaries/README_en_US.txt
deleted file mode 100644
index f6d3631..0000000
--- a/vendor/dictionaries/README_en_US.txt
+++ /dev/null
@@ -1,278 +0,0 @@
-Additional vulnerability-related terms by a3li@gentoo.org
-
-Wordlist en_US spelling and morphological dictionary for OpenOffice.org
-Version 2008-12-18
-
-Based on Wordlist Hunspell dictionaries version 2008-12-05
-and Wordlist POS and AGID data created by Kevin Atkinson
-and released on http://wordlist.sourceforge.net.
-
-Other fixes:
-
-OOo Issue 48060 - add numbers with affixes by COMPOUNDRULE (1st, 111th, 1990s etc.)
-New REP items (better suggestions for accented words and a few mistakes)
-OOo Issue 63541 - remove *dessicated, *dessication
-
-László Németh <nemeth at OO.o>
-
-Original license:
-
-2008-12-05 Release
-
-README file for en_US and en_CA Hunspell dictionaries
-
-These dictionaries are created using the speller/make-hunspell-dict
-dictionary in SCOWL, SVN revision 74.
-
-The NOSUGGEST flag was added to certain taboo words. While I made an
-honest attempt to flag the strongest taboo words with the NOSUGGEST
-flag, I MAKE NO GUARANTEE THAT I FLAGGED EVERY POSSIBLE TABOO WORD.
-The list was originally derived from N�meth L�szl�, however I removed
-some words which, while being considered taboo by some dictionaries,
-are not really considered swear words in today's society.
-
-You can find SCOWL and friend at http://wordlist.sourceforge.net/.
-Bug reports should go to the Issue Tracker found on the previously
-mentioned web site. General discussion should go to the
-wordlist-devel at sourceforge net mailing list.
-
-COPYRIGHT, SOURCES, and CREDITS:
-
-The en_US and en_CA dictionaries come directly from SCOWL (up to level
-60) and is thus under the same copyright of SCOWL. The affix file is
-a heavily modified version of the original english.aff file which was
-released as part of Geoff Kuenning's Ispell and as such is covered by
-his BSD license. Part of SCOWL is also based on Ispell thus the
-Ispell copyright is included with the SCOWL copyright.
-
-The collective work is Copyright 2000-2007 by Kevin Atkinson as well
-as any of the copyrights mentioned below:
-
- Copyright 2000-2007 by Kevin Atkinson
-
- Permission to use, copy, modify, distribute and sell these word
- lists, the associated scripts, the output created from the scripts,
- and its documentation for any purpose is hereby granted without fee,
- provided that the above copyright notice appears in all copies and
- that both that copyright notice and this permission notice appear in
- supporting documentation. Kevin Atkinson makes no representations
- about the suitability of this array for any purpose. It is provided
- "as is" without express or implied warranty.
-
-Alan Beale <biljir@pobox.com> also deserves special credit as he has,
-in addition to providing the 12Dicts package and being a major
-contributor to the ENABLE word list, given me an incredible amount of
-feedback and created a number of special lists (those found in the
-Supplement) in order to help improve the overall quality of SCOWL.
-
-The 10 level includes the 1000 most common English words (according to
-the Moby (TM) Words II [MWords] package), a subset of the 1000 most
-common words on the Internet (again, according to Moby Words II), and
-frequently class 16 from Brian Kelk's "UK English Wordlist
-with Frequency Classification".
-
-The MWords package was explicitly placed in the public domain:
-
- The Moby lexicon project is complete and has
- been place into the public domain. Use, sell,
- rework, excerpt and use in any way on any platform.
-
- Placing this material on internal or public servers is
- also encouraged. The compiler is not aware of any
- export restrictions so freely distribute world-wide.
-
- You can verify the public domain status by contacting
-
- Grady Ward
- 3449 Martha Ct.
- Arcata, CA 95521-4884
-
- grady@netcom.com
- grady@northcoast.com
-
-The "UK English Wordlist With Frequency Classification" is also in the
-Public Domain:
-
- Date: Sat, 08 Jul 2000 20:27:21 +0100
- From: Brian Kelk <Brian.Kelk@cl.cam.ac.uk>
-
- > I was wondering what the copyright status of your "UK English
- > Wordlist With Frequency Classification" word list as it seems to
- > be lacking any copyright notice.
-
- There were many many sources in total, but any text marked
- "copyright" was avoided. Locally-written documentation was one
- source. An earlier version of the list resided in a filespace called
- PUBLIC on the University mainframe, because it was considered public
- domain.
-
- Date: Tue, 11 Jul 2000 19:31:34 +0100
-
- > So are you saying your word list is also in the public domain?
-
- That is the intention.
-
-The 20 level includes frequency classes 7-15 from Brian's word list.
-
-The 35 level includes frequency classes 2-6 and words appearing in at
-least 11 of 12 dictionaries as indicated in the 12Dicts package. All
-words from the 12Dicts package have had likely inflections added via
-my inflection database.
-
-The 12Dicts package and Supplement is in the Public Domain.
-
-The WordNet database, which was used in the creation of the
-Inflections database, is under the following copyright:
-
- This software and database is being provided to you, the LICENSEE,
- by Princeton University under the following license. By obtaining,
- using and/or copying this software and database, you agree that you
- have read, understood, and will comply with these terms and
- conditions.:
-
- Permission to use, copy, modify and distribute this software and
- database and its documentation for any purpose and without fee or
- royalty is hereby granted, provided that you agree to comply with
- the following copyright notice and statements, including the
- disclaimer, and that the same appear on ALL copies of the software,
- database and documentation, including modifications that you make
- for internal use or for distribution.
-
- WordNet 1.6 Copyright 1997 by Princeton University. All rights
- reserved.
-
- THIS SOFTWARE AND DATABASE IS PROVIDED "AS IS" AND PRINCETON
- UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
- IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PRINCETON
- UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANT-
- ABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE
- LICENSED SOFTWARE, DATABASE OR DOCUMENTATION WILL NOT INFRINGE ANY
- THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
-
- The name of Princeton University or Princeton may not be used in
- advertising or publicity pertaining to distribution of the software
- and/or database. Title to copyright in this software, database and
- any associated documentation shall at all times remain with
- Princeton University and LICENSEE agrees to preserve same.
-
-The 40 level includes words from Alan's 3esl list found in version 4.0
-of his 12dicts package. Like his other stuff the 3esl list is also in the
-public domain.
-
-The 50 level includes Brian's frequency class 1, words words appearing
-in at least 5 of 12 of the dictionaries as indicated in the 12Dicts
-package, and uppercase words in at least 4 of the previous 12
-dictionaries. A decent number of proper names is also included: The
-top 1000 male, female, and Last names from the 1990 Census report; a
-list of names sent to me by Alan Beale; and a few names that I added
-myself. Finally a small list of abbreviations not commonly found in
-other word lists is included.
-
-The name files form the Census report is a government document which I
-don't think can be copyrighted.
-
-The file special-jargon.50 uses common.lst and word.lst from the
-"Unofficial Jargon File Word Lists" which is derived from "The Jargon
-File". All of which is in the Public Domain. This file also contain
-a few extra UNIX terms which are found in the file "unix-terms" in the
-special/ directory.
-
-The 55 level includes words from Alan's 2of4brif list found in version
-4.0 of his 12dicts package. Like his other stuff the 2of4brif is also
-in the public domain.
-
-The 60 level includes Brian's frequency class 0 and all words
-appearing in at least 2 of the 12 dictionaries as indicated by the
-12Dicts package. A large number of names are also included: The 4,946
-female names and the 3,897 male names from the MWords package.
-
-The 70 level includes the 74,550 common dictionary words and the
-21,986 names list from the MWords package The common dictionary words,
-like those from the 12Dicts package, have had all likely inflections
-added. The 70 level also included the 5desk list from version 4.0 of
-the 12Dics package which is the public domain
-
-The 80 level includes the ENABLE word list, all the lists in the
-ENABLE supplement package (except for ABLE), the "UK Advanced Cryptics
-Dictionary" (UKACD), the list of signature words in from YAWL package,
-and the 10,196 places list from the MWords package.
-
-The ENABLE package, mainted by M\Cooper <thegrendel@theriver.com>,
-is in the Public Domain:
-
- The ENABLE master word list, WORD.LST, is herewith formally released
- into the Public Domain. Anyone is free to use it or distribute it in
- any manner they see fit. No fee or registration is required for its
- use nor are "contributions" solicited (if you feel you absolutely
- must contribute something for your own peace of mind, the authors of
- the ENABLE list ask that you make a donation on their behalf to your
- favorite charity). This word list is our gift to the Scrabble
- community, as an alternate to "official" word lists. Game designers
- may feel free to incorporate the WORD.LST into their games. Please
- mention the source and credit us as originators of the list. Note
- that if you, as a game designer, use the WORD.LST in your product,
- you may still copyright and protect your product, but you may *not*
- legally copyright or in any way restrict redistribution of the
- WORD.LST portion of your product. This *may* under law restrict your
- rights to restrict your users' rights, but that is only fair.
-
-UKACD, by J Ross Beresford <ross@bryson.demon.co.uk>, is under the
-following copyright:
-
- Copyright (c) J Ross Beresford 1993-1999. All Rights Reserved.
-
- The following restriction is placed on the use of this publication:
- if The UK Advanced Cryptics Dictionary is used in a software package
- or redistributed in any form, the copyright notice must be
- prominently displayed and the text of this document must be included
- verbatim.
-
- There are no other restrictions: I would like to see the list
- distributed as widely as possible.
-
-The 95 level includes the 354,984 single words and 256,772 compound
-words from the MWords package, ABLE.LST from the ENABLE Supplement,
-and some additional words found in my part-of-speech database that
-were not found anywhere else.
-
-Accent information was taken from UKACD.
-
-My VARCON package was used to create the American, British, and
-Canadian word list.
-
-Since the original word lists used used in the VARCON package came
-from the Ispell distribution they are under the Ispell copyright:
-
- Copyright 1993, Geoff Kuenning, Granada Hills, CA
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- 3. All modifications to the source code must be clearly marked as
- such. Binary redistributions based on modified source code
- must be clearly marked as modified versions in the documentation
- and/or other materials provided with the distribution.
- (clause 4 removed with permission from Geoff Kuenning)
- 5. The name of Geoff Kuenning may not be used to endorse or promote
- products derived from this software without specific prior
- written permission.
-
- THIS SOFTWARE IS PROVIDED BY GEOFF KUENNING AND CONTRIBUTORS ``AS
- IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GEOFF
- KUENNING OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/dictionaries/en_US.aff b/vendor/dictionaries/en_US.aff
deleted file mode 100644
index 4f4222f..0000000
--- a/vendor/dictionaries/en_US.aff
+++ /dev/null
@@ -1,3107 +0,0 @@
-FLAG num
-AF 589
-AF 2,3 # 1
-AF 2 # 2
-AF 1 # 3
-AF 4,2 # 4
-AF 3,5,6,7 # 5
-AF 8,7,9 # 6
-AF 5,11,6 # 7
-AF 10 # 8
-AF 12 # 9
-AF 3 # 10
-AF 5,6,7 # 11
-AF 7,13,14 # 12
-AF 15,16,7 # 13
-AF 7,9 # 14
-AF 2,17 # 15
-AF 10,18,19 # 16
-AF 20,21,22 # 17
-AF 2,3,7 # 18
-AF 22 # 19
-AF 18,19,2,3 # 20
-AF 23,24,10,18,19 # 21
-AF 4,2,5,11,6 # 22
-AF 2,3,5,6,7 # 23
-AF 10,5,6,7 # 24
-AF 10,18,19,20,21,2,3 # 25
-AF 23,24,10,18,25,19,2,3,5,6,7 # 26
-AF 10,18,19,20,21 # 27
-AF 2,3,8,7,9 # 28
-AF 18,19,22 # 29
-AF 10,2,3 # 30
-AF 6,26,27 # 31
-AF 3,28 # 32
-AF 18,19 # 33
-AF 29,30 # 34
-AF 31,3,28 # 35
-AF 10,18,19,2,3 # 36
-AF 10,2 # 37
-AF 23,24,10,18,19,2,3 # 38
-AF 31 # 39
-AF 11,4,2 # 40
-AF 20,21,2,3 # 41
-AF 2,17,29,30 # 42
-AF 3,8,7,9 # 43
-AF 23 # 44
-AF 10,20,21 # 45
-AF 8,6,7 # 46
-AF 2,3,32,33,7 # 47
-AF 20,2,3 # 48
-AF 29,30,34,35 # 49
-AF 29,30,36,34,35 # 50
-AF 2,3,31 # 51
-AF 23,24,10,18,19,2,3,5,6,7 # 52
-AF 37,2 # 53
-AF 10,2,3,8,7,9 # 54
-AF 18,22 # 55
-AF 2,17,6,26,27 # 56
-AF 37,2,3 # 57
-AF 7 # 58
-AF 29,30,36 # 59
-AF 17 # 60
-AF 41,42,7 # 61
-AF 2,3,5,7 # 62
-AF 2,3,8,6,7 # 63
-AF 2,3,43,44,7 # 64
-AF 2,3,45 # 65
-AF 4,2,46 # 66
-AF 10,18,19,8,7,9 # 67
-AF 10,8,7,9 # 68
-AF 2,3,28,31 # 69
-AF 3,7 # 70
-AF 4,2,3 # 71
-AF 36,34,35 # 72
-AF 2,3,7,9 # 73
-AF 23,24,10,18,19,4,2,5,11,6 # 74
-AF 23,24,10 # 75
-AF 47,7,9 # 76
-AF 2,3,8,7 # 77
-AF 23,2,3,5,6,7 # 78
-AF 38,39,40 # 79
-AF 2,3,200 # 80
-AF 4,2,48 # 81
-AF 22,2,3 # 82
-AF 10,18 # 83
-AF 18,19,20,21 # 84
-AF 49,50,10,18,19 # 85
-AF 2,3,6,7 # 86
-AF 2,17,29,30,6,26,27 # 87
-AF 7,14 # 88
-AF 4 # 89
-AF 7,51,9,52 # 90
-AF 23,2,3,7 # 91
-AF 2,3,53,54,7 # 92
-AF 7,51,9 # 93
-AF 10,18,19,3 # 94
-AF 2,56,57,10,18,19 # 95
-AF 20,2,3,7 # 96
-AF 17,29,30,36,34,35 # 97
-AF 23,24,10,18,19,5,6,7 # 98
-AF 59,2,3,60,61,7 # 99
-AF 2,58 # 100
-AF 17,29,30,6,26,27 # 101
-AF 49,50 # 102
-AF 15,16,7,2,3 # 103
-AF 10,18,19,20,21,8,7,9 # 104
-AF 32,33,7 # 105
-AF 23,24,18,19,2,3 # 106
-AF 10,18,19,20,21,2,3,8,7,9 # 107
-AF 2,5,6 # 108
-AF 2,3,7,13,14 # 109
-AF 62,6 # 110
-AF 29,30,34,35,2 # 111
-AF 2,3,62,6,7 # 112
-AF 2,3,65,66,7 # 113
-AF 63,64,7 # 114
-AF 2,3,67,5,6,7 # 115
-AF 62,6,7 # 116
-AF 53,54,7 # 117
-AF 3,53,54,7 # 118
-AF 61,7 # 119
-AF 2,67 # 120
-AF 6,7 # 121
-AF 8,7 # 122
-AF 2,3,67 # 123
-AF 2,3,6,7,68 # 124
-AF 11,6 # 125
-AF 5,6,47,7 # 126
-AF 7,69,9 # 127
-AF 2,3,7,14 # 128
-AF 23,2,3 # 129
-AF 2,3,28 # 130
-AF 2,3,70,66,7 # 131
-AF 71,72,18,19 # 132
-AF 2,3,60,61,7 # 133
-AF 2,3,7,51,9,52 # 134
-AF 23,24,10,18,19,2,3,28,7 # 135
-AF 2,3,73,55,7 # 136
-AF 2,17,6,27 # 137
-AF 2,3,28,7 # 138
-AF 20,2,3,8,7,9 # 139
-AF 34,35 # 140
-AF 3,6,7 # 141
-AF 6 # 142
-AF 29,30,36,34,35,6,26,27 # 143
-AF 2,3,6,47,7 # 144
-AF 73,55,7 # 145
-AF 18,19,20,21,2,3,8,7,9 # 146
-AF 23,4,2,5,11,6 # 147
-AF 2,17,26,27 # 148
-AF 2,8 # 149
-AF 20,21 # 150
-AF 10,18,25,19 # 151
-AF 2,3,53,54,7,71 # 152
-AF 18 # 153
-AF 37,76,2,3 # 154
-AF 75,2 # 155
-AF 4,5,11,6 # 156
-AF 39 # 157
-AF 10,18,19,5,6,7 # 158
-AF 23,24,10,18,25,19,3,28 # 159
-AF 2,3,63,64,7 # 160
-AF 23,2 # 161
-AF 18,19,20,21,2 # 162
-AF 29,30,35,2 # 163
-AF 10,2,3,7 # 164
-AF 23,24,18,19,2,3,5,6,7 # 165
-AF 23,24 # 166
-AF 2,17,27 # 167
-AF 2,3,7,13,14,200 # 168
-AF 29,30,6,26,27 # 169
-AF 2,3,63,64,7,77,78 # 170
-AF 2,3,5,6,7,79 # 171
-AF 4,2,5,11,6,38 # 172
-AF 2,5 # 173
-AF 18,19,29,30,36,80,34,35,6,26,27 # 174
-AF 3,7,13,14,81 # 175
-AF 23,4,2 # 176
-AF 10,18,19,5,11,6 # 177
-AF 23,24,18,19 # 178
-AF 23,24,2,3,5,6,7 # 179
-AF 2,3,60,61,7,82 # 180
-AF 4,2,12,5,11,6,38,39,40 # 181
-AF 11,6,4,2 # 182
-AF 23,24,10,2,3 # 183
-AF 2,46 # 184
-AF 2,3,28,5,6,7 # 185
-AF 83,2,3 # 186
-AF 23,24,18,19,2 # 187
-AF 23,24,2,3 # 188
-AF 3,200 # 189
-AF 23,24,4,2 # 190
-AF 10,3 # 191
-AF 60,61,7 # 192
-AF 29,30,36,35 # 193
-AF 3,43,44,7 # 194
-AF 5 # 195
-AF 2,3,84 # 196
-AF 66 # 197
-AF 23,24,86,87,10,18,19,3,5,6,7 # 198
-AF 4,2,88 # 199
-AF 2,3,73,7 # 200
-AF 2,89 # 201
-AF 2,84 # 202
-AF 2,3,90,91,7 # 203
-AF 11,23,24,10,4,2 # 204
-AF 11 # 205
-AF 2,17,36 # 206
-AF 10,18,19,2,3,8,7,9 # 207
-AF 15,16,7,92 # 208
-AF 10,18,2,3 # 209
-AF 10,2,3,5,6,7 # 210
-AF 36 # 211
-AF 2,17,36,34,35 # 212
-AF 2,3,41,42,7 # 213
-AF 8 # 214
-AF 2,17,27,29,30,36,34,35 # 215
-AF 23,86,87,10,2,3,5,6,7 # 216
-AF 3,63,64,7 # 217
-AF 2,3,28,32,33,7 # 218
-AF 17,29,30 # 219
-AF 10,18,19,2,3,7 # 220
-AF 2,17,29,30,36,34,35 # 221
-AF 35 # 222
-AF 10,18,19,20,21,2 # 223
-AF 2,3,5,6,7,86,87,10 # 224
-AF 23,24,10,2 # 225
-AF 23,86,87,10,2,3,7 # 226
-AF 2,3,24,81,7,14 # 227
-AF 2,12 # 228
-AF 2,94 # 229
-AF 95,31 # 230
-AF 4,3 # 231
-AF 2,3,28,8,7,9 # 232
-AF 23,5,6,7 # 233
-AF 23,24,86,87,10,18,19,2 # 234
-AF 23,24,86,87,10,18,2 # 235
-AF 23,24,18,19,67 # 236
-AF 23,2,3,6,7,79 # 237
-AF 23,96,97 # 238
-AF 10,18,19,2 # 239
-AF 11,38,40 # 240
-AF 5,6 # 241
-AF 15,16,7,2,3,92 # 242
-AF 36,35 # 243
-AF 29,30,2 # 244
-AF 2,3,98,8,6,7 # 245
-AF 10,18,19,20,8,7,9 # 246
-AF 2,3,24,71,54,7 # 247
-AF 10,77,78,18,19,63,64,7 # 248
-AF 2,3,99,7 # 249
-AF 10,18,20,21 # 250
-AF 8,9 # 251
-AF 11,38,39,40,4,2,12 # 252
-AF 20,8,7,9 # 253
-AF 20,21,2,3,8,7,9 # 254
-AF 10,20,21,2,3 # 255
-AF 11,6,100,82,101,3 # 256
-AF 20,21,8,7,9 # 257
-AF 27 # 258
-AF 29,30,35 # 259
-AF 20,22,2,3,8,7,9 # 260
-AF 102,103,10,18,19,2,3,7 # 261
-AF 13 # 262
-AF 2,3,47,7,9 # 263
-AF 3,73,55,7 # 264
-AF 23,10,18,19,29,30,36,2,3,17,6,26,27 # 265
-AF 23,24,18,19,5,6,7 # 266
-AF 104,105,2,3,60,61,7 # 267
-AF 22,3 # 268
-AF 3,6,7,106 # 269
-AF 2,3,8,6,7,9 # 270
-AF 23,24,5,6,7 # 271
-AF 4,2,3,5,11,6,7 # 272
-AF 2,5,6,7 # 273
-AF 65,66,7 # 274
-AF 2,17,29,30,36,34,35,6,26,27 # 275
-AF 31,3 # 276
-AF 11,23,4,2 # 277
-AF 23,24,49,50,10,18,19,2,3 # 278
-AF 10,4,2,5,11,6 # 279
-AF 23,24,86,87,10 # 280
-AF 23,24,10,18,19,2,3,6,7 # 281
-AF 2,17,29,30,34,35,6,26,27 # 282
-AF 107,108 # 283
-AF 23,24,18,25,19,2,3,5,6,7 # 284
-AF 18,19,81,109,2,3,7,13 # 285
-AF 2,17,29,30,34,35 # 286
-AF 4,2,46,5,11,6 # 287
-AF 23,24,2,3,7 # 288
-AF 18,19,20,21,22 # 289
-AF 2,110 # 290
-AF 2,3,60,7 # 291
-AF 10,18,19,81,109,2,3,7,13,14 # 292
-AF 23,24,4,2,5,11,6 # 293
-AF 6,7,114 # 294
-AF 115,116,2,3,32,33,7 # 295
-AF 115,2,3,32,33,7 # 296
-AF 6,117,26,27,118 # 297
-AF 70,66,7 # 298
-AF 21,2,3 # 299
-AF 23,18,19 # 300
-AF 6,47,7 # 301
-AF 11,6,100 # 302
-AF 23,24,10,18 # 303
-AF 10,20,21,3,8,6,7 # 304
-AF 23,24,10,5,6,7 # 305
-AF 111,112,113,2,110 # 306
-AF 2,3,54,7 # 307
-AF 2,3,5,6,7,200 # 308
-AF 200 # 309
-AF 104,105,2 # 310
-AF 3,65,66,7 # 311
-AF 6,7,119 # 312
-AF 3,58 # 313
-AF 23,24,10,18,19,36,2,3 # 314
-AF 3,8,6,7 # 315
-AF 18,19,20,21,22,3,8,7,9 # 316
-AF 7,9,52 # 317
-AF 2,3,5,6,7,68 # 318
-AF 3,5,6,7,68 # 319
-AF 2,3,56,57,86,87,10,18,19,7 # 320
-AF 2,88 # 321
-AF 102,103,10,18,19 # 322
-AF 2,45 # 323
-AF 10,77,78,18,19 # 324
-AF 11,6,100,23,4,2,3 # 325
-AF 2,3,28,86,87,10,18,19 # 326
-AF 102,2,3,73,55,7 # 327
-AF 10,18,19,20,21,2,3,8,47,7,9 # 328
-AF 2,3,65,7 # 329
-AF 2,8,9 # 330
-AF 2,3,28,7,13,14 # 331
-AF 43,44,7 # 332
-AF 5,6,41,42,7 # 333
-AF 2,6 # 334
-AF 2,3,63,64,7,77 # 335
-AF 20 # 336
-AF 2,3,9 # 337
-AF 67 # 338
-AF 115,116 # 339
-AF 2,3,7,69,51,9 # 340
-AF 12,38,39,40 # 341
-AF 2,3,86,87,10,20,8,7,9 # 342
-AF 18,19,2 # 343
-AF 2,85,17 # 344
-AF 10,18,19,81,109,7,13,14 # 345
-AF 18,19,20,21,22,8,7,9 # 346
-AF 31,7 # 347
-AF 18,25,19,2,3 # 348
-AF 4,2,120 # 349
-AF 104,2,3 # 350
-AF 6,7,106 # 351
-AF 22,2 # 352
-AF 2,3,6,7,119 # 353
-AF 2,121,122 # 354
-AF 23,10,2,3 # 355
-AF 15,16,7,24 # 356
-AF 3,7,9 # 357
-AF 10,4,2 # 358
-AF 11,4,2,88 # 359
-AF 2,8,7,9 # 360
-AF 2,3,53,7 # 361
-AF 17,6,26,27 # 362
-AF 29,30,36,34,35,2 # 363
-AF 2,123,124 # 364
-AF 29,30,34,35,6,26,27 # 365
-AF 2,3,7,69,9 # 366
-AF 83,2 # 367
-AF 2,3,125 # 368
-AF 23,24,86,87,10,18,25,19,2,3 # 369
-AF 3,6,47,7 # 370
-AF 23,24,10,3 # 371
-AF 2,126,127 # 372
-AF 128,2 # 373
-AF 24 # 374
-AF 2,5,6,43,44 # 375
-AF 8,47,7,9 # 376
-AF 2,3,7,51,9 # 377
-AF 3,81 # 378
-AF 23,24,10,18,19,5,11,6 # 379
-AF 23,24,10,18,19,46 # 380
-AF 23,2,3,6,7,119 # 381
-AF 6,7,68 # 382
-AF 10,18,19,2,3,5,6,7 # 383
-AF 129,2 # 384
-AF 2,3,86,87,10,18,25,19,20,21,8,7,9 # 385
-AF 23,24,18,19,3,5,6,7 # 386
-AF 2,3,32,7 # 387
-AF 2,130 # 388
-AF 81 # 389
-AF 86,87,10,20,21,8,7,9 # 390
-AF 3,45,7 # 391
-AF 86,87,10,20 # 392
-AF 23,24,5,11,6 # 393
-AF 32,33,7,3 # 394
-AF 7,9,131 # 395
-AF 23,24,86,87,10,18,19 # 396
-AF 23,24,86,87,10,18,19,2,3,5,6,7 # 397
-AF 11,23,24,10,18,19,4,2 # 398
-AF 56,57,10,18,19,66,7 # 399
-AF 2,60,61,7,86,87,10 # 400
-AF 2,45,93 # 401
-AF 132,2 # 402
-AF 2,3,7,13,14,81 # 403
-AF 10,20,21,8,7,9 # 404
-AF 2,3,133 # 405
-AF 2,82 # 406
-AF 23,24,10,18,19,2,3,6,7,79 # 407
-AF 23,2,3,6,7 # 408
-AF 10,20,21,2,3,7 # 409
-AF 23,24,10,18,19,2 # 410
-AF 2,36 # 411
-AF 2,3,6,7,79 # 412
-AF 11,6,100,134 # 413
-AF 23,3,5,6,7 # 414
-AF 2,3,24,65,66,7 # 415
-AF 45 # 416
-AF 2,3,45,5,6,7 # 417
-AF 18,2 # 418
-AF 136,22,2,3 # 419
-AF 2,3,77,7 # 420
-AF 11,38,39,40 # 421
-AF 137,2 # 422
-AF 17,29,30,34,35 # 423
-AF 33 # 424
-AF 17,27 # 425
-AF 23,24,86,87,10,18,19,5,6,7 # 426
-AF 23,5,6 # 427
-AF 23,24,10,18,19,7 # 428
-AF 2,3,7,200 # 429
-AF 18,19,20,21,22,2,3 # 430
-AF 11,38,40,4 # 431
-AF 10,18,19,2,3,8,7 # 432
-AF 10,18,20,21,3,8,7,9 # 433
-AF 23,24,10,18,19,3,28 # 434
-AF 87,10 # 435
-AF 10,18,19,20,21,3,8,7,9 # 436
-AF 18,2,3 # 437
-AF 18,3 # 438
-AF 66,7 # 439
-AF 2,3,66,7 # 440
-AF 6,117,27,118 # 441
-AF 2,3,61,7 # 442
-AF 137,4,2 # 443
-AF 45,93 # 444
-AF 15,16,7,23,2,3 # 445
-AF 20,3,8,7,9 # 446
-AF 20,21,3 # 447
-AF 23,2,3,5,6,7,119 # 448
-AF 2,3,60,61,7,79 # 449
-AF 4,2,89 # 450
-AF 2,3,28,43,44,7 # 451
-AF 4,2,3,5,11,6 # 452
-AF 2,9 # 453
-AF 49,50,10 # 454
-AF 23,24,10,18,19,2,3,7 # 455
-AF 44,7 # 456
-AF 20,21,22,2,3 # 457
-AF 5,7 # 458
-AF 23,10,2,3,5,6,7 # 459
-AF 18,20,2,3,8,7,9 # 460
-AF 2,17,29,30,36 # 461
-AF 2,3,5,6,63,64,7 # 462
-AF 2,3,139 # 463
-AF 5,11,6,7 # 464
-AF 10,18,19,20,21,5 # 465
-AF 20,21,2,3,7 # 466
-AF 22,2,3,8,7,9 # 467
-AF 37,76,2 # 468
-AF 2,3,56,57,7 # 469
-AF 10,18,25,19,3 # 470
-AF 23,24,10,18,19,4,2 # 471
-AF 17,29,30,36,34,35,6,26,27 # 472
-AF 140,2,3,5,6,7 # 473
-AF 3,66,7 # 474
-AF 9 # 475
-AF 56,57,18,19,7 # 476
-AF 13,14 # 477
-AF 2,3,5,6,7,119 # 478
-AF 3,7,13,14 # 479
-AF 18,19,8,7,9 # 480
-AF 6,68 # 481
-AF 2,3,7,141,142 # 482
-AF 10,20,2,3,8,7,9 # 483
-AF 2,3,7,9,52 # 484
-AF 136,143,22,2,3,8,7,9 # 485
-AF 2,17,27,29,30 # 486
-AF 2,3,77,78 # 487
-AF 11,56,57,10,18,19 # 488
-AF 18,19,3 # 489
-AF 2,3,81 # 490
-AF 2,3,6,7,119,144 # 491
-AF 99 # 492
-AF 29,30,36,2 # 493
-AF 23,24,10,2,3,7 # 494
-AF 20,2,3,6,47,7 # 495
-AF 18,19,5,6,7 # 496
-AF 3,6,7,68 # 497
-AF 145,2,3 # 498
-AF 106 # 499
-AF 2,3,8,47,7,9 # 500
-AF 2,3,7,14,200 # 501
-AF 29,30,200 # 502
-AF 2,3,6,7,114 # 503
-AF 2,3,5,6,47,7 # 504
-AF 3,7,14 # 505
-AF 2,17,23,24,10,18,19,29,30,6,26,27 # 506
-AF 23,24,86,87,10,18,25,19,3,5,6,7 # 507
-AF 59,2,3 # 508
-AF 2,3,130 # 509
-AF 84 # 510
-AF 18,19,22,2,3,28,8,7,9 # 511
-AF 23,18,2,3,5,6,7 # 512
-AF 104,2,3,60,61,7 # 513
-AF 23,24,10,18,19,2,3,28,5,6,7 # 514
-AF 2,3,7,13 # 515
-AF 63,64,7,77,78,18,19 # 516
-AF 18,19,29,30 # 517
-AF 23,24,18,19,2,3,7 # 518
-AF 2,3,5,6,7,106 # 519
-AF 23,24,10,18,19,3,5,6,7 # 520
-AF 71,72,10,18,19 # 521
-AF 2,3,53,54,7,71,72,10,18,19 # 522
-AF 43,44 # 523
-AF 2,17,34,35 # 524
-AF 23,2,5,6 # 525
-AF 10,18,19,20,21,2,3,7 # 526
-AF 23,147,10,18,2,3 # 527
-AF 10,29,30 # 528
-AF 18,19,81,109,2,3,7,13,14 # 529
-AF 20,21,22,2,3,8,7,9 # 530
-AF 2,3,71,7 # 531
-AF 18,19,20,21,8,7,9 # 532
-AF 23,24,4,5,11,6 # 533
-AF 23,24,10,18,19,4,5,11,6 # 534
-AF 27,29,30,36,34,35 # 535
-AF 2,3,99 # 536
-AF 3,60,61,7 # 537
-AF 11,4 # 538
-AF 85,17 # 539
-AF 18,19,20,21,136,22 # 540
-AF 11,38,40,4,2 # 541
-AF 10,2,3,28 # 542
-AF 2,3,64,7 # 543
-AF 3,95,31 # 544
-AF 18,19,22,2,3 # 545
-AF 30 # 546
-AF 11,6,4 # 547
-AF 7,148,149 # 548
-AF 29,2 # 549
-AF 10,3,28 # 550
-AF 23,24,10,18,25,19,2 # 551
-AF 10,104,18,19,105,60,61,7 # 552
-AF 41,42 # 553
-AF 2,3,28,53,54,7 # 554
-AF 2,71,72 # 555
-AF 10,77,78,18,19,2,3,63,64,7 # 556
-AF 23,2,3,60,61,7 # 557
-AF 18,19,7,13,14 # 558
-AF 23,24,10,2,3,5,6,7 # 559
-AF 63,64 # 560
-AF 86,87,10,18,19 # 561
-AF 115,32,33,7,3 # 562
-AF 11,53,54,4,2 # 563
-AF 2,3,67,7 # 564
-AF 10,104,18,19,105 # 565
-AF 23,10,18,19,2,3,5,6,7 # 566
-AF 4,2,5,62,11,6 # 567
-AF 23,24,86,87,10,18,25,19 # 568
-AF 56,65,66,7 # 569
-AF 20,21,2,3,8,6,7 # 570
-AF 18,19,2,3,5,6,7 # 571
-AF 5,6,7,68 # 572
-AF 10,18,19,81,109,2,3,7,14 # 573
-AF 8,6,7,9 # 574
-AF 10,18,19,20,21,3 # 575
-AF 2,3,86,87,10,20,21,8,7,9 # 576
-AF 14,150,2,3,28 # 577
-AF 2,67,5,6,7 # 578
-AF 3,7,200 # 579
-AF 2,3,28,23,5,6,7 # 580
-AF 2,3,86,87,10 # 581
-AF 20,21,3,28 # 582
-AF 23,24,2 # 583
-AF 2,17,27,29,30,34,35 # 584
-AF 201,204 # 585
-AF 205,203 # 586
-AF 201,202 # 587
-AF 205 # 588
-AF 203,300 # 589
-AM 1829
-AM ts:0
-AM st:abatis ts:Ns
-AM ts:0 al:abode
-AM ts:0 st:abide
-AM st:ax ts:Ns
-AM st:addendum ts:Ns
-AM ts:0 al:addenda
-AM ts:0 al:admen
-AM st:adman ts:Ns
-AM ts:0 al:afterlives
-AM st:afterlife ts:Ns
-AM st:agendum ts:Ns's
-AM st:agendum ts:Ns
-AM ts:0 al:aircraftmen
-AM st:aircraftman ts:Ns
-AM ts:0 al:airmen
-AM st:airman ts:Ns
-AM ts:0 al:airwomen
-AM st:airwoman ts:Ns
-AM ts:0 al:aldermen
-AM st:alderman ts:Ns
-AM ts:0 al:alderwomen
-AM st:alderwoman ts:Ns
-AM ts:0 al:alewives
-AM st:alewife ts:Ns
-AM st:algum ts:Ns's
-AM st:algum ts:Ns
-AM st:aluminum ts:Ns's
-AM st:aluminum ts:Ns
-AM ts:0 al:alumina al:alumina's
-AM st:alumnus ts:Ns
-AM ts:0 al:alumni
-AM st:Alyssum ts:Ns's
-AM st:Alyssum ts:Ns
-AM st:amanuensis ts:Ns
-AM ts:0 al:amanuenses
-AM ts:0 al:ambulancemen
-AM st:ambulanceman ts:Ns
-AM ts:0 al:ambulancewomen
-AM st:ambulancewoman ts:Ns
-AM st:ammonium ts:Ns's
-AM st:ammonium ts:Ns
-AM ts:0 al:ammonia al:ammonia's
-AM st:amniocentesis ts:Ns
-AM ts:0 al:amniocenteses
-AM st:be ts:Vd
-AM ts:0 al:anchormen
-AM st:anchorman ts:Ns
-AM st:anchorperson ts:Ns
-AM ts:0 al:anchorpeople
-AM ts:0 al:anchorwomen
-AM st:anchorwoman ts:Ns
-AM st:annulus ts:Ns
-AM ts:0 al:annuli
-AM st:antis ts:Ns
-AM ts:0 al:antes
-AM st:antithesis ts:Ns
-AM ts:0 al:antitheses
-AM st:aphelion ts:Ns
-AM ts:0 al:aphelia
-AM st:Apium ts:Ns
-AM st:apocryphon ts:Ns's
-AM st:apocryphon ts:Ns
-AM st:apotheosis ts:Ns
-AM ts:0 al:apotheoses
-AM st:apsis ts:Ns
-AM st:Aquilon ts:Ns
-AM st:arcanum ts:Ns
-AM ts:0 al:arose
-AM st:arise ts:Vd
-AM ts:0 al:artillerymen
-AM st:artilleryman ts:Ns
-AM ts:0 al:assemblymen
-AM st:assemblyman ts:Ns
-AM ts:0 al:assemblywomen
-AM st:assemblywoman ts:Ns
-AM st:on ts:Ns
-AM st:eat ts:Vd
-AM st:Atlantis ts:Ns
-AM ts:0 al:Atlantes
-AM st:atrium ts:Ns
-AM ts:0 al:atria
-AM st:aurum ts:Ns's
-AM st:aurum ts:Ns
-AM st:auspex ts:Ns
-AM ts:0 al:awoke al:awoken
-AM st:awake ts:Vd
-AM ts:0 al:aces
-AM st:axis ts:Ns
-AM ts:0 al:axes
-AM st:babysit ts:Vd
-AM ts:0 al:babysat
-AM st:bacillus ts:Ns
-AM ts:0 al:bacilli
-AM ts:0 al:backwoodsmen
-AM st:backwoodsman ts:Ns
-AM st:bacterium ts:Ns's
-AM st:bacterium ts:Ns
-AM ts:0 al:bacteria al:bacteria's
-AM ts:0 al:worse al:worst
-AM st:bid ts:Vd
-AM ts:0 al:badmen
-AM st:badman ts:Ns
-AM ts:0 al:bailsmen
-AM st:bailsman ts:Ns
-AM ts:0 al:bandsmen
-AM st:bandsman ts:Ns
-AM ts:0 al:bargemen
-AM st:bargeman ts:Ns
-AM ts:0 al:barmen
-AM st:barman ts:Ns
-AM ts:0 al:basemen
-AM st:baseman ts:Ns
-AM st:basis ts:Ns
-AM st:basilicon ts:Ns's
-AM st:basilicon ts:Ns
-AM ts:0 al:bases
-AM st:Batis ts:Ns
-AM ts:0 al:batmen
-AM st:batman ts:Ns
-AM ts:0 al:batsmen
-AM st:batsman ts:Ns
-AM ts:0 al:am al:are al:art al:is al:was al:wast al:were
-AM ts:0 al:bore al:born al:borne
-AM st:become ts:Vd
-AM ts:0 al:became
-AM ts:0 al:befell
-AM st:befall ts:Vd
-AM st:begin ts:Vd
-AM ts:0 al:begot al:begotten
-AM ts:0 al:began al:begun
-AM st:beget ts:Vd
-AM st:behold ts:Vd
-AM ts:0 al:beheld
-AM ts:0 al:belying
-AM ts:0 al:bellmen
-AM st:bellman ts:Ns
-AM st:belie ts:Vd
-AM ts:0 al:bereft
-AM st:bereave ts:Vd
-AM ts:0 al:besought
-AM st:beseech ts:Vd
-AM ts:0 al:bespoke al:bespoken
-AM st:bespeak ts:Vd
-AM ts:0 al:bestrode
-AM st:bestride ts:Vd
-AM st:well ts:0
-AM ts:0 al:betook
-AM st:beton ts:Ns's
-AM st:beton ts:Ns
-AM ts:0 al:bethought
-AM st:bethink ts:Vd
-AM st:betake ts:Vd
-AM ts:0 al:bade
-AM ts:0 al:bode
-AM st:by ts:0
-AM ts:0 al:bound
-AM ts:0 al:binmen
-AM st:binman ts:Ns
-AM st:bus ts:Ns's
-AM st:bus ts:Ns
-AM st:Blackfoot ts:Ns
-AM ts:0 al:Blackfeet
-AM st:bleed ts:Vd
-AM ts:0 al:bled
-AM st:blow ts:Vd
-AM ts:0 al:blew
-AM st:boon ts:Ns's
-AM st:boon ts:Ns
-AM ts:0 al:boatmen
-AM st:boatman ts:Ns
-AM st:bide ts:Vd
-AM ts:0 al:bogeymen
-AM st:bogeyman ts:Ns
-AM ts:0 al:bogymen
-AM st:bogyman ts:Ns
-AM ts:0 al:bondmen
-AM st:bondman ts:Ns
-AM ts:0 al:bondsmen
-AM st:bondsman ts:Ns
-AM ts:0 al:bondwomen
-AM st:bondwoman ts:Ns
-AM ts:0 al:bonier al:boniest
-AM st:boney ts:0
-AM ts:0 al:boogeymen
-AM st:boogeyman ts:Ns
-AM ts:0 al:boa al:boa's
-AM st:boozey ts:0
-AM st:bear ts:Vd
-AM st:buy ts:Vd
-AM st:bind ts:Vd
-AM ts:0 al:bowmen
-AM st:bowman ts:Ns
-AM ts:0 al:brakemen
-AM st:brakeman ts:Ns
-AM ts:0 al:broke al:broken
-AM st:breastfeed ts:Vd
-AM ts:0 al:breastfed
-AM st:breed ts:Vd
-AM ts:0 al:bred
-AM st:brother ts:Ns
-AM ts:0 al:brought
-AM st:break ts:Vd
-AM st:bronchus ts:Ns
-AM ts:0 al:bronchi
-AM ts:0 al:brethren
-AM st:bring ts:Vd
-AM st:bucktooth ts:Ns
-AM ts:0 al:buckteeth
-AM st:burley ts:0
-AM ts:0 al:bi al:bi's
-AM ts:0 al:bushmen
-AM st:bushman ts:Ns
-AM ts:0 al:businessmen
-AM st:businessman ts:Ns
-AM st:businessperson ts:Ns
-AM ts:0 al:businesspeople
-AM ts:0 al:businesswomen
-AM st:businesswoman ts:Ns
-AM st:busman ts:Ns
-AM ts:0 al:bought
-AM ts:0 al:bier
-AM st:cactus ts:Ns
-AM ts:0 al:cacti
-AM st:caddie ts:Vd
-AM st:caduceus ts:Ns
-AM ts:0 al:caducei
-AM ts:0 al:caves
-AM ts:0 al:cagier al:cagiest
-AM st:cagey ts:0
-AM st:calculus ts:Ns
-AM ts:0 al:calculi
-AM ts:0 al:cameramen
-AM st:cameraman ts:Ns
-AM ts:0 al:camerawomen
-AM st:camerawoman ts:Ns
-AM st:come ts:Vd
-AM ts:0 al:could
-AM st:candelabrum ts:Ns's
-AM st:candelabrum ts:Ns
-AM ts:0 al:candelabra al:candelabra's
-AM st:Carum ts:Ns's
-AM st:Carum ts:Ns
-AM st:carpus ts:Ns
-AM ts:0 al:carpi
-AM ts:0 al:caught
-AM st:catharsis ts:Ns
-AM ts:0 al:catharses
-AM ts:0 al:cattlemen
-AM st:cattleman ts:Ns
-AM st:catch ts:Vd
-AM ts:0 al:cavalrymen
-AM st:cavalryman ts:Ns
-AM ts:0 al:cavemen
-AM st:caveman ts:Ns
-AM st:cafe ts:Ns
-AM st:cecum ts:Ns
-AM ts:0 al:ceca
-AM st:cedis ts:Ns
-AM st:cerebrum ts:Ns
-AM ts:0 al:cerebra
-AM ts:0 al:chairmen
-AM st:chairman ts:Ns
-AM ts:0 al:chairwomen
-AM st:chairwoman ts:Ns
-AM st:chancey ts:0
-AM ts:0 al:charwomen
-AM st:charwoman ts:Ns
-AM ts:0 al:chessmen
-AM st:chessman ts:Ns
-AM st:chilis ts:Ns
-AM st:chinchillon ts:Ns's
-AM st:chinchillon ts:Ns
-AM ts:0 al:chose al:chosen
-AM ts:0 al:choosier al:choosiest
-AM st:choosey ts:0
-AM st:choose ts:Vd
-AM ts:0 al:churchmen
-AM st:churchman ts:Ns
-AM ts:0 al:churchwomen
-AM st:churchwoman ts:Ns
-AM st:cilium ts:Ns
-AM ts:0 al:cilia
-AM st:Cincinnatus ts:Ns
-AM st:cirrus ts:Ns
-AM ts:0 al:cirri
-AM st:Co ts:Ns
-AM st:clothe ts:Vd
-AM ts:0 al:clansmen
-AM st:clansman ts:Ns
-AM ts:0 al:clanswomen
-AM st:clanswoman ts:Ns
-AM st:classis ts:Ns
-AM ts:0 al:clayier al:clayiest
-AM st:clayey ts:0
-AM ts:0 al:cleft al:clove al:cloven
-AM ts:0 st:cleave
-AM ts:0 al:clergymen
-AM st:clergyman ts:Ns
-AM ts:0 al:clergywomen
-AM st:clergywoman ts:Ns
-AM ts:0 al:clung
-AM ts:0 al:cliquier al:cliquiest
-AM st:cliquey ts:0
-AM ts:0 al:clad
-AM st:cleave ts:Vd
-AM st:clubfoot ts:Ns
-AM ts:0 al:clubfeet
-AM st:cling ts:Vd
-AM ts:0 al:Ci
-AM ts:0 al:coachmen
-AM st:coachman ts:Ns
-AM ts:0 st:coccus
-AM ts:0 al:cocci
-AM st:cocoon ts:Ns's
-AM st:cocoon ts:Ns
-AM ts:0 al:cocoa al:cocoa's
-AM st:codon ts:Ns's
-AM st:codon ts:Ns
-AM ts:0 al:codices
-AM st:codex ts:Ns
-AM st:colon ts:Ns's
-AM st:colon ts:Ns
-AM ts:0 al:cola al:cola's
-AM st:colossus ts:Ns
-AM ts:0 al:colossi
-AM ts:0 al:came
-AM st:common ts:Ns's
-AM st:common ts:Ns
-AM ts:0 al:committeemen
-AM st:committeeman ts:Ns
-AM ts:0 al:committeewomen
-AM st:committeewoman ts:Ns
-AM ts:0 al:comma al:comma's
-AM ts:0 al:congressmen
-AM st:congressman ts:Ns
-AM st:congressperson ts:Ns
-AM ts:0 al:congresspeople
-AM ts:0 al:congresswomen
-AM st:congresswoman ts:Ns
-AM st:consortium ts:Ns
-AM ts:0 al:consortia
-AM st:continuum ts:Ns
-AM ts:0 al:continua
-AM st:corneum ts:Ns's
-AM st:corneum ts:Ns
-AM st:corpus ts:Ns
-AM ts:0 al:corpsmen
-AM st:corpsman ts:Ns
-AM ts:0 al:corpora
-AM st:corrigendum ts:Ns
-AM ts:0 al:cortices
-AM st:cortex ts:Ns
-AM st:can ts:Vd
-AM ts:0 al:councilmen
-AM st:councilman ts:Ns
-AM ts:0 al:councilwomen
-AM st:councilwoman ts:Ns
-AM ts:0 al:countermen
-AM st:counterman ts:Ns
-AM ts:0 al:countersunk
-AM st:countersink ts:Vd
-AM ts:0 al:countrymen
-AM st:countryman ts:Ns
-AM ts:0 al:countrywomen
-AM st:countrywoman ts:Ns
-AM ts:0 al:kine
-AM ts:0 al:cowmen
-AM st:cowman ts:Ns
-AM st:cozey ts:0
-AM ts:0 al:craftsmen
-AM st:craftsman ts:Ns
-AM st:craftsperson ts:Ns
-AM ts:0 al:craftswomen
-AM st:craftswoman ts:Ns
-AM ts:0 al:crept
-AM st:crematorium ts:Ns
-AM ts:0 al:crematoria
-AM st:creep ts:Vd
-AM ts:0 al:crewmen
-AM st:crewman ts:Ns
-AM st:crisis ts:Ns
-AM ts:0 al:crises
-AM st:criterium ts:Ns
-AM ts:0 al:criteria
-AM ts:0 al:crossbowmen
-AM st:crossbowman ts:Ns
-AM st:crossbreed ts:Vd
-AM ts:0 al:crossbred
-AM st:crowfoot ts:Ns
-AM ts:0 al:crowfeet
-AM st:cumulus ts:Ns
-AM st:cumulonimbus ts:Ns
-AM ts:0 al:cumulonimbi
-AM ts:0 al:cumuli
-AM st:curium ts:Ns's
-AM st:curium ts:Ns
-AM ts:0 al:curia al:curia's
-AM st:curriculum ts:Ns
-AM ts:0 al:curricula
-AM st:currie ts:Vd
-AM st:curvey ts:0
-AM ts:0 al:dairymen
-AM st:dairyman ts:Ns
-AM ts:0 al:dairywomen
-AM st:dairywoman ts:Ns
-AM st:dalis ts:Ns
-AM ts:0 al:durst
-AM st:daris ts:Ns
-AM st:dashis ts:Ns
-AM st:datum ts:Ns
-AM ts:0 al:data
-AM ts:0 al:deliverymen
-AM st:deliveryman ts:Ns
-AM st:desideratum ts:Ns
-AM ts:0 al:desiderata
-AM st:diaeresis ts:Ns
-AM ts:0 al:diaereses
-AM st:diagnosis ts:Ns
-AM ts:0 al:diagnoses
-AM st:dex ts:Ns
-AM ts:0 al:dicier al:diciest
-AM st:dicey ts:0
-AM ts:0 al:dickier al:dickiest
-AM st:dickey ts:0
-AM st:dictum ts:Ns
-AM ts:0 al:dicta
-AM st:do ts:Vd
-AM ts:0 al:dying
-AM st:dieresis ts:Ns
-AM ts:0 al:diereses
-AM ts:0 al:dug
-AM st:dingey ts:0
-AM st:dinkey ts:0
-AM ts:0 al:dove
-AM ts:0 al:did al:didst
-AM st:dodecahedron ts:Ns
-AM ts:0 al:dodecahedra
-AM st:dolman ts:Ns's
-AM st:dolman ts:Ns
-AM ts:0 al:doormen
-AM st:doorman ts:Ns
-AM ts:0 al:dopier al:dopiest
-AM st:dopey ts:0
-AM st:dormouse ts:Ns
-AM ts:0 al:dormice
-AM st:dive ts:Vd
-AM ts:0 al:draftsmen
-AM st:draftsman ts:Ns
-AM ts:0 al:draftswomen
-AM st:draftswoman ts:Ns
-AM st:drink ts:Vd
-AM ts:0 al:drew
-AM st:draw ts:Vd
-AM ts:0 st:drey
-AM st:drey ts:0
-AM ts:0 al:drank al:drunk
-AM ts:0 al:drove
-AM st:drive ts:Vd
-AM st:dig ts:Vd
-AM st:duodenum ts:Ns
-AM ts:0 al:duodena
-AM st:dare ts:Vd
-AM ts:0 al:dustmen
-AM st:dustman ts:Ns
-AM ts:0 al:Dutchmen
-AM st:Dutchman ts:Ns
-AM ts:0 st:die
-AM st:eon ts:Ns
-AM ts:0 al:ate
-AM st:eclipsis ts:Ns
-AM st:effluvium ts:Ns
-AM ts:0 al:effluvia
-AM st:old ts:0
-AM st:ellipsis ts:Ns
-AM ts:0 al:ellipses
-AM st:emphasis ts:Ns
-AM ts:0 al:emphases
-AM ts:0 al:Englishmen
-AM st:Englishman ts:Ns
-AM ts:0 al:Englishwomen
-AM st:Englishwoman ts:Ns
-AM ts:0 al:ea
-AM st:ephemeron ts:Ns's
-AM st:ephemeron ts:Ns
-AM st:epiphenomenon ts:Ns
-AM ts:0 al:epiphenomena
-AM st:erratum ts:Ns's
-AM st:erratum ts:Ns
-AM ts:0 al:errata al:errata's
-AM st:esophagus ts:Ns
-AM ts:0 al:esophagi
-AM st:eucalyptus ts:Ns
-AM ts:0 al:eucalypti
-AM ts:0 al:ices
-AM st:exegesis ts:Ns
-AM ts:0 al:exegeses
-AM st:extremum ts:Ns
-AM st:eyetooth ts:Ns
-AM ts:0 al:eyeteeth
-AM ts:0 al:fell
-AM st:fantasie ts:Vd
-AM ts:0 al:further al:furthest
-AM st:fon ts:Ns's
-AM st:fon ts:Ns
-AM st:feed ts:Vd
-AM ts:0 al:fed
-AM ts:0 al:felt
-AM st:feis ts:Ns
-AM st:foot ts:Ns
-AM ts:0 st:fellon
-AM ts:0 al:fellowmen
-AM st:fellowman ts:Ns
-AM st:fall ts:Vd
-AM st:feel ts:Vd
-AM ts:0 al:ferrymen
-AM st:ferryman ts:Ns
-AM st:fiddley ts:0
-AM ts:0 al:fieldsmen
-AM st:fieldsman ts:Ns
-AM ts:0 al:fives
-AM ts:0 al:fought
-AM ts:0 al:found
-AM st:finis ts:Ns
-AM ts:0 al:fines
-AM ts:0 al:firemen
-AM st:fireman ts:Ns
-AM ts:0 al:fishermen
-AM st:fisherman ts:Ns
-AM ts:0 al:fishwives
-AM st:fishwife ts:Ns
-AM st:fife ts:Ns
-AM st:flagellum ts:Ns
-AM ts:0 al:flagella
-AM ts:0 al:flagmen
-AM st:flagman ts:Ns
-AM st:flakey ts:0
-AM st:flatfoot ts:Ns
-AM ts:0 al:flatfeet
-AM ts:0 st:fley
-AM st:fley ts:0
-AM ts:0 al:flung
-AM ts:0 al:floodlit
-AM st:floodlight ts:Vd
-AM ts:0 al:flukier al:flukiest
-AM st:flukey ts:0
-AM st:fling ts:Vd
-AM ts:0 al:feet
-AM ts:0 al:footmen
-AM st:footman ts:Ns
-AM st:forum ts:Ns
-AM st:forbid ts:Vd
-AM ts:0 al:forbore al:forborne
-AM ts:0 al:forbade
-AM st:forbear ts:Vd
-AM st:forefoot ts:Ns
-AM ts:0 al:forefeet
-AM st:foreknow ts:Vd
-AM ts:0 al:foreknew
-AM ts:0 al:foremen
-AM st:foreman ts:Ns
-AM st:foresee ts:Vd
-AM ts:0 al:foresaw
-AM ts:0 al:foreswore al:foresworn
-AM st:foreswear ts:Vd
-AM ts:0 al:foretold
-AM ts:0 st:forethink
-AM st:foretell ts:Vd
-AM st:forego ts:Vd
-AM ts:0 al:forewomen
-AM st:forewoman ts:Ns
-AM st:forgive ts:Vd
-AM ts:0 al:forgot al:forgotten
-AM ts:0 al:forgave
-AM ts:0 al:forwent
-AM st:forget ts:Vd
-AM ts:0 al:forsook
-AM st:forsake ts:Vd
-AM ts:0 al:forswore al:forsworn
-AM st:forswear ts:Vd
-AM st:fortis ts:Ns
-AM ts:0 al:fora
-AM st:forgo ts:Vd
-AM st:fight ts:Vd
-AM st:find ts:Vd
-AM st:Francis ts:Ns
-AM ts:0 al:Frances
-AM ts:0 al:freedmen
-AM st:freedman ts:Ns
-AM ts:0 al:freemen
-AM st:freeman ts:Ns
-AM ts:0 al:froze al:frozen
-AM ts:0 al:Frenchmen
-AM st:Frenchman ts:Ns
-AM ts:0 al:Frenchwomen
-AM st:Frenchwoman ts:Ns
-AM ts:0 al:freshmen
-AM st:freshman ts:Ns
-AM ts:0 al:frogmen
-AM st:frogman ts:Ns
-AM ts:0 al:frontiersmen
-AM st:frontiersman ts:Ns
-AM ts:0 al:frontierswomen
-AM st:frontierswoman ts:Ns
-AM st:freeze ts:Vd
-AM st:fungus ts:Ns
-AM ts:0 al:fungi
-AM ts:0 al:funnymen
-AM st:funnyman ts:Ns
-AM st:far ts:0
-AM st:gamesman ts:Ns
-AM ts:0 al:gamier al:gamiest
-AM st:gamey ts:0
-AM st:gammon ts:Ns's
-AM st:gammon ts:Ns
-AM ts:0 al:gamma al:gamma's
-AM st:ganglion ts:Ns
-AM ts:0 al:ganglia
-AM ts:0 al:gasmen
-AM st:gasman ts:Ns
-AM st:give ts:Vd
-AM st:goose ts:Ns
-AM st:genus ts:Ns
-AM st:genesis ts:Ns
-AM ts:0 al:geneses
-AM st:genius ts:Ns
-AM ts:0 al:genii
-AM ts:0 al:gentlemen
-AM st:gentleman ts:Ns
-AM ts:0 al:gentlewomen
-AM st:gentlewoman ts:Ns
-AM ts:0 al:genera
-AM ts:0 al:got al:gotten
-AM ts:0 al:ghostwrote
-AM st:ghostwrite ts:Vd
-AM ts:0 al:gave
-AM st:glacis ts:Ns
-AM st:gladiolus ts:Ns
-AM ts:0 al:gladioli
-AM ts:0 al:gluier al:gluiest
-AM st:gluey ts:0
-AM ts:0 al:went
-AM ts:0 al:best al:better
-AM ts:0 al:gooier al:gooiest
-AM st:gooey ts:0
-AM ts:0 al:geese
-AM st:get ts:Vd
-AM st:gratis ts:Ns
-AM ts:0 al:grates
-AM st:grow ts:Vd
-AM ts:0 al:ground
-AM ts:0 al:groomsmen
-AM st:groomsman ts:Ns
-AM ts:0 al:groundsmen
-AM st:groundsman ts:Ns
-AM st:grind ts:Vd
-AM ts:0 al:grew
-AM ts:0 al:guardsmen
-AM st:guardsman ts:Ns
-AM ts:0 al:gunmen
-AM st:gunman ts:Ns
-AM st:gussie ts:Vd
-AM st:hadjis ts:Ns
-AM ts:0 al:hadjes
-AM st:have ts:Vd
-AM st:hajjis ts:Ns
-AM ts:0 al:hajjes
-AM st:halfpenny ts:Ns
-AM ts:0 al:halfpence,17
-AM ts:0 al:hamstrung
-AM st:hamstring ts:Vd
-AM ts:0 al:handymen
-AM st:handyman ts:Ns
-AM ts:0 al:hung
-AM ts:0 al:hangmen
-AM st:hangman ts:Ns
-AM st:harmonicon ts:Ns's
-AM st:harmonicon ts:Ns
-AM st:hum ts:Ns
-AM ts:0 al:had al:hadst al:has al:hast al:hath
-AM ts:0 al:headmen
-AM st:headman ts:Ns
-AM ts:0 al:headsmen
-AM st:headsman ts:Ns
-AM ts:0 al:heartbroken
-AM st:heartbreak ts:Vd
-AM ts:0 al:hove
-AM st:hold ts:Vd
-AM ts:0 al:helmsmen
-AM st:helmsman ts:Ns
-AM ts:0 al:henchmen
-AM st:henchman ts:Ns
-AM ts:0 al:herdsmen
-AM st:herdsman ts:Ns
-AM st:his ts:Ns
-AM ts:0 al:hying
-AM ts:0 al:highwaymen
-AM st:highwayman ts:Ns
-AM st:Hindus ts:Ns
-AM ts:0 al:Hindi
-AM ts:0 al:hes
-AM ts:0 al:hogtying
-AM st:hogtie ts:Vd
-AM ts:0 al:hokier al:hokiest
-AM st:hokey ts:0
-AM ts:0 al:held
-AM ts:0 al:holier al:holiest
-AM st:holey ts:0
-AM ts:0 al:homier al:homiest
-AM st:homey ts:0
-AM ts:0 al:ha
-AM ts:0 al:horsemen
-AM st:horseman ts:Ns
-AM ts:0 al:horsewomen
-AM st:horsewoman ts:Ns
-AM ts:0 al:horsier al:horsiest
-AM st:horsey ts:0
-AM ts:0 al:housebroke al:housebroken
-AM st:housebreak ts:Vd
-AM ts:0 al:housemen
-AM st:houseman ts:Ns
-AM ts:0 al:housewives
-AM st:housewife ts:Ns
-AM st:heave ts:Vd
-AM st:humerus ts:Ns
-AM ts:0 al:humeri
-AM st:hang ts:Vd
-AM st:hunkey ts:0
-AM ts:0 al:huntsmen
-AM st:huntsman ts:Ns
-AM ts:0 al:husbandmen
-AM st:husbandman ts:Ns
-AM st:hie ts:Vd
-AM st:hypnosis ts:Ns
-AM ts:0 al:hypnoses
-AM st:hypochondrium ts:Ns's
-AM st:hypochondrium ts:Ns
-AM st:hypothalamus ts:Ns
-AM ts:0 al:hypothalami
-AM st:hypothesis ts:Ns
-AM ts:0 al:hypotheses
-AM st:iambus ts:Ns
-AM ts:0 al:iambi
-AM ts:0 al:icemen
-AM st:iceman ts:Ns
-AM st:ex ts:Ns
-AM st:icosahedron ts:Ns
-AM ts:0 al:icosahedra
-AM st:ileum ts:Ns
-AM ts:0 al:ilea
-AM st:ilium ts:Ns
-AM ts:0 al:ilia
-AM st:inbreed ts:Vd
-AM ts:0 al:inbred
-AM st:incunabulum ts:Ns
-AM ts:0 al:incunabula
-AM ts:0 al:infantrymen
-AM st:infantryman ts:Ns
-AM st:interbreed ts:Vd
-AM ts:0 al:interbred
-AM ts:0 al:interwove al:interwoven
-AM st:interweave ts:Vd
-AM ts:0 al:Irishmen
-AM st:Irishman ts:Ns
-AM ts:0 al:Irishwomen
-AM st:Irishwoman ts:Ns
-AM st:us ts:Ns
-AM ts:0 al:jackknives
-AM st:jackknife ts:Ns
-AM st:Jacobus ts:Ns
-AM st:jejunum ts:Ns
-AM ts:0 al:jejuna
-AM st:jimmie ts:Vd
-AM ts:0 al:jokier al:jokiest
-AM st:jokey ts:0
-AM ts:0 al:journeymen
-AM st:journeyman ts:Ns
-AM ts:0 al:joyrode
-AM st:joyride ts:Vd
-AM ts:0 al:jurymen
-AM st:juryman ts:Ns
-AM ts:0 al:jurywomen
-AM st:jurywoman ts:Ns
-AM ts:0 al:kept
-AM st:keep ts:Vd
-AM st:cow ts:Ns
-AM ts:0 al:kinsmen
-AM st:kinsman ts:Ns
-AM ts:0 al:kinswomen
-AM st:kinswoman ts:Ns
-AM ts:0 al:knelt
-AM st:kneel ts:Vd
-AM st:know ts:Vd
-AM ts:0 al:knives
-AM st:knife ts:Ns
-AM ts:0 al:knew
-AM st:labium ts:Ns
-AM ts:0 al:labia
-AM st:lacey ts:0
-AM st:lie ts:Vd
-AM ts:0 al:landsmen
-AM st:landsman ts:Ns
-AM st:lum ts:Ns's
-AM st:lum ts:Ns
-AM ts:0 al:latices
-AM st:lathis ts:Ns
-AM st:latex ts:Ns
-AM ts:0 al:laundrymen
-AM st:laundryman ts:Ns
-AM ts:0 al:laundrywomen
-AM st:laundrywoman ts:Ns
-AM st:Laurus ts:Ns's
-AM st:Laurus ts:Ns
-AM ts:0 al:lawmen
-AM st:lawman ts:Ns
-AM ts:0 al:laymen
-AM st:layman ts:Ns
-AM st:layperson ts:Ns
-AM ts:0 al:laypeople
-AM ts:0 al:laywomen
-AM st:laywoman ts:Ns
-AM ts:0 al:led
-AM ts:0 st:little
-AM ts:0 al:left
-AM st:Ledum ts:Ns
-AM st:lead ts:Vd
-AM st:leis ts:Ns
-AM st:leave ts:Vd
-AM ts:0 al:legmen
-AM st:legman ts:Ns
-AM ts:0 al:lees
-AM st:lepton ts:Ns
-AM ts:0 al:lepta
-AM ts:0 al:least
-AM st:little ts:0
-AM st:louse ts:Ns
-AM ts:0 al:lain al:lay al:lying
-AM ts:0 al:lives
-AM st:lifeboatman ts:Ns
-AM ts:0 al:lit
-AM st:Lilium ts:Ns's
-AM st:Lilium ts:Ns
-AM ts:0 al:limier al:limiest
-AM st:limey ts:0
-AM ts:0 al:linemen
-AM st:lineman ts:Ns
-AM ts:0 al:linesmen
-AM st:linesman ts:Ns
-AM ts:0 al:linkmen
-AM st:linkman ts:Ns
-AM st:literatus ts:Ns's
-AM st:literatus ts:Ns
-AM st:light ts:Vd
-AM ts:0 al:least al:less al:lesser
-AM ts:0 al:liverymen
-AM st:liveryman ts:Ns
-AM st:life ts:Ns
-AM st:locus ts:Ns
-AM ts:0 al:loci
-AM ts:0 al:longshoremen
-AM st:longshoreman ts:Ns
-AM ts:0 al:loonies al:loonier al:looniest
-AM st:looney ts:0
-AM st:looney ts:Ns
-AM ts:0 al:lice
-AM ts:0 al:lumbermen
-AM st:lumberman ts:Ns
-AM st:lungis ts:Ns
-AM ts:0 st:lie
-AM ts:0 al:mesdames
-AM ts:0 al:mesdemoiselles
-AM st:make ts:Vd
-AM ts:0 al:madmen
-AM st:madman ts:Ns
-AM ts:0 al:madwomen
-AM st:madwoman ts:Ns
-AM st:magus ts:Ns's
-AM st:magus ts:Ns
-AM st:Magus ts:Ns
-AM st:magnesium ts:Ns's
-AM st:magnesium ts:Ns
-AM ts:0 al:magnesia al:magnesia's
-AM ts:0 al:Magi
-AM st:Mahabharatum ts:Ns's
-AM st:Mahabharatum ts:Ns
-AM ts:0 al:mailmen
-AM st:mailman ts:Ns
-AM ts:0 al:made
-AM st:malis ts:Ns
-AM st:Malus ts:Ns
-AM st:mammon ts:Ns's
-AM st:mammon ts:Ns
-AM ts:0 al:mamma al:mamma's
-AM ts:0 al:men
-AM st:mangey ts:0
-AM ts:0 al:menservants
-AM st:mantis ts:Ns
-AM ts:0 al:mantes
-AM ts:0 al:more al:most
-AM st:Marathon ts:Ns's
-AM st:Marathon ts:Ns
-AM ts:0 al:Maratha al:Maratha's
-AM st:Marion ts:Ns's
-AM st:Marion ts:Ns
-AM ts:0 al:Maria al:Maria's
-AM ts:0 al:marksmen
-AM st:marksman ts:Ns
-AM st:mascaron ts:Ns's
-AM st:mascaron ts:Ns
-AM st:mum ts:Ns's
-AM st:mum ts:Ns
-AM st:maxis ts:Ns
-AM ts:0 al:maxes
-AM ts:0 al:might
-AM st:medium ts:Ns's
-AM st:medium ts:Ns
-AM ts:0 al:media al:media's
-AM ts:0 al:met
-AM ts:0 al:molten
-AM st:meniscus ts:Ns
-AM ts:0 al:menisci
-AM st:manservant ts:Ns
-AM st:man ts:Ns
-AM ts:0 al:merchantmen
-AM st:merchantman ts:Ns
-AM st:meris ts:Ns
-AM ts:0 al:mermen
-AM st:merman ts:Ns
-AM st:meson ts:Ns's
-AM st:meson ts:Ns
-AM st:madame ts:Ns
-AM st:mademoiselle ts:Ns
-AM ts:0 al:mesa al:mesa's
-AM st:monseigneur ts:Ns
-AM st:monsieur ts:Ns
-AM st:metacarpus ts:Ns
-AM ts:0 al:metacarpi
-AM st:metamorphosis ts:Ns
-AM ts:0 al:metamorphoses
-AM st:metastasis ts:Ns
-AM ts:0 al:metastases
-AM st:metatarsus ts:Ns
-AM ts:0 al:metatarsi
-AM st:metathesis ts:Ns
-AM ts:0 al:metatheses
-AM st:metempsychosis ts:Ns
-AM ts:0 al:metempsychoses
-AM st:metis ts:Ns
-AM ts:0 al:methought
-AM st:methinks ts:Vd
-AM st:meet ts:Vd
-AM st:mouse ts:Ns
-AM st:microanalysis ts:Ns
-AM ts:0 al:middlemen
-AM st:middleman ts:Ns
-AM ts:0 al:midshipmen
-AM st:midshipman ts:Ns
-AM ts:0 al:midwives
-AM st:midwife ts:Ns
-AM st:may ts:Vd
-AM ts:0 al:militiamen
-AM st:militiaman ts:Ns
-AM ts:0 al:milkmen
-AM st:milkman ts:Ns
-AM st:Mimus ts:Ns's
-AM st:Mimus ts:Ns
-AM st:minis ts:Ns
-AM st:minus ts:Ns's
-AM st:minus ts:Ns
-AM ts:0 al:mines
-AM ts:0 al:mini al:mini's
-AM ts:0 al:minutemen
-AM st:minuteman ts:Ns
-AM st:misdiagnosis ts:Ns
-AM ts:0 al:misdiagnoses
-AM ts:0 al:misled
-AM st:mislead ts:Vd
-AM st:missis ts:Ns
-AM ts:0 al:misses
-AM ts:0 al:misspoke al:misspoken
-AM st:misspeak ts:Vd
-AM ts:0 al:mistook
-AM st:mistake ts:Vd
-AM ts:0 al:misunderstood
-AM st:misunderstand ts:Vd
-AM st:mitis ts:Ns
-AM st:mitochondrion ts:Ns
-AM st:mitosis ts:Ns
-AM ts:0 al:mitoses
-AM st:modulus ts:Ns
-AM ts:0 al:moduli
-AM st:melt ts:Vd
-AM st:momentum ts:Ns
-AM ts:0 al:momenta
-AM ts:0 al:monies
-AM st:money ts:Ns
-AM ts:0 al:messeigneurs
-AM ts:0 al:messieurs
-AM ts:0 al:moonlit
-AM st:moonlight ts:Vd
-AM ts:0 al:mopier al:mopiest
-AM st:mopey ts:0
-AM st:much ts:0
-AM ts:0 st:much
-AM ts:0 al:motlier al:motliest
-AM st:motley ts:0
-AM ts:0 al:motormen
-AM st:motorman ts:Ns
-AM ts:0 al:mice
-AM ts:0 al:mousier al:mousiest
-AM st:mousey ts:0
-AM ts:0 al:ma al:ma's
-AM ts:0 al:musclemen
-AM st:muscleman ts:Ns
-AM st:narcosis ts:Ns
-AM ts:0 al:narcoses
-AM st:necrosis ts:Ns
-AM ts:0 al:necroses
-AM ts:0 al:needlewomen
-AM st:needlewoman ts:Ns
-AM st:nemesis ts:Ns
-AM ts:0 al:nemeses
-AM st:neurosis ts:Ns
-AM ts:0 al:neuroses
-AM st:nevus ts:Ns
-AM ts:0 al:nevi
-AM ts:0 al:newsmen
-AM st:newsman ts:Ns
-AM ts:0 al:newspapermen
-AM st:newspaperman ts:Ns
-AM ts:0 al:newspaperwomen
-AM st:newspaperwoman ts:Ns
-AM ts:0 al:newswomen
-AM st:newswoman ts:Ns
-AM st:nimbus ts:Ns
-AM ts:0 al:nimbi
-AM st:No ts:Ns
-AM ts:0 al:Ni
-AM ts:0 al:noblemen
-AM st:nobleman ts:Ns
-AM ts:0 al:noblewomen
-AM st:noblewoman ts:Ns
-AM ts:0 al:Norsemen
-AM st:Norseman ts:Ns
-AM st:nosey ts:0
-AM st:novum ts:Ns's
-AM st:novum ts:Ns
-AM st:nucleus ts:Ns
-AM st:nucleolus ts:Ns
-AM ts:0 al:nucleoli
-AM ts:0 al:nuclei
-AM ts:0 al:nurserymen
-AM st:nurseryman ts:Ns
-AM ts:0 al:oarsmen
-AM st:oarsman ts:Ns
-AM ts:0 al:oarswomen
-AM st:oarswoman ts:Ns
-AM st:oasis ts:Ns
-AM ts:0 al:oases
-AM ts:0 al:oilmen
-AM st:oilman ts:Ns
-AM st:ous ts:Ns
-AM ts:0 al:elder al:eldest
-AM ts:0 al:ombudsmen
-AM st:ombudsman ts:Ns
-AM ts:0 al:a
-AM st:opus ts:Ns's
-AM st:opus ts:Ns
-AM st:optimum ts:Ns
-AM ts:0 al:optima
-AM ts:0 al:opera al:opera's
-AM ts:0 al:outdrew
-AM st:outdraw ts:Vd
-AM ts:0 al:outfought
-AM st:outfight ts:Vd
-AM st:outgrow ts:Vd
-AM ts:0 al:outgrew
-AM st:outlie ts:Vd
-AM st:outrun ts:Vd
-AM ts:0 al:outran
-AM ts:0 al:outsold
-AM ts:0 al:outshone
-AM st:outshine ts:Vd
-AM st:outsell ts:Vd
-AM ts:0 st:outspeak
-AM ts:0 al:outwore al:outworn
-AM st:outwear ts:Vd
-AM st:ovum ts:Ns
-AM st:overeat ts:Vd
-AM ts:0 al:overbore al:overborne
-AM st:overbear ts:Vd
-AM st:overbuy ts:Vd
-AM ts:0 al:overbought
-AM st:overcome ts:Vd
-AM ts:0 al:overcame
-AM ts:0 al:overdrew
-AM st:overdraw ts:Vd
-AM ts:0 al:overate
-AM st:overfeed ts:Vd
-AM ts:0 al:overfed
-AM st:overgrow ts:Vd
-AM ts:0 al:overgrew
-AM ts:0 al:overhung
-AM st:overhang ts:Vd
-AM st:overlie ts:Vd
-AM ts:0 al:overlain al:overlay al:overlying
-AM st:overrun ts:Vd
-AM ts:0 al:overrode
-AM st:override ts:Vd
-AM ts:0 al:overran
-AM st:oversee ts:Vd
-AM ts:0 al:oversaw
-AM ts:0 al:oversold
-AM ts:0 al:overshot
-AM st:overshoot ts:Vd
-AM ts:0 al:overslept
-AM st:oversleep ts:Vd
-AM st:oversell ts:Vd
-AM ts:0 al:overtook
-AM st:overthrow ts:Vd
-AM ts:0 al:overthrew
-AM st:overtake ts:Vd
-AM ts:0 al:overwrought
-AM ts:0 al:overwrote
-AM st:overwrite ts:Vd
-AM st:overwork ts:Vd
-AM ts:0 al:ova
-AM st:oxymoron ts:Ns
-AM ts:0 al:oxymora
-AM ts:0 al:pacier al:paciest
-AM st:pacey ts:0
-AM st:papillon ts:Ns's
-AM st:papillon ts:Ns
-AM st:papyrus ts:Ns
-AM ts:0 al:papyri
-AM st:paramecium ts:Ns
-AM ts:0 al:paramecia
-AM st:paraphrasis ts:Ns
-AM st:parenthesis ts:Ns
-AM ts:0 al:parentheses
-AM st:paresis ts:Ns
-AM ts:0 al:pareses
-AM st:paris ts:Ns
-AM ts:0 al:partook
-AM st:partake ts:Vd
-AM ts:0 al:passersby
-AM st:passerby ts:Ns
-AM st:pastis ts:Ns
-AM ts:0 al:pastes
-AM ts:0 al:patresfamilias
-AM st:paterfamilias ts:Ns
-AM ts:0 al:patrolmen
-AM st:patrolman ts:Ns
-AM ts:0 al:patrolwomen
-AM st:patrolwoman ts:Ns
-AM st:pavis ts:Ns
-AM st:peon ts:Ns's
-AM st:peon ts:Ns
-AM st:penny ts:Ns
-AM ts:0 al:penknives
-AM st:penknife ts:Ns
-AM ts:0 al:penmen
-AM st:penman ts:Ns
-AM ts:0 al:pence,17
-AM ts:0 al:pea al:pea's
-AM st:person ts:Ns's
-AM st:person ts:Ns
-AM st:pericardium ts:Ns
-AM ts:0 al:pericardia
-AM st:perihelion ts:Ns
-AM ts:0 al:perihelia
-AM st:perineum ts:Ns
-AM ts:0 al:perinea
-AM st:periphrasis ts:Ns
-AM ts:0 al:periphrases
-AM st:peristalsis ts:Ns
-AM ts:0 al:peristalses
-AM ts:0 al:people al:people's
-AM st:phallus ts:Ns
-AM ts:0 al:phalli
-AM st:phasis ts:Ns
-AM st:phenomenon ts:Ns
-AM ts:0 al:phenomena
-AM ts:0 al:phonier al:phoniest
-AM st:phoney ts:0
-AM st:phylum ts:Ns
-AM ts:0 al:phyla
-AM st:pikis ts:Ns
-AM st:pilis ts:Ns
-AM ts:0 al:pinier al:piniest
-AM st:piney ts:0
-AM st:pipis ts:Ns
-AM st:Pisum ts:Ns
-AM st:pus ts:Ns's
-AM st:pus ts:Ns
-AM st:piton ts:Ns's
-AM st:piton ts:Ns
-AM ts:0 al:pitchmen
-AM st:pitchman ts:Ns
-AM ts:0 al:pita al:pita's
-AM st:placeman ts:Ns
-AM ts:0 al:plainclothesmen
-AM st:plainclothesman ts:Ns
-AM ts:0 al:plainsmen
-AM st:plainsman ts:Ns
-AM st:plasmon ts:Ns's
-AM st:plasmon ts:Ns
-AM st:pleon ts:Ns's
-AM st:pleon ts:Ns
-AM st:plectrum ts:Ns
-AM ts:0 al:plectra
-AM st:pleuron ts:Ns's
-AM st:pleuron ts:Ns
-AM ts:0 al:plowmen
-AM st:plowman ts:Ns
-AM st:plie ts:Vd
-AM ts:0 al:pocketknives
-AM st:pocketknife ts:Ns
-AM ts:0 al:pokier al:pokiest
-AM st:pokey ts:0
-AM st:polis ts:Ns
-AM ts:0 al:policemen
-AM st:policeman ts:Ns
-AM ts:0 al:policewomen
-AM st:policewoman ts:Ns
-AM ts:0 al:postmen
-AM st:postman ts:Ns
-AM ts:0 al:postwomen
-AM st:postwoman ts:Ns
-AM st:preshrink ts:Vd
-AM ts:0 al:preshrank al:preshrunk
-AM st:presidium ts:Ns
-AM ts:0 al:presidia
-AM ts:0 al:pressmen
-AM st:pressman ts:Ns
-AM ts:0 al:prier al:priest
-AM st:prex ts:Ns
-AM ts:0 al:pricier al:priciest
-AM st:pricey ts:0
-AM ts:0 st:prey
-AM st:prey ts:0
-AM st:prognosis ts:Ns
-AM ts:0 al:prognoses
-AM st:prophylaxis ts:Ns
-AM ts:0 al:prophylaxes
-AM st:prosthesis ts:Ns
-AM ts:0 al:prostheses
-AM st:protozoon ts:Ns
-AM ts:0 al:protozoa
-AM st:pseudopodium ts:Ns
-AM st:psychoneurosis ts:Ns
-AM ts:0 al:psychoneuroses
-AM st:psychosis ts:Ns
-AM ts:0 al:psychoses
-AM st:pubis ts:Ns's
-AM st:pubis ts:Ns
-AM ts:0 al:pubes al:pubes's
-AM st:pudendum ts:Ns
-AM ts:0 al:pudenda
-AM st:pulis ts:Ns
-AM ts:0 al:pi al:pi's
-AM st:puttie ts:Vd
-AM st:pylorus ts:Ns
-AM ts:0 al:pylori
-AM st:pyxis ts:Ns
-AM st:quantum ts:Ns
-AM ts:0 al:quanta
-AM st:quarryman ts:Ns
-AM ts:0 al:quarterstaves
-AM st:quarterstaff ts:Ns
-AM st:quotum ts:Ns's
-AM st:quotum ts:Ns
-AM st:radius ts:Ns
-AM ts:0 al:radiomen
-AM st:radioman ts:Ns
-AM ts:0 al:radii
-AM st:ragis ts:Ns
-AM ts:0 al:railwaymen
-AM st:railwayman ts:Ns
-AM st:rakis ts:Ns
-AM st:ring ts:Vd
-AM st:run ts:Vd
-AM st:Ron ts:Ns's
-AM st:Ron ts:Ns
-AM ts:0 al:rebound
-AM ts:0 st:rebind
-AM ts:0 al:redrew
-AM st:redraw ts:Vd
-AM ts:0 al:rove
-AM ts:0 al:refroze al:refrozen
-AM st:refreeze ts:Vd
-AM st:regrow ts:Vd
-AM ts:0 al:reground
-AM st:regrind ts:Vd
-AM ts:0 al:regrew
-AM ts:0 al:rehung
-AM st:rehang ts:Vd
-AM st:remake ts:Vd
-AM ts:0 al:remade
-AM ts:0 al:repairmen
-AM st:repairman ts:Ns
-AM st:replicon ts:Ns's
-AM st:replicon ts:Ns
-AM st:rerun ts:Vd
-AM ts:0 al:reran
-AM st:resit ts:Vd
-AM ts:0 al:resold
-AM st:residuum ts:Ns
-AM ts:0 al:residua
-AM ts:0 al:resat
-AM st:resell ts:Vd
-AM ts:0 al:restrung
-AM st:restring ts:Vd
-AM ts:0 al:retook
-AM st:reteach ts:Vd
-AM ts:0 al:retaught
-AM ts:0 al:retold
-AM ts:0 al:rethought
-AM st:rethink ts:Vd
-AM ts:0 al:retying
-AM st:retell ts:Vd
-AM st:retake ts:Vd
-AM ts:0 al:retrod al:retrodden
-AM st:retread ts:Vd
-AM st:retie ts:Vd
-AM st:reversis ts:Ns
-AM ts:0 al:rewove al:rewoven
-AM ts:0 al:rewound
-AM st:rewind ts:Vd
-AM st:reweave ts:Vd
-AM ts:0 al:rewrote
-AM st:rewrite ts:Vd
-AM st:rheum ts:Ns's
-AM st:rheum ts:Ns
-AM st:Rheum ts:Ns
-AM ts:0 al:rhea al:rhea's
-AM st:rex ts:Ns
-AM ts:0 al:rode
-AM ts:0 al:rives
-AM ts:0 al:riflemen
-AM st:rifleman ts:Ns
-AM ts:0 al:rang al:rung
-AM ts:0 al:rose
-AM st:rife ts:Ns
-AM st:ride ts:Vd
-AM ts:0 al:Ra al:Ra's
-AM ts:0 al:ropier al:ropiest
-AM st:ropey ts:0
-AM st:rise ts:Vd
-AM st:reeve ts:Vd
-AM ts:0 al:ran
-AM ts:0 st:ring
-AM st:sacrum ts:Ns
-AM ts:0 al:sacra
-AM st:sadis ts:Ns
-AM ts:0 al:saves
-AM st:sagum ts:Ns's
-AM st:sagum ts:Ns
-AM st:sakis ts:Ns
-AM ts:0 al:salesmen
-AM st:salesman ts:Ns
-AM st:salesperson ts:Ns's
-AM st:salesperson ts:Ns
-AM ts:0 al:salespeople al:salespeople's
-AM ts:0 al:saleswomen
-AM st:saleswoman ts:Ns
-AM ts:0 al:sandmen
-AM st:sandman ts:Ns
-AM st:sing ts:Vd
-AM st:sink ts:Vd
-AM st:Sarum ts:Ns's
-AM st:Sarum ts:Ns
-AM st:sarcophagus ts:Ns
-AM ts:0 al:sarcophagi
-AM st:sarus ts:Ns's
-AM st:sarus ts:Ns
-AM st:satis ts:Ns
-AM st:sit ts:Vd
-AM st:safe ts:Ns
-AM st:see ts:Vd
-AM st:scaley ts:0
-AM ts:0 al:scarier al:scariest
-AM st:scarey ts:0
-AM st:sclerosis ts:Ns
-AM ts:0 al:scleroses
-AM ts:0 al:Scotchmen
-AM st:Scotchman ts:Ns
-AM ts:0 al:Scotchwomen
-AM st:Scotchwoman ts:Ns
-AM ts:0 al:Scotsmen
-AM st:Scotsman ts:Ns
-AM ts:0 al:Scotswomen
-AM st:Scotswoman ts:Ns
-AM st:scrotum ts:Ns
-AM ts:0 al:scrota
-AM ts:0 al:seamen
-AM st:seaman ts:Ns
-AM ts:0 al:saw
-AM ts:0 al:sought
-AM ts:0 al:sod al:sodden
-AM ts:0 al:selectmen
-AM st:selectman ts:Ns
-AM ts:0 al:sold
-AM st:sepium ts:Ns's
-AM st:sepium ts:Ns
-AM st:septum ts:Ns
-AM ts:0 al:septa
-AM ts:0 al:servicemen
-AM st:serviceman ts:Ns
-AM ts:0 al:servicewomen
-AM st:servicewoman ts:Ns
-AM ts:0 al:shook
-AM ts:0 al:should
-AM st:shit ts:Vd
-AM st:sheeney ts:0
-AM ts:0 al:shone
-AM ts:0 al:shat
-AM st:shine ts:Vd
-AM st:shake ts:Vd
-AM ts:0 al:shot
-AM st:Shoshonis ts:Ns
-AM ts:0 al:Shoshones
-AM st:shoot ts:Vd
-AM st:shall ts:Vd
-AM ts:0 al:showmen
-AM st:showman ts:Ns
-AM st:shrink ts:Vd
-AM ts:0 al:shrank al:shrunk al:shrunken
-AM ts:0 al:sidemen
-AM st:sideman ts:Ns
-AM ts:0 al:signalmen
-AM st:signalman ts:Ns
-AM st:silicon ts:Ns's
-AM st:silicon ts:Ns
-AM ts:0 al:silica al:silica's
-AM st:simulacrum ts:Ns
-AM ts:0 al:simulacra
-AM ts:0 al:sang al:sung
-AM ts:0 al:sank al:sunk al:sunken
-AM st:siris ts:Ns
-AM st:Sus ts:Ns
-AM ts:0 al:sat
-AM ts:0 al:slew,146
-AM ts:0 al:slept
-AM st:sleep ts:Vd
-AM ts:0 st:slay
-AM st:sley ts:0
-AM ts:0 al:slung
-AM ts:0 al:slunk
-AM st:sling ts:Vd
-AM st:slink ts:Vd
-AM ts:0 al:smote
-AM ts:0 al:smokier al:smokiest
-AM st:smokey ts:0
-AM st:smite ts:Vd
-AM st:snakey ts:0
-AM ts:0 al:snowmen
-AM st:snowman ts:Ns
-AM ts:0 st:seethe
-AM st:seethe ts:Vd
-AM st:solarium ts:Ns
-AM ts:0 al:solaria
-AM st:sell ts:Vd
-AM st:solidus ts:Ns
-AM ts:0 al:solidi
-AM st:seek ts:Vd
-AM ts:0 al:spacemen
-AM st:spaceman ts:Ns
-AM ts:0 al:spacewomen
-AM st:spacewoman ts:Ns
-AM ts:0 al:spacier al:spaciest
-AM st:spacey ts:0
-AM st:speak ts:Vd
-AM st:spit ts:Vd
-AM ts:0 al:spake al:spoke al:spoken
-AM st:spectrum ts:Ns
-AM ts:0 al:spectra
-AM st:speed ts:Vd
-AM ts:0 al:sped
-AM ts:0 al:spellbound
-AM st:spellbind ts:Vd
-AM st:spermatozoon ts:Ns
-AM ts:0 al:spermatozoa
-AM st:spicey ts:0
-AM st:spikey ts:0
-AM ts:0 al:spun
-AM ts:0 al:spat
-AM st:splayfoot ts:Ns
-AM ts:0 al:splayfeet
-AM ts:0 al:spokesmen
-AM st:spokesman ts:Ns
-AM st:spokesperson ts:Ns
-AM ts:0 al:spokespeople
-AM ts:0 al:spokeswomen
-AM st:spokeswoman ts:Ns
-AM ts:0 al:sportsmen
-AM st:sportsman ts:Ns
-AM ts:0 al:sportswomen
-AM st:sportswoman ts:Ns
-AM ts:0 al:spotlit
-AM st:spotlight ts:Vd
-AM st:spring ts:Vd
-AM ts:0 al:sprang al:sprung
-AM st:spin ts:Vd
-AM st:sputum ts:Ns
-AM ts:0 al:sputa
-AM ts:0 al:stablemen
-AM st:stableman ts:Ns
-AM ts:0 al:stagier al:stagiest
-AM st:stagey ts:0
-AM ts:0 al:stood
-AM st:stink ts:Vd
-AM st:staphylococcus ts:Ns
-AM ts:0 al:staphylococci
-AM ts:0 al:statesmen
-AM st:statesman ts:Ns
-AM ts:0 al:stateswomen
-AM st:stateswoman ts:Ns
-AM ts:0 al:stove
-AM ts:0 al:stole al:stolen
-AM ts:0 al:steersmen
-AM st:steersman ts:Ns
-AM st:stegosaurus ts:Ns
-AM ts:0 al:stegosauri
-AM ts:0 al:stuck
-AM st:stimulus ts:Ns
-AM ts:0 al:stimuli
-AM ts:0 al:stung
-AM ts:0 al:stank al:stunk
-AM st:steal ts:Vd
-AM ts:0 al:stonier al:stoniest
-AM st:stoney ts:0
-AM st:stand ts:Vd
-AM st:stave ts:Vd
-AM st:stratum ts:Ns
-AM st:stratus ts:Ns
-AM ts:0 al:strata
-AM ts:0 al:strati
-AM st:streptococcus ts:Ns
-AM ts:0 al:streptococci
-AM st:strike ts:Vd
-AM ts:0 al:strode
-AM ts:0 al:strives
-AM ts:0 al:stricken al:struck
-AM ts:0 al:strung
-AM ts:0 al:strove
-AM st:strife ts:Ns
-AM st:stride ts:Vd
-AM ts:0 al:strongmen
-AM st:strongman ts:Ns
-AM st:strive ts:Vd
-AM st:string ts:Vd
-AM st:stick ts:Vd
-AM st:sting ts:Vd
-AM ts:0 al:stuntmen
-AM st:stuntman ts:Ns
-AM st:stylus ts:Ns
-AM ts:0 al:styli
-AM st:substratum ts:Ns
-AM ts:0 al:substrata
-AM st:succubus ts:Ns
-AM ts:0 al:succubi
-AM ts:0 al:supermen
-AM st:superman ts:Ns
-AM ts:0 al:superwomen
-AM st:superwoman ts:Ns
-AM st:swim ts:Vd
-AM ts:0 al:swore al:sworn
-AM ts:0 al:swept
-AM ts:0 al:swollen
-AM st:sweep ts:Vd
-AM ts:0 al:swam al:swum
-AM ts:0 al:swung
-AM st:swell ts:Vd
-AM ts:0 al:swordsmen
-AM st:swordsman ts:Ns
-AM st:swear ts:Vd
-AM st:swing ts:Vd
-AM st:symbiosis ts:Ns
-AM ts:0 al:symbioses
-AM st:synapsis ts:Ns
-AM st:synopsis ts:Ns
-AM ts:0 al:synopses
-AM st:synthesis ts:Ns
-AM ts:0 al:syntheses
-AM st:tackey ts:0
-AM ts:0 al:took
-AM st:talus ts:Ns
-AM ts:0 al:tali
-AM st:tamis ts:Ns
-AM st:Tamus ts:Ns's
-AM st:Tamus ts:Ns
-AM st:tantrum ts:Ns's
-AM st:tantrum ts:Ns
-AM ts:0 al:tantra al:tantra's
-AM st:tapis ts:Ns
-AM st:tarsus ts:Ns
-AM ts:0 al:tarsi
-AM st:tum ts:Ns
-AM st:teach ts:Vd
-AM st:tawney ts:0
-AM st:taxis ts:Ns
-AM st:taxus ts:Ns's
-AM ts:0 al:taxes
-AM st:taxus ts:Ns
-AM ts:0 al:taxmen
-AM st:taxman ts:Ns
-AM ts:0 al:taught
-AM ts:0 al:tore al:torn
-AM st:tooth ts:Ns
-AM ts:0 al:told
-AM st:terminus ts:Ns
-AM ts:0 al:termini
-AM st:testis ts:Ns
-AM ts:0 al:testes
-AM st:thalamus ts:Ns
-AM ts:0 al:thalami
-AM st:thesaurus ts:Ns
-AM ts:0 al:thesauri
-AM st:thesis ts:Ns
-AM ts:0 al:theses
-AM ts:0 al:thought
-AM st:think ts:Vd
-AM st:throw ts:Vd
-AM st:thrombus ts:Ns
-AM st:thrombosis ts:Ns
-AM ts:0 al:thromboses
-AM ts:0 al:thrombi
-AM ts:0 al:threw
-AM st:thunderstrike ts:Vd
-AM ts:0 al:tying
-AM st:tikis ts:Ns
-AM st:titmouse ts:Ns
-AM ts:0 al:titmice
-AM st:tell ts:Vd
-AM st:toney ts:0
-AM st:take ts:Vd
-AM ts:0 al:teeth
-AM st:tear ts:Vd
-AM st:torus ts:Ns
-AM ts:0 al:tori
-AM ts:0 al:townsmen
-AM st:townsman ts:Ns
-AM ts:0 al:townswomen
-AM st:townswoman ts:Ns
-AM ts:0 al:tradesmen
-AM st:tradesman ts:Ns
-AM st:tradesperson ts:Ns's
-AM st:tradesperson ts:Ns
-AM ts:0 al:tradeswomen
-AM st:tradeswoman ts:Ns
-AM ts:0 al:trainmen
-AM st:trainman ts:Ns
-AM ts:0 al:trod al:trodden
-AM ts:0 al:trenchermen
-AM st:trencherman ts:Ns
-AM ts:0 al:tribesmen
-AM st:tribesman ts:Ns
-AM ts:0 al:tribeswomen
-AM st:tribeswoman ts:Ns
-AM st:trivium ts:Ns's
-AM st:trivium ts:Ns
-AM ts:0 al:trivia al:trivia's
-AM st:tread ts:Vd
-AM ts:0 al:troubleshot
-AM st:troubleshoot ts:Vd
-AM ts:0 st:trie
-AM ts:0 al:ta
-AM st:tie ts:Vd
-AM ts:0 al:typewrote
-AM st:typewrite ts:Vd
-AM st:umbilicus ts:Ns
-AM ts:0 al:umbilici
-AM ts:0 al:unbound
-AM st:unbear ts:Vd
-AM st:unbind ts:Vd
-AM st:unclothe ts:Vd
-AM ts:0 al:unclad
-AM ts:0 al:underclassmen
-AM st:underclassman ts:Ns
-AM st:underfeed ts:Vd
-AM ts:0 al:underfed
-AM ts:0 al:underwent
-AM st:underlie ts:Vd
-AM ts:0 st:underlie
-AM ts:0 al:underlain al:underlay al:underlying
-AM ts:0 al:undersold
-AM ts:0 al:undershot
-AM st:undershoot ts:Vd
-AM st:undersell ts:Vd
-AM ts:0 al:understood
-AM st:understand ts:Vd
-AM ts:0 al:undertook
-AM st:undertake ts:Vd
-AM st:undergo ts:Vd
-AM ts:0 al:underwrote
-AM st:underwrite ts:Vd
-AM ts:0 al:unfroze al:unfrozen
-AM st:unfreeze ts:Vd
-AM st:unmake ts:Vd
-AM ts:0 al:unmade
-AM st:unperson ts:Ns
-AM ts:0 al:unpeople
-AM st:unsell ts:Vd
-AM st:unspeak ts:Vd
-AM st:unstring ts:Vd
-AM st:unstick ts:Vd
-AM st:unteach ts:Vd
-AM ts:0 al:untying
-AM st:untread ts:Vd
-AM st:untie ts:Vd
-AM ts:0 al:unwound
-AM st:unwind ts:Vd
-AM st:unweave ts:Vd
-AM st:uphold ts:Vd
-AM ts:0 al:upheld
-AM ts:0 al:upperclassmen
-AM st:upperclassman ts:Ns
-AM ts:0 st:upshoot
-AM st:urinalysis ts:Ns
-AM ts:0 al:urinalyses
-AM ts:0 al:i
-AM st:uterus ts:Ns
-AM ts:0 al:uteri
-AM st:valis ts:Ns
-AM st:velum ts:Ns
-AM ts:0 al:vela
-AM ts:0 al:veniremen
-AM st:venireman ts:Ns
-AM st:venturis ts:Ns
-AM ts:0 al:vestrymen
-AM st:vestryman ts:Ns
-AM ts:0 al:vying
-AM st:villus ts:Ns
-AM ts:0 al:villi
-AM st:vison ts:Ns's
-AM st:vison ts:Ns
-AM st:viscus ts:Ns
-AM ts:0 al:viscera
-AM st:vivarium ts:Ns
-AM ts:0 al:vivaria
-AM st:vie ts:Vd
-AM st:wadis ts:Ns
-AM ts:0 al:wades
-AM st:waitperson ts:Ns
-AM ts:0 al:waitpeople
-AM ts:0 al:woke al:woken
-AM st:walis ts:Ns
-AM ts:0 al:washerwomen
-AM st:washerwoman ts:Ns
-AM ts:0 al:watchmen
-AM st:watchman ts:Ns
-AM st:wavey ts:0
-AM ts:0 al:wore al:worn
-AM ts:0 al:weathermen
-AM st:weatherman ts:Ns
-AM ts:0 al:wove al:woven
-AM st:webfoot ts:Ns
-AM ts:0 al:webfeet
-AM ts:0 al:wept
-AM ts:0 al:Welshmen
-AM st:Welshman ts:Ns
-AM st:go ts:Vd
-AM st:weep ts:Vd
-AM st:whiney ts:0
-AM ts:0 al:wives
-AM ts:0 al:would al:wouldst
-AM ts:0 al:won
-AM ts:0 al:wound
-AM st:winey ts:0
-AM ts:0 al:wost al:wot
-AM ts:0 al:withdrew
-AM st:withdraw ts:Vd
-AM st:withhold ts:Vd
-AM ts:0 al:withheld
-AM ts:0 al:withstood
-AM st:withstand ts:Vd
-AM st:wife ts:Ns
-AM st:wake ts:Vd
-AM ts:0 al:women
-AM st:woman ts:Ns
-AM st:win ts:Vd
-AM ts:0 al:woodmen
-AM st:woodman ts:Ns
-AM ts:0 al:woodsmen
-AM st:woodsman ts:Ns
-AM st:wear ts:Vd
-AM ts:0 al:wrought
-AM ts:0 al:workingmen
-AM st:workingman ts:Ns
-AM ts:0 al:workingwomen
-AM st:workingwoman ts:Ns
-AM ts:0 al:workmen
-AM st:workman ts:Ns
-AM st:ill ts:0
-AM st:wit ts:Vd
-AM st:will ts:Vd
-AM st:wind ts:Vd
-AM st:weave ts:Vd
-AM ts:0 al:wrung
-AM ts:0 al:wrote
-AM st:write ts:Vd
-AM st:work ts:Vd
-AM st:wring ts:Vd
-AM ts:0 al:yachtsmen
-AM st:yachtsman ts:Ns
-AM ts:0 al:yachtswomen
-AM st:yachtswoman ts:Ns
-AM ts:0 al:yardmen
-AM st:yardman ts:Ns
-AM st:yum ts:Ns
-AM ts:0 al:yeomen
-AM st:yeoman ts:Ns
-AM ts:0 al:ya
-AM is:Ns
-AM is:At
-AM is:N's
-AM is:Vd
-AM is:Aness's
-AM is:Vs
-AM is:Ar
-AM is:Nm's
-AM is:Vg
-AM is:Ns's
-AM is:Aness is:s
-AM is:Ay
-AM is:Nm
-AM is:Aness
-AM is:'s
-SET UTF-8
-TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
-WORDCHARS 0123456789'.-’
-NOSUGGEST 200
-
-# ordinal numbers
-COMPOUNDMIN 1
-# only in compounds: 1th, 2th, 3th
-ONLYINCOMPOUND 300
-# compound rules:
-# 1. [0-9]*1[0-9]th (10th, 11th, 12th, 56714th, etc.)
-# 2. [0-9]*[02-9](1st|2nd|3rd|[4-9]th) (21st, 22nd, 123rd, 1234th, etc.)
-COMPOUNDRULE 2
-COMPOUNDRULE (201)*(202)(203)
-COMPOUNDRULE (201)*(204)(205)
-
-REP 94
-REP nt n't
-REP alot a_lot
-REP avengence a_vengeance
-REP ninties 1990s
-REP teached taught
-REP rised rose
-REP a ei
-REP ei a
-REP a ey
-REP ey a
-REP ai ie
-REP ie ai
-REP are air
-REP are ear
-REP are eir
-REP air are
-REP air ere
-REP ere air
-REP ere ear
-REP ere eir
-REP ear are
-REP ear air
-REP ear ere
-REP eir are
-REP eir ere
-REP ch te
-REP te ch
-REP ch ti
-REP ti ch
-REP ch tu
-REP tu ch
-REP ch s
-REP s ch
-REP ch k
-REP k ch
-REP f ph
-REP ph f
-REP gh f
-REP f gh
-REP i igh
-REP igh i
-REP i uy
-REP uy i
-REP i ee
-REP ee i
-REP j di
-REP di j
-REP j gg
-REP gg j
-REP j ge
-REP ge j
-REP s ti
-REP ti s
-REP s ci
-REP ci s
-REP k cc
-REP cc k
-REP k qu
-REP qu k
-REP kw qu
-REP o eau
-REP eau o
-REP o ew
-REP ew o
-REP oo ew
-REP ew oo
-REP ew ui
-REP ui ew
-REP oo ui
-REP ui oo
-REP ew u
-REP u ew
-REP oo u
-REP u oo
-REP u oe
-REP oe u
-REP u ieu
-REP ieu u
-REP ue ew
-REP ew ue
-REP uff ough
-REP oo ieu
-REP ieu oo
-REP ier ear
-REP ear ier
-REP ear air
-REP air ear
-REP w qu
-REP qu w
-REP z ss
-REP ss z
-REP shun tion
-REP shun sion
-REP shun cion
-SFX 123 N 1
-SFX 123 i 0 i 1815
-SFX 50 N 1
-SFX 50 0 lest . 1816
-SFX 137 N 1
-SFX 137 0 en . 1815
-SFX 124 N 1
-SFX 124 i 's i 1817
-SFX 72 N 1
-SFX 72 0 gest . 1816
-SFX 148 N 1
-SFX 148 0 Ted . 1818
-SFX 34 N 1
-SFX 34 y iness's y 1819
-SFX 65 N 1
-SFX 65 0 ded . 1818
-SFX 41 N 1
-SFX 41 0 led . 1818
-SFX 112 N 1
-SFX 112 0 zes . 1820
-SFX 69 N 1
-SFX 69 e den e 1818
-SFX 13 N 1
-SFX 13 0 ted . 1818
-SFX 67 N 1
-SFX 67 f ves f 1815
-SFX 52 N 1
-SFX 52 e ten e 1818
-SFX 63 N 1
-SFX 63 0 med . 1818
-SFX 136 N 1
-SFX 136 e ier e 1821
-SFX 47 N 1
-SFX 47 0 n . 1818
-SFX 4 N 1
-SFX 4 0 es . 1815
-SFX 145 N 1
-SFX 145 0 im's . 1822
-SFX 54 N 1
-SFX 54 0 ging . 1823
-SFX 62 N 1
-SFX 62 0 en . 1818
-SFX 149 N 1
-SFX 149 0 Ting . 1823
-SFX 115 N 1
-SFX 115 0 per . 1821
-SFX 55 N 1
-SFX 55 0 bing . 1823
-SFX 9 N 1
-SFX 9 e ing e 1823
-SFX 135 N 1
-SFX 135 0 ses's . 1824
-SFX 33 N 1
-SFX 33 0 ping . 1823
-SFX 25 N 1
-SFX 25 0 nesses . 1825
-SFX 103 N 1
-SFX 103 0 best . 1816
-SFX 36 N 1
-SFX 36 y ily y 1826
-SFX 31 N 1
-SFX 31 0 ally . 1826
-SFX 116 N 1
-SFX 116 0 pest . 1816
-SFX 98 N 1
-SFX 98 e ce e 1815
-SFX 94 N 1
-SFX 94 s es s 1815
-SFX 46 N 1
-SFX 46 x ces x 1815
-SFX 44 N 1
-SFX 44 0 king . 1823
-SFX 80 N 1
-SFX 80 y inesses y 1825
-SFX 27 N 1
-SFX 27 y ies y 1820
-SFX 7 N 1
-SFX 7 0 s . 1820
-SFX 28 N 1
-SFX 28 0 s's . 1824
-SFX 6 N 1
-SFX 6 0 ing . 1823
-SFX 97 N 1
-SFX 97 0 fest . 1816
-SFX 75 N 1
-SFX 75 0 ren . 1815
-SFX 109 N 1
-SFX 109 0 test . 1816
-SFX 99 N 1
-SFX 99 0 ta . 1815
-SFX 39 N 1
-SFX 39 0 ses . 1820
-SFX 11 N 1
-SFX 11 0 es . 1820
-SFX 134 N 1
-SFX 134 o id o 1818
-SFX 90 N 1
-SFX 90 0 fed . 1818
-SFX 83 N 1
-SFX 83 0 im . 1827
-SFX 60 N 1
-SFX 60 0 ned . 1818
-SFX 141 N 1
-SFX 141 0 ved . 1818
-SFX 70 N 1
-SFX 70 0 den . 1818
-SFX 85 N 1
-SFX 85 y ies's y 1824
-SFX 119 N 1
-SFX 119 y id y 1818
-SFX 68 N 1
-SFX 68 d t d 1818
-SFX 95 N 1
-SFX 95 0 allier . 1821
-SFX 21 N 1
-SFX 21 0 st . 1816
-SFX 30 N 1
-SFX 30 y iest y 1816
-SFX 110 N 1
-SFX 110 0 zes . 1815
-SFX 91 N 1
-SFX 91 0 fing . 1823
-SFX 128 N 1
-SFX 128 0 r . 1815
-SFX 92 N 1
-SFX 92 0 rer . 1821
-SFX 14 N 1
-SFX 14 0 ting . 1823
-SFX 106 N 1
-SFX 106 l t l 1818
-SFX 59 N 1
-SFX 59 0 i . 1815
-SFX 20 N 1
-SFX 20 0 r . 1821
-SFX 12 N 1
-SFX 12 0 ses . 1815
-SFX 18 N 1
-SFX 18 0 ness . 1828
-SFX 84 N 1
-SFX 84 e i e 1815
-SFX 10 N 1
-SFX 10 0 ly . 1826
-SFX 76 N 1
-SFX 76 0 e's . 1824
-SFX 139 N 1
-SFX 139 n 0 n 1815
-SFX 53 N 1
-SFX 53 0 ged . 1818
-SFX 24 N 1
-SFX 24 0 est . 1816
-SFX 79 N 1
-SFX 79 0 t . 1818
-SFX 131 N 1
-SFX 131 e t e 1818
-SFX 102 N 1
-SFX 102 0 ber . 1821
-SFX 17 N 1
-SFX 17 y ies y 1815
-SFX 37 N 1
-SFX 37 0 e . 1815
-SFX 126 N 1
-SFX 126 a or a 1815
-SFX 146 N 1
-SFX 146 y in y 1818
-SFX 74 N 1
-SFX 74 0 ser . 1821
-SFX 150 N 1
-SFX 150 t st t 1818
-SFX 40 N 1
-SFX 40 0 sing . 1823
-SFX 121 N 1
-SFX 121 e ia e 1815
-SFX 3 N 1
-SFX 3 0 s . 1815
-SFX 93 N 1
-SFX 93 o i's o 1824
-SFX 61 N 1
-SFX 61 0 ning . 1823
-SFX 32 N 1
-SFX 32 0 ped . 1818
-SFX 105 N 1
-SFX 105 0 nest . 1816
-SFX 132 N 1
-SFX 132 0 a . 1815
-SFX 29 N 1
-SFX 29 y ier y 1821
-SFX 140 N 1
-SFX 140 0 rest . 1816
-SFX 56 N 1
-SFX 56 0 der . 1821
-SFX 82 N 1
-SFX 82 0 st . 1818
-SFX 49 N 1
-SFX 49 0 ler . 1821
-SFX 45 N 1
-SFX 45 o i o 1815
-SFX 108 N 1
-SFX 108 0 thest . 1816
-SFX 81 N 1
-SFX 81 0 ter . 1821
-SFX 58 N 1
-SFX 58 0 x . 1815
-SFX 23 N 1
-SFX 23 0 er . 1821
-SFX 48 N 1
-SFX 48 s ntes s 1815
-SFX 89 N 1
-SFX 89 x ges x 1815
-SFX 118 N 1
-SFX 118 y own y 1818
-SFX 51 N 1
-SFX 51 e 0 e 1818
-SFX 127 N 1
-SFX 127 a ur a 1815
-SFX 86 N 1
-SFX 86 0 lier . 1821
-SFX 66 N 1
-SFX 66 0 ding . 1823
-SFX 73 N 1
-SFX 73 0 bed . 1818
-SFX 16 N 1
-SFX 16 0 ring . 1823
-SFX 57 N 1
-SFX 57 0 dest . 1816
-SFX 143 N 1
-SFX 143 e iest e 1816
-SFX 138 N 1
-SFX 138 0 es's . 1824
-SFX 15 N 1
-SFX 15 0 red . 1818
-SFX 122 N 1
-SFX 122 e ia's e 1824
-SFX 111 N 1
-SFX 111 0 zed . 1818
-SFX 64 N 1
-SFX 64 0 ming . 1823
-SFX 1 N 1
-SFX 1 0 's . 1829
-SFX 133 N 1
-SFX 133 0 t . 1815
-SFX 78 N 1
-SFX 78 0 mest . 1816
-SFX 87 N 1
-SFX 87 0 liest . 1816
-SFX 142 N 1
-SFX 142 0 ving . 1823
-SFX 77 N 1
-SFX 77 0 mer . 1821
-SFX 125 N 1
-SFX 125 a i a 1815
-SFX 104 N 1
-SFX 104 0 ner . 1821
-SFX 2 N 1
-SFX 2 0 's . 1817
-SFX 120 N 1
-SFX 120 o ines o 1815
-SFX 117 N 1
-SFX 117 y ew y 1818
-SFX 35 N 1
-SFX 35 y iness y 1828
-SFX 129 N 1
-SFX 129 0 er . 1815
-SFX 26 N 1
-SFX 26 y ied y 1818
-SFX 19 N 1
-SFX 19 0 ness's . 1819
-SFX 101 N 1
-SFX 101 0 th . 1818
-SFX 8 N 1
-SFX 8 0 d . 1818
-SFX 43 N 1
-SFX 43 0 ked . 1818
-SFX 22 N 1
-SFX 22 e y e 1826
-SFX 114 N 1
-SFX 114 e d e 1818
-SFX 38 N 1
-SFX 38 0 sed . 1818
-SFX 147 N 1
-SFX 147 0 ist . 1816
-SFX 5 N 1
-SFX 5 0 ed . 1818
-SFX 107 N 1
-SFX 107 0 ther . 1821
-SFX 130 N 1
-SFX 130 a e a 1815
-SFX 96 N 1
-SFX 96 0 fer . 1821
-SFX 88 N 1
-SFX 88 s des s 1815
-SFX 100 N 1
-SFX 100 0 ne . 1818
-SFX 42 N 1
-SFX 42 0 ling . 1823
-SFX 144 N 1
-SFX 144 y ith y 1818
-SFX 113 N 1
-SFX 113 0 zing . 1823
-SFX 71 N 1
-SFX 71 0 ger . 1821
-
-BREAK 3
-BREAK —
-BREAK –
-BREAK -
-
-ICONV 6
-ICONV ’ '
-ICONV ffi ffi
-ICONV ffl ffl
-ICONV ff ff
-ICONV fi fi
-ICONV fl fl
-
-OCONV 1
-OCONV ' ’
-
-# PHONEtic_english.h - #PHONEtic transformation rules for use with #PHONEtic.c
-# Copyright (C) 2000 Björn Jacke
-#
-# This rule set is based on Lawrence Phillips original metaPHONE
-# algorithm with modifications made by Michael Kuhn in his
-# C implantation, more modifications by Björn Jacke when
-# converting the algorithm to a rule set and minor
-# touch ups by Kevin Atkinson
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License version 2.1 as published by the Free Software Foundation;
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-# Björn Jacke may be reached by email at bjoern.jacke@gmx.de
-#
-# Changelog:
-#
-# 2000-01-05 Björn Jacke <bjoern.jacke@gmx.de>
-# - first version with translation rules derived from
-# metaPHONE.cc distributed with aspell 0.28.3
-# - "TH" is now representated as "@" because "0" is a
-# meta character
-# - removed TH(!vowel) --> T; always use TH --> # instead
-# - dropped "^AE" -> "E" (redundant)
-# - "ing" is transformed to "N", not "NK"
-# - "SCH(EO)" transforms to "SK" now
-# - added R --> SILENT if (after a vowel) and no (vowel or
-# "y" follows) like in "Marcy" or "abort"
-# - H is SILENT in RH at beginning of words
-# - H is SILENT if vowel leads and "Y" follows
-# - some ".OUGH.." --> ...F exceptions added
-# - "^V" transforms to "W"
-# 2000-01-07 Kevin Atkinson <kevinatk@home.com>
-# Converted from header to data file.
-#
-# 2007-08-23 László Németh <nemeth AT OOo>
-# Add PHONE header and #PHONE keywords
-#
-# 2010-03-09 László Németh <nemeth AT OOo>
-# Temporarily removing acuted character É
-# because of the missing UTF-8 support
-#
-# version 1.1
-
-# Documentation: http://aspell.net/man-html/PHONEtic-Code.html
-
-PHONE 104
-PHONE AH(AEIOUY)-^ *H
-PHONE AR(AEIOUY)-^ *R
-PHONE A(HR)^ *
-PHONE A^ *
-PHONE AH(AEIOUY)- H
-PHONE AR(AEIOUY)- R
-PHONE A(HR) _
-PHONE BB- _
-PHONE B B
-PHONE CQ- _
-PHONE CIA X
-PHONE CH X
-PHONE C(EIY)- S
-PHONE CK K
-PHONE COUGH^ KF
-PHONE CC< C
-PHONE C K
-PHONE DG(EIY) K
-PHONE DD- _
-PHONE D T
-PHONE EH(AEIOUY)-^ *H
-PHONE ER(AEIOUY)-^ *R
-PHONE E(HR)^ *
-PHONE ENOUGH^$ *NF
-PHONE E^ *
-PHONE EH(AEIOUY)- H
-PHONE ER(AEIOUY)- R
-PHONE E(HR) _
-PHONE FF- _
-PHONE F F
-PHONE GN^ N
-PHONE GN$ N
-PHONE GNS$ NS
-PHONE GNED$ N
-PHONE GH(AEIOUY)- K
-PHONE GH _
-PHONE GG9 K
-PHONE G K
-PHONE H H
-PHONE IH(AEIOUY)-^ *H
-PHONE IR(AEIOUY)-^ *R
-PHONE I(HR)^ *
-PHONE I^ *
-PHONE ING6 N
-PHONE IH(AEIOUY)- H
-PHONE IR(AEIOUY)- R
-PHONE I(HR) _
-PHONE J K
-PHONE KN^ N
-PHONE KK- _
-PHONE K K
-PHONE LAUGH^ LF
-PHONE LL- _
-PHONE L L
-PHONE MB$ M
-PHONE MM M
-PHONE M M
-PHONE NN- _
-PHONE N N
-PHONE OH(AEIOUY)-^ *H
-PHONE OR(AEIOUY)-^ *R
-PHONE O(HR)^ *
-PHONE O^ *
-PHONE OH(AEIOUY)- H
-PHONE OR(AEIOUY)- R
-PHONE O(HR) _
-PHONE PH F
-PHONE PN^ N
-PHONE PP- _
-PHONE P P
-PHONE Q K
-PHONE RH^ R
-PHONE ROUGH^ RF
-PHONE RR- _
-PHONE R R
-PHONE SCH(EOU)- SK
-PHONE SC(IEY)- S
-PHONE SH X
-PHONE SI(AO)- X
-PHONE SS- _
-PHONE S S
-PHONE TI(AO)- X
-PHONE TH @
-PHONE TCH-- _
-PHONE TOUGH^ TF
-PHONE TT- _
-PHONE T T
-PHONE UH(AEIOUY)-^ *H
-PHONE UR(AEIOUY)-^ *R
-PHONE U(HR)^ *
-PHONE U^ *
-PHONE UH(AEIOUY)- H
-PHONE UR(AEIOUY)- R
-PHONE U(HR) _
-PHONE V^ W
-PHONE V F
-PHONE WR^ R
-PHONE WH^ W
-PHONE W(AEIOU)- W
-PHONE X^ S
-PHONE X KS
-PHONE Y(AEIOU)- Y
-PHONE ZZ- _
-PHONE Z S
-
-#The rules in a different view:
-#
-# Exceptions:
-#
-# Beginning of word: "gn", "kn-", "pn-", "wr-" ----> drop first letter
-# "Aebersold", "Gnagy", "Knuth", "Pniewski", "Wright"
-#
-# Beginning of word: "x" ----> change to "s"
-# as in "Deng Xiaopeng"
-#
-# Beginning of word: "wh-" ----> change to "w"
-# as in "Whalen"
-# Beginning of word: leading vowels are transformed to "*"
-#
-# "[crt]ough" and "enough" are handled separately because of "F" sound
-#
-#
-# A --> A at beginning
-# _ otherwise
-#
-# B --> B unless at the end of word after "m", as in "dumb", "McComb"
-#
-# C --> X (sh) if "-cia-" or "-ch-"
-# S if "-ci-", "-ce-", or "-cy-"
-# SILENT if "-sci-", "-sce-", or "-scy-", or "-cq-"
-# K otherwise, including in "-sch-"
-#
-# D --> K if in "-dge-", "-dgy-", or "-dgi-"
-# T otherwise
-#
-# E --> A at beginnig
-# _ SILENT otherwise
-#
-# F --> F
-#
-# G --> SILENT if in "-gh-" and not at end or before a vowel
-# in "-gn" or "-gned" or "-gns"
-# in "-dge-" etc., as in above rule
-# K if before "i", or "e", or "y" if not double "gg"
-#
-# K otherwise (incl. "GG"!)
-#
-# H --> SILENT if after vowel and no vowel or "Y" follows
-# or after "-ch-", "-sh-", "-ph-", "-th-", "-gh-"
-# or after "rh-" at beginning
-# H otherwise
-#
-# I --> A at beginning
-# _ SILENT otherwise
-#
-# J --> K
-#
-# K --> SILENT if after "c"
-# K otherwise
-#
-# L --> L
-#
-# M --> M
-#
-# N --> N
-#
-# O --> A at beginning
-# _ SILENT otherwise
-#
-# P --> F if before "h"
-# P otherwise
-#
-# Q --> K
-#
-# R --> SILENT if after vowel and no vowel or "Y" follows
-# R otherwise
-#
-# S --> X (sh) if before "h" or in "-sio-" or "-sia-"
-# SK if followed by "ch(eo)" (SCH(EO))
-# S otherwise
-#
-# T --> X (sh) if "-tia-" or "-tio-"
-# 0 (th) if before "h"
-# silent if in "-tch-"
-# T otherwise
-#
-# U --> A at beginning
-# _ SILENT otherwise
-#
-# V --> V if first letter of word
-# F otherwise
-#
-# W --> SILENT if not followed by a vowel
-# W if followed by a vowel
-#
-# X --> KS
-#
-# Y --> SILENT if not followed by a vowel
-# Y if followed by a vowel
-#
-# Z --> S
-
diff --git a/vendor/dictionaries/en_US.dic b/vendor/dictionaries/en_US.dic
deleted file mode 100644
index 84132e5..0000000
--- a/vendor/dictionaries/en_US.dic
+++ /dev/null
@@ -1,52895 +0,0 @@
-52890
-A/1 1
-AA/2 1
-AAA
-Aachen
-aah 1
-Aaliyah/3
-aardvark/1 1
-Aaron
-ab
-AB/2 1
-ABA
-aback 1
-abacus/4 1
-abaft 1
-abalone/1 1
-abandon/5 1
-abandoned 1
-abandonment/2 1
-abase/6 1
-abasement/2 1
-abash/7 1
-abashed/8 1
-abashment/2 1
-abate/6 1
-abatement/2 1
-abates 2
-abattoir/1 1
-Abbas
-Abbasid 1
-abbe/1 1
-abbes/9 1
-abbess/4 1
-abbey/1 1
-abbot/1 1
-Abbott/3
-abbr
-abbrev/10 1
-abbreviate/6 1
-abbreviation/1 1
-Abby/3
-ABC/1 1
-abdicate/6 1
-abdication/1 1
-abdomen/1 1
-abdominal 1
-abduct/11 1
-abduction/1 1
-abductor/1 1
-Abdul/3
-Abe/3
-abeam 1
-abed 1
-Abel/2 1
-Abelard
-Abelson/3
-Aberdeen/2 1
-Abernathy/3
-aberrant 1
-aberration/1 1
-aberrational
-abet/12 1
-abetter/1 1
-abettor/1 1
-abeyance/2 1
-abhor/13 1
-abhorrence/2 1
-abhorrent/8 1
-abidance/2 1
-abide/14 3
-abiding/8 1
-Abidjan/2 1
-Abigail
-Abilene
-ability/15 1
-abject/16 1
-abjection/2 1
-abject 1
-abjuration/1 1
-abjuratory
-abjure/6 1
-abjurer/1 1
-ablate/6 1
-ablation/1 1
-ablative/1 1
-ablaze 1
-able/17 1
-abloom 1
-ablution/1 1
-ABM/1 1
-abnegate/6 1
-abnegation/2 1
-Abner/3
-abnormal/8 1
-abnormality/15 1
-abnormal 1
-aboard 1
-abode/18 4
-abolish/7 1
-abolition/2 1
-abolitionism/2 1
-abolitionist/1 1
-abominable/19 1
-abominate/6 1
-abomination/1 1
-aboriginal/1 1
-aborigine/1 1
-Aborigine/1 1
-aborning
-abort/11 1
-abortion/1 1
-abortionist/1 1
-abortive/8 1
-abound/11 1
-abounding 1
-about 1
-above/2 1
-aboveboard
-above 1
-abracadabra/2 1
-abrade/6 1
-Abraham/2 1
-Abram/3
-Abrams
-abrasion/1 1
-abrasive/20 1
-abrasively
-abreast 1
-abridge/6 1
-abridgment/1 1
-abroad 1
-abrogate/6 1
-abrogation/1 1
-abrogator/1 1
-abrupt/21 1
-ABS
-abs/2 1
-Absalom
-abscess/22 1
-abscissa/1 1
-abscission/2 1
-abscond/11 1
-absconder/1 1
-abseil/23 1
-abseiler 1
-abseiling 1
-absence/1 1
-absent/24 1
-absentee/1 1
-absenteeism/2 1
-absentminded/16 1
-absinth/2 1
-absinthe/2 1
-absolute/25 1
-absolution/2 1
-absolutism/2 1
-absolutist/1 1
-absolve/6 1
-absorb/11 1
-absorbed 1
-absorbency/2 1
-absorbent/1 1
-absorber/10 1
-absorbing/8 1
-absorption/1 1
-absorptive 1
-absorptivity 1
-abstain/11 1
-abstainer/1 1
-abstemious/16 1
-abstention/1 1
-abstinence/2 1
-abstinent 1
-abstract/26 1
-abstracted/16 1
-abstracter 1
-abstraction/1 1
-abstruse/27 1
-absurd/21 1
-absurdity/15 1
-absurd 1
-Abuja
-abundance/1 1
-abundant/8 1
-abuse/28 1
-abuser/1 1
-abusive/16 1
-abut/12 1
-abutment/1 1
-abuzz 1
-abysmal/8 1
-abyss/4 1
-abyssal 1
-Abyssinia/2 1
-Abyssinian/2 1
-ac
-Ac/2 1
-AC/2 1
-acacia/1 1
-academe/2 1
-academia/2 1
-academic/1 1
-academical/8 1
-academician/1 1
-academy/15 1
-Acadia/2 1
-acanthus/4 1
-Acapulco/2 1
-accede/6 1
-accelerate/6 1
-accelerated 1
-acceleration/1 1
-accelerator/1 1
-accelerometer/10 1
-accent/23 1
-accentual 1
-accentuate/6 1
-accentuation/2 1
-Accenture/3
-accept/11 1
-acceptability/2 1
-acceptable/29 1
-acceptance/1 1
-acceptation/1 1
-accepted 1
-acceptor/10 1
-access/22 1
-accessibility/2 1
-accessible/19 1
-accession/23 1
-accessorize/6 1
-accessory/15 1
-accidence 1
-accident/1 1
-accidental/30 1
-acclaim/23 1
-acclamation/1 1
-acclimate/6 1
-acclimation/2 1
-acclimatisation 1
-acclimatise/6 1
-acclimatization/2 1
-acclimatize/6 1
-acclivity/15 1
-accolade/18 1
-accommodate/6 1
-accommodating/8 1
-accommodation/1 1
-accompaniment/1 1
-accompanist/1 1
-accompany/31 1
-accomplice/1 1
-accomplish/7 1
-accomplishment/1 1
-accord/23 1
-accordance/2 1
-accordant 1
-according/8 1
-accordion/1 1
-accordionist/1 1
-accost/23 1
-account/23 1
-accountability/2 1
-accountable 1
-accountancy/2 1
-accountant/1 1
-accounting/2 1
-accouter/11 1
-accouterments
-accouterments's
-accoutre/6 1
-accoutrement/32 1
-Accra/2 1
-accredit/11 1
-accreditation/2 1
-accreted
-accretion/1 1
-accrual/1 1
-accrue/6 1
-acct
-acculturate/6 1
-acculturation/2 1
-accumulate/6 1
-accumulation/1 1
-accumulative 1
-accumulator/1 1
-accuracy/15 1
-accurate/16 1
-accursed/33 1
-accurst 1
-accusal 1
-accusation/1 1
-accusative/1 1
-accusatory
-accuse/6 1
-accuser/1 1
-accusing/8 1
-accustom/11 1
-accustomed 1
-ace/28 1
-acerbate/6 1
-acerbic
-acerbically
-acerbity/2 1
-aces 5
-acetaminophen/2 1
-acetate/1 1
-acetic
-acetone/2 1
-acetonic
-ace 1
-acetylene/2 1
-Acevedo/3
-Achaean/2 1
-ache/28 1
-Achebe/3
-achene/1 1
-Achernar
-Acheson/3
-achievable
-achieve/6 1
-achievement/1 1
-achiever/1 1
-Achilles/2 1
-aching/8 1
-achoo/3
-achromatic 1
-achy/34 1
-acid/30 1
-acidic
-acidification 1
-acidify/31 1
-acidity/2 1
-acidophiles
-acidosis/2 1
-acidulous 1
-acknowledge/6 1
-acknowledged 1
-acknowledgment/1 1
-ACLU
-acme/1 1
-acne/2 1
-acolyte/1 1
-Aconcagua/2 1
-aconite/1 1
-acorn/1 1
-Acosta/3
-acoustic/32 1
-acoustical/8 1
-acquaint/11 1
-acquaintance/1 1
-acquaintanceship/2 1
-acquainted 1
-acquiesce/6 1
-acquiescence/2 1
-acquiescent/8 1
-acquirable
-acquire/6 1
-acquirement/2 1
-acquirer/10 1
-acquisition/1 1
-acquisitive/16 1
-acquit/12 1
-acquittal/1 1
-acquittance 1
-acre/1 1
-acreage/1 1
-acrid/21 1
-acridity/2 1
-acrimonious/16 1
-acrimony/2 1
-acrobat/1 1
-acrobatic/35 1
-acronym/1 1
-acrophobia/2 1
-Acropolis
-acropolis/4 1
-across 1
-acrostic/1 1
-Acrux/3
-acrylic/1 1
-ACT
-act/23 1
-Actaeon 1
-ACTH/2 1
-acting/2 1
-actinides
-actinium/2 1
-action/18 1
-actionable 1
-activate/6 1
-activation/1 1
-activator/1 1
-active/36 1
-activism/2 1
-activist/1 1
-activity/15 1
-Acton
-actor/1 1
-actress/4 1
-Acts
-actual/8 1
-actuality/15 1
-actualization/2 1
-actualize/6 1
-actual 1
-actuarial 1
-actuary/15 1
-actuate/6 1
-actuation/2 1
-actuator/1 1
-Acuff/3
-acuity/2 1
-acumen/2 1
-acupressure/2 1
-acupuncture/2 1
-acupuncturist/1 1
-acute/25 1
-acyclic 1
-acyclovir/2 1
-ad/1 1
-AD/2 1
-Ada/1 1
-adage/1 1
-adagio/1 1
-Adam/1 1
-adamant/37 1
-Adan/3
-Adana
-adapt/11 1
-adaptability/2 1
-adaptable 1
-adaptation/1 1
-adapted 1
-adapter/1 1
-adaption/10 1
-adaptive/8 1
-adaptivity 1
-Adar/2 1
-ADC
-ADD
-add/11 1
-addable 1
-Addams
-added 1
-addend/1 1
-addenda 6
-addendum/2 7
-adder/1 1
-Adderley/3
-addible 1
-addict/23 1
-addicted 1
-addiction/1 1
-addictive
-addictiveness
-Addie/3
-Addison
-addition/1 1
-additional/8 1
-additive/30 1
-addle/6 1
-addling 1
-address/22 1
-addressable
-addressee/1 1
-adduce/6 1
-Adela/3
-Adelaide/2 1
-Adele/3
-Adeline/3
-Aden/2 1
-Adenauer
-adenine/2 1
-adenoid/1 1
-adenoidal
-adept/38 1
-adequacy/2 1
-adequate/16 1
-Adhara/3
-adhere/6 1
-adherence/2 1
-adherent/1 1
-adherer/10 1
-adhesion/2 1
-adhesive/20 1
-adiabatic/39 1
-Adidas/3
-adieu/1 1
-adios 1
-adipose 1
-Adirondack/3
-Adirondacks/2 1
-adj
-adjacency/2 1
-adjacent/8 1
-adjectival/8 1
-adjective/1 1
-adjoin/11 1
-adjourn/11 1
-adjournment/1 1
-adjudge/6 1
-adjudicate/6 1
-adjudication/1 1
-adjudicative
-adjudicator/1 1
-adjudicatory
-adjunct/1 1
-adjuration/1 1
-adjure/6 1
-adjust/11 1
-adjustable 1
-adjuster/1 1
-adjustment/1 1
-adjustor/1 1
-adjutant/1 1
-Adkins/3
-Adler
-Adm
-adman/2 8
-admen 9
-admin/10 1
-administer/11 1
-administrate/6 1
-administration/1 1
-administrative/8 1
-administrator/1 1
-admirable/19 1
-admiral/1 1
-admiralty/2 1
-Admiralty 1
-admiration/2 1
-admire/6 1
-admirer/1 1
-admiring/8 1
-admissibility/2 1
-admissible/19 1
-admission/1 1
-admit/12 1
-admittance/1 1
-admitted/8 1
-admix/7 1
-admixture/1 1
-admonish/7 1
-admonishing 1
-admonishment/1 1
-admonition/1 1
-admonitory 1
-ado/2 1
-adobe/1 1
-adolescence/1 1
-adolescent/1 1
-Adolf/3
-Adolfo/3
-Adolph/3
-Adonis/4 1
-adopt/11 1
-adoptable
-adopter/1 1
-adoption/1 1
-adoptive 1
-adorable/29 1
-adoration/2 1
-adore/6 1
-adorer/1 1
-adoring/8 1
-adorn/11 1
-adornment/1 1
-ADP/2 1
-adrenal/1 1
-Adrenalin/1 1
-adrenalin/2 1
-adrenaline/2 1
-Adrian
-Adriana/3
-Adriatic/2 1
-Adrienne/3
-adrift 1
-adroit/21 1
-adsorb/11 1
-adsorbent/1 1
-adsorption/1 1
-adulate/6 1
-adulation/2 1
-adulator/1 1
-adulatory
-adult/1 1
-adulterant/1 1
-adulterate/6 1
-adulteration/1 1
-adulterer/1 1
-adulteress/4 1
-adulterous 1
-adultery/15 1
-adulthood/2 1
-adult 1
-adumbrate/6 1
-adumbration/2 1
-adv
-advance/28 1
-advancement/1 1
-advance 1
-advancing 1
-advantage/28 1
-advantageous/8 1
-advent/1 1
-Advent/1 1
-Adventist/1 1
-adventitious/8 1
-adventure/28 1
-adventurer/1 1
-adventures/9 1
-adventuresome 1
-adventuress/4 1
-adventurism 1
-adventurist/10 1
-adventurous/16 1
-adverb/1 1
-adverbial/30 1
-adversarial
-adversary/15 1
-adverse/27 1
-adversity/15 1
-advert/23 1
-advertise/6 1
-advertisement/1 1
-advertiser/1 1
-advertising/2 1
-advertize/6 1
-advertizement/1 1
-advertorial/1 1
-advice/1 1
-Advil/2 1
-advisability/2 1
-advisable/19 1
-advise/6 1
-advised/8 1
-advisement/2 1
-adviser/1 1
-advisory/15 1
-advocacy/2 1
-advocate/28 1
-advt
-adz/40 1
-adze/18 1
-Aegean/2 1
-aegis/2 1
-Aelfric/3
-Aeneas/2 1
-Aeneid/2 1
-aeolian 1
-Aeolus/2 1
-aeon/1 1
-aerate/6 1
-aeration/2 1
-aerator/1 1
-aerial/30 1
-aerialist/1 1
-aerie/41 1
-aerobatic/32 1
-aerobic/35 1
-aerobraking
-aerodrome/1 1
-aerodynamic/32 1
-aerodynamically
-Aeroflot/3
-aerogram/10 1
-aerogramme/10 1
-aeronautic/32 1
-aeronautical 1
-aerosol/1 1
-aerospace/2 1
-aery/42 1
-Aeschylus/2 1
-Aesculapius/2 1
-Aesop/2 1
-aesthete/10 1
-aesthetic/32 1
-aesthetically
-aestheticism/2 1
-aether 1
-aetiology 1
-AF
-AFAIK/10 1
-afar 1
-AFB
-AFC
-AFDC
-affability/2 1
-affable/17 1
-affair/1 1
-affect/23 1
-affectation/1 1
-affected/8 1
-affecting/8 1
-affection/18 1
-affectionate/8 1
-affective
-afferent 1
-affiance/43 1
-affidavit/1 1
-affiliate/28 1
-affiliation/1 1
-affine 1
-affinity/15 1
-affirm/11 1
-affirmation/1 1
-affirmative/30 1
-affix/22 1
-afflatus/2 1
-afflict/11 1
-afflicted 1
-afflicting 1
-affliction/1 1
-affluence/2 1
-affluent/8 1
-afford/11 1
-affordability 1
-affordable
-afforest/11 1
-afforestation/2 1
-affray/18 1
-affront/23 1
-affronted 1
-affronting 1
-afghan/1 1
-Afghan/1 1
-Afghanistan/2 1
-Afghan 1
-aficionado/1 1
-afield 1
-afire 1
-aflame 1
-afloat 1
-aflutter
-AFN
-afoot 1
-aforementioned
-aforesaid
-aforethought 1
-afoul 1
-Afr
-afraid 1
-afresh 1
-Africa/2 1
-African/1 1
-Afrikaans/2 1
-Afrikaner/1 1
-Afro/1 1
-Afrocentric
-Afrocentrism 1
-AFT
-aft/44 1
-after/10 1
-afterbirth/1 1
-afterburner/1 1
-aftercare/2 1
-aftereffect/1 1
-afterglow/1 1
-afterimage/1 1
-afterlife/2 10
-afterlives 11
-aftermarket/1 1
-aftermath/1 1
-afternoon/1 1
-aftershave/1 1
-aftershock/1 1
-aftertaste/1 1
-afterthought/1 1
-afterward 1
-afterword/1 1
-Ag/2 1
-against
-again 1
-Agamemnon/2 1
-Agana
-agape/2 1
-agar/2 1
-Agassi/3
-Agassiz/3
-agate/1 1
-Agatha/3
-agave/2 1
-age/28 1
-aged 1
-ageism/2 1
-ageist/1 1
-ageless/33 1
-agelessly
-ageless 1
-agency/15 1
-agenda/1 1
-agenda's 12
-agenda 13
-agent/18 1
-ageratum/2 1
-Aggie 1
-agglomerate/28 1
-agglomeration/1 1
-agglutinate/6 1
-agglutination/1 1
-agglutinative
-aggrandize/6 1
-aggrandizement/2 1
-aggravate/6 1
-aggravating/8 1
-aggravation/1 1
-aggregate/28 1
-aggregation/1 1
-aggression/1 1
-aggressive/16 1
-aggressor/1 1
-aggrieve/6 1
-aggrieved/8 1
-aggro 1
-aghast 1
-agile/45 1
-agility/2 1
-aging/1 1
-agism 1
-agitate/6 1
-agitated/8 1
-agitation/1 1
-agitator/1 1
-agitprop/2 1
-Aglaia
-agleam 1
-aglitter
-aglow 1
-Agnes
-Agnew/3
-Agni/2 1
-agnostic/1 1
-agnosticism/2 1
-agog 1
-agonize/6 1
-agonized 1
-agonizing/8 1
-agony/15 1
-agoraphobia/2 1
-agoraphobic/1 1
-ago 1
-agouti 1
-Agra
-agrarian/1 1
-agrarianism/2 1
-agrarian 1
-agree/46 1
-agreeable/29 1
-agreeing 1
-agreement/1 1
-agribusiness/3
-agribusinesses
-Agricola
-agricultural/8 1
-agriculturalist/1 1
-agriculture/2 1
-agriculturist/1 1
-Agrippa/2 1
-Agrippina/3
-agrochemical/10 1
-agronomic 1
-agronomist/1 1
-agronomy/2 1
-aground 1
-Aguascalientes
-ague/2 1
-Aguilar/3
-Aguinaldo/3
-Aguirre/3
-Agustin/3
-ah
-Ahab/2 1
-aha 1
-ahchoo
-ahead 1
-ahem 1
-Ahmad/3
-Ahmadabad
-Ahmadinejad/3
-Ahmed/3
-ahoy 1
-Ahriman/2 1
-AI/1 1
-aid/23 1
-Aida/3
-aide/28 1
-aider/10 1
-AIDS/4 1
-aigrette/1 1
-Aiken
-ail/5 1
-Aileen/3
-aileron/1 1
-ailing 1
-ailment/1 1
-aim/23 1
-Aimee/3
-aimless/16 1
-ain't
-Ainu 1
-air/23 1
-airbag/1 1
-airbase/1 1
-airbed
-airbeds
-airborne 1
-airbrush/22 1
-airbus/4 1
-aircraft/2 1
-aircraftman 14
-aircraftmen 15
-aircrew/10 1
-airdrome/10 1
-airdrop/47 1
-Airedale/1 1
-airfare/1 1
-airfield/1 1
-airflow/2 1
-airfoil/1 1
-airframe/10 1
-airfreight/2 1
-airgun/10 1
-airhead/1 1
-airing/1 1
-airlessness/3
-airless 1
-airletter
-airletters
-airlift/23 1
-airline/48 1
-airliner/1 1
-airlock/1 1
-airmail/23 1
-airman/2 16
-airmen 17
-airplane/1 1
-airplay/2 1
-airport/1 1
-airship/1 1
-airshow/10 1
-airsick/33 1
-airspace/2 1
-airspeed 1
-airstream 1
-airstrike/1 1
-airstrip/1 1
-airtight 1
-airtime/2 1
-air 1
-airwaves
-airwaves's
-airway/1 1
-airwoman 18
-airwomen 19
-airworthy/49 1
-airy/50 1
-Aisha
-aisle/18 1
-aitch/4 1
-ajar 1
-Ajax/2 1
-AK
-aka
-Akbar
-Akhmatova/3
-Akihito
-akimbo
-akin 1
-Akita 1
-Akiva/3
-Akkad
-Akron/2 1
-AL
-Al/2 1
-Ala
-Alabama/2 1
-Alabaman/1 1
-Alabamian/1 1
-alabaster/2 1
-alack 1
-alacrity/2 1
-Aladdin/2 1
-Alamo/2 1
-Alamogordo/3
-Alan/3
-Alana/3
-alanine 1
-Alar/2 1
-Alaric
-alarm/23 1
-alarmed 1
-alarming/8 1
-alarmist/1 1
-Alas
-Alaska/2 1
-Alaskan/1 1
-alas 1
-alb/1 1
-Alba
-albacore/1 1
-Albania/2 1
-Albanian/1 1
-Albany/2 1
-albatross/4 1
-albedo 1
-Albee
-albeit
-Alberio/3
-Albert
-Alberta/2 1
-Albertan 1
-Alberto/3
-Albigensian 1
-albinism/2 1
-albino/1 1
-Albion
-Albireo/3
-album/1 1
-albumen/2 1
-albumin/2 1
-albuminous
-Albuquerque/2 1
-Alcatraz
-Alcestis
-alchemical 1
-alchemist/1 1
-alchemy/2 1
-Alcibiades
-Alcindor/3
-Alcmena/3
-Alcoa/3
-alcohol/1 1
-alcoholic/51 1
-alcoholism/2 1
-Alcott
-alcove/1 1
-Alcuin
-Alcyone
-Aldan
-Aldebaran/2 1
-aldehyde 1
-Alden
-alder/1 1
-Alderamin/3
-alderman/2 20
-aldermen 21
-alderwoman/2 22
-alderwomen 23
-Aldo/3
-Aldrin/3
-ale/1 1
-aleatory
-Alec/3
-alehouse/1 1
-Aleichem/3
-Alejandra/3
-Alejandro/3
-Alembert/3
-alembic/1 1
-Aleppo/2 1
-alert/52 1
-Aleut/1 1
-Aleutian/1 1
-alewife/2 24
-alewives 25
-Alex/3
-Alexander/1 1
-Alexandra
-Alexandria/2 1
-Alexandrian 1
-Alexei/3
-Alexis
-alfalfa/2 1
-Alfonso/3
-Alfonzo/3
-Alford/3
-Alfred
-Alfreda/3
-Alfredo
-alfresco
-alga/53 1
-algal 1
-alga's 26
-alga 27
-algebra/1 1
-algebraic
-algebraical/8 1
-algebraist 1
-Algenib/3
-Alger
-Algeria/2 1
-Algerian/1 1
-Algieba/3
-Algiers/2 1
-Algol/2 1
-Algonquian/1 1
-Algonquin/1 1
-algorithm/1 1
-algorithmic
-algorithmically
-Alhambra
-Alhena/3
-Ali
-alias/22 1
-aliasing 1
-alias 1
-alibi/23 1
-alibis 1
-Alice/3
-Alicia/3
-alien/23 1
-alienable
-alienate/6 1
-alienation/2 1
-alienist/1 1
-alien 1
-Alighieri/3
-alight/11 1
-align/11 1
-aligner/1 1
-alignment/1 1
-alike 1
-aliment/23 1
-alimentary
-alimony/2 1
-Aline/3
-aline/6 1
-alinement/1 1
-Alioth/3
-aliphatic
-aliquot/10 1
-Alisa/3
-Alisha/3
-Alison/3
-Alissa/3
-Alistair/3
-alive/33 1
-aliyah/1 1
-Alkaid/3
-alkali/4 1
-alkaline
-alkalinity/2 1
-alkalize/6 1
-alkaloid/1 1
-alkyd/1 1
-all/2 1
-Allah/2 1
-Allahabad
-Allan/3
-allay/11 1
-allaying 1
-allegation/1 1
-allege/6 1
-alleged/8 1
-Alleghenies/2 1
-Allegheny
-allegiance/1 1
-allegoric
-allegorical/8 1
-allegorist/1 1
-allegory/15 1
-Allegra/3
-allegretto/1 1
-allegri
-allegro/1 1
-allele/1 1
-allelic
-alleluia/1 1
-Allen
-Allende/3
-Allentown
-allergen/1 1
-allergenic
-allergic
-allergically
-allergist/1 1
-allergy/15 1
-alleviate/6 1
-alleviation/1 1
-alley/1 1
-alleyway/1 1
-Allhallows/2 1
-alliance/1 1
-Allie/3
-Allies
-alligator/18 1
-Allison/3
-alliterate/6 1
-alliteration/1 1
-alliterative/8 1
-allocatable
-allocate/6 1
-allocation/1 1
-allocator/10 1
-allophones
-allot/12 1
-allotment/1 1
-allotrope 1
-allotropic
-allover 1
-allow/11 1
-allowable/19 1
-allowance/18 1
-allowed 1
-alloy/23 1
-allspice/2 1
-Allstate/3
-all 1
-allude/6 1
-allure/28 1
-allurement/1 1
-alluring/8 1
-allusion/1 1
-allusive/16 1
-alluvial/2 1
-alluvium/1 1
-Alma/3
-Almach/3
-almanac/1 1
-almanack/10 1
-Almaty/2 1
-Almighty/2 1
-almighty 1
-Almohad/3
-almond/1 1
-almoner/1 1
-Almoravid/3
-almost 1
-alms/2 1
-almshouse/1 1
-Alnilam/3
-Alnitak/3
-aloe/1 1
-aloft 1
-aloha/1 1
-alone 1
-alongshore
-alongside
-along 1
-Alonzo/3
-aloof/16 1
-aloud 1
-alp/1 1
-alpaca/1 1
-Alpert/3
-alpha/1 1
-alphabet/18 1
-alphabetic
-alphabetical/8 1
-alphabetization/1 1
-alphabetize/6 1
-alphabetizer/1 1
-alphanumerical/8 1
-alphanumeric 1
-Alphard/3
-alpha 1
-Alphecca/3
-Alpheratz/3
-Alphonse/3
-Alphonso/3
-alpine/10 1
-Alpine 1
-Alpo/3
-Alps/2 1
-already 1
-alright 1
-Alsace/2 1
-Alsatian/1 1
-Alsop/3
-also 1
-Alston/3
-alt/10 1
-Alta
-Altai/3
-Altaic/2 1
-Altair
-Altamira
-altar/1 1
-altarpiece/1 1
-alter/11 1
-alterable 1
-alteration/1 1
-altercate 1
-altercation/1 1
-alternate/54 1
-alternating 1
-alternation/1 1
-alternative/30 1
-alternator/1 1
-Althea/3
-altho 1
-although 1
-altimeter/1 1
-Altiplano/3
-altitude/1 1
-Altman/3
-alto/1 1
-altogether 1
-Altoids/3
-Alton/3
-alto 1
-altruism/2 1
-altruist/1 1
-altruistic/39 1
-Aludra/3
-alum/1 1
-alumina/2 1
-alumina's 28
-alumina 29
-aluminum/2 30
-alumna/53 1
-alumni 31
-alumnus/2 32
-Alva
-Alvarado/3
-Alvarez/3
-Alvaro/3
-alveolar/10 1
-Alvin/3
-always
-Alzheimer/3
-Alyce/3
-ally/31 1
-ally's
-Allyson/3
-Alyson/3
-Alyssa's 33
-Alyssa 34
-Am/2 1
-AM/2 1
-AMA
-Amadeus/3
-Amado/3
-amalgam/1 1
-amalgamate/6 1
-amalgamation/1 1
-Amalia/3
-Amanda/3
-amanuenses 35
-amanuensis/2 36
-amaranth/1 1
-amaretto/2 1
-Amarillo
-Amaru/3
-amaryllis/4 1
-amass/7 1
-Amaterasu/2 1
-amateur/1 1
-amateurish/16 1
-amateurism/2 1
-Amati 1
-amatory
-amaze/28 1
-amazed 1
-amazement/2 1
-amazing/8 1
-amazon/1 1
-Amazon/1 1
-amazonian
-Amazonian
-ambassador/1 1
-ambassadorial 1
-ambassadorship/1 1
-ambassadress/4 1
-Amber/3
-amber/2 1
-ambergris/2 1
-amber 1
-ambiance/1 1
-ambidexterity/2 1
-ambidextrous/8 1
-ambient 1
-ambiguity/15 1
-ambiguous/8 1
-ambition/18 1
-ambitious/16 1
-ambit 1
-ambivalence/2 1
-ambivalent
-ambivalently
-amble/28 1
-ambler/1 1
-ambling 1
-ambrosia/2 1
-ambrosial 1
-ambulance/1 1
-ambulanceman 37
-ambulancemen 38
-ambulancewoman 39
-ambulancewomen 40
-ambulant 1
-ambulate/6 1
-ambulation/1 1
-ambulatory/15 1
-ambuscade/28 1
-ambush/22 1
-ambushers
-amebic
-Amelia/3
-ameliorate/6 1
-amelioration/2 1
-ameliorative
-Amen/2 1
-amenability/2 1
-amenable/19 1
-amend/11 1
-amendable
-amendment/1 1
-Amenhotep/3
-amenity/15 1
-amen 1
-Amer
-Amerasian 1
-amerce/6 1
-amercement/1 1
-America/1 1
-American/1 1
-Americana/2 1
-Americanism/1 1
-Americanization/1 1
-Americanize/6 1
-American 1
-americium/2 1
-Amerind/1 1
-Amerindian/1 1
-Ameslan/3
-amethyst/1 1
-amethystine
-amethyst 1
-Amharic/2 1
-Amherst
-amiability/2 1
-amiable/55 1
-amicability/2 1
-amicable/19 1
-amide/1 1
-amidships
-amidst
-amid 1
-Amie/3
-Amiga/3
-amigo/1 1
-amine/10 1
-amino
-amir/1 1
-Amish/2 1
-amiss 1
-amity/2 1
-Amman/2 1
-ammeter/1 1
-ammo/2 1
-ammonia/2 1
-ammonia's 41
-ammonia 42
-ammonites
-ammonium 43
-ammunition/2 1
-amnesia/2 1
-amnesiac/1 1
-amnesic/1 1
-amnesty/56 1
-amniocenteses 44
-amniocentesis/2 45
-amnion/1 1
-amniotic
-Amoco/3
-amoeba/57 1
-amoebic
-amok 1
-among
-amongst
-amontillado/1 1
-amoral/8 1
-amorality/2 1
-amorous/16 1
-amorphous/16 1
-amortizable
-amortization/1 1
-amortize/6 1
-Amos
-amount/23 1
-amour/1 1
-amp/18 1
-Amparo/3
-amperage/2 1
-Ampere/3
-ampere/1 1
-ampersand/1 1
-amphetamine/1 1
-amphibian/1 1
-amphibious/8 1
-amphitheater/1 1
-amphora/53 1
-ample/17 1
-amplification/1 1
-amplifier/1 1
-amplify/31 1
-amplitude/1 1
-ampoule/1 1
-ampul/1 1
-ampule/1 1
-amputate/6 1
-amputation/1 1
-amputee/1 1
-Amritsar
-am 46
-Amsterdam/2 1
-amt
-Amtrak
-amulet/1 1
-Amundsen
-Amur/2 1
-amuse/6 1
-amused 1
-amusement/1 1
-amusing/8 1
-Amway/3
-Amy/3
-amylase/2 1
-Ana/2 1
-Anabaptist/2 1
-Anabel/3
-anabolic
-anabolism/2 1
-anachronism/1 1
-anachronistic/39 1
-Anacin/3
-anaconda/1 1
-Anacreon
-anaerobe/1 1
-anaerobic/39 1
-anagram/18 1
-anagrammatic
-anagrammatically
-Anaheim
-anal/8 1
-Analects/3
-analgesia/2 1
-analgesic/1 1
-analog/1 1
-analogical/8 1
-analogize/6 1
-analogous/16 1
-analogue/1 1
-analogy/15 1
-analysand/1 1
-analysis/2 1
-analyst/1 1
-analytical/8 1
-analytic 1
-analyzable
-analyze/6 1
-analyzer/1 1
-anamorphic
-Ananias/2 1
-anapaest/1 1
-anapest/1 1
-anapestic/1 1
-anaphora 1
-anaphoric
-anarchic
-anarchical/8 1
-anarchism/2 1
-anarchist/1 1
-anarchistic
-anarchy/2 1
-Anasazi
-Anastasia
-anathema/1 1
-anathematize/6 1
-Anatole/3
-Anatolia/2 1
-Anatolian/2 1
-anatomic
-anatomical/8 1
-anatomist/1 1
-anatomize/6 1
-anatomy/15 1
-Anaxagoras
-ancestor/18 1
-ancestral/8 1
-ancestress/4 1
-ancestry/15 1
-anchor/23 1
-anchorage/1 1
-Anchorage/2 1
-anchorite/1 1
-anchorman/2 47
-anchormen 48
-anchorpeople 49
-anchorperson/1 50
-anchorwoman/2 51
-anchorwomen 52
-anchovy/15 1
-ancient/38 1
-ancillary/15 1
-Andalusia/2 1
-Andalusian 1
-Andaman
-andante/1 1
-Andean 1
-Andersen/2 1
-Anderson
-Andes/2 1
-andiron/1 1
-Andorra/2 1
-Andorran/1 1
-Andre/3
-Andrea/3
-Andrei/3
-Andres
-Andretti/3
-Andrew/1 1
-Andrianampoinimerina/3
-androgen/2 1
-androgenic
-androgynous
-androgyny/2 1
-android/1 1
-Andromache
-Andromeda/2 1
-Andropov
-and 1
-Andy/3
-anecdotal 1
-anecdote/1 1
-anechoic
-anemia/2 1
-anemic
-anemically
-anemometer/1 1
-anemone/1 1
-anent
-aneroid 1
-anesthesia/2 1
-anesthesiologist/1 1
-anesthesiology/2 1
-anesthetic/1 1
-anesthetist/1 1
-anesthetization/2 1
-anesthetize/6 1
-aneurism/1 1
-aneurysm/1 1
-anew 1
-Angara
-angel/1 1
-Angel/2 1
-angel/58 1
-Angela/3
-angelfish/4 1
-Angelia/3
-angelic
-angelica/2 1
-angelical/8 1
-Angelica 1
-Angelico
-Angelina/3
-Angeline/3
-Angelique/3
-Angelita/3
-Angelo/3
-Angelou
-anger/23 1
-Angevin/2 1
-Angie/3
-angina/2 1
-angioplasty/15 1
-angiosperm/1 1
-Angkor
-angle/1 1
-Angle/1 1
-angle/6 1
-anglepoise 1
-angler/1 1
-angleworm/1 1
-Anglia
-Anglican/1 1
-Anglicanism/1 1
-Anglican 1
-Anglicism/1 1
-anglicism/10 1
-Anglicization 1
-anglicize/6 1
-Anglicize 1
-angling/2 1
-anglophile/10 1
-Anglophile 1
-Anglophil 1
-Anglophobe 1
-anglophone/10 1
-Anglo 1
-Angola/2 1
-Angolan/1 1
-angora/1 1
-Angora/1 1
-angostura 1
-angry/59 1
-angst/2 1
-angstrom/1 1
-Angstrom 1
-Anguilla/2 1
-anguish/22 1
-angularity/15 1
-angular 1
-Angus/2 1
-anhydrous 1
-Aniakchak/3
-Anibal/3
-aniline/2 1
-animadversion/1 1
-animadvert/11 1
-animal/1 1
-animalcule/1 1
-animal 1
-animate/6 1
-animated/8 1
-animate 1
-animating 1
-animation/1 1
-animator/1 1
-animism/2 1
-animist/1 1
-animistic
-animosity/15 1
-animus/2 1
-anion/1 1
-anionic 1
-anise/2 1
-aniseed/2 1
-anisette/2 1
-anisotropic
-anisotropy/60 1
-Anita/3
-Ankara/2 1
-ankh/1 1
-ankle/18 1
-anklebone/1 1
-anklet/1 1
-Ann/3
-Anna
-Annabel/3
-Annabelle/3
-annal/32 1
-annalist/1 1
-Annam/2 1
-Annapolis/2 1
-Annapurna/2 1
-Anne
-anneal/5 1
-annealer 1
-annealing 1
-annelid/1 1
-Annette/3
-annex/22 1
-annexation/1 1
-annexe/28 1
-Annie/3
-annihilate/6 1
-annihilation/2 1
-annihilator/1 1
-anniversary/15 1
-Annmarie/3
-annotate/6 1
-annotation/1 1
-annotative
-annotator/1 1
-announce/6 1
-announcement/1 1
-announcer/1 1
-annoy/11 1
-annoyance/1 1
-annoying/8 1
-annoyware
-annoywares
-annual/30 1
-annualized
-annuitant/1 1
-annuity/15 1
-annul/61 1
-annular 1
-annuli 53
-annulling 1
-annulment/1 1
-annulus 54
-annunciation/1 1
-Annunciation/1 1
-anode/1 1
-anodize/6 1
-anodyne/1 1
-anoint/11 1
-anointment/2 1
-anomalies
-anomalous/8 1
-anomaly/3
-anon/10 1
-anonymity/2 1
-anonymous/8 1
-anopheles/2 1
-anorak/1 1
-anorectic/1 1
-anorexia/2 1
-anorexic/1 1
-another 1
-Anouilh
-ans
-Anselm
-Anselmo/3
-Anshan/3
-ANSI/10 1
-answer/23 1
-answerable 1
-answerer 1
-answerphone/10 1
-ant/62 1
-antacid/1 1
-Antaeus
-antagonism/1 1
-antagonist/1 1
-antagonistic/39 1
-antagonize/6 1
-Antananarivo/2 1
-antarctic
-Antarctic/2 1
-Antarctica/2 1
-Antares/2 1
-ante/63 1
-anteater/1 1
-antebellum
-antecedence/2 1
-antecedent/1 1
-antechamber/1 1
-antedate/43 1
-antediluvian 1
-antelope/1 1
-antenatal
-antenna/57 1
-anterior 1
-anteroom/1 1
-antes 55
-ante 1
-anthem/18 1
-anther/1 1
-anthill/1 1
-anthologist/1 1
-anthologize/6 1
-anthology/15 1
-Anthony
-anthracite/2 1
-anthrax/2 1
-anthropic
-anthropocentric
-anthropogenic
-anthropoid/1 1
-anthropological/8 1
-anthropologist/1 1
-anthropology/2 1
-anthropometric
-anthropomorphic/39 1
-anthropomorphism/2 1
-anthropomorphizing
-anthropomorphous 1
-anti/1 1
-antiabortion
-antiabortionist/1 1
-antiaircraft 1
-antibacterial/1 1
-antibiotic/1 1
-antibody/15 1
-antic/64 1
-anticancer
-antichrist/1 1
-Antichrist/1 1
-anticipate/6 1
-anticipation/1 1
-anticipative 1
-anticipatory 1
-anticlerical 1
-anticlimactic
-anticlimactically
-anticlimax/4 1
-anticline/1 1
-anticlockwise
-anticoagulant/1 1
-anticommunism/2 1
-anticommunist/1 1
-antic 1
-anticyclone/1 1
-anticyclonic
-antidemocratic
-antidepressant/1 1
-antidote/18 1
-Antietam
-antifascist/1 1
-antifreeze/2 1
-antigen/1 1
-antigenic
-antigenicity/2 1
-Antigone/2 1
-Antigua/2 1
-antihero/4 1
-antihistamine/1 1
-antiknock/2 1
-antilabor
-Antillean
-Antilles/2 1
-antilogarithm/1 1
-antimacassar/1 1
-antimalarial 1
-antimatter/2 1
-antimicrobial 1
-antimissile 1
-antimony/2 1
-antinuclear
-Antioch
-antioxidant/1 1
-antiparticle/1 1
-Antipas/3
-antipasto/65 1
-antipathetic
-antipathy/15 1
-antipersonnel
-antiperspirant/1 1
-antiphon/1 1
-antiphonal/30 1
-antipodal/10 1
-antipodean/1 1
-antipodes
-Antipodes
-antipodes's
-antipollution 1
-antipoverty
-antiquarian/1 1
-antiquarianism/2 1
-antiquary/15 1
-antiquate/6 1
-antiquated 1
-antique/28 1
-antiquity/15 1
-antirrhinum/10 1
-antisemitic
-antisemitism/2 1
-antisepsis/2 1
-antiseptic/51 1
-antiserum/1 1
-antislavery 1
-antisocial/8 1
-antispasmodic/1 1
-antistatic 1
-antis 56
-antisubmarine
-antisymmetric
-antisymmetry
-antitank
-antitheses 57
-antithesis/2 58
-antithetic
-antithetical/8 1
-antitoxin/1 1
-antitrust
-anti 1
-antivenin/1 1
-antiviral/10 1
-antivivisectionist/1 1
-antiwar
-antler/1 1
-antlered
-Antofagasta/2 1
-Antoine/3
-Antoinette
-Anton/3
-Antone/3
-Antonia/3
-Antoninus
-Antonio/3
-Antonius
-Antony/2 1
-antonym/1 1
-antonymous
-antral
-an 1
-antsy/34 1
-ant 1
-Antwan/3
-Antwerp/2 1
-Anubis/2 1
-anus/4 1
-anvil/18 1
-anxiety/15 1
-anxious/16 1
-Anzac 1
-ANZUS
-anybody/15 1
-anyhow 1
-anymore 1
-anyone/2 1
-anyplace 1
-anything/1 1
-anytime 1
-any 1
-anyway/10 1
-anywhere 1
-anywise 1
-AOL/3
-aorist 1
-aorta/1 1
-aortic 1
-AP
-apace 1
-Apache/1 1
-Apalachicola/2 1
-apartheid/2 1
-apartment/1 1
-apart 1
-apathetic/39 1
-apathy/2 1
-apatite/2 1
-APB
-ape/28 1
-apelike
-Apennines
-aperiodic/39 1
-aperitif/1 1
-aperture/1 1
-apex/4 1
-aphasia/2 1
-aphasic/1 1
-aphelia 59
-aphelion/1 60
-aphid/1 1
-aphorism/1 1
-aphoristic/39 1
-aphrodisiac/1 1
-Aphrodite/2 1
-apiarist/1 1
-apiary/15 1
-Apia 61
-apical/8 1
-apiece 1
-apish/8 1
-aplenty 1
-aplomb/2 1
-apnea 1
-APO
-apocalypse/1 1
-Apocalypse/2 1
-apocalyptic
-Apocrypha/2 1
-apocryphal/8 1
-apocrypha's 62
-apocrypha 63
-apogee/1 1
-apolitical/8 1
-Apollinaire
-Apollo/1 1
-Apollonian
-apologetic/39 1
-apologia/1 1
-apologist/1 1
-apologize/6 1
-apology/15 1
-apoplectic 1
-apoplexy/15 1
-apostasy/15 1
-apostate/1 1
-apostatize/6 1
-apostle/1 1
-apostleship/2 1
-apostolic
-apostrophe/1 1
-apostrophized
-apothecary/15 1
-apothegm/1 1
-apotheoses 64
-apotheosis/2 65
-apotheosizes
-app/10 1
-Appalachia/2 1
-Appalachian/10 1
-appall/11 1
-appalling/8 1
-appaloosa/1 1
-Appaloosa/1 1
-apparatchik/10 1
-apparatus/4 1
-apparel/23 1
-apparent/8 1
-apparition/1 1
-appeal/23 1
-appealing/8 1
-appear/11 1
-appearance/1 1
-appease/6 1
-appeasement/1 1
-appeaser/1 1
-appeasing 1
-appellant/1 1
-appellate
-appellation/1 1
-append/11 1
-appendage/1 1
-appendectomy/15 1
-appendicitis/2 1
-appendix/66 1
-appertain/11 1
-appetite/1 1
-appetizer/1 1
-appetizing/8 1
-applaud/11 1
-applauder/1 1
-applause/2 1
-Apple/3
-apple/1 1
-applecart 1
-applejack/2 1
-applesauce/2 1
-Appleseed
-applet/1 1
-Appleton
-appliance/1 1
-applicability/2 1
-applicable/19 1
-applicant/1 1
-application/1 1
-applicative 1
-applicator/1 1
-applier/1 1
-applique/63 1
-apply/31 1
-appoint/11 1
-appointee/1 1
-appointive
-appointment/1 1
-Appomattox
-apportion/11 1
-apportionment/2 1
-appose/6 1
-apposite/16 1
-apposition/2 1
-appositive/1 1
-appraisal/1 1
-appraise/6 1
-appraisees
-appraiser/1 1
-appraising 1
-appreciable/19 1
-appreciate/6 1
-appreciation/1 1
-appreciative/8 1
-appreciator/1 1
-appreciatory 1
-apprehend/11 1
-apprehension/1 1
-apprehensive/16 1
-apprentice/28 1
-apprenticeship/1 1
-apprise/6 1
-apprize/6 1
-apprizing 1
-approach/22 1
-approachability 1
-approachable 1
-approbation/1 1
-appropriate/67 1
-appropriation/1 1
-appropriator/1 1
-approval/1 1
-approve/6 1
-approved 1
-approving/8 1
-approx
-approximate/68 1
-approximation/1 1
-appurtenance/1 1
-appurtenant 1
-APR
-Apr/2 1
-apricot/1 1
-April/1 1
-apron/18 1
-apropos
-apse/1 1
-apses 66
-apt/21 1
-aptitude/1 1
-Apuleius
-aqua/1 1
-aquaculture/2 1
-Aquafresh/3
-aqualung/1 1
-aquamarine/1 1
-aquanaut/1 1
-aquaplane/28 1
-aquarium/1 1
-Aquarius/4 1
-aquatic/69 1
-aquatint/70 1
-aqua 1
-aquavit/2 1
-aqueduct/1 1
-aqueous 1
-aquiculture/2 1
-aquifer/1 1
-Aquila 67
-aquiline
-Aquinas/2 1
-Aquino/3
-Aquitaine/2 1
-AR
-Ar/4 1
-Ara/2 1
-Arab/1 1
-arabesque/1 1
-Arabia/2 1
-Arabian/1 1
-Arabic/2 1
-arability/2 1
-Arabist/1 1
-arable 1
-Araby
-Araceli/3
-arachnid/1 1
-arachnoid 1
-arachnophobia 1
-Arafat/3
-Araguaya/3
-Aral/3
-Aramaic/2 1
-Aramco/3
-Arapaho/71 1
-Arapahoe/1 1
-Ararat/2 1
-Araucanian 1
-Arawak/2 1
-Arawakan/2 1
-arbiter/1 1
-arbitrage/28 1
-arbitrager/1 1
-arbitrageur/1 1
-arbitrament/1 1
-arbitrary/72 1
-arbitrate/6 1
-arbitration/2 1
-arbitrator/1 1
-Arbitron/3
-arbor/71 1
-arboreal 1
-arboretum/1 1
-arborvitae/1 1
-arbutus/4 1
-ARC
-arc/23 1
-arcade/73 1
-Arcadia/2 1
-Arcadian/2 1
-arcading 1
-arcana 68
-arcanely
-arcaneness
-arcane 1
-arch/74 1
-archaeological/8 1
-archaeologist/1 1
-archaic/39 1
-archaism/1 1
-archaist/1 1
-archangel/1 1
-archbishop/1 1
-archbishopric/1 1
-archdeacon/1 1
-archdeaconry 1
-archdiocesan
-archdiocese/1 1
-archduchess/4 1
-archduke/1 1
-Archean
-archenemy/15 1
-archeological 1
-archeologist/1 1
-archeology/2 1
-archeopteryx 1
-archer/1 1
-archery/2 1
-archetypal 1
-archetype/1 1
-archetypical 1
-archfiend/1 1
-Archibald/3
-Archie/3
-archiepiscopal 1
-Archimedes
-arching 1
-archipelago/1 1
-architect/18 1
-architectonic/32 1
-architectural/8 1
-architecture/1 1
-architrave/1 1
-archival
-archive/28 1
-archivist/1 1
-archway/1 1
-arcing 1
-arctic/1 1
-Arctic/2 1
-arctic 1
-Arctic 1
-Arcturus/2 1
-Ardabil
-Ardebil
-Arden
-ardency 1
-ardent/8 1
-ardor/1 1
-arduous/16 1
-are/1 1
-area/1 1
-areal 1
-arena/1 1
-aren't
-Arequipa
-are 46
-argent/2 1
-Argentina/2 1
-Argentinean 1
-Argentine 1
-Argentinian/1 1
-argent 1
-Argo/10 1
-argon/2 1
-Argonaut/1 1
-Argonne/2 1
-argosy/15 1
-argot/1 1
-arguable/19 1
-argue/6 1
-arguer/1 1
-argument/1 1
-argumentation/2 1
-argumentative/16 1
-Argus/2 1
-argyle/1 1
-aria/1 1
-Ariadne/2 1
-Arianism/2 1
-arid/75 1
-aridity/2 1
-Ariel
-Aries/4 1
-aright 1
-Ariosto
-arise/76 69
-arising 1
-Aristarchus/2 1
-Aristides
-aristocracy/15 1
-aristocrat/1 1
-aristocratically
-aristocratic 1
-Aristophanes/2 1
-Aristotelian/2 1
-Aristotle/2 1
-arithmetic/2 1
-arithmetical/8 1
-arithmetician/1 1
-Arius/2 1
-Ariz
-Arizona/2 1
-Arizonan/1 1
-Arizonian/1 1
-Arjuna
-Ark
-ark/1 1
-Arkansan/1 1
-Arkansas/2 1
-Arkhangelsk
-Arkwright
-Arlene/3
-Arline/3
-Arlington
-arm/23 1
-armada/1 1
-armadillo/1 1
-Armageddon/1 1
-Armagnac/2 1
-armament/1 1
-Armand/3
-Armando/3
-Armani/3
-armature/18 1
-armband/1 1
-armchair/1 1
-Armenia/2 1
-Armenian/1 1
-armful/1 1
-armhole/1 1
-arming 1
-Arminius/2 1
-armistice/1 1
-armless 1
-armlet/1 1
-armload/10 1
-Armonk/3
-armor/23 1
-armorer/1 1
-armorial 1
-armory/15 1
-Armour/3
-armpit/1 1
-armrest/1 1
-Armstrong/2 1
-army/15 1
-Arneb/3
-Arnhem
-Arno/2 1
-Arnold
-Arnulfo/3
-aroma/1 1
-aromatherapist/1 1
-aromatherapy/2 1
-aromatic/51 1
-aromaticity 1
-Aron/3
-arose 70
-around 1
-arousal/2 1
-arouse/6 1
-arpeggio/1 1
-arr
-arraign/11 1
-arraigning 1
-arraignment/1 1
-arrange/6 1
-arrangeable
-arrangement/1 1
-arranger/1 1
-arrant 1
-arras/4 1
-array/23 1
-arrears
-arrears's
-arrest/23 1
-arrestable
-arresting 1
-Arrhenius
-arrhythmia/2 1
-arrhythmical 1
-arrhythmic 1
-arrival/1 1
-arrive/6 1
-arrogance/2 1
-arrogant/8 1
-arrogate/6 1
-arrogation/2 1
-Arron/3
-arrow/23 1
-arrowhead/1 1
-arrowroot/2 1
-arroyo/1 1
-arsed
-arsenal/1 1
-arsenic/2 1
-arsenide 1
-arsing
-arson/2 1
-arsonist/1 1
-Art/3
-art/18 1
-Artaxerxes/3
-artefactual
-Artemis/2 1
-arterial 1
-arteriole/1 1
-arteriosclerosis/2 1
-artery/15 1
-artful/16 1
-arthritic/1 1
-arthritis/2 1
-arthropod/1 1
-arthroscope/1 1
-arthroscopic
-Arthur/2 1
-Arthurian
-artichoke/1 1
-article/77 1
-articulacy 1
-articular 1
-articulate/67 1
-articulation/1 1
-articulatory 1
-Artie/3
-artifact/1 1
-artifice/1 1
-artificer/1 1
-artificial/8 1
-artificiality/2 1
-artillery/2 1
-artilleryman/2 71
-artillerymen 72
-artisan/1 1
-artist/1 1
-artiste/1 1
-artistic/39 1
-artistry/2 1
-artless/16 1
-art 46
-artsy/34 1
-Arturo/3
-artwork/1 1
-arty/49 1
-Aruba/2 1
-arugula 1
-arum/1 1
-Aryan/1 1
-Asama/3
-asap
-ASAP
-asbestos/2 1
-asbestosis 1
-Ascella/3
-ascend/11 1
-ascendance/2 1
-ascendancy/2 1
-ascendant/1 1
-ascendency/2 1
-ascendent/1 1
-ascending 1
-ascension/1 1
-Ascension/2 1
-ascent/1 1
-ascertain/11 1
-ascertainable 1
-ascertainment/2 1
-ascetic/1 1
-ascetically
-asceticism/2 1
-ASCII/1 1
-ascorbic
-ascot/1 1
-ascribable
-ascribe/6 1
-ascription/1 1
-aseptic/39 1
-asexual/8 1
-asexuality/2 1
-Asgard
-ash/22 1
-ashamed/8 1
-Ashanti 1
-ashcan/1 1
-Ashcroft
-Ashe
-ashen 1
-Ashgabat
-Ashikaga/3
-Ashkenazim
-Ashkhabad/2 1
-ashlar/18 1
-Ashlee/3
-Ashley/3
-Ashmolean/3
-ashore 1
-ashram/1 1
-ashtray/1 1
-Ashurbanipal
-ashy/34 1
-Asia/2 1
-Asian/1 1
-Asiatic/1 1
-aside/1 1
-Asimov
-asinine/8 1
-asininity/15 1
-ask/11 1
-askance 1
-askew 1
-asking 1
-ASL/2 1
-aslant 1
-asleep 1
-Asmara
-asocial 1
-Asoka
-asp/1 1
-asparagus/2 1
-aspartame/2 1
-ASPCA
-aspect/1 1
-Aspell/3
-Aspen/3
-aspen/1 1
-asperity/15 1
-aspersion/1 1
-asphalt/23 1
-asphodel/1 1
-asphyxia/2 1
-asphyxiate/6 1
-asphyxiation/1 1
-aspic/1 1
-Aspidiske/3
-aspidistra/1 1
-aspirant/1 1
-aspirate/28 1
-aspiration/1 1
-aspirational
-aspirator/1 1
-aspire/6 1
-aspirin/1 1
-aspiring 1
-Asquith
-ass/4 1
-Assad/3
-assail/11 1
-assailable 1
-assailant/1 1
-assailing 1
-Assam/2 1
-Assamese/2 1
-assassin/1 1
-assassinate/6 1
-assassination/1 1
-assault/78 1
-assaulter 1
-assay/23 1
-assayer/1 1
-assaying 1
-assemblage/1 1
-assemble/6 1
-assembler/1 1
-assemblies
-Assembly
-assembly/3
-assemblyman/2 73
-assemblymen 74
-assemblywoman/2 75
-assemblywomen 76
-assent/23 1
-assenting 1
-assert/11 1
-asserted 1
-assertion/1 1
-assertive/16 1
-asses/79 1
-assess/7 1
-assessable
-assessment/1 1
-assessor/1 1
-asset/1 1
-asseverate/6 1
-asseveration/2 1
-asshole/80 1
-assiduity/2 1
-assiduous/16 1
-assign/23 1
-assignable 1
-assignation/1 1
-assignees
-assigner/1 1
-assignment/1 1
-assignor/1 1
-assimilable
-assimilate/6 1
-assimilation/2 1
-Assisi
-assist/23 1
-assistance/2 1
-assistant/1 1
-assize/18 1
-assn
-assoc
-associate/28 1
-associateship 1
-association/1 1
-associational
-associative/8 1
-associativity 1
-assonance/2 1
-assonant/1 1
-assort/11 1
-assortment/1 1
-asst
-assuage/6 1
-assumable 1
-assume/6 1
-assumed 1
-assuming 1
-assumption/1 1
-assumptive 1
-assurance/1 1
-assure/6 1
-assured/30 1
-Assyria/2 1
-Assyrian/1 1
-Astaire
-Astana/3
-Astarte/2 1
-astatine/2 1
-aster/1 1
-asterisk/23 1
-astern 1
-asteroid/1 1
-asthma/2 1
-asthmatic/51 1
-astigmatic 1
-astigmatism/1 1
-astir 1
-astonish/7 1
-astonished 1
-astonishing/8 1
-astonishment/2 1
-Aston 1
-a 77
-Astor
-Astoria
-astound/11 1
-astounding/8 1
-astraddle 1
-astrakhan/2 1
-Astrakhan 1
-astral/8 1
-astray 1
-astride 1
-astringency/2 1
-astringent/30 1
-astrolabe/1 1
-astrologer/1 1
-astrological/8 1
-astrologist/1 1
-astrology/2 1
-astronaut/1 1
-astronautic/32 1
-astronautical 1
-astronomer/1 1
-astronomic
-astronomical/8 1
-astronomy/2 1
-astrophysical
-astrophysicist/1 1
-astrophysics/2 1
-AstroTurf 1
-as 1
-Asturias
-astute/27 1
-Asuncion/2 1
-asunder
-Aswan/2 1
-asylum/1 1
-asymmetric
-asymmetrical/8 1
-asymmetry/15 1
-asymptomatic 1
-asymptote/10 1
-asymptotic/39 1
-asynchronous/8 1
-At/1 1
-Atacama/3
-Atahualpa
-Atalanta
-Atari/3
-Ataturk/3
-atavism/2 1
-atavist/1 1
-atavistic 1
-ataxia/2 1
-ataxic/1 1
-atelier/1 1
-ate 78
-Athabasca/3
-Athabascan/1 1
-Athabaska
-Athabaskan/1 1
-atheism/2 1
-atheist/1 1
-atheistically
-atheistic 1
-atheist 1
-Athena/2 1
-Athene/2 1
-Athenian/1 1
-Athens/2 1
-atherosclerosis/2 1
-athirst 1
-athlete/1 1
-athletic/35 1
-athleticism 1
-athwart 1
-atilt 1
-atishoo
-Atkins/3
-Atkinson
-Atlanta/2 1
-Atlantes 79
-Atlantic/2 1
-Atlantis/2 80
-atlas/81 1
-Atlas/4 1
-ATM/2 1
-Atman 1
-atmosphere/1 1
-atmospheric/32 1
-atmospherically
-atoll/1 1
-atom/1 1
-atomic/39 1
-atomicity 1
-atomic 1
-atomistic
-atomization 1
-atomize/6 1
-atomizer/1 1
-atonal/8 1
-atonality/2 1
-atone/6 1
-atonement/2 1
-atop 1
-ATP/2 1
-Atreus
-Atria/3
-atrial 1
-atria 81
-atrium/2 82
-atrocious/16 1
-atrocity/15 1
-atrophy/56 1
-atropine/2 1
-Atropos/2 1
-attach/7 1
-attachable
-attache/28 1
-attachment/1 1
-attack/78 1
-attacker/1 1
-attain/11 1
-attainability/2 1
-attainable 1
-attainder/2 1
-attainment/1 1
-attar/2 1
-attempt/23 1
-attend/11 1
-attendance/1 1
-attendant/1 1
-attendee/1 1
-attender/10 1
-attending 1
-attention/1 1
-attentional
-attentive/16 1
-attenuate/6 1
-attenuation/2 1
-attenuator/10 1
-attest/11 1
-attestation/1 1
-attic/1 1
-Attic/2 1
-Attica/2 1
-Attic 1
-Attila/2 1
-attire/28 1
-attiring 1
-attitude/1 1
-attitudinal
-attitudinize/6 1
-Attlee
-attn
-Attn
-attorney/1 1
-attract/11 1
-attractable 1
-attractant/1 1
-attraction/1 1
-attractive/16 1
-attractor/10 1
-attributable
-attribute/28 1
-attribution/1 1
-attributive/30 1
-attrition/2 1
-at 1
-Attucks
-attune/6 1
-ATV 1
-atwitter
-Atwood/3
-atypical/8 1
-atty
-Au/2 1
-aubergine/10 1
-Aubrey
-auburn/2 1
-Auckland
-auction/23 1
-auctioneer/18 1
-audacious/16 1
-audacity/2 1
-Auden/2 1
-Audi/3
-audibility/2 1
-audible/82 1
-audience/1 1
-audio/1 1
-audiobook/1 1
-audiological
-audiologist/1 1
-audiology/2 1
-audiometer/1 1
-Audion/3
-audiophile/1 1
-audiotape/1 1
-audiovisual/32 1
-audit/23 1
-audition/23 1
-auditive 1
-auditor/1 1
-auditorium/1 1
-auditory 1
-Audra/3
-Audrey/3
-Audubon
-Aug/2 1
-Augean 1
-auger/1 1
-aught/1 1
-augite 1
-augment/5 1
-augmentation/1 1
-augmentative 1
-augmenter/1 1
-Augsburg
-augur/23 1
-augury/15 1
-august/21 1
-August/1 1
-Augusta/2 1
-Augustan 1
-Augustine/2 1
-Augustinian/1 1
-august 1
-Augustus/2 1
-auk/1 1
-aunt/1 1
-auntie/1 1
-aunty/15 1
-aura/1 1
-aural/8 1
-Aurangzeb
-aura's 83
-aura 84
-Aurelia/3
-Aurelio/3
-Aurelius
-aureola/2 1
-aureole/18 1
-Aureomycin/2 1
-auricle/1 1
-auric 1
-auricular 1
-Auriga/2 1
-aurora/1 1
-Aurora/2 1
-auroral 1
-Auschwitz
-auscultate/6 1
-auscultation/1 1
-auspice/1 1
-auspices 85
-auspicious/16 1
-Aussie/1 1
-Austen
-austere/45 1
-austerity/15 1
-Austerlitz/2 1
-Austin/1 1
-Australasia/2 1
-Australasian 1
-Australia/2 1
-Australian/1 1
-Australoid 1
-Australopithecus/2 1
-austral 1
-Austria/2 1
-Austrian/1 1
-Austronesian/2 1
-auteur 1
-authentic
-authentically
-authenticate/6 1
-authentication/1 1
-authenticator/10 1
-authenticity/2 1
-author/23 1
-authoress/4 1
-authorial
-authoring 1
-authoritarian/1 1
-authoritarianism/2 1
-authoritative/16 1
-authority/15 1
-authorization/1 1
-authorize/6 1
-authorship/2 1
-autism/2 1
-autistic 1
-auto/18 1
-autobahn/1 1
-autobiographer/1 1
-autobiographic
-autobiographical/8 1
-autobiography/15 1
-autoclave/18 1
-autocracy/15 1
-autocrat/1 1
-autocratic
-autocratically
-autocross 1
-autocue 1
-autodidact/1 1
-autograph/23 1
-autoignition
-autoimmune
-autoimmunity/2 1
-automaker/1 1
-automate/6 1
-automatic/51 1
-automation/2 1
-automatism/2 1
-automatize/6 1
-automaton/1 1
-automobile/28 1
-automorphism/10 1
-automotive
-autonomic 1
-autonomous/8 1
-autonomy/2 1
-autopilot/1 1
-autopsy/56 1
-autosuggestion 1
-autoworker/1 1
-Autumn/3
-autumn/1 1
-autumnal 1
-autumn 1
-aux
-auxiliary/15 1
-auxin/2 1
-av
-AV
-Av/2 1
-Ava/3
-avail/23 1
-availability/15 1
-available 1
-avalanche/18 1
-Avalon
-avarice/2 1
-avaricious/83 1
-avast 1
-avatar/1 1
-avaunt 1
-avdp
-avenge/6 1
-avenger/1 1
-avenging 1
-Aventine
-avenue/1 1
-aver/13 1
-average/54 1
-Avernus
-Averroes
-averse 1
-aversion/1 1
-aversive
-avert/11 1
-Avery/3
-Avesta/2 1
-ave 1
-Ave 1
-avg
-avian 1
-aviary/15 1
-aviation/2 1
-aviator/1 1
-aviatrix/66 1
-Avicenna
-avid/75 1
-avidity/2 1
-Avignon
-Avila/3
-avionic/32 1
-Avior/3
-Avis
-avitaminosis/2 1
-avocado/1 1
-avocation/1 1
-avocational
-Avogadro
-avoid/11 1
-avoidable/19 1
-avoidance/2 1
-avoirdupois/2 1
-Avon
-avouch/7 1
-avow/11 1
-avowal/1 1
-avowed/8 1
-avuncular
-avuncularly
-aw
-AWACS
-await/11 1
-awake/14 86
-awaken/11 1
-awakening/1 1
-awake 1
-awaking 1
-award/23 1
-aware/84 1
-awash 1
-away 1
-awe/28 1
-awed 1
-aweigh 1
-awesome/16 1
-awestricken
-awestruck
-awful/85 1
-awhile 1
-awkward/21 1
-awl/1 1
-awn/86 1
-awning/1 1
-awoken 87
-awoke 87
-AWOL/2 1
-awol 1
-awry 1
-ax/22 88
-axehead
-axeheads
-axeman 1
-axes 89
-axial/8 1
-axillary 1
-axiom/1 1
-axiomatically
-axiomatic 1
-axiomatizing
-Axis
-axis/4 90
-axle/1 1
-axletree/1 1
-axolotl/1 1
-axon/1 1
-Axum
-ay/4 1
-ayah/1 1
-Ayala/3
-ayatollah/1 1
-aye/1 1
-Ayers
-Aymara 1
-Ayrshire/2 1
-ay 1
-Ayurveda
-Ayyubid/3
-AZ/2 1
-azalea/1 1
-Azana/3
-Azania/3
-Azazel
-Azerbaijan/2 1
-Azerbaijani/1 1
-azimuth/1 1
-azimuthal 1
-Azores/2 1
-Azov
-AZT/2 1
-Aztec/1 1
-Aztecan/2 1
-Aztlan/3
-azure/18 1
-b
-B/2 1
-Ba/2 1
-BA/2 1
-baa/23 1
-baaing 1
-Baal/1 1
-baas 1
-Baath/3
-Baathist
-Babar/2 1
-Babbage
-Babbitt 1
-babble/28 1
-babbler/1 1
-babbling 1
-babe/1 1
-babel/1 1
-Babel/1 1
-baboon/1 1
-Babur
-babushka/1 1
-baby/87 1
-babyhood/2 1
-babyish 1
-Babylon/1 1
-Babylonia/2 1
-Babylonian/1 1
-babysat 91
-babysit/88 92
-babysitter/1 1
-babysitting/2 1
-Bacall/3
-Bacardi 1
-baccalaureate/1 1
-baccarat/2 1
-bacchanal/1 1
-bacchanalia/2 1
-Bacchanalia/2 1
-bacchanalian/1 1
-Bacchic
-Bacchus/2 1
-baccy 1
-Bach/2 1
-bachelor/18 1
-bachelorhood/2 1
-bacillary
-bacilli 93
-bacillus/2 94
-back/78 1
-backache/1 1
-backbench/89 1
-backbencher/1 1
-backbite/90 1
-backbiter/1 1
-backbiting 1
-backboard/1 1
-backbone/1 1
-backbreaking
-backchat 1
-backcloth/10 1
-backcomb/11 1
-backdate/6 1
-backdoor
-backdrop/18 1
-backer/1 1
-backfield/1 1
-backfire/28 1
-backgammon/2 1
-background/91 1
-backgrounder/1 1
-backhand/78 1
-backhanded/8 1
-backhander/1 1
-backhoe/1 1
-backing/1 1
-backlash/40 1
-backless 1
-backlog/92 1
-backpack/23 1
-backpacker/1 1
-backpacking/2 1
-backpedal/11 1
-backrest/1 1
-backroom/10 1
-backscratching/3
-backseat/1 1
-backside/1 1
-backslapper/1 1
-backslapping/2 1
-backslash/4 1
-backslide/93 1
-backslider/1 1
-backslid 1
-backspace/28 1
-backspin/2 1
-backstabber/1 1
-backstabbing 1
-backstage/2 1
-backstair/10 1
-backstop/47 1
-backstreet/10 1
-backstretch/4 1
-backstroke/28 1
-backtalk/2 1
-backtrack/11 1
-backup/1 1
-Backus/3
-backward/94 1
-backwash/2 1
-backwater/1 1
-backwoods
-backwoodsman/2 95
-backwoodsmen 96
-backwoods's
-backyard/1 1
-bacon/2 1
-Bacon/2 1
-bacteria/1 1
-bacterial 1
-bacteria's 97
-bacteria 98
-bactericidal
-bactericide/1 1
-bacteriologic
-bacteriological 1
-bacteriologist/1 1
-bacteriology/2 1
-bacteriophage 1
-bacterium/2 99
-Bactria
-bad/95 100
-baddie/1 1
-baddy/15 1
-Baden
-bade 101
-badge/77 1
-badger/23 1
-badinage/2 1
-badlands
-Badlands/2 1
-badlands's
-badman/2 102
-badmen 103
-badminton/2 1
-badmouth/11 1
-Baedeker/1 1
-Baez
-Baffin/3
-baffle/28 1
-bafflement/2 1
-baffler/1 1
-baffling 1
-bag/92 1
-bagatelle/1 1
-bagel/1 1
-bagful/1 1
-baggage/2 1
-baggie/41 1
-Baggies
-bagging 1
-Baghdad/2 1
-bagpipe/96 1
-bagpiper/1 1
-baguette/1 1
-Baguio
-baggy/97 1
-Baha'i
-Bahama/3
-Bahamanian 1
-Bahamas/2 1
-Bahamian/1 1
-Baha'ullah
-Bahia
-Bahrain/2 1
-baht/1 1
-bah 1
-Baikal
-bail/23 1
-bailable 1
-Bailey/3
-bailey/10 1
-bailiff/10 1
-bailiwick/1 1
-bailout/1 1
-bailsman/2 104
-bailsmen 105
-Baird
-bairn/1 1
-bait/23 1
-baiting 1
-baize/2 1
-bake/28 1
-bakehouse 1
-Bakelite/2 1
-Baker
-baker/1 1
-Bakersfield
-bakery/15 1
-bakeshop/1 1
-baking 1
-baklava/2 1
-baksheesh/2 1
-Baku/2 1
-Bakunin
-balaclava/1 1
-balalaika/1 1
-balance/28 1
-Balanchine
-Balaton
-Balboa
-balboa/1 1
-balcony/15 1
-bald/98 1
-Balder/2 1
-balderdash/2 1
-baldfaced
-baldric/1 1
-Baldwin/1 1
-baldy/60 1
-bale/28 1
-Balearic/3
-baleen/2 1
-baleful/85 1
-baler/1 1
-Balfour
-Bali/2 1
-Balinese/2 1
-baling 1
-balk/23 1
-Balkan/10 1
-Balkhash
-balking 1
-balky/34 1
-Ball
-ball/23 1
-ballad/1 1
-ballade/10 1
-balladeer/1 1
-balladry/2 1
-Ballard/3
-ballast/23 1
-ballcock/1 1
-ballerina/1 1
-ballet/1 1
-balletic 1
-ballgame/1 1
-ballgirl
-ballgirls
-ballgown/10 1
-balling 1
-ballistic/32 1
-balloon/23 1
-ballooning 1
-balloonist/1 1
-balloon 1
-ballot/23 1
-ballpark/1 1
-ballplayer/1 1
-ballpoint/1 1
-ballroom/1 1
-ballsed
-ballses
-ballsing
-ballsy/34 1
-balm/1 1
-balmy/49 1
-baloney/2 1
-balsa/1 1
-balsam/18 1
-balsamic 1
-Balthazar 1
-Baltic/2 1
-Baltimore/2 1
-Baluchistan
-baluster/1 1
-balustrade/1 1
-Balzac/2 1
-ballyhoo/23 1
-bally 1
-Bamako/2 1
-Bambi/3
-bamboo/1 1
-bamboozle/6 1
-ban/99 1
-Banach/3
-banal/75 1
-banality/15 1
-banana/1 1
-Bancroft/3
-band/23 1
-bandage/28 1
-bandana/1 1
-bandanna/1 1
-bandbox/4 1
-bandeau/100 1
-banding 1
-bandit/1 1
-banditry/2 1
-bandleader/10 1
-bandmaster/1 1
-bandoleer/1 1
-bandolier/1 1
-bandpass
-bandsman/2 106
-bandsmen 107
-bandstand/1 1
-Bandung/2 1
-bandwagon/1 1
-bandwidth/10 1
-bandy/101 1
-bandying 1
-bane/18 1
-baneful/102 1
-bang/78 1
-Bangalore
-banger/10 1
-Bangkok/2 1
-Bangladesh/2 1
-Bangladeshi/1 1
-bangle/1 1
-Bangor
-Bangui/2 1
-banish/7 1
-banishment/2 1
-banister/1 1
-Banjarmasin/3
-banjo/1 1
-banjoist/1 1
-Banjul
-bank/23 1
-bankable 1
-bankbook/1 1
-bankcard/1 1
-banker/1 1
-banking/2 1
-banknote/1 1
-bankroll/23 1
-bankrupt/23 1
-bankruptcy/15 1
-bankrupt 1
-Banks
-Banneker/3
-banner/18 1
-Bannister
-bannister/1 1
-bannock/1 1
-banns/2 1
-banquet/23 1
-banqueter/1 1
-banquette/1 1
-banshee/1 1
-banshie/1 1
-bantam/1 1
-bantamweight/1 1
-banter/23 1
-bantering/8 1
-Banting
-Bantu/1 1
-banzai/1 1
-banyan/1 1
-baobab/1 1
-Baotou/3
-bap/10 1
-baptism/1 1
-baptismal 1
-Baptist/1 1
-baptist/10 1
-Baptiste/3
-baptistery/15 1
-baptistry/15 1
-Baptist 1
-baptize/6 1
-baptizer/1 1
-bar/103 1
-Barabbas
-Barack/3
-barb/23 1
-Barbadian/1 1
-Barbados/2 1
-Barbara/3
-Barbarella/3
-barbarian/1 1
-barbarianism/1 1
-barbaric/39 1
-barbarism/1 1
-barbarity/15 1
-barbarize/6 1
-Barbarossa/2 1
-barbarous/8 1
-Barbary/2 1
-barbecue/28 1
-barbel/1 1
-barbell/1 1
-barbeque/28 1
-Barber
-barber/23 1
-barberry/15 1
-barbershop/1 1
-barbie/10 1
-Barbie 1
-barbiturate/1 1
-Barbour/2 1
-Barbra/3
-Barbuda/2 1
-barbwire/2 1
-barcarole/1 1
-barcarolle/1 1
-Barcelona/2 1
-Barclay/3
-bard/18 1
-Bardeen/3
-bardic 1
-bare/104 1
-bareback
-barebacked
-barefaced/8 1
-barefoot
-barefooted
-barehanded
-bareheaded 1
-barelegged
-Barents/3
-barf/23 1
-barflies
-barfly's
-barfly 1
-bargain/78 1
-bargainer/1 1
-barge/28 1
-bargeman/2 108
-bargemen 109
-bargepole 1
-barhop/105 1
-baritone/1 1
-barium/2 1
-bark/23 1
-barkeep/1 1
-barkeeper/1 1
-Barker/3
-barker/1 1
-Barkley/3
-barley/2 1
-barleycorn/10 1
-Barlow/3
-barmaid/1 1
-barman/2 110
-barmen 111
-barmy/34 1
-barn/18 1
-Barnabas
-Barnaby/3
-barnacle/1 1
-barnacled
-Barnard
-Barnaul
-Barnes
-Barnett/3
-Barney/3
-barney/10 1
-barnstorm/11 1
-barnstormer/1 1
-Barnum
-barnyard/1 1
-Baroda
-barometer/1 1
-barometric
-barometrically
-baron/1 1
-baronage/1 1
-baroness/3
-baronesses
-baronet/1 1
-baronetcy/15 1
-baronial
-barony/15 1
-baroque/2 1
-Baroque 1
-barque/1 1
-Barquisimeto
-Barr/3
-barrack/23 1
-barracking 1
-barracks 1
-barracuda/1 1
-barrage/28 1
-Barranquilla
-barre/28 1
-barrel/23 1
-barreling 1
-barren/106 1
-Barrera/3
-Barrett/3
-barrette/1 1
-barricade/28 1
-Barrie/2 1
-barrier/1 1
-barring/10 1
-barrio/1 1
-barrister/1 1
-Barron/3
-barroom/1 1
-barrow/1 1
-Barry
-Barrymore
-Bart
-bartender/1 1
-barter/23 1
-barterer/1 1
-Barth
-Barthes
-Bartholdi/3
-Bartholomew
-Bartlett
-Bartok
-Barton
-bar 1
-Baruch
-barycenter 1
-barycentric
-baryon/1 1
-Baryshnikov
-basal/8 1
-basalt/1 1
-basaltic
-base/107 1
-baseball/1 1
-baseboard/1 1
-Basel/2 1
-baseless 1
-baseline/1 1
-baseman/2 112
-basemen 113
-basement/1 1
-bases 114
-bash/22 1
-bashful/16 1
-bashing/2 1
-Basho/3
-Basic
-basic/1 1
-BASIC/1 1
-basic/39 1
-Basie
-Basil
-basil/2 1
-basilica/1 1
-basilica's 115
-basilica 116
-basilisk/1 1
-basin/1 1
-basinful/1 1
-basis/2 117
-bask/11 1
-basket/1 1
-basketball/1 1
-basketful 1
-basketry/2 1
-basketwork/2 1
-Basque/1 1
-basque/10 1
-Basra
-Bass/3
-bass/4 1
-basset/18 1
-Basseterre/2 1
-bassinet/1 1
-bassist/1 1
-basso/1 1
-bassoon/1 1
-bassoonist/1 1
-bass 1
-basswood/1 1
-bast/108 1
-bastard/1 1
-bastardization/1 1
-bastardize/6 1
-bastard 1
-bastardy/2 1
-baste/43 1
-baster/1 1
-Bastille/3
-basting 1
-bastion/1 1
-Basutoland/2 1
-bat/109 1
-Bataan/2 1
-batch/22 1
-bate/43 1
-Bates 118
-bath/23 1
-bathe/28 1
-bather/1 1
-bathetic
-bathhouse/1 1
-bathing/2 1
-bathmat/1 1
-bathos/2 1
-bathrobe/1 1
-bathroom/1 1
-Bathsheba
-bathtub/1 1
-bathwater 1
-bathyscaph/1 1
-bathyscaphe/1 1
-bathysphere/1 1
-batik/18 1
-Batista
-batiste/2 1
-Batman/3
-batman/2 119
-batmen 120
-baton/1 1
-batsman/2 121
-batsmen 122
-battalion/1 1
-batten/23 1
-battening 1
-batter/23 1
-batterer/1 1
-batterings
-battery/15 1
-batting/2 1
-Battle/3
-battle/28 1
-battleax/4 1
-battleaxe/1 1
-battledore/18 1
-battledress
-battlefield/1 1
-battlefront/1 1
-battleground/1 1
-battlement/1 1
-battler/1 1
-battleship/1 1
-battling 1
-Batu/3
-batty/34 1
-bauble/1 1
-baud/1 1
-Baudelaire/2 1
-Baudouin/3
-Bauer
-Bauhaus/2 1
-baulk/23 1
-Baum
-bauxite/2 1
-Bavaria/2 1
-Bavarian 1
-bawd/1 1
-bawdy/50 1
-bawl/23 1
-bawling 1
-Baxter/3
-bay/23 1
-Bayamon
-bayberry/15 1
-Bayer/2 1
-Bayes
-Bayesian
-Bayeux/3
-Baylor/3
-bayonet/23 1
-Bayonne/2 1
-bayou/1 1
-Bayreuth
-bay 1
-Baywatch/3
-bazaar/1 1
-bazillion
-bazillions
-bazooka/1 1
-BB/2 1
-BBB
-BBC
-bbl 1
-BBQ
-BBS/89 1
-BC/2 1
-bdrm
-Be/2 1
-be/110 123
-Beach/3
-beach/22 1
-beachcomber/1 1
-beachfront 1
-beachhead/1 1
-beachwear/2 1
-beacon/18 1
-bead/23 1
-beading/2 1
-Beadle
-beadle/1 1
-beady/34 1
-beagle/18 1
-beak/62 1
-beaker/1 1
-beam/23 1
-beaming 1
-Bean/3
-bean/23 1
-beanbag/1 1
-beanfeast/10 1
-beanie/1 1
-beanpole/1 1
-beansprout
-beansprouts
-beanstalk/1 1
-bear/86 124
-bearable/19 1
-Beard/3
-beard/23 1
-beardless 1
-Beardmore/3
-Beardsley
-bearer/1 1
-bearing/1 1
-bearish/16 1
-bearlike 1
-Bearnaise/3
-bearskin/1 1
-Beasley/3
-beast/1 1
-beastly/111 1
-beat/112 1
-beatable 1
-beater/1 1
-beatific/39 1
-beatification/1 1
-beatify/31 1
-beating/1 1
-beatitude/1 1
-Beatlemania/3
-Beatles/3
-beatnik/1 1
-Beatrice/2 1
-Beatrix/3
-Beatriz/3
-Beau/3
-beau/18 1
-Beaufort
-Beaujolais/2 1
-Beaumarchais
-Beaumont
-Beauregard/3
-beaut/1 1
-beauteous/8 1
-beautician/1 1
-beautification/2 1
-beautifier/1 1
-beautiful/75 1
-beautify/31 1
-beaut 1
-beauty/15 1
-Beauvoir
-beaver/23 1
-bebop/18 1
-becalm/11 1
-became 125
-because
-Bechtel/3
-Beck/3
-beck/18 1
-Becker/3
-Becket/2 1
-Beckett/2 1
-beckon/5 1
-Becky/3
-becloud/11 1
-become/14 126
-becoming/8 1
-Becquerel
-becquerel/10 1
-bed/113 1
-bedaub/11 1
-bedazzle/6 1
-bedazzlement/2 1
-bedbug/1 1
-bedchamber/10 1
-bedclothes/2 1
-bedder 1
-bedding/2 1
-Bede
-bedeck/11 1
-bedevil/11 1
-bedevilment/2 1
-bedfellow/1 1
-bedhead/10 1
-bedim/114 1
-bedizen/11 1
-bedlam/1 1
-bedlinen
-bedmaker/10 1
-Bedouin/1 1
-bedpan/1 1
-bedpost/1 1
-bedraggle/6 1
-bedridden
-bedrock/1 1
-bedroll/1 1
-bedroom/1 1
-bedsheets
-bedside/1 1
-bedsit/10 1
-bedsitter/10 1
-bedsore/1 1
-bedspread/1 1
-bedstead/1 1
-bedtime/1 1
-bee/1 1
-Beebe/3
-beebread/2 1
-beech/4 1
-Beecher
-beechnut/1 1
-beechwood 1
-beef/115 1
-Beefaroni/3
-beefburger/1 1
-beefcake/1 1
-beefeater 1
-beefsteak/1 1
-beefy/49 1
-beehive/1 1
-beekeeper/1 1
-beekeeping/2 1
-beeline/18 1
-Beelzebub/2 1
-beep/23 1
-beeper/1 1
-beer/1 1
-Beerbohm
-beermat
-beermats
-beery/34 1
-beeswax/2 1
-beet/1 1
-Beethoven/2 1
-beetle/28 1
-beetling 1
-Beeton/3
-beetroot/10 1
-befall/116 127
-befell 128
-befit/12 1
-befitting/8 1
-befog/117 1
-beforehand
-before 1
-befoul/11 1
-befriend/11 1
-befuddle/6 1
-befuddlement/2 1
-beg/118 1
-began 129
-beget/88 130
-begetter/10 1
-beggar/23 1
-beggarly 1
-beggary/2 1
-begging 1
-Begin
-begin/119 131
-beginner/1 1
-beginning/1 1
-begone 1
-begonia/1 1
-begot 132
-begotten 132
-begrime/6 1
-begrudge/6 1
-begrudging/8 1
-beguile/6 1
-beguilement/2 1
-beguiler/1 1
-beguilingly
-beguine/1 1
-begum/18 1
-begun 129
-behalf/120 1
-Behan
-behave/6 1
-behavior/1 1
-behavioral/8 1
-behaviorism/2 1
-behaviorist/1 1
-behead/11 1
-beheading 1
-beheld 133
-behemoth/1 1
-behest/1 1
-behind/1 1
-behindhand
-behind 1
-behold/121 134
-beholden
-beholder/1 1
-behoove/6 1
-Behring
-Beiderbecke
-beige/2 1
-Beijing/2 1
-being/1 1
-Beirut/2 1
-bejewel/11 1
-Bekesy/3
-Bela/3
-belabor/11 1
-Belarus/2 1
-belated/83 1
-Belau/3
-belay/5 1
-belch/22 1
-beleaguer/11 1
-Belem/3
-Belfast/2 1
-belfry/15 1
-Belg
-Belgian/1 1
-Belgium/2 1
-Belgrade/2 1
-belie/122 135
-belief/123 1
-believability 1
-believable/19 1
-believe/6 1
-believer/1 1
-Belinda/3
-belittle/6 1
-belittlement/2 1
-Belize/2 1
-bell/1 1
-Bell/2 1
-bell/11 1
-Bella/3
-belladonna/2 1
-Bellamy/3
-Bellatrix/3
-bellboy/1 1
-belle/28 1
-Belleek 1
-belletrist/1 1
-belletristic
-bellhop/1 1
-bellicose 1
-bellicosity/2 1
-belligerence/2 1
-belligerency/2 1
-belligerent/30 1
-belling 1
-Bellini
-bellman/2 136
-bellmen 137
-Bellow
-bellow/23 1
-bellwether/1 1
-Belmont/3
-Belmopan
-belong/11 1
-belonging/1 1
-Belorussia/2 1
-Belorussian/1 1
-beloved/1 1
-below 1
-Belshazzar/2 1
-belt/23 1
-Beltane 1
-belting 1
-beltway/1 1
-beluga/1 1
-Belushi/3
-belying 138
-belly/31 1
-bellyache/28 1
-bellybutton/1 1
-bellyful/1 1
-bellying 1
-belly's
-bemire/6 1
-bemoan/11 1
-bemoaning 1
-bemuse/6 1
-bemused/8 1
-bemusement/2 1
-Ben/3
-Benacerraf/3
-Benares
-bench/22 1
-Benchley/3
-benchmark/86 1
-benchmarking 1
-bend/124 1
-bendable 1
-bended 1
-Bender/3
-bender/1 1
-bending 1
-Bendix/3
-bendy/34 1
-beneath 1
-Benedict/2 1
-Benedictine/1 1
-benedictine 1
-benediction/1 1
-benedictory
-benefaction/1 1
-benefactor/1 1
-benefactress/4 1
-benefice/18 1
-beneficence/2 1
-beneficent/8 1
-beneficial/8 1
-beneficiary/15 1
-benefit/23 1
-Benelux/2 1
-Benet
-Benetton/3
-benevolence/1 1
-benevolent/8 1
-Bengal/1 1
-Bengali/2 1
-Benghazi/2 1
-benightedly
-benighted 1
-benign/8 1
-benignant 1
-benignity/2 1
-Benin/2 1
-Beninese/2 1
-Benin 1
-Benita/3
-Benito/3
-Benjamin
-Bennett
-Bennie/3
-Benson/3
-bent/1 1
-Bentham
-Bentley
-Benton
-bentwood/2 1
-benumb/11 1
-benumbed 1
-Benz
-Benzedrine/2 1
-benzene/2 1
-benzine/2 1
-Benny/3
-Beowulf
-bequeath/11 1
-bequest/1 1
-berate/6 1
-Berber/1 1
-bereave/6 139
-bereavement/1 1
-bereft 140
-Berenice/3
-beret/1 1
-Beretta/3
-Berg
-berg/1 1
-Bergen/2 1
-Berger/3
-Bergerac
-Bergman
-Bergson
-Beria
-beriberi/2 1
-Bering
-berk/10 1
-Berkeley/2 1
-berkelium/2 1
-Berkshire/1 1
-Berle/3
-Berlin/1 1
-Berliner/1 1
-Berlioz
-Berlitz/3
-berm/1 1
-Bermuda/1 1
-Bermudan/1 1
-Bermudian/1 1
-Bern/2 1
-Bernadette
-Bernadine/3
-Bernanke/3
-Bernard
-Bernardo/3
-Bernays/3
-Bernbach/3
-Berne/2 1
-Bernese
-Bernhardt
-Bernice/3
-Bernie/3
-Bernini
-Bernoulli
-Bernstein
-Berra/3
-Berry
-berry/56 1
-berrying 1
-berrylike 1
-berserk 1
-Bert/3
-Berta/3
-Bertelsmann/3
-berth/23 1
-Bertha/3
-Bertie/3
-Bertillon/3
-Bertram/3
-Bertrand/3
-Beryl/3
-beryl/1 1
-beryllium/2 1
-Berzelius
-beseech/125 141
-beseecher/1 1
-beseeching/8 1
-beseem/11 1
-beseeming 1
-beset/88 1
-beside/10 1
-besiege/6 1
-besieger/1 1
-besieging 1
-besmear/11 1
-besmirch/7 1
-besom/18 1
-besot/12 1
-besotted 1
-besought 142
-bespangle/6 1
-bespatter/11 1
-bespeak/121 143
-bespectacled
-bespoken 144
-bespoke 144
-Bess
-Bessel
-Bessemer/3
-Bessie
-Best/3
-best/23 1
-bestial/8 1
-bestiality/2 1
-bestiary/15 1
-bestir/13 1
-bestow/11 1
-bestowal/1 1
-bestrew/126 1
-bestride/127 145
-bestrode 146
-bestseller/1 1
-bestselling
-best 147
-bet/128 1
-beta/1 1
-betake/76 148
-beta's 149
-beta 150
-betcha
-betel/2 1
-Betelgeuse/2 1
-Beth/3
-Bethany
-Bethe
-Bethesda
-bethink/121 151
-Bethlehem
-bethought 152
-Bethune
-betide/6 1
-betimes
-betoken/11 1
-betook 153
-betray/11 1
-betrayal/1 1
-betrayer/1 1
-betroth/11 1
-betrothal/1 1
-betrothed/2 1
-Betsy/3
-Bette/3
-better/23 1
-bettering 1
-betterment/2 1
-better 147
-Bettie/3
-betting 1
-bettor/1 1
-between 1
-betwixt 1
-Betty/3
-Bettye/3
-Beulah
-bevel/23 1
-bevelings
-bevel 1
-beverage/1 1
-Beverley/3
-Beverly/3
-bevvy/60 1
-bevy/15 1
-bewail/11 1
-bewailing 1
-beware/6 1
-bewhiskered
-bewigged
-bewilder/11 1
-bewildered 1
-bewildering/8 1
-bewilderment/2 1
-bewitch/7 1
-bewitching/8 1
-bewitchment/2 1
-bey/1 1
-Beyer
-beyond 1
-bezel/1 1
-bf
-bhaji 1
-Bhopal
-Bhutan/2 1
-Bhutanese/2 1
-Bhutto/3
-bi/129 1
-Bi/2 1
-BIA
-Bialystok
-Bianca/3
-biannual/8 1
-bias/22 1
-biased 1
-biasing 1
-bias 1
-biathlon/1 1
-Bib
-bib/18 1
-bible/1 1
-Bible/1 1
-biblical 1
-Biblical 1
-biblicists
-bibliographer/1 1
-bibliographic
-bibliographical/8 1
-bibliography/15 1
-bibliophile/1 1
-bibulous 1
-Bic/3
-bicameral
-bicameralism/2 1
-bicarb/1 1
-bicarbonate/1 1
-bicentenary/15 1
-bicentennial/1 1
-bicep/130 1
-biceps/2 1
-bicker/23 1
-bickerer/1 1
-biconcave
-biconvex
-bicuspid/1 1
-bicycle/28 1
-bicycler/1 1
-bicyclist/1 1
-bid/131 154
-biddable 1
-bidder/1 1
-bidding/2 1
-Biddle
-biddy/15 1
-bide/14 155
-Biden/3
-bidet/1 1
-bidirectional
-bidirectionally
-biennial/30 1
-biennium/1 1
-bier/1 1
-Bierce
-bier 156
-biff/5 1
-bifocal/32 1
-bifurcate/6 1
-bifurcation/1 1
-big/132 1
-bigamist/1 1
-bigamous 1
-bigamy/2 1
-Bigfoot/2 1
-biggie/1 1
-biggish 1
-Biggles/3
-bighead/1 1
-bighearted/33 1
-bighorn/1 1
-bight/18 1
-bigmouth/1 1
-bigot/1 1
-bigoted 1
-bigotry/15 1
-big 1
-bigwig/1 1
-bijou/100 1
-bike/28 1
-biker/1 1
-bikini/1 1
-Biko/3
-bilabial/1 1
-bilateral/8 1
-Bilbao
-bilberry/60 1
-Bilbo/3
-bile/2 1
-bilge/18 1
-bilharzia 1
-biliary 1
-bilingual/30 1
-bilingualism/2 1
-bilious/33 1
-bilk/5 1
-bilker/1 1
-Bill/3
-bill/23 1
-billable 1
-billboard/18 1
-billet/23 1
-billfold/1 1
-billhook/10 1
-billiard/32 1
-Billie/3
-billies
-billing/1 1
-Billings/2 1
-billingsgate/2 1
-billion/1 1
-billionaire/1 1
-billionaires 1
-billionth/1 1
-billion 1
-billow/23 1
-billowy/34 1
-billposters
-billy/3
-Billy/3
-billycan/10 1
-bimbo/1 1
-bimetallic/1 1
-bimetallism/2 1
-Bimini/3
-bimodal
-bimonthlies
-bimonthly's
-bimonthly 1
-bin/133 1
-binary/15 1
-bind/86 157
-binder/1 1
-bindery/15 1
-binding/1 1
-bindweed/2 1
-binge/28 1
-bingo/2 1
-binman 158
-binmen 159
-binnacle/1 1
-binocular/1 1
-binodal
-binomial/1 1
-bio/1 1
-biochemical/30 1
-biochemist/1 1
-biochemistry/2 1
-biodegradability/2 1
-biodegradable
-biodegrade/6 1
-biodiversity/2 1
-bioengineering 1
-bioethics
-bioethics's
-biofeedback/2 1
-biographer/1 1
-biographic
-biographical/8 1
-biography/15 1
-biog 1
-Bioko/2 1
-biol
-biological/8 1
-biologic 1
-biologist/1 1
-biology/2 1
-biomass/2 1
-biomedical
-biometric/10 1
-biometry 1
-biomorph 1
-bionic/32 1
-bionically
-bionic 1
-biophysical 1
-biophysicist/1 1
-biophysics/2 1
-biopic/1 1
-biopsy/56 1
-biorhythm/1 1
-BIOS
-biosphere/1 1
-biota 1
-biotechnological 1
-biotechnologist 1
-biotechnology/2 1
-biotic 1
-biotin/2 1
-bipartisan
-bipartisanship/2 1
-bipartite 1
-biped/1 1
-bipedal
-bipedalism 1
-biped 1
-biplane/1 1
-bipolar
-bipolarity/2 1
-biracial
-birch/22 1
-Bird
-bird/23 1
-birdbath/1 1
-birdbrain/1 1
-birdbrained
-birdcage/10 1
-birder/1 1
-birdhouse/1 1
-birdie/63 1
-birding 1
-birdlike
-birdlime/2 1
-birdseed/2 1
-Birdseye/3
-birdsong 1
-birdtables
-birdwatcher/1 1
-birdwatching 1
-birdying
-birefringence 1
-birefringent
-biretta/1 1
-Birkenstock
-Birmingham/2 1
-Biro/2 1
-birth/23 1
-birthday/1 1
-birthing 1
-birthmark/1 1
-birthplace/1 1
-birthrate/1 1
-birthright/1 1
-birthstone/1 1
-Biscay
-Biscayne/3
-biscuit/1 1
-bisect/11 1
-bisection/1 1
-bisector/1 1
-bisexual/30 1
-bisexuality/2 1
-Bishkek
-Bishop/3
-bishop/18 1
-bishopric/1 1
-Bismarck/2 1
-Bismark/3
-bismuth/2 1
-bison/2 1
-bisque/2 1
-Bisquick/3
-Bissau/2 1
-bi's 160
-bistable
-bi 161
-bistro/1 1
-bis 1
-bit/18 1
-bitch/22 1
-bitchily 1
-bitchy/49 1
-bite/134 1
-biter/1 1
-biting/8 1
-bitmap/10 1
-BITNET/10 1
-bitter/135 1
-bittern/1 1
-bittersweet/1 1
-bittiness
-bitumen/2 1
-bituminous
-bitty/34 1
-bivalent 1
-bivalve/1 1
-bivouac/64 1
-biweeklies
-biweekly's
-biweekly 1
-biyearly 1
-biz/2 1
-bizarre/83 1
-Bizet
-Bjerknes/3
-Bjork/3
-bk
-Bk/2 1
-bl
-blab/136 1
-blabber/5 1
-blabbermouth/1 1
-blabbing 1
-black/38 1
-Black/1 1
-black/11 1
-blackamoor/1 1
-blackball/23 1
-Blackbeard/2 1
-blackberry/137 1
-blackbird/18 1
-blackboard/1 1
-Blackburn/2 1
-blackcurrant/10 1
-blacken/11 1
-blackening 1
-Blackfeet 162
-Blackfoot/2 163
-blackguard/18 1
-blackhead/1 1
-blacking/2 1
-blackish 1
-blackjack/23 1
-blackleg/70 1
-blacklist/23 1
-blacklisting 1
-blackmail/23 1
-blackmailer/1 1
-blackout/1 1
-Blackpool/2 1
-Blackshirt/2 1
-blackshirts
-blacksmith/1 1
-blacksnake/1 1
-Blackstone
-blackthorn/1 1
-blacktop/47 1
-Blackwell
-bladder/1 1
-blade/77 1
-blag/117 1
-blagging 1
-blah/138 1
-Blaine/3
-Blair/3
-Blake
-blamable 1
-blame/139 1
-blameable 1
-blameless/16 1
-blamer 1
-blameworthy/140 1
-blammo
-blammoed
-blammoing
-blammos
-Blanca/3
-blanch/7 1
-Blanchard/3
-Blanche/3
-blancmange/1 1
-bland/21 1
-blandish/7 1
-blandishment/1 1
-blank/52 1
-Blankenship/3
-blanket/23 1
-blanketing 1
-blanket 1
-Blantyre/3
-blare/28 1
-blarney/23 1
-blase 1
-blaspheme/6 1
-blasphemer/1 1
-blasphemous/8 1
-blasphemy/15 1
-blast/23 1
-blaster/1 1
-blasting 1
-blastoff/1 1
-blat/58 1
-blatancy/15 1
-blatant/8 1
-blather/23 1
-Blatz/3
-Blavatsky
-blaze/28 1
-blazer/1 1
-blazing 1
-blazon/23 1
-blazoning 1
-bldg
-bleach/22 1
-bleacher/1 1
-bleaching 1
-bleak/21 1
-blear 1
-bleary/50 1
-bleat/23 1
-bleating 1
-bled 164
-bleed/141 165
-bleeder/1 1
-bleeding/2 1
-bleep/23 1
-bleeper/1 1
-blemish/22 1
-blench/7 1
-blend/23 1
-blender/1 1
-blending 1
-Blenheim/2 1
-bless/7 1
-blessed/21 1
-blessing/1 1
-bletch
-blether/5 1
-blethering 1
-Blevins/3
-blew 166
-Bligh/2 1
-blight/23 1
-blighter/10 1
-blighting 1
-blimey 1
-blimp/1 1
-blimpish 1
-blind/52 1
-blinder/1 1
-blindfold/23 1
-blindfolded 1
-blindfold 1
-blinding/8 1
-blindside/6 1
-blini/1 1
-blink/23 1
-blinker/23 1
-blinking 1
-blinks 1
-blintz/4 1
-blintze/1 1
-blip/18 1
-bliss/2 1
-blissful/16 1
-bliss 1
-blister/23 1
-blistering/8 1
-blistery 1
-blithe/27 1
-blither/142 1
-blithesome 1
-blitz/22 1
-blitzkrieg/18 1
-blivet/10 1
-blizzard/1 1
-bloat/5 1
-bloated 1
-bloater/10 1
-bloating 1
-bloatware
-bloatwares
-blob/136 1
-bloc/64 1
-Bloch
-block/23 1
-blockade/28 1
-blockader/1 1
-blockage/1 1
-Blockbuster/3
-blockbuster/1 1
-blockbusting/2 1
-blocker/1 1
-blockhead/1 1
-blockhouse/1 1
-blocking 1
-Bloemfontein/2 1
-blog/3
-blogged
-blogger/3
-bloggers
-blogging
-blogs
-bloke/1 1
-blokish
-blond/106 1
-blonde/41 1
-Blondel/3
-Blondie/3
-blondish 1
-blood/23 1
-bloodbath/1 1
-bloodcurdling
-bloodhound/1 1
-blooding 1
-bloodless/16 1
-bloodletting/2 1
-bloodline/1 1
-bloodmobile/1 1
-bloodshed/2 1
-bloodshot 1
-bloodsport/10 1
-bloodstain/1 1
-bloodstained
-bloodstock/2 1
-bloodstone 1
-bloodstream/1 1
-bloodsucker/1 1
-bloodsucking 1
-bloodthirsty/50 1
-bloodworm 1
-bloody/143 1
-bloodymindedness
-Bloom/3
-bloom/23 1
-Bloomer
-bloomer/1 1
-Bloomfield
-Bloomingdale/3
-blooming 1
-Bloomsbury
-bloop/23 1
-blooper/1 1
-blossom/23 1
-blossoming 1
-blossomy 1
-blot/109 1
-blotch/22 1
-blotching 1
-blotchy/34 1
-blotter/1 1
-blotting 1
-blotto 1
-blouse/28 1
-blow/144 167
-blower/1 1
-blowflies
-blowfly/3
-blowgun/1 1
-blowhard/1 1
-blowhole/10 1
-blowlamp/10 1
-blowout/1 1
-blowpipe/1 1
-blows 1
-blowsy/34 1
-blowtorch/40 1
-blowup/1 1
-blowy/34 1
-blowzy/34 1
-BLT/1 1
-blub/145 1
-blubber/23 1
-blubbery 1
-Blucher/3
-bludgeon/23 1
-blue/146 1
-Bluebeard/2 1
-bluebell/1 1
-blueberry/15 1
-bluebird/1 1
-bluebonnet/1 1
-bluebottle/1 1
-bluefish/4 1
-bluegill/1 1
-bluegrass/2 1
-blueing's
-blueish 1
-bluejacket/1 1
-bluejay/1 1
-bluejeans/2 1
-bluenose/1 1
-bluepoint/1 1
-blueprint/23 1
-bluestocking/1 1
-bluesy/34 1
-bluet/1 1
-bluff/52 1
-bluffer/1 1
-bluing/2 1
-bluish 1
-blunder/23 1
-blunderbuss/4 1
-blunderer/1 1
-blundering/10 1
-blunt/98 1
-blur/103 1
-blurb/18 1
-blurred 1
-blurry/49 1
-blurt/11 1
-blurting 1
-blush/147 1
-blusher/1 1
-blushing/8 1
-bluster/23 1
-blusterer/1 1
-blustering 1
-blusterous 1
-blustery 1
-blvd
-Blvd
-Blythe/3
-BM/2 1
-BMW/3
-BO
-boa/1 1
-Boadicea
-boar/1 1
-board/23 1
-boarder/1 1
-boardgames
-boarding/1 1
-boardinghouse/1 1
-boardroom/1 1
-boardwalk/1 1
-Boas/3
-boa's 168
-boast/23 1
-boa 169
-boaster/1 1
-boastful/16 1
-boasting 1
-boat/23 1
-boatclubs
-boater/1 1
-boathouse/1 1
-boating/2 1
-boatload/10 1
-boatman/2 170
-boatmen 171
-boatswain/1 1
-boatyard/10 1
-Bob/3
-bob/136 1
-Bobbi/3
-Bobbie/3
-bobbin/1 1
-Bobbitt/3
-bobble/28 1
-Bobby/3
-bobby/15 1
-bobbysoxer/1 1
-bobcat/1 1
-bobolink/1 1
-bobsled/113 1
-bobsledder/1 1
-bobsledding 1
-bobsleigh/18 1
-bobtail/18 1
-bobwhite/1 1
-Boccaccio
-bocce/2 1
-bocci/2 1
-boccie/2 1
-bock/2 1
-bod/18 1
-bodacious
-bode/6 1
-bodega/1 1
-bode 172
-bodge/6 1
-Bodhidharma/3
-Bodhisattva/2 1
-bodice/1 1
-bodiless 1
-bodily 1
-boding 1
-bodkin/1 1
-body/148 1
-bodybuilder/1 1
-bodybuilding/2 1
-bodyguard/1 1
-bodysuit/1 1
-body 1
-bodywork/2 1
-Boeing/3
-Boeotia/2 1
-Boeotian 1
-Boer/1 1
-Boethius
-boffin/10 1
-boffo 1
-bog/92 1
-boga
-Bogart/2 1
-bogey/23 1
-bogeyman/2 173
-bogeymen 174
-boggle/6 1
-bogglingly
-bogie/18 1
-bogometer
-bogometers
-bogon
-bogosities
-bogosity
-Bogota/2 1
-bogotified
-bogotifies
-bogotify
-bogotifying
-bogus 1
-bogy/15 1
-boggy/34 1
-bogyman/2 175
-bogymen 176
-bohemian/1 1
-Bohemian/1 1
-bohemianism/2 1
-Bohemia 1
-Bohr
-boil/23 1
-boiler/1 1
-boilermaker/1 1
-boilerplate/2 1
-boiling/10 1
-boink/11 1
-Boise/2 1
-boisterous/16 1
-Bojangles/3
-bola/1 1
-bolas 1
-bold/21 1
-boldface/149 1
-bold 1
-bole/1 1
-bolero/1 1
-Boleyn/2 1
-Bolivar/2 1
-bolivar/71 1
-Bolivia/2 1
-Bolivian/1 1
-boll/18 1
-bollard/10 1
-bollix/22 1
-bollocking
-bollockings
-bollocks 1
-bologna/2 1
-Bologna/2 1
-boloney/2 1
-Bolshevik/1 1
-bolshevik/2 1
-Bolshevism 1
-Bolshevist 1
-bolshie 1
-Bolshoi/3
-bolshy 1
-bolster/23 1
-bolstering 1
-bolt/23 1
-bolthole/10 1
-bolting 1
-Bolton
-bolt 1
-Boltzmann
-bolus/4 1
-Bollywood/3
-bomb/23 1
-bombard/5 1
-bombardier/1 1
-bombardment/1 1
-bombast/2 1
-bombastic/39 1
-Bombay/2 1
-bomber/1 1
-bombing/10 1
-bombproof 1
-bombshell/1 1
-bombsite/10 1
-bonanza/1 1
-Bonaparte
-Bonaventure
-bonbon/1 1
-bonce/10 1
-Bond/3
-bond/23 1
-bondage/2 1
-bondholder/1 1
-bonding/2 1
-bondman/2 177
-bondmen 178
-bondsman/2 179
-bondsmen 180
-bond 1
-bondwoman/2 181
-bondwomen 182
-bone/139 1
-bonehead/1 1
-boneheaded 1
-boneless 1
-bonemeal 1
-boner/1 1
-boneshaker/10 1
-boney 183
-bonfire/1 1
-bong/23 1
-bongo/1 1
-Bonhoeffer/3
-bonhomie/2 1
-bonier 184
-boniest 184
-Boniface
-boning 1
-Bonita/3
-bonito/1 1
-bonk/11 1
-bonkers 1
-Bonn/2 1
-Bonner/3
-bonnet/18 1
-Bonneville/3
-Bonnie/3
-bonnie/150 1
-Bono/3
-bonsai/1 1
-bonus/4 1
-bony/49 1
-bonny/34 1
-boo/23 1
-boob/23 1
-booboo/1 1
-booby/15 1
-boodle/18 1
-booger/10 1
-boogeyman/2 185
-boogeymen 186
-boogie/63 1
-boogieman/3
-boohoo/23 1
-book/23 1
-bookable 1
-bookbinder/1 1
-bookbindery/15 1
-bookbinding/2 1
-bookcase/1 1
-bookend/18 1
-Booker/3
-bookie/1 1
-booking/1 1
-bookish 1
-bookkeeper/1 1
-bookkeeping/2 1
-booklet/1 1
-bookmaker/1 1
-bookmaking/2 1
-bookmark/23 1
-bookmobile/1 1
-bookplate/1 1
-bookseller/1 1
-bookshelf/120 1
-bookshop/1 1
-bookstall/10 1
-bookstore/1 1
-book 1
-bookwork 1
-bookworm/1 1
-Boole/2 1
-Boolean 1
-Boole 1
-boom/23 1
-boombox/4 1
-boomer/10 1
-boomerang/23 1
-booming 1
-boon/1 187
-boondocks
-boondocks's
-boondoggle/28 1
-boondoggler/1 1
-Boone/2 1
-boonies/2 1
-boon 1
-boor/1 1
-boorish/151 1
-boost/23 1
-booster/1 1
-boot/23 1
-bootblack/1 1
-bootee/1 1
-Bootes/2 1
-Booth
-booth/1 1
-bootlace/10 1
-bootleg/152 1
-bootlegger/1 1
-bootlegging/2 1
-bootless 1
-bootprints
-bootstrap/47 1
-boots 1
-booty/15 1
-booze/28 1
-boozer/1 1
-boozier 188
-booziest 188
-boozy/34 1
-bop/47 1
-borax/2 1
-Bordeaux/2 1
-bordello/1 1
-Borden/3
-border/23 1
-borderland/1 1
-borderline/1 1
-border 1
-Bordon/3
-bore/28 1
-Boreas/2 1
-boredom/2 1
-borehole/10 1
-borer/1 1
-bore 189
-Borg/1 1
-Borges
-Borgia
-Borglum
-boring/8 1
-Boris
-Bork/3
-Borlaug/3
-Born
-Borneo/2 1
-borne 189
-born 189
-Borobudur/3
-Borodin
-boron/2 1
-borough/1 1
-borrow/11 1
-borrowable
-borrower/1 1
-borrowing/1 1
-borsch/2 1
-borscht/2 1
-borstal/10 1
-Boru/3
-borzoi/1 1
-Bosch
-Bose
-bosh/2 1
-Bosnia/2 1
-Bosnian 1
-bosom/18 1
-bosomy/34 1
-boson/10 1
-Bosporus/2 1
-boss/147 1
-bossily 1
-bossism/2 1
-bossy/49 1
-Boston/1 1
-Bostonian 1
-bosun/1 1
-Boswell 1
-bot/10 1
-botanical/8 1
-botanic 1
-botanist/1 1
-botany/2 1
-botch/22 1
-botched 1
-botcher/1 1
-botching 1
-both/44 1
-bother/23 1
-botheration 1
-bothersome
-both 1
-bothy 1
-Botswana/2 1
-Botticelli
-bottle/28 1
-bottleneck/18 1
-bottler/1 1
-bottling 1
-bottom/23 1
-bottomless 1
-bottommost
-bottom 1
-botulism/2 1
-Boudicca
-boudoir/1 1
-bouffant/1 1
-bougainvillaea/10 1
-bougainvillea/1 1
-bough/1 1
-bought 190
-bouillabaisse/1 1
-bouillon/1 1
-Boulder
-boulder/18 1
-boules
-boulevard/1 1
-Boulez/3
-bounce/28 1
-bouncer/1 1
-bouncily 1
-bouncing 1
-bouncy/49 1
-bound/23 1
-boundary/15 1
-bounded/153 1
-bounden 1
-bounder/1 1
-bounding 1
-boundless/16 1
-bound 191
-bounteous/16 1
-bountiful/16 1
-bounty/15 1
-bouquet/1 1
-Bourbaki/3
-bourbon/1 1
-Bourbon/1 1
-bourgeois/2 1
-bourgeoisie/2 1
-Bournemouth
-boustrophedon/10 1
-bout/1 1
-boutique/1 1
-boutonniere/1 1
-bouzouki/1 1
-Bovary/3
-bovine/1 1
-bovver
-bow/78 1
-Bowditch/3
-bowdlerization/1 1
-bowdlerize/6 1
-bowed 1
-bowel/18 1
-Bowell/3
-Bowen/3
-bower/18 1
-Bowers
-Bowery/2 1
-bowie
-Bowie
-bowing 1
-bowl/23 1
-bowlder/1 1
-bowleg/1 1
-bowlegged 1
-bowleg 1
-bowler/1 1
-bowlful/1 1
-bowline/1 1
-bowling/2 1
-Bowman/3
-bowman/2 192
-bowmen 193
-bowsprit/1 1
-bowstring/18 1
-bows 1
-bowwow/18 1
-box/22 1
-boxcar/1 1
-boxen
-boxer/1 1
-boxful 1
-boxing/2 1
-boxlike 1
-boxroom/10 1
-boxtops
-boxwood/2 1
-boxy/34 1
-boy/1 1
-boycott/23 1
-Boyd
-Boyer/3
-boyfriend/1 1
-boyhood/1 1
-boyish/16 1
-Boyle
-boyscout
-boysenberry/15 1
-bozo/1 1
-BP
-BPOE
-bps 1
-BR
-Br/2 1
-bra/154 1
-brace/28 1
-bracelet/1 1
-bracer/1 1
-bracero/1 1
-bracing/8 1
-bracken/2 1
-bracket/23 1
-brackish/33 1
-bract/1 1
-Brad/3
-brad/18 1
-bradawl/10 1
-Bradbury 1
-Braddock/3
-Bradford
-Bradley
-Bradly/3
-Bradshaw/3
-Bradstreet/3
-Brady
-brae/1 1
-brag/152 1
-Bragg/2 1
-braggadocio/1 1
-braggart/1 1
-bragger/1 1
-bragging 1
-Brahe
-Brahma/1 1
-Brahmagupta/3
-Brahman/1 1
-Brahmanee
-Brahmani
-Brahmanism/1 1
-Brahmaputra/2 1
-Brahmin/1 1
-Brahms/2 1
-braid/23 1
-braiding/2 1
-Braille/1 1
-braille/2 1
-Braille/58 1
-braille 1
-Brain/3
-brain/23 1
-braincell
-braincells
-brainchild/155 1
-brainless/83 1
-brainpower 1
-brainstorm/23 1
-brainstorming/2 1
-brainteaser/1 1
-brainteasing
-brainwash/7 1
-brainwashing/2 1
-brainwave/10 1
-brainy/49 1
-braise/6 1
-brake/28 1
-brakeman/2 194
-brakemen 195
-bramble/18 1
-brambly/34 1
-Brampton/3
-Bran/3
-bran/2 1
-Branch/3
-branch/22 1
-branching 1
-branchlike 1
-brand/23 1
-Brandeis
-Branden/3
-Brandenburg
-brander/18 1
-Brandi/3
-Brandie/3
-brandish/156 1
-Brando
-Brandon/3
-Brandt
-Brandy/3
-brandy/56 1
-Brant/3
-bran 1
-Braque
-bras/157 1
-brash/21 1
-Brasilia/2 1
-brass/40 1
-brasserie/1 1
-brassiere/1 1
-brassier 1
-brass 1
-brassy/50 1
-brat/1 1
-Bratislava
-Brattain/3
-bratwurst/1 1
-bratty/34 1
-bravado/2 1
-brave/107 1
-braver 1
-bravery/2 1
-bravo/18 1
-bravura/1 1
-brawl/23 1
-brawler/1 1
-brawling 1
-brawn/2 1
-brawny/49 1
-Bray/3
-bray/23 1
-braze/6 1
-brazen/158 1
-brazer/1 1
-brazier/1 1
-Brazil/2 1
-Brazilian/1 1
-Brazos/2 1
-Brazzaville/2 1
-breach/22 1
-bread/23 1
-breadbasket/1 1
-breadboard/18 1
-breadbox/4 1
-breadcrumb/1 1
-breadfruit/1 1
-breadline/1 1
-breadth/1 1
-breadwinner/1 1
-break/86 196
-breakable/1 1
-breakage/1 1
-breakaway/1 1
-breakdown/1 1
-breaker/1 1
-breakeven/2 1
-breakfast/23 1
-breakfront/1 1
-breaking 1
-breakneck 1
-breakout/1 1
-breakpoints
-Breakspear/3
-breakthrough/1 1
-breakup/1 1
-breakwater/1 1
-bream/18 1
-breast/23 1
-breastbone/1 1
-breastfed 197
-breastfeed/121 198
-breastplate/1 1
-breaststroke/1 1
-breastwork/1 1
-breath/23 1
-breathable 1
-breathalyser/10 1
-breathalyze/6 1
-breathalyzer/10 1
-Breathalyzer 1
-breathe/6 1
-breather/1 1
-breathing/1 1
-breathless/16 1
-breathtaking
-breathtakingly
-breathy/34 1
-breccias
-brecciated
-Brecht
-Breckenridge/3
-bred 199
-breech/40 1
-breed/86 200
-breeder/1 1
-breeding/2 1
-breeze/28 1
-breezeway/1 1
-breezy/50 1
-Bremen
-Brenda/3
-Brendan/3
-Brennan/3
-Brenner/3
-Brent/3
-Brenton/3
-Brest
-Bret/3
-brethren 201
-Breton/2 1
-Brett/3
-Breughel
-breve/1 1
-brevet/109 1
-breviary/15 1
-brevity/2 1
-brew/23 1
-Brewer/3
-brewer/1 1
-brewery/15 1
-brewing 1
-brewpub/1 1
-Brewster
-Brezhnev
-Brian/3
-Briana/3
-Brianna/3
-briar/1 1
-bribe/28 1
-briber/1 1
-bribery/2 1
-Brice/3
-brick/23 1
-brickbat/1 1
-brickie/10 1
-bricking 1
-bricklayer/1 1
-bricklaying/2 1
-brick 1
-brickwork/2 1
-brickyard/10 1
-bridal/1 1
-Bridalveil/3
-bride/1 1
-bridegroom/1 1
-bridesmaid/1 1
-bridge/28 1
-bridgeable 1
-bridgehead/1 1
-Bridgeport/2 1
-Bridger/3
-Bridges
-Bridget/2 1
-Bridgetown
-Bridgett/3
-Bridgette/3
-bridgework/2 1
-bridging 1
-Bridgman
-bridle/28 1
-bridleway/10 1
-Brie/1 1
-brie/2 1
-brief/52 1
-briefcase/1 1
-briefer 1
-briefing/1 1
-brier/1 1
-brig/1 1
-brigade/18 1
-brigadier/1 1
-Brigadoon 1
-brigand/1 1
-brigandage/2 1
-brigantine/1 1
-Briggs
-Brigham/3
-Bright
-bright/159 1
-brighten/11 1
-brightener/1 1
-Brighton/2 1
-Brigid/2 1
-Brigitte/3
-brilliance/2 1
-brilliancy/2 1
-brilliant/30 1
-brilliantine/2 1
-Brillo 1
-brill 1
-brim/160 1
-brimfull 1
-brimful 1
-brimless 1
-brimming 1
-brimstone/2 1
-brindle/2 1
-brindled 1
-brindle 1
-brine/2 1
-bring/121 202
-bringer/1 1
-bringing 1
-brink/1 1
-Brinkley/3
-brinkmanship/2 1
-brinksmanship/2 1
-briny/49 1
-brioche/1 1
-brio 1
-briquet/18 1
-briquette/18 1
-Brisbane/2 1
-brisk/98 1
-brisket/1 1
-bristle/28 1
-bristly/34 1
-Bristol/2 1
-Brit/1 1
-Britain/2 1
-Britannia
-Britannic
-Britannica/3
-britches/2 1
-Briticism/1 1
-British/161 1
-Britisher/1 1
-Britney/3
-Briton/1 1
-Britt/3
-Brittany/15 1
-Britten
-brittle/162 1
-Brittney/3
-Brno
-bro/1 1
-broach/22 1
-broad/38 1
-broadband/2 1
-broadcast/86 1
-broadcaster/1 1
-broadcasting/2 1
-broadcloth/2 1
-broaden/11 1
-broadleaved
-broadloom/2 1
-broadminded
-broadmindedness
-broadsheet/1 1
-broadside/28 1
-broadsword/1 1
-Broadway/1 1
-Brobdingnag/3
-Brobdingnagian 1
-brocade/28 1
-broccoli/2 1
-brochette/1 1
-brochure/1 1
-Brock/3
-brogan/1 1
-brogue/1 1
-broil/23 1
-broiler/1 1
-Brokaw/3
-broken/16 1
-brokenheartedly
-brokenhearted 1
-broken 203
-broker/23 1
-brokerage/1 1
-brokering 1
-broke 203
-broking 1
-brollies
-brolly
-bromide/1 1
-bromidic 1
-bromine/2 1
-bronc/1 1
-bronchial 1
-bronchi 204
-bronchitic 1
-bronchitis/2 1
-broncho/65 1
-bronchus/2 205
-bronco/1 1
-broncobuster/1 1
-Bronson/3
-Bronte
-brontosaur/1 1
-brontosaurus/4 1
-Bronx/2 1
-bronze/28 1
-bronzing 1
-brooch/40 1
-brood/78 1
-brooder/1 1
-broodily
-brooding/2 1
-broodingly 1
-broodmare/1 1
-broody/163 1
-brook/23 1
-Brooke
-brooklet/1 1
-Brooklyn/2 1
-Brooks
-broom/18 1
-broomstick/1 1
-Bros
-bros 1
-broth/1 1
-brothel/1 1
-brother/164 206
-brotherhood/1 1
-brotherly/140 1
-brougham/1 1
-brought 207
-brouhaha/1 1
-brow/1 1
-browbeat/116 1
-Brown
-brown/165 1
-Browne
-brownfield 1
-Brownian/3
-brownie/1 1
-Brownie/10 1
-brownie 1
-Browning
-browning 1
-brownish 1
-brownout/1 1
-Brownshirt 1
-brownstone/1 1
-Brownsville
-brows/7 1
-browse/28 1
-browser/1 1
-browsing 1
-brr
-Brubeck
-Bruce/2 1
-Bruckner
-Bruegel
-Brueghel
-bruin/1 1
-bruise/28 1
-bruiser/1 1
-bruising/2 1
-bruit/5 1
-Brummel/3
-brunch/22 1
-Brunei/2 1
-Bruneian/1 1
-Brunelleschi
-brunet/1 1
-brunette/1 1
-brunet 1
-Brunhilde/3
-Bruno
-Brunswick/2 1
-brunt/2 1
-brush/22 1
-brushing 1
-brushoff/1 1
-brushstroke
-brushstrokes
-brushwood/2 1
-brushwork/2 1
-brushy 1
-brusk/166 1
-brusque/27 1
-Brussels/2 1
-Brut/3
-brutal/8 1
-brutality/15 1
-brutalization/2 1
-brutalize/6 1
-brute/18 1
-brutish/16 1
-Brutus/2 1
-Bryan
-Bryant
-Bryce/3
-Brynner/3
-Bryon/3
-Brzezinski/3
-BS/2 1
-BSA
-BSD/10 1
-BTU
-Btu/2 1
-BTW
-bu
-bub/1 1
-bubble/28 1
-bubblegum/2 1
-bubbling 1
-bubbly/34 1
-bubbly's
-Buber
-bubo/4 1
-bubonic
-buccaneer/23 1
-Buchanan/2 1
-Bucharest/2 1
-Buchenwald
-Buchwald/3
-Buck
-buck/23 1
-buckaroo/1 1
-buckboard/1 1
-bucket/23 1
-bucketful/1 1
-buckeye/1 1
-Buckingham
-bucking 1
-buckle/28 1
-buckler/18 1
-Buckley/3
-buckling 1
-buckminsterfullerene 1
-Buckner/3
-buckram/2 1
-bucksaw/1 1
-buckshot/2 1
-buckskin/1 1
-buckteeth 208
-bucktooth/2 209
-bucktoothed
-bucktooth 1
-buck 1
-buckwheat/2 1
-bucolic/51 1
-Bud/3
-bud/113 1
-Budapest/2 1
-Buddha/1 1
-Buddhism/1 1
-Buddhist/1 1
-budding/10 1
-Buddy/3
-buddy/167 1
-budge/43 1
-budgerigar/1 1
-budget/23 1
-budgetary
-budget 1
-budgie/1 1
-Budweiser/3
-buff/78 1
-Buffalo/2 1
-buffalo/22 1
-buffer/23 1
-buffet/23 1
-buffeting/10 1
-buffoon/1 1
-buffoonery/2 1
-buffoonish 1
-Buffy/3
-Buford/3
-bug/92 1
-bugaboo/1 1
-Bugatti/3
-bugbear/1 1
-bugger/23 1
-buggery 1
-bugging 1
-bugle/28 1
-bugler/1 1
-bugling 1
-Bugzilla/3
-buggy/42 1
-Buick/3
-build/124 1
-builder/1 1
-building/1 1
-buildup/1 1
-Bujumbura/2 1
-Bukhara
-Bukharin
-Bulawayo
-bulb/18 1
-bulbous 1
-Bulfinch
-Bulganin
-Bulgari/3
-Bulgaria/2 1
-Bulgarian/1 1
-Bulgar 1
-bulge/28 1
-bulging 1
-bulgy/34 1
-bulimarexia/2 1
-bulimia/2 1
-bulimic/1 1
-bulk/23 1
-bulkhead/1 1
-bulking 1
-bulk 1
-bulky/49 1
-bull/23 1
-bulldog/92 1
-bulldogging 1
-bulldog 1
-bulldoze/6 1
-bulldozer/1 1
-bullet/18 1
-bulletin/23 1
-bulletproof/11 1
-bullfight/1 1
-bullfighter/1 1
-bullfighting/2 1
-bullfinch/4 1
-bullfrog/1 1
-bullhead/1 1
-bullheaded/16 1
-bullhorn/1 1
-bullion/2 1
-bullish/16 1
-Bullock/3
-bullock/1 1
-bullpen/1 1
-bullring/1 1
-bullshit/168 1
-bullshitter/80 1
-bull 1
-bullwhip/58 1
-Bullwinkle/3
-bulrush/4 1
-Bultmann/3
-bulwark/18 1
-bully/169 1
-bully's
-bum/170 1
-bumbag/10 1
-bumble/43 1
-bumblebee/1 1
-bumbler/1 1
-bumbling 1
-bumf 1
-bummer/1 1
-bump/23 1
-bumper/18 1
-bumph 1
-bumpkin/1 1
-Bumppo/3
-bumptious/16 1
-bumpy/49 1
-bun/1 1
-bunch/22 1
-Bunche
-bunching 1
-bunchy/34 1
-bunco/108 1
-buncombe/2 1
-Bundesbank/2 1
-Bundestag
-bundle/28 1
-bundling 1
-bung/23 1
-bungalow/1 1
-bungee/1 1
-bunghole/1 1
-bungle/28 1
-bungler/1 1
-bungling 1
-bung 1
-Bunin
-bunion/1 1
-bunk/23 1
-Bunker/3
-bunker/18 1
-bunkhouse/1 1
-bunko/2 1
-bunkum/2 1
-Bunsen 1
-bunt/23 1
-bunting/1 1
-Bunuel/3
-Bunyan/2 1
-bunny/15 1
-buoy/23 1
-buoyancy/2 1
-buoyant/8 1
-bur/103 1
-Burbank
-Burberry/2 1
-burble/28 1
-burbling 1
-burbs
-burbs's
-Burch/3
-burden/23 1
-burdensome 1
-burdock/2 1
-bureau/1 1
-bureaucracy/15 1
-bureaucrat/1 1
-bureaucratic/39 1
-bureaucratization/2 1
-bureaucratize/6 1
-burg/1 1
-burgeon/5 1
-Burger/3
-burger/1 1
-Burgess
-burgh/1 1
-burgher/1 1
-burglar/1 1
-burglarize/6 1
-burglarproof 1
-burglary/15 1
-burgle/6 1
-burgling 1
-burgomaster/1 1
-Burgoyne/2 1
-Burgundian 1
-burgundy/15 1
-Burgundy/15 1
-burial/1 1
-burk/58 1
-Burke
-Burks
-Burl/3
-burl/62 1
-burlap/2 1
-burlesque/28 1
-burlier 210
-burliest 210
-Burlington/2 1
-burly/49 1
-Burma/2 1
-Burmese/2 1
-burn/171 1
-burnable/1 1
-burner/1 1
-Burnett
-burning/10 1
-burnish/22 1
-burnisher/1 1
-burnishing 1
-burnoose/1 1
-burnous/4 1
-burnout/1 1
-Burns
-Burnside
-burnt 1
-burp/23 1
-Burr
-burr/23 1
-Burris/3
-burrito/1 1
-burro/1 1
-Burroughs
-burrow/23 1
-burrower/1 1
-Bursa
-bursa/53 1
-bursar/1 1
-bursary/15 1
-bursitis/2 1
-burst/86 1
-burs 1
-Burt/3
-Burton/2 1
-Burundi/2 1
-Burundian/1 1
-bury/31 1
-bus/172 211
-busboy/1 1
-busby/15 1
-Busch/3
-busgirl/1 1
-Bush/2 1
-bush/22 1
-bushel/23 1
-bushfire 1
-Bushido 1
-bushing/1 1
-bushland 1
-bushman/2 212
-bushmaster/1 1
-bushmen 213
-Bushnell/3
-bush 1
-bushwhack/11 1
-bushwhacker/1 1
-bushy/49 1
-businesslike
-businessman/2 214
-businessmen 215
-businesspeople 216
-businessperson/1 217
-businesswoman/2 218
-businesswomen 219
-busing/2 1
-busk/11 1
-busker/10 1
-buskin/1 1
-busking 1
-busload/10 1
-busmen 220
-buss/173 1
-bust/78 1
-bustard/10 1
-buster/1 1
-bustier/10 1
-bustle/28 1
-bustling 1
-busty/34 1
-busy/174 1
-busybody/15 1
-busywork/2 1
-but/175 1
-butane/2 1
-butch/176 1
-butcher/23 1
-butchering 1
-butchery/15 1
-Butler
-butler/18 1
-butt/23 1
-butte/28 1
-butter/23 1
-butterball/1 1
-buttercup/1 1
-butterfat/2 1
-butterfingered
-Butterfingers/3
-butterfingers/2 1
-butterfly/31 1
-butterfly's
-buttermilk/2 1
-butternut/1 1
-butterscotch/2 1
-buttery/42 1
-buttock/18 1
-button/23 1
-buttonhole/28 1
-buttons 1
-buttonwood/1 1
-buttress/22 1
-butty/60 1
-buxom/166 1
-Buxtehude
-buy/86 221
-buyback/1 1
-buyer/1 1
-buyout/1 1
-buzz/22 1
-buzzard/1 1
-buzzer/1 1
-buzzing 1
-buzzword/1 1
-bx
-bxs
-by/4 1
-Byblos/3
-bye/1 1
-byelaw/1 1
-Byelorussia/2 1
-Byers/3
-bye 1
-bygone/1 1
-bylaw/1 1
-byline/18 1
-BYOB
-bypass/22 1
-bypath/1 1
-byplay/2 1
-byproduct/1 1
-Byrd
-byre/10 1
-byroad/1 1
-Byron
-Byronic 1
-bystander/1 1
-byte/1 1
-by 222
-byway/1 1
-byword/1 1
-Byzantine/1 1
-byzantine 1
-Byzantine 1
-Byzantium/2 1
-C/1 1
-c/10 1
-ca
-CA
-Ca/2 1
-cab/136 1
-cabal/18 1
-cabala/2 1
-caballero/1 1
-cabana/1 1
-cabaret/1 1
-cabbage/18 1
-cabbie/1 1
-cabby/15 1
-cabdriver/1 1
-caber/10 1
-Cabernet/2 1
-cabin/18 1
-cabinet/1 1
-cabinetmaker/1 1
-cabinetmaking/2 1
-cabinetry/2 1
-Cabinet 1
-cabinetwork/2 1
-cable/28 1
-cablecast/86 1
-cablegram/1 1
-cabling 1
-cabochon/1 1
-caboodle/2 1
-caboose/1 1
-Cabot
-Cabral
-Cabrera/3
-Cabrini
-cabriolet/1 1
-cabstand/1 1
-cacao/1 1
-cache/28 1
-cachepot/1 1
-cachet/18 1
-cackle/28 1
-cackler/1 1
-cacophonous 1
-cacophony/15 1
-cacti 223
-cactus/2 224
-cad/1 1
-CAD/2 1
-cadaver/1 1
-cadaverous 1
-caddish/16 1
-caddy/56 1
-caddying 225
-cadence/77 1
-cadenza/1 1
-cadet/1 1
-Cadette 1
-cadge/43 1
-cadger/1 1
-Cadillac 1
-Cadiz/2 1
-cadmium/2 1
-cadre/1 1
-caducei 226
-caduceus/2 227
-Caedmon/3
-Caerphilly
-Caesar/1 1
-caesarean/1 1
-Caesarean 1
-caesarian/1 1
-caesura/1 1
-cafe/1 228
-cafeteria/1 1
-cafetiere/10 1
-caff/10 1
-caffeinated
-caffeine/2 1
-caftan/1 1
-Cage
-cage/28 1
-cagey 229
-cagier 230
-cagiest 230
-Cagney/3
-cagoule/10 1
-cagy/50 1
-Cahokia/3
-cahoot/1 1
-CAI
-Caiaphas
-caiman/1 1
-Cain/1 1
-cairn/1 1
-Cairo/2 1
-caisson/1 1
-caitiff/1 1
-Caitlin/3
-Cajan 1
-cajole/6 1
-cajolement/2 1
-cajoler/1 1
-cajolery/2 1
-Cajun/1 1
-cake/28 1
-cakewalk/18 1
-caking 1
-cal
-Cal
-calabash/4 1
-calaboose/1 1
-Calais
-calamari/1 1
-calamine/2 1
-calamitous/8 1
-calamity/15 1
-calcareous 1
-calciferous
-calcification/2 1
-calcify/31 1
-calcimine/28 1
-calcine/6 1
-calcite/2 1
-calcium/2 1
-calculable 1
-calculate/6 1
-calculated/8 1
-calculating/8 1
-calculation/1 1
-calculative
-calculator/1 1
-calculi 231
-calculus/2 232
-Calcutta/2 1
-Calder
-caldera/1 1
-Calderon/3
-caldron/1 1
-Caldwell
-Caleb/3
-Caledonia
-calendar/23 1
-calender/23 1
-calf/120 1
-calfskin/2 1
-Calgary/2 1
-Calhoun
-Cali
-Caliban
-caliber/1 1
-calibrate/6 1
-calibration/1 1
-calibrator/1 1
-calico/4 1
-Calif
-calif/1 1
-California/2 1
-Californian/1 1
-californium/2 1
-Caligula
-caliper/23 1
-caliph/1 1
-caliphate/1 1
-calisthenic/32 1
-calk/23 1
-call/23 1
-calla/1 1
-callable 1
-Callaghan
-Callahan/3
-Callao
-Callas
-callback/1 1
-caller/1 1
-Callie/3
-calligrapher/1 1
-calligraphic
-calligraphist/1 1
-calligraphy/2 1
-calling/1 1
-calliope/1 1
-Calliope/2 1
-callisthenics
-callisthenics's
-Callisto/2 1
-callosity/15 1
-callous/177 1
-callow/178 1
-callus/22 1
-calm/52 1
-calming 1
-Caloocan/3
-caloric 1
-calorie/1 1
-calorific 1
-calorimeter/10 1
-calorimetry 1
-calumet/1 1
-calumniate/6 1
-calumniation/2 1
-calumniator/1 1
-calumnious 1
-calumny/15 1
-Calvary/2 1
-calve/6 1
-Calvert
-Calvin/2 1
-Calvinism/1 1
-Calvinist/1 1
-Calvinistic
-calypso/1 1
-calyx/4 1
-CAM
-cam/18 1
-Camacho/3
-camaraderie/2 1
-camber/23 1
-cambial 1
-cambium/1 1
-Cambodia/2 1
-Cambodian/1 1
-Cambrian/1 1
-cambric/2 1
-Cambridge/2 1
-camcorder/1 1
-Camden/2 1
-Camel/3
-camel/1 1
-camelhair/2 1
-camellia/1 1
-Camelopardalis
-Camelot/1 1
-Camembert/1 1
-cameo/18 1
-camera/57 1
-cameraman/2 233
-cameramen 234
-camerawoman/2 235
-camerawomen 236
-camerawork 1
-Cameron/3
-Cameroon/1 1
-Cameroonian/1 1
-came 237
-camiknickers
-Camilla/3
-Camille/3
-camisole/1 1
-Camoens/3
-camomile/1 1
-camouflage/28 1
-camouflager/1 1
-camp/179 1
-campaign/23 1
-campaigner/1 1
-Campanella/3
-campanile/1 1
-campanological 1
-campanologist/1 1
-campanology/2 1
-Campbell
-camper/1 1
-campfire/1 1
-campground/1 1
-camphor/2 1
-Campinas
-camping/2 1
-Campos
-campsite/1 1
-campus/40 1
-campy/34 1
-Camry/3
-camshaft/1 1
-Camus
-Can
-can/180 238
-Canaan/2 1
-Canaanite/1 1
-Canad
-Canada/2 1
-Canadian/1 1
-Canadianism 1
-canal/18 1
-Canaletto
-canalization/2 1
-canalize/6 1
-canape/1 1
-canard/1 1
-Canaries/2 1
-canary/15 1
-canasta/2 1
-Canaveral
-Canberra/2 1
-cancan/1 1
-cancel/5 1
-canceler/1 1
-cancellation/1 1
-cancer/1 1
-Cancer/1 1
-cancerous 1
-Cancun/2 1
-Candace/3
-candelabra/1 1
-candelabra's 239
-candelabra 240
-candelabrum/2 241
-candelas
-Candice/3
-candid/21 1
-candidacy/15 1
-candidate/18 1
-candida 1
-candidature/1 1
-Candide/3
-candid 1
-candle/28 1
-candlelight/2 1
-candlelit
-candlepower/2 1
-candler/1 1
-candlestick/1 1
-candlewick/1 1
-candor/2 1
-Candy/3
-candy/56 1
-candyfloss 1
-cane/28 1
-canebrake/1 1
-caner/1 1
-canine/1 1
-caning/10 1
-canister/18 1
-canker/23 1
-cankered 1
-cankerous
-cannabis/4 1
-cannelloni/2 1
-cannery/15 1
-Cannes/2 1
-cannibal/1 1
-cannibalism/2 1
-cannibalistic 1
-cannibalization/2 1
-cannibalize/6 1
-canning 1
-Cannon/3
-cannon/23 1
-cannonade/28 1
-cannonball/18 1
-cannot 1
-cannula 1
-canoe/63 1
-canoeing 1
-canoeist/1 1
-canola/2 1
-Canon/3
-canon/1 1
-canonical/8 1
-canonization/1 1
-canonize/6 1
-canoodle/6 1
-Canopus
-canopy/56 1
-can't
-cant/78 1
-cantabile 1
-Cantabrigian/2 1
-cantaloup/1 1
-cantaloupe/1 1
-cantankerous/16 1
-cantata/1 1
-canteen/1 1
-canter/23 1
-Canterbury
-canticle/1 1
-cantilever/23 1
-canting 1
-canto/1 1
-canton/1 1
-Canton/2 1
-canton/58 1
-cantonal
-Cantonese/2 1
-cantonment/1 1
-Cantor/3
-cantor/1 1
-Cantrell/3
-Cantu/3
-Canute
-canvas/181 1
-canvasback/1 1
-canvass/22 1
-canvasser/1 1
-canny/50 1
-canyon/1 1
-canyoning
-CAP
-cap/47 1
-capability/15 1
-Capablanca
-capable/17 1
-capacious/16 1
-capacitance/2 1
-capacitive 1
-capacitor/1 1
-capacity/15 1
-caparison/23 1
-cape/77 1
-Capek/3
-Capella/2 1
-caper/23 1
-capeskin/2 1
-Capet
-Capetian 1
-Capetown/3
-Caph/3
-capillarity/2 1
-capillary/15 1
-Capistrano/3
-capital/30 1
-capitalism/2 1
-capitalist/1 1
-capitalistic/39 1
-capitalization/2 1
-capitalize/6 1
-capitation/1 1
-capitol/1 1
-Capitol/1 1
-Capitoline
-capitulate/6 1
-capitulation/1 1
-caplet/1 1
-capo/1 1
-capon/1 1
-Capone
-Capote
-capping 1
-cappuccino/1 1
-Capra/2 1
-Capri/2 1
-caprice/1 1
-capricious/16 1
-Capricorn/1 1
-capsicum/1 1
-capsize/6 1
-capstan/1 1
-capstone/1 1
-capsular
-capsule/28 1
-capsulize/6 1
-capt
-Capt
-captain/23 1
-captaincy/15 1
-caption/23 1
-captious/16 1
-captivate/6 1
-captivating 1
-captivation/2 1
-captivator/1 1
-captive/1 1
-captivity/15 1
-captor/1 1
-capture/28 1
-Capuchin 1
-Capulet/2 1
-car/91 1
-Caracalla
-Caracas/2 1
-caracul/2 1
-carafe/1 1
-caramel/1 1
-caramelize/6 1
-carapace/1 1
-Cara's 242
-Cara 243
-carat/1 1
-Caravaggio
-caravan/18 1
-caravansary/15 1
-caravanserai's
-caravel/1 1
-caraway/1 1
-carbide/1 1
-carbine/1 1
-carbohydrate/1 1
-carbolic 1
-Carboloy/2 1
-carbon/1 1
-carbonaceous
-carbonate/28 1
-carbonation/2 1
-carbonic
-carboniferous
-Carboniferous/2 1
-carbonize/6 1
-carbon 1
-carbonyl 1
-carborundum/2 1
-Carborundum 1
-carboy/1 1
-carbuncle/1 1
-carbuncular
-carburetor/1 1
-carburetter/1 1
-carburettor/1 1
-carcase/10 1
-carcass/40 1
-carcinogen/1 1
-carcinogenesis 1
-carcinogenic/1 1
-carcinogenicity/2 1
-carcinoma/1 1
-card/23 1
-cardamom/1 1
-cardamon/10 1
-cardboard/2 1
-Cardenas/3
-carder/1 1
-cardholder/10 1
-cardiac 1
-cardie/10 1
-Cardiff/2 1
-cardigan/1 1
-Cardin/3
-cardinal/30 1
-cardinality 1
-carding 1
-cardiogram/1 1
-cardiograph/1 1
-cardioid 1
-cardiologist/1 1
-cardiology/2 1
-cardiopulmonary
-cardiovascular
-Cardozo/3
-cardsharp/1 1
-cardsharper/1 1
-CARE
-care/28 1
-careen/5 1
-career/23 1
-careerism 1
-careerist/1 1
-career 1
-carefree 1
-careful/85 1
-caregiver/1 1
-careless/16 1
-carer/1 1
-cares/79 1
-caress/22 1
-caressing 1
-caret/1 1
-caretaker/1 1
-careworn
-Carey
-carfare/2 1
-cargo/4 1
-carhop/18 1
-Carib/1 1
-Caribbean/1 1
-caribou/1 1
-caricature/28 1
-caricaturisation
-caricaturist/1 1
-caricaturization
-caries/2 1
-carillon/18 1
-Carina
-caring/2 1
-carious 1
-Carissa/3
-carjack/11 1
-carjacker/1 1
-carjacking/1 1
-Carl/3
-Carla/3
-Carlene/3
-Carlin/3
-Carlo/3
-carload/1 1
-Carlos
-Carlsbad
-Carlson/3
-Carlton
-Carly/3
-Carlyle
-Carmela/3
-Carmella/3
-Carmelo/3
-Carmen/3
-Carmichael/3
-Carmine/3
-carmine/18 1
-carnage/2 1
-carnal/8 1
-carnality/2 1
-Carnap
-Carnation/3
-carnation/1 1
-Carnegie/2 1
-carnelian/1 1
-Carney/3
-carney/18 1
-carnival/1 1
-carnivore/1 1
-carnivorous/16 1
-Carnot
-carny/167 1
-carob/1 1
-Carol/3
-carol/23 1
-Carole/3
-caroler/1 1
-Carolina
-Caroline
-Carolingian 1
-Carolinian/2 1
-Carolyn/3
-carom/23 1
-carotene/2 1
-carotid/1 1
-carousal/1 1
-carouse/28 1
-carousel/1 1
-carouser/1 1
-carousing 1
-carp/23 1
-carpal/1 1
-Carpathian/3
-Carpathians
-carpel/1 1
-Carpenter
-carpenter/23 1
-carpentry/2 1
-carper/1 1
-carpet/23 1
-carpetbag/92 1
-carpetbagger/1 1
-carpeting/2 1
-carping 1
-carpi 244
-carpool/23 1
-carport/1 1
-carpus/2 245
-Carr/3
-Carranza/3
-carrel/1 1
-carrell/1 1
-carriage/1 1
-carriageway/10 1
-Carrie/3
-Carrier/3
-carrier/1 1
-Carrillo/3
-carrion/2 1
-Carroll/2 1
-carrot/1 1
-carroty/34 1
-carrousel/1 1
-carry/56 1
-carryall/1 1
-carrycot/10 1
-carryout 1
-carryover/1 1
-carsick/33 1
-Carson
-cars 1
-cart/23 1
-cartage/2 1
-cartel/1 1
-carter/1 1
-Carter/2 1
-Cartesian 1
-Carthage/2 1
-Carthaginian/1 1
-carthorse/1 1
-Cartier
-cartilage/1 1
-cartilaginous
-cartload/1 1
-cartographer/1 1
-cartographic
-cartography/2 1
-carton/18 1
-cartoon/23 1
-cartooning 1
-cartoonist/1 1
-cartridge/1 1
-cartwheel/23 1
-Cartwright
-Caruso
-carve/6 1
-Carver
-carver/1 1
-carvery/60 1
-carving/1 1
-Cary
-caryatid/1 1
-casaba/1 1
-Casablanca/2 1
-Casals
-Casandra/3
-Casanova/1 1
-cascade/28 1
-Cascades/2 1
-cascara/1 1
-Case/3
-case/28 1
-casebook/10 1
-caseharden/11 1
-casein/2 1
-caseload/1 1
-casement/1 1
-casework/2 1
-caseworker/1 1
-Casey/3
-Cash
-cash/22 1
-cashbook/1 1
-cashew/1 1
-cashier/23 1
-cashiering 1
-cashless 1
-cashmere/2 1
-cashpoint/10 1
-cash 1
-casing/1 1
-casino/1 1
-Casio/3
-cask/18 1
-casket/18 1
-Caspar
-Caspian
-Cassandra/1 1
-Cassatt
-cassava/1 1
-casserole/28 1
-cassette/1 1
-cassia/1 1
-Cassie/3
-cassino/2 1
-Cassiopeia/2 1
-Cassius/2 1
-cassock/1 1
-cassowary/15 1
-cast/86 1
-Castaneda/3
-castanet/1 1
-castaway/1 1
-caste/73 1
-castellated
-caster/1 1
-castigate/6 1
-castigation/2 1
-castigator/1 1
-Castile/2 1
-Castillo/3
-casting/1 1
-castle/28 1
-Castlereagh
-castling 1
-castoff/1 1
-castor/1 1
-Castor/2 1
-castrate/43 1
-castration/1 1
-castrato 1
-Castries/2 1
-Castro
-casual/36 1
-casualty/15 1
-casuist/1 1
-casuistic
-casuistry/2 1
-cat/109 1
-cataclysm/1 1
-cataclysmal
-cataclysmic 1
-catacomb/1 1
-catafalque/1 1
-Catalan/1 1
-catalepsy/2 1
-cataleptic/1 1
-Catalina/3
-catalog/23 1
-cataloger/1 1
-Catalonia/2 1
-catalpa/1 1
-catalysis/2 1
-catalyst/1 1
-catalytic/2 1
-catalyze/6 1
-catamaran/1 1
-catapult/23 1
-cataract/1 1
-catarrh/2 1
-catastrophe/1 1
-catastrophic
-catastrophically
-catatonia/2 1
-catatonic/1 1
-Catawba/2 1
-catbird/1 1
-catboat/1 1
-catcall/23 1
-catch/182 246
-catchall/1 1
-catcher/1 1
-catching/10 1
-catchment/1 1
-catchpenny 1
-catchphrase/1 1
-catchup/2 1
-catchword/1 1
-catchy/34 1
-catechism/1 1
-catechist/1 1
-catechize/6 1
-categorical/8 1
-categorization/1 1
-categorize/6 1
-category/15 1
-cater/11 1
-catercorner
-caterer/1 1
-catering/10 1
-caterpillar/1 1
-Caterpillar/2 1
-caterwaul/23 1
-caterwauling 1
-catfish/4 1
-catgut/2 1
-catharses 247
-catharsis/2 248
-cathartic/1 1
-Cathay/2 1
-cathedral/1 1
-Cather
-Catherine/2 1
-catheter/1 1
-catheterize/6 1
-Cathleen/3
-cathode/1 1
-cathodic 1
-Catholic/1 1
-Catholicism/1 1
-catholicity/2 1
-catholic 1
-Cathryn/3
-Cathy/3
-Catiline
-cation/1 1
-cationic
-catkin/1 1
-catlike 1
-catnap/47 1
-catnip/2 1
-Cato
-Catskill/3
-Catskills/2 1
-catsuit/10 1
-Catt
-cattail/1 1
-cattery/60 1
-cattle/2 1
-cattleman/2 249
-cattlemen 250
-Catullus
-CATV
-catwalk/1 1
-catty/50 1
-Caucasian/1 1
-Caucasoid 1
-Caucasus/2 1
-Cauchy
-caucus/22 1
-caudal/8 1
-caught 251
-cauldron/1 1
-cauliflower/1 1
-caulk/23 1
-caulker/1 1
-caulking/2 1
-causal/8 1
-causality/15 1
-causal 1
-causation/2 1
-causative 1
-cause/28 1
-causeless 1
-causer/1 1
-causerie/1 1
-causeway/18 1
-caustic/1 1
-caustically
-causticity/2 1
-caustic 1
-cauterization/2 1
-cauterize/6 1
-caution/23 1
-cautionary
-cautious/16 1
-cavalcade/1 1
-cavalier/164 1
-cavalry/15 1
-cavalryman/2 252
-cavalrymen 253
-cave/28 1
-caveat/18 1
-caveman/2 254
-cavemen 255
-Cavendish
-caver/10 1
-cavern/18 1
-cavernous/8 1
-caves 256
-caviar/2 1
-caviare/2 1
-cavil/23 1
-caviler/1 1
-cavilings
-caviling 1
-caving/2 1
-cavitation 1
-cavity/15 1
-cavort/11 1
-Cavour
-caw/23 1
-cawing 1
-Caxton
-cay/1 1
-Cayenne
-cayenne/2 1
-Cayman/3
-cayman/1 1
-Cayuga/1 1
-cayuse/1 1
-Cayuse 1
-Cb
-CB
-CBC/2 1
-CBS
-cc 1
-CCTV
-CCU
-Cd/2 1
-CD/2 1
-CDC
-CDT
-Ce/2 1
-cease/28 1
-ceasefire/1 1
-ceaseless/16 1
-ceasing 1
-Ceausescu/3
-Cebu/2 1
-Cebuano/2 1
-cecal 1
-ceca 257
-Cecelia/3
-Cecil
-Cecile/3
-Cecilia
-Cecily/3
-cecum/2 258
-cedar/1 1
-cedarwood 1
-cede/6 1
-ceder/1 1
-cedes 259
-cedilla/1 1
-Cedric/3
-ceilidh/10 1
-ceiling/1 1
-celandine/2 1
-celeb/10 1
-Celebes/2 1
-celebrant/1 1
-celebrate/6 1
-celebrated 1
-celebration/1 1
-celebrator/1 1
-celebratory
-celebrity/15 1
-celeriac 1
-celerity/2 1
-celery/2 1
-celesta/1 1
-Celeste/3
-celestial/8 1
-Celia/3
-celibacy/2 1
-celibate/1 1
-Celina/3
-cell/62 1
-cellar/18 1
-Cellini
-cellist/1 1
-cellmate/1 1
-cello/1 1
-cellophane/2 1
-cellphone/1 1
-cellulars
-cellular's
-cellular 1
-cellulite/2 1
-celluloid/2 1
-cellulose/2 1
-Celsius 1
-Celt/1 1
-Celtic/1 1
-cement/23 1
-cementer/1 1
-cementum/2 1
-cemetery/15 1
-cenobite/1 1
-cenobitic
-cenotaph/1 1
-Cenozoic/2 1
-censer/1 1
-censor/23 1
-censorial
-censorious/16 1
-censorship/2 1
-censurable 1
-censure/28 1
-censurer/1 1
-census/22 1
-cent/1 1
-centaur/1 1
-Centaurus/2 1
-centavo/1 1
-centenarian/1 1
-centenary/15 1
-centennial/30 1
-center/23 1
-centerboard/1 1
-centerfold/1 1
-centering 1
-centerpiece/1 1
-center 1
-centigrade
-Centigrade
-centigram/1 1
-centiliter/1 1
-centime/1 1
-centimeter/1 1
-centipede/1 1
-Central
-central/183 1
-centralism 1
-centralist 1
-centrality/2 1
-centralization/2 1
-centralize/6 1
-centralizer/1 1
-centric 1
-centrifugal/8 1
-centrifuge/28 1
-centripetal/8 1
-centrism/2 1
-centrist/1 1
-centroid/10 1
-centurion/1 1
-century/15 1
-CEO/2 1
-cephalic 1
-Cepheid 1
-Cepheus/2 1
-ceramic/130 1
-ceramicist/1 1
-ceramist/1 1
-Cerberus/2 1
-cereal/1 1
-cerebellar
-cerebellum/1 1
-cerebral 1
-cerebra 260
-cerebrate/6 1
-cerebration/2 1
-cerebrum/1 261
-cerement/1 1
-ceremonial/30 1
-ceremonious/16 1
-ceremony/15 1
-Cerenkov
-Ceres/2 1
-Cerf/3
-cerise/2 1
-cerium/2 1
-cermet/2 1
-cert/10 1
-certain/75 1
-certainty/15 1
-certifiable/19 1
-certificate/28 1
-certification/1 1
-certify/31 1
-certitude/1 1
-cerulean/2 1
-Cervantes/2 1
-cervical
-cervix/184 1
-Cesar/3
-Cesarean
-cesarean/1 1
-Cesarian
-cesium/2 1
-cessation/1 1
-cession/1 1
-Cessna/3
-cesspit/10 1
-cesspool/1 1
-cetacean/1 1
-Cetus
-Ceylon/2 1
-Ceylonese
-Cezanne
-CF
-Cf/2 1
-CFC/2 1
-CFO
-cf 1
-cg
-ch
-Ch
-Chablis/2 1
-Chad/2 1
-chad/10 1
-Chadian/1 1
-Chad 1
-Chadwick
-chafe/43 1
-chaff/23 1
-chaffinch/4 1
-chaffing 1
-Chagall
-chagrin/23 1
-chain/23 1
-chainsaw/23 1
-chair/23 1
-chairlift/1 1
-chairman/2 262
-chairmanship/1 1
-chairman 1
-chairmen 263
-chairperson/1 1
-chairwoman/2 264
-chairwomen 265
-chaise/1 1
-Chaitanya/3
-Chaitin/3
-chalcedony/2 1
-Chaldea
-Chaldean 1
-chalet/1 1
-chalice/1 1
-chalk/23 1
-chalkboard/1 1
-chalkiness/3
-chalk 1
-chalky/34 1
-challenge/28 1
-Challenger/3
-challenger/1 1
-challenging/8 1
-challis/2 1
-chamber/62 1
-Chamberlain
-chamberlain/1 1
-chambermaid/1 1
-chamberpot/10 1
-Chambers
-chamber 1
-chambray/2 1
-chameleon/1 1
-chammy/167 1
-chamois/2 1
-chamomile/1 1
-champ/23 1
-champagne/1 1
-champers 1
-champion/23 1
-championship/1 1
-champion 1
-Champlain
-Champollion
-Chan/3
-Chance/3
-chance/28 1
-chancel/1 1
-chancellery/15 1
-chancellor/1 1
-chancellorship/2 1
-Chancellorsville/2 1
-chancery/15 1
-chance 1
-chancier 266
-chanciest 266
-chanciness/3
-chancre/1 1
-chancy/34 1
-chandelier/1 1
-Chandigarh
-Chandler
-chandler/1 1
-Chandon/3
-Chandra/3
-Chandragupta
-Chandrasekhar/3
-Chanel
-Chaney/3
-Chang/2 1
-Changchun
-change/28 1
-changeability/2 1
-changeable/29 1
-changed 1
-changeless/8 1
-changeling/1 1
-changeover/1 1
-changer/1 1
-Changsha
-channel/23 1
-channeling 1
-channelization/2 1
-channelize/6 1
-chanson/1 1
-chant/23 1
-chanter/1 1
-chanteuse/1 1
-chantey/1 1
-chanticleer/1 1
-Chantilly
-chantings
-chantry/60 1
-chanty/15 1
-Chanukah/1 1
-chaos/2 1
-chaotic/39 1
-chap/47 1
-chaparral/1 1
-chapati/10 1
-chapatti/10 1
-chapbook/1 1
-chapeau/1 1
-chapel/18 1
-chaperon/23 1
-chaperonage/2 1
-chaperone/28 1
-chaplain/1 1
-chaplaincy/15 1
-chaplet/1 1
-Chaplin
-Chapman
-Chappaquiddick/3
-chappy/60 1
-chapter/18 1
-Chapultepec/2 1
-char/103 1
-charabanc/1 1
-character/18 1
-characterful
-characteristic/51 1
-characterization/1 1
-characterize/6 1
-characterless 1
-charade/1 1
-Charbray/3
-charbroil/11 1
-charcoal/18 1
-chard/2 1
-chardonnay/1 1
-Chardonnay/2 1
-charge/28 1
-chargeable 1
-charger/1 1
-chariot/18 1
-charioteer/18 1
-charisma/2 1
-charismatic/1 1
-charismatically
-charitable/29 1
-Charity/3
-charity/15 1
-charlady/60 1
-charlatan/1 1
-charlatanism/2 1
-charlatanry/2 1
-Charlemagne/2 1
-Charlene/3
-Charles/2 1
-Charleston/1 1
-Charley 1
-charlie/10 1
-Charlie 1
-Charlotte/2 1
-Charlottetown/2 1
-charm/23 1
-Charmaine/3
-charmed 1
-charmer/1 1
-Charmin/3
-charming/75 1
-charmless 1
-Charolais/2 1
-Charon/2 1
-chart/23 1
-charter/78 1
-charterer/1 1
-Chartism/2 1
-chartists
-Chartres
-chartreuse/2 1
-charwoman/2 267
-charwomen 268
-chary/50 1
-Charybdis/2 1
-Chase
-chase/28 1
-chaser/1 1
-chasing 1
-Chasity/3
-chasm/1 1
-chassis/2 1
-chaste/27 1
-chasten/11 1
-chastise/6 1
-chastisement/1 1
-chastiser/1 1
-chastity/2 1
-chasuble/1 1
-chat/109 1
-chateau/1 1
-Chateaubriand/2 1
-chatelaine/1 1
-chatline/10 1
-Chattahoochee/3
-Chattanooga/2 1
-chattel/1 1
-chatter/23 1
-chatterbox/4 1
-chatterer/1 1
-chattering 1
-Chatterley/3
-Chatterton
-chatty/50 1
-Chaucer/2 1
-chauffeur/23 1
-Chauncey/3
-Chautauqua 1
-chauvinism/2 1
-chauvinist/1 1
-chauvinistic/39 1
-Chavez/3
-Chayefsky/3
-Che/3
-cheap/21 1
-cheapen/11 1
-cheapish
-cheapo 1
-cheapskate/1 1
-cheap 1
-cheat/23 1
-cheater/1 1
-cheating 1
-Chechen 1
-Chechnya/3
-check/78 1
-checkbook/1 1
-checker/185 1
-checkerboard/18 1
-checklist/1 1
-checkmate/28 1
-checkoff/1 1
-checkout/1 1
-checkpoint/1 1
-checkroom/1 1
-checkup/1 1
-cheddar/2 1
-Cheddar 1
-cheek/23 1
-cheekbone/1 1
-cheek 1
-cheeky/50 1
-cheep/23 1
-Cheer/3
-cheer/23 1
-cheerer/1 1
-cheerful/85 1
-cheering 1
-cheerio/1 1
-Cheerios/3
-cheerleader/1 1
-cheerless/16 1
-cheers 1
-cheery/50 1
-cheese/28 1
-cheeseboard/10 1
-cheeseburger/1 1
-cheesecake/1 1
-cheesecloth/2 1
-cheeseparing/2 1
-cheesy/49 1
-cheetah/1 1
-Cheetos/3
-Cheever
-chef/18 1
-Chekhov/2 1
-Chekhovian
-Chelsea
-Chelyabinsk/2 1
-chem
-chemical/30 1
-chemiluminescence 1
-chemiluminescent
-chemise/1 1
-chemist/1 1
-chemistry/2 1
-chemo/2 1
-chemosynthesis 1
-chemotherapeutic 1
-chemotherapy/2 1
-chemurgy/2 1
-Chen/2 1
-Cheney/3
-Chengdu
-chenille/2 1
-Chennai/3
-Cheops
-Cheri/3
-Cherie/3
-cherish/7 1
-Chernenko/3
-Chernobyl/2 1
-Chernomyrdin/3
-Cherokee/1 1
-cheroot/1 1
-Cherry/3
-cherry/15 1
-chert/2 1
-cherub/186 1
-cherubic
-cherubim 1
-chervil/2 1
-Cheryl/3
-Chesapeake
-Cheshire
-chess/2 1
-chessboard/1 1
-chessman/2 269
-chessmen 270
-chest/1 1
-chested 1
-Chester/2 1
-Chesterfield
-chesterfield/1 1
-Chesterton 1
-chestful/1 1
-chestnut/1 1
-chesty/34 1
-Chevalier
-chevalier/1 1
-cheviot/2 1
-Cheviot/2 1
-Chevrolet/2 1
-Chevron/3
-chevron/1 1
-Chevy/3
-chew/23 1
-chewable 1
-chewer/1 1
-chewiness/3
-chewy/34 1
-Cheyenne/1 1
-chg
-chge
-Chi/3
-chi/1 1
-Chianti/1 1
-chiaroscuro/2 1
-Chiba
-Chibcha 1
-chic/187 1
-Chicago/2 1
-Chicagoan 1
-Chicana 1
-chicane/18 1
-chicanery/15 1
-Chicano 1
-chichi/188 1
-chick/1 1
-chickadee/1 1
-Chickasaw/1 1
-chicken/23 1
-chickenfeed/2 1
-chickenhearted
-chickenpox/2 1
-chickenshit/189 1
-chicken 1
-chickpea/1 1
-chickweed/2 1
-chicle/2 1
-Chiclets/3
-chicory/15 1
-chide/6 1
-chidingly 1
-chiding 1
-chief/183 1
-chiefdom/2 1
-chieftain/1 1
-chieftainship/1 1
-chiffon/2 1
-chiffonier/1 1
-chiffon 1
-chigger/1 1
-chignon/1 1
-chihuahua/1 1
-Chihuahua/1 1
-chilblain/1 1
-child/155 1
-childbearing/2 1
-childbirth/1 1
-childcare/2 1
-childhood/1 1
-childish/16 1
-childless/33 1
-childlike 1
-childminder/10 1
-childminding
-childproof/11 1
-child 1
-chile/1 1
-Chile/2 1
-Chilean/1 1
-chiles 271
-chili/4 1
-chill/165 1
-chiller/1 1
-chilli/190 1
-chilling/191 1
-chilly/49 1
-chimaera/1 1
-chimaerical
-Chimborazo/2 1
-chime/28 1
-chimer/1 1
-chimera/1 1
-Chimera/1 1
-chimeric
-chimerical 1
-chimney/18 1
-chimp/1 1
-chimpanzee/1 1
-Chimu/3
-Ch'in
-chin/1 1
-Chin/2 1
-chin/192 1
-china/2 1
-China/2 1
-Chinatown 1
-china 1
-chinaware/2 1
-chinchilla/1 1
-chinchilla's 272
-chinchilla 273
-chine/18 1
-Chinese/2 1
-chink/23 1
-chinless 1
-chino/1 1
-Chinook/1 1
-chinstrap/1 1
-chintz/2 1
-chintzy/34 1
-chinwag/58 1
-chip/47 1
-chipboard 1
-Chipewyan/2 1
-chipmunk/1 1
-chipolata/10 1
-Chippendale/2 1
-chipper/18 1
-Chippewa/1 1
-chippie/10 1
-chipping/10 1
-chippy/60 1
-chips 1
-Chiquita/3
-chiral
-Chirico
-chirography/2 1
-chiropodist/1 1
-chiropody/2 1
-chiropractic/1 1
-chiropractor/1 1
-chirp/23 1
-chirpy/193 1
-chirrup/23 1
-chisel/23 1
-chiseler/1 1
-chiseller/1 1
-Chisholm/3
-Chisinau/2 1
-chit/1 1
-chitchat/109 1
-chitin/2 1
-chitinous
-chitlings/2 1
-chitlins
-chitlins's
-Chittagong
-chitterlings/2 1
-chivalric
-chivalrous/16 1
-chivalry/2 1
-Chivas/3
-chive/18 1
-chivvy/31 1
-chivy/31 1
-chlamydia/57 1
-Chloe
-chloral/2 1
-chlorate 1
-chlordane/2 1
-chloride/1 1
-chlorinate/6 1
-chlorination/2 1
-chlorine/2 1
-chlorofluorocarbon/1 1
-chloroform/23 1
-chlorophyl/2 1
-chlorophyll/2 1
-chloroplast/1 1
-chloroquine 1
-chm
-choc/194 1
-chocaholic/1 1
-chock/23 1
-chockablock
-chock 1
-chocoholic/1 1
-chocolate/1 1
-chocolatey
-chocolaty
-Choctaw/1 1
-choice/41 1
-choir/18 1
-choirboy/1 1
-choirmaster/1 1
-choke/28 1
-chokecherry/15 1
-choker/1 1
-choking 1
-choler/2 1
-cholera/2 1
-choleric 1
-cholesterol/2 1
-choline 1
-chomp/23 1
-chomper/10 1
-Chomsky
-Chongqing
-choose/14 274
-chooser/1 1
-choosey 275
-choosier 276
-choosiest 276
-choosiness/3
-choosy/34 1
-chop/47 1
-chophouse/1 1
-Chopin/2 1
-chopper/23 1
-chopping 1
-choppy/50 1
-Chopra/3
-chopstick/1 1
-choral/30 1
-chorale/1 1
-chord/18 1
-chordal 1
-chordate/1 1
-chore/18 1
-chorea/2 1
-choreograph/11 1
-choreographer/1 1
-choreographic/39 1
-choreography/2 1
-chorister/1 1
-choroid/1 1
-chortle/28 1
-chortler/1 1
-chorus/22 1
-chosen 277
-chose 277
-Chou
-chow/23 1
-chowder/18 1
-chows 1
-Chretien/3
-Chris/3
-chrism/2 1
-Christ/1 1
-Christa/3
-Christchurch
-christen/11 1
-Christendom/1 1
-christening/1 1
-Christensen/3
-Christi/3
-Christian/1 1
-Christianity/15 1
-Christianize 1
-christian 1
-Christian 1
-Christie 1
-Christina
-Christine/3
-Christlike
-Christmas/40 1
-Christmastide/1 1
-Christmastime/1 1
-Christoper/3
-Christopher/2 1
-Christy 1
-chromatic/39 1
-chromaticism 1
-chromatic 1
-chromatin/2 1
-chromatographic
-chromatography 1
-chroma 1
-chrome/28 1
-chroming 1
-chromite 1
-chromium/2 1
-chromosomal 1
-chromosome/1 1
-chronic/39 1
-chronicle/28 1
-chronicler/1 1
-Chronicles
-chronicling 1
-chronic 1
-chronograph/1 1
-chronological/8 1
-chronologist/1 1
-chronology/15 1
-chronometer/1 1
-chronometric
-chrysalis/4 1
-chrysanthemum/1 1
-Chrysler/2 1
-Chrysostom
-Chrystal/3
-chub/1 1
-chubby/49 1
-Chuck/3
-chuck/23 1
-chuckhole/1 1
-chuckle/28 1
-chuckling 1
-chuff/195 1
-chug/92 1
-Chukchi 1
-chukka/1 1
-chum/160 1
-Chumash 1
-chummy/50 1
-chump/18 1
-chunder/11 1
-Chung/3
-Chungking/2 1
-chunk/18 1
-chunky/49 1
-chunter/11 1
-church/40 1
-churchgoer/1 1
-churchgoing/2 1
-Churchill/2 1
-churchman/2 278
-churchmen 279
-Church 1
-churchwarden/1 1
-churchwoman 280
-churchwomen 281
-churchyard/1 1
-churl/1 1
-churlish/16 1
-churn/23 1
-churner/1 1
-churning 1
-Churriguera/3
-chute/18 1
-chutney/1 1
-chutzpa/2 1
-chutzpah/2 1
-Chuvash/2 1
-chyme/2 1
-CIA/2 1
-ciao/10 1
-cicada/1 1
-cicatrice/1 1
-cicatrix/184 1
-Cicero/2 1
-cicerone/196 1
-Cid
-CID
-cider/1 1
-cigar/1 1
-cigaret/1 1
-cigarette/1 1
-cigarillo/1 1
-ciggy/60 1
-cilantro/2 1
-cilia 282
-cilium/2 283
-Cimabue/2 1
-cinch/22 1
-cinchona/1 1
-Cincinnati 284
-cincture/18 1
-cinder/23 1
-Cinderella/1 1
-Cindy/3
-cinema/1 1
-CinemaScope/3
-cinematic 1
-cinematographer/1 1
-cinematographic 1
-cinematography/2 1
-Cinerama
-cine 1
-cinnabar/2 1
-cinnamon/2 1
-cipher/23 1
-ciphering 1
-Cipro/2 1
-cir
-circadian
-circa 1
-Circe/2 1
-circle/28 1
-circlet/1 1
-circling 1
-circuit/23 1
-circuital
-circuitous/16 1
-circuitry/2 1
-circuity/2 1
-circulant
-circular/30 1
-circularity/2 1
-circularize/6 1
-circulate/6 1
-circulation/1 1
-circulatory
-circumcise/6 1
-circumcision/1 1
-circumference/1 1
-circumferential 1
-circumflex/40 1
-circumlocution/1 1
-circumlocutory
-circumnavigate/6 1
-circumnavigation/1 1
-circumnavigational
-circumpolar
-circumscribe/6 1
-circumscription/1 1
-circumspect/8 1
-circumspection/2 1
-circumstance/28 1
-circumstantial/8 1
-circumvent/11 1
-circumventable
-circumvention/1 1
-circus/4 1
-cirque/1 1
-cirrhosis/2 1
-cirrhotic/1 1
-cirri 285
-cirrus/2 286
-Cisco/3
-cissy/60 1
-Ci 287
-cistern/1 1
-citadel/1 1
-citation/1 1
-cite/28 1
-cites 1
-Citibank/3
-citified
-Citigroup/3
-citizen/1 1
-citizenry/2 1
-citizenship/2 1
-citrate 1
-citric 1
-Citroen/3
-citron/1 1
-citronella/2 1
-citrous 1
-citrus/4 1
-cit 1
-city/15 1
-cityscape 1
-city 1
-citywide 1
-civet/1 1
-civic/32 1
-civies
-civies's
-civil/8 1
-civilian/1 1
-civility/15 1
-civilization/1 1
-civilize/6 1
-civilized 1
-civvies
-civvies's
-ck
-Cl/2 1
-clack/23 1
-clad/197 1
-cladding/2 1
-clad 288
-Claiborne/3
-claim/23 1
-claimable 1
-claimant/1 1
-claimer/1 1
-Clair/3
-Claire/3
-Clairol/3
-clairvoyance/2 1
-clairvoyant/1 1
-clam/160 1
-clambake/1 1
-clamber/23 1
-clamberer/1 1
-clammy/50 1
-clamor/23 1
-clamorous/8 1
-clamp/23 1
-clampdown/1 1
-clan/1 1
-Clancy/3
-clandestine/8 1
-clang/23 1
-clanger/10 1
-clanging 1
-clangor/2 1
-clangorous/8 1
-clangor 1
-clank/23 1
-clanking 1
-clannish/33 1
-clansman/2 289
-clansmen 290
-clanswoman 291
-clanswomen 292
-clap/47 1
-clapboard/23 1
-Clapeyron/3
-clapper/18 1
-clapperboard/10 1
-clapping/2 1
-Clapton/3
-claptrap/2 1
-claque/1 1
-Clara/3
-Clare
-Clarence/3
-Clarendon
-claret/18 1
-Clarice/3
-clarification/1 1
-clarify/31 1
-clarinet/1 1
-clarinetist/1 1
-clarinettist/1 1
-clarion/23 1
-Clarissa/3
-clarity/2 1
-Clark
-Clarke/3
-clash/22 1
-clashing 1
-clasp/23 1
-clasping 1
-class/22 1
-classes 293
-classic/1 1
-classical/37 1
-classicism/2 1
-classicist/1 1
-classic 1
-classifiable
-classification/1 1
-classificatory
-classified/1 1
-classifier/1 1
-classify/31 1
-classlessness
-classless 1
-classmate/1 1
-classroom/1 1
-class 1
-classwork/2 1
-classy/49 1
-clatter/23 1
-clattering 1
-Claude/3
-Claudette/3
-Claudia/3
-Claudine/3
-Claudio/3
-Claudius/3
-Claus/3
-clausal 1
-clause/1 1
-Clausewitz
-Clausius
-claustrophobia/2 1
-claustrophobic
-clavichord/1 1
-clavicle/1 1
-clavier/1 1
-claw/23 1
-Clay
-clay/18 1
-clayey 294
-clayier 295
-clayiest 295
-claymore/10 1
-Clayton/3
-clean/198 1
-cleanable 1
-cleaner/1 1
-cleaning/1 1
-cleanly/140 1
-cleans/7 1
-cleanse/6 1
-cleanser/1 1
-cleansing 1
-cleanup/1 1
-clear/52 1
-clearance/1 1
-Clearasil/3
-clearer 1
-clearheaded 1
-clearing/1 1
-clearinghouse/1 1
-clearway/10 1
-cleat/18 1
-cleavage/1 1
-cleave/6 296
-cleaver/1 1
-cleaving 1
-clef/1 1
-cleft/18 297
-Clem/3
-clematis/4 1
-Clemenceau
-clemency/2 1
-Clemens
-Clement/3
-clement/8 1
-Clementine/3
-clementine/10 1
-Clements
-Clemons
-Clemson/3
-clench/22 1
-Cleo/3
-Cleopatra/2 1
-clerestory/15 1
-clergy/15 1
-clergyman/2 298
-clergymen 299
-clergywoman/2 300
-clergywomen 301
-cleric/1 1
-clerical/8 1
-clericalism/2 1
-clerical 1
-clerk/23 1
-clerkship/2 1
-Cleveland/2 1
-clever/21 1
-clevis/4 1
-clew/23 1
-Cliburn/3
-cliche/1 1
-cliched 1
-click/23 1
-clicker/1 1
-clicking 1
-client/1 1
-clientele/1 1
-Cliff/3
-cliff/1 1
-cliffhanger/1 1
-cliffhanging
-Clifford
-clifftop
-clifftops
-Clifton/3
-clii
-climacteric/2 1
-climactic
-climate/1 1
-climatic
-climatically
-climatological 1
-climatologist/1 1
-climatology/2 1
-climax/22 1
-climb/23 1
-climbable 1
-climbdown
-climber/1 1
-climbing/2 1
-clime/1 1
-clinch/22 1
-clincher/1 1
-Cline/3
-cling/86 302
-clinger/1 1
-clingfilm
-clingy/34 1
-clinic/1 1
-clinical/8 1
-clinician/1 1
-clink/23 1
-clinker/18 1
-Clint/3
-Clinton/2 1
-Clio/2 1
-cliometric/32 1
-cliometrician/1 1
-clip/47 1
-clipboard/1 1
-clipper/1 1
-clipping/1 1
-clique/18 1
-cliquey 303
-cliquier 304
-cliquiest 304
-cliquish/16 1
-clitoral
-clitoris/199 1
-Clive
-clix
-cloaca/53 1
-cloak/23 1
-cloaked 1
-cloakroom/1 1
-clobber/23 1
-cloche/1 1
-clock/23 1
-clockmaker 1
-clockwise 1
-clockwork/1 1
-clod/18 1
-cloddish 1
-clodhopper/1 1
-clog/92 1
-cloisonne/2 1
-cloister/23 1
-cloistral 1
-clomp/11 1
-clonal 1
-clone/28 1
-cloning 1
-clonk/23 1
-clop/47 1
-Clorets/3
-Clorox/2 1
-close/107 1
-closeable
-closefisted 1
-closemouthed
-closeout/1 1
-closer/10 1
-closet/23 1
-closeup/1 1
-closing/1 1
-closure/18 1
-clot/109 1
-cloth/23 1
-clothe/6 305
-clotheshorse/1 1
-clothesline/18 1
-clothespin/1 1
-clothier/1 1
-clothing/2 1
-Clotho/2 1
-clotting 1
-cloture/18 1
-cloud/23 1
-cloudburst/1 1
-clouding 1
-cloudless 1
-cloudscape/10 1
-cloudy/49 1
-Clouseau/3
-clout/23 1
-clove/1 1
-cloven 306
-clover/1 1
-cloverleaf/1 1
-clove 306
-Clovis/2 1
-clown/23 1
-clowning 1
-clownish/16 1
-cloy/11 1
-cloying/8 1
-cl 1
-club/136 1
-clubbable 1
-clubber/10 1
-clubbing 1
-clubfeet 307
-clubfoot/2 308
-clubfooted
-clubhouse/1 1
-clubland
-clubroom 1
-cluck/23 1
-clue/28 1
-clueless 1
-clump/23 1
-clumpy/34 1
-clumsy/50 1
-clung 309
-clunk/23 1
-clunker/1 1
-clunky/34 1
-cluster/23 1
-clutch/22 1
-clutter/23 1
-clvi
-clvii
-clxi
-clxii
-clxiv
-clxix
-clxvi
-clxvii
-Clydesdale/2 1
-Clyde 1
-Clytemnestra
-Cm/2 1
-Cmdr
-cm 1
-cnidarian/1 1
-CNN
-CNS/2 1
-co
-CO/2 1
-Co/2 310
-coach/22 1
-coaching 1
-coachload/10 1
-coachman/2 311
-coachmen 312
-coach 1
-coachwork 1
-coadjutor/1 1
-coagulant/1 1
-coagulate/6 1
-coagulation/2 1
-coagulator/1 1
-coal/23 1
-coalesce/6 1
-coalescence/2 1
-coalescent
-coalface/1 1
-coalfield/10 1
-coalition/1 1
-coalitionist/1 1
-coalmine/10 1
-coalminers
-coarse/27 1
-coarsen/11 1
-coast/23 1
-coastal 1
-coaster/1 1
-coastguard/10 1
-coasting 1
-coastline/1 1
-coat/23 1
-coating/1 1
-coatroom/10 1
-coattail/1 1
-coat 1
-coauthor/23 1
-coax/156 1
-coaxer/1 1
-coaxial 1
-coaxing/8 1
-cob/18 1
-Cobain/3
-cobalt/2 1
-Cobb
-cobber/10 1
-cobble/28 1
-cobbler/1 1
-cobblestone/1 1
-cobbling 1
-cobnut/10 1
-COBOL/1 1
-cobra/1 1
-cobweb/200 1
-cobwebby/34 1
-coca/2 1
-cocain/2 1
-cocaine/2 1
-cocci/10 313
-coccus/2 314
-coccyx/201 1
-Cochabamba
-cochineal/2 1
-Cochin 1
-Cochise
-cochlea/57 1
-cochlear 1
-Cochran/3
-cock/23 1
-cockade/1 1
-cockamamie
-cockatoo/1 1
-cockatrice/1 1
-cockchafer/10 1
-cockcrow/1 1
-cockerel/1 1
-cockeyed
-cockfight/1 1
-cockfighting/2 1
-cockle/18 1
-cockleshell/1 1
-cockney/1 1
-Cockney/2 1
-cockney 1
-Cockney 1
-cockpit/1 1
-cockroach/4 1
-cockscomb/1 1
-cockshies
-cocksucker/80 1
-cocksure 1
-cocktail/18 1
-cocky/50 1
-coco/1 1
-cocoa/1 1
-cocoanut/1 1
-cocoa's 315
-cocoa 316
-coconut/1 1
-cocoon/23 317
-cocooning 1
-Cocteau
-Cod
-cod/113 1
-coda/1 1
-coda's 318
-coda 319
-coddle/6 1
-code/28 1
-codebreaker
-codeine/2 1
-codename
-codenamed
-codependency/2 1
-codependent/1 1
-coder/1 1
-codeword/10 1
-codex/2 320
-codfish/4 1
-codger/1 1
-codices 321
-codicil/1 1
-codification/1 1
-codifier/1 1
-codify/31 1
-codling 1
-codpiece/1 1
-codswallop 1
-COD 1
-Cody
-coed/1 1
-coeducation/2 1
-coeducational 1
-coefficient/1 1
-coelenterate/1 1
-coequal/30 1
-coerce/6 1
-coercer/1 1
-coercible
-coercion/1 1
-coercive 1
-coeval/30 1
-coexist/11 1
-coexistence/2 1
-coexistent
-coextensive 1
-coffee/1 1
-coffeecake/1 1
-coffeehouse/18 1
-coffeemaker/1 1
-coffeepot/1 1
-coffer/18 1
-cofferdam/1 1
-Coffey/3
-coffin/23 1
-cog/18 1
-cogency/2 1
-cogent/8 1
-cogitate/6 1
-cogitation/1 1
-cogitative 1
-cogitator/1 1
-cognac/1 1
-Cognac/2 1
-cognate/1 1
-cognition/2 1
-cognitional
-cognitive/8 1
-cognizable 1
-cognizance/2 1
-cognizant
-cognomen/1 1
-cognoscente/202 1
-cogwheel/1 1
-cohabit/11 1
-cohabitant/1 1
-cohabitation/2 1
-Cohan
-coheir/1 1
-Cohen
-cohere/6 1
-coherence/2 1
-coherency/2 1
-coherent/8 1
-cohesion/2 1
-cohesive/16 1
-coho/1 1
-cohort/1 1
-coif/203 1
-coiffure/28 1
-coil/23 1
-Coimbatore
-coin/23 1
-coinage/1 1
-coincide/6 1
-coincidence/1 1
-coincidental/8 1
-coincident 1
-coiner/1 1
-coining 1
-coinsurance/2 1
-cointreau
-Cointreau 1
-coir 1
-coital 1
-coitus/2 1
-coke/1 1
-Coke/1 1
-coke/6 1
-Col
-COL
-col/70 1
-COLA
-cola/1 1
-colander/1 1
-cola's 322
-cola 323
-Colbert/2 1
-Colby 1
-cold/38 1
-coldblooded
-coldish
-Cole
-Coleen/3
-Coleman/3
-Coleridge/2 1
-coleslaw/2 1
-Colette
-coleus/4 1
-coley/10 1
-Colfax/3
-Colgate/3
-colic/2 1
-colicky 1
-Colin/3
-coliseum/1 1
-colitis/2 1
-coll
-collaborate/6 1
-collaboration/1 1
-collaborationist 1
-collaborative/8 1
-collaborator/1 1
-collage/18 1
-collagen 1
-collapse/28 1
-collapsible
-collar/23 1
-collarbone/1 1
-collard/1 1
-collarless 1
-collate/6 1
-collateral/37 1
-collateralize 1
-collation/1 1
-collator/1 1
-colleague/18 1
-collect/23 1
-collectable/1 1
-collected/8 1
-collectible/1 1
-collecting 1
-collection/1 1
-collective/30 1
-collectivism/2 1
-collectivist/1 1
-collectivity 1
-collectivization/2 1
-collectivize/6 1
-collector/1 1
-collect 1
-Colleen/3
-colleen/1 1
-college/1 1
-collegial
-collegiality/2 1
-collegian/1 1
-collegiate 1
-collide/6 1
-collie/18 1
-Collier/3
-collier/1 1
-colliery/15 1
-collimation 1
-collimator 1
-Collin/3
-collinear 1
-Collins 1
-collision/1 1
-collisional
-collocate/6 1
-collocate's
-collocation/1 1
-colloid/1 1
-colloidal
-colloid 1
-colloq
-colloquial/8 1
-colloquialism/1 1
-colloquial 1
-colloquium/1 1
-colloquy/15 1
-collude/6 1
-collusion/2 1
-collusive 1
-Colo
-cologne/1 1
-Cologne/2 1
-Colombia/2 1
-Colombian/1 1
-Colombo/2 1
-Colon/3
-colon/1 324
-colonel/1 1
-colonelcy/2 1
-colones
-Colonial
-colonial/30 1
-colonialism/2 1
-colonialist/1 1
-colonic 1
-colonist/1 1
-colonization/1 1
-colonize/6 1
-colonizer/1 1
-colonnade/1 1
-colonnaded
-colony/15 1
-colophon/1 1
-color/23 1
-Coloradan/1 1
-Colorado/2 1
-Coloradoan 1
-colorant/1 1
-coloration/2 1
-coloratura/1 1
-colorblind
-colorblindness/3
-colored/1 1
-colorfast/33 1
-colorful/16 1
-colorimetric
-coloring/1 1
-colorist/10 1
-colorization/2 1
-colorize/6 1
-colorless/16 1
-color 1
-colorway/10 1
-colossal/8 1
-Colosseum
-colossi 325
-colossus/2 326
-colostomy/15 1
-colostrum/2 1
-colt/1 1
-Colt/2 1
-coltish 1
-Coltrane
-Columbia/2 1
-Columbine
-columbine/1 1
-Columbus/2 1
-column/1 1
-columnar
-columned
-columnist/1 1
-com
-Com
-coma/57 1
-comaker/1 1
-Comanche/1 1
-comatose 1
-comb/23 1
-combat/23 1
-combatant/1 1
-combative/33 1
-comber/1 1
-combination/1 1
-combinatorial
-combine/28 1
-combined 1
-combiner/1 1
-combing/32 1
-combo/1 1
-Combs/3
-combusted
-combustibility/2 1
-combustible/1 1
-combustion/2 1
-combustive
-Comdr
-come/14 327
-comeback/1 1
-comedian/1 1
-comedic 1
-comedienne/1 1
-comedown/1 1
-comedy/15 1
-comely/49 1
-comer/1 1
-come's
-comestible/1 1
-comet/1 1
-cometary
-comeuppance/1 1
-comfit/18 1
-comfort/23 1
-comfortable/29 1
-comforter/1 1
-comforting/8 1
-comfortless 1
-comfy/34 1
-comic/1 1
-comical/8 1
-comicality/2 1
-comic 1
-coming/1 1
-Comintern
-comity/2 1
-comm
-comma/1 1
-command/23 1
-commandant/1 1
-commandeer/11 1
-commander/1 1
-commanding/8 1
-commandment/1 1
-commando/1 1
-comma's 328
-comma 329
-commemorate/6 1
-commemoration/1 1
-commemorative 1
-commemorator/1 1
-commence/6 1
-commencement/1 1
-commend/11 1
-commendable/19 1
-commendation/1 1
-commendatory
-commensurable 1
-commensurate/8 1
-comment/23 1
-commentary/15 1
-commentate/6 1
-commentator/1 1
-commenter 1
-commerce/2 1
-commercial/30 1
-commercialism/2 1
-commercialization/2 1
-commercialize/6 1
-commie/1 1
-commingle/6 1
-commiserate/6 1
-commiseration/1 1
-commiserative 1
-commissar/1 1
-commissariat/1 1
-commissary/15 1
-commission/23 1
-commissionaire/10 1
-commissioner/1 1
-commit/12 1
-commitment/1 1
-committal/1 1
-committee/1 1
-committeeman/2 330
-committeemen 331
-committeewoman/2 332
-committeewomen 333
-commode/1 1
-commodious/8 1
-commodity/15 1
-commodore/1 1
-common/38 334
-commonality/60 1
-commonalty/2 1
-commoner/1 1
-commonplace/1 1
-Commons
-commonsense
-commonsensical 1
-commonweal/2 1
-commonwealth/1 1
-Commonwealth 1
-commotion/1 1
-communal/8 1
-communality 1
-commune/28 1
-communicability/2 1
-communicable/19 1
-communicant/1 1
-communicate/6 1
-communication/1 1
-communicative/153 1
-communicator/1 1
-communing 1
-communion/1 1
-Communion/1 1
-communique/1 1
-communism/2 1
-Communism 1
-communist/1 1
-Communist/1 1
-communistic
-communitarian 1
-community/15 1
-commutable 1
-commutation/1 1
-commutative 1
-commutativity 1
-commutator/1 1
-commute/6 1
-commuter/1 1
-commute's
-Como
-Comoran
-Comoros/2 1
-comp/23 1
-compact/52 1
-compacter 1
-compaction/10 1
-compactor/1 1
-companion/18 1
-companionable/19 1
-companionship/2 1
-companionway/1 1
-company/167 1
-Compaq/3
-comparability/2 1
-comparable/19 1
-comparative/30 1
-comparator/10 1
-compare/28 1
-comparison/1 1
-compartment/18 1
-compartmentalization/2 1
-compartmentalize/6 1
-compartmental 1
-compass/22 1
-compassing 1
-compassion/2 1
-compassionate/8 1
-compassion 1
-compatibility/15 1
-compatible/82 1
-compatriot/1 1
-compeer/18 1
-compel/61 1
-compelling/8 1
-compendious 1
-compendium/1 1
-compensate/6 1
-compensation/1 1
-compensator 1
-compensatory
-compere/43 1
-compete/6 1
-competence/1 1
-competency/15 1
-competent/8 1
-competing 1
-competition/1 1
-competitive/16 1
-competitor/1 1
-compilable
-compilation/1 1
-compile/6 1
-compiler/1 1
-complacence/2 1
-complacency/2 1
-complacent/8 1
-complain/11 1
-complainant/1 1
-complainer/1 1
-complaining/8 1
-complaint/1 1
-complaisance/2 1
-complaisant/8 1
-complected
-complement/23 1
-complementarity 1
-complementary 1
-completable
-complete/104 1
-completed 1
-completer 1
-completion/1 1
-complex/204 1
-complexion/62 1
-complexional 1
-complexity/15 1
-compliance/2 1
-compliant/8 1
-complicate/6 1
-complicated/8 1
-complication/1 1
-complicit
-complicity/2 1
-compliment/23 1
-complimentary 1
-comply/31 1
-compo/10 1
-component/1 1
-comport/11 1
-comportment/2 1
-compos/205 1
-compose/6 1
-composed/8 1
-composer/1 1
-composite/164 1
-composition/1 1
-compositional 1
-compositor/1 1
-compost/23 1
-composure/2 1
-compote/1 1
-compound/23 1
-compoundable
-compounded 1
-compound 1
-comprehend/11 1
-comprehensibility/2 1
-comprehensible/19 1
-comprehension/1 1
-comprehensive/36 1
-compress/22 1
-compressed 1
-compressibility 1
-compressible 1
-compression/1 1
-compressional
-compressive 1
-compressor/1 1
-comprise/6 1
-compromise/28 1
-compromising 1
-Compton
-comptroller/1 1
-compulsion/1 1
-compulsive/16 1
-compulsory/206 1
-compunction/1 1
-CompuServe/3
-computability 1
-computable/19 1
-computation/1 1
-computational/8 1
-compute/43 1
-computer/1 1
-computerate
-computerization/2 1
-computerize/6 1
-computing/2 1
-comrade/1 1
-comradely 1
-comradeship/2 1
-Comte
-con/133 1
-Conakry/2 1
-Conan/3
-concatenate/6 1
-concatenation/1 1
-concave/16 1
-concavity/15 1
-conceal/11 1
-concealable
-concealed 1
-concealer/1 1
-concealment/2 1
-concede/6 1
-conceded 1
-conceit/62 1
-conceited/16 1
-conceivability 1
-conceivable/19 1
-conceive/6 1
-concentrate/28 1
-concentration/1 1
-concentrator/10 1
-concentric
-concentrically
-Concepcion
-concept/1 1
-conception/1 1
-conceptional
-conceptual/8 1
-conceptualization/1 1
-conceptualize/6 1
-concern/23 1
-concerned/8 1
-concerning 1
-concert/23 1
-concerted/8 1
-concertgoer/10 1
-concertina/23 1
-concertize/6 1
-concertmaster/1 1
-concerto/1 1
-concession/1 1
-concessionaire/1 1
-concessional
-concessionary 1
-Concetta/3
-conch/18 1
-conchie/10 1
-concierge/1 1
-conciliar 1
-conciliate/6 1
-conciliating 1
-conciliation/2 1
-conciliator/1 1
-conciliatory 1
-concise/27 1
-concision/2 1
-conclave/1 1
-conclude/6 1
-conclusion/1 1
-conclusive/16 1
-concoct/11 1
-concoction/1 1
-concomitant/30 1
-Concord/1 1
-concord/2 1
-concordance/1 1
-concordant 1
-concordat/1 1
-Concorde
-concourse/1 1
-concrete/207 1
-concretion/1 1
-concubinage/2 1
-concubine/1 1
-concupiscence/2 1
-concupiscent
-concur/13 1
-concurrence/1 1
-concurrency 1
-concurrent/8 1
-concurring 1
-concuss/7 1
-concussion/1 1
-concussive
-condemn/11 1
-condemnable 1
-condemnation/1 1
-condemnatory
-condemner/1 1
-condemning 1
-condensate/1 1
-condensation/1 1
-condense/6 1
-condensed 1
-condenser/1 1
-condescend/11 1
-condescending/8 1
-condescension/2 1
-condign 1
-Condillac
-condiment/1 1
-condition/23 1
-conditional/30 1
-conditionality 1
-conditioner/1 1
-conditioning/2 1
-condo/1 1
-condole/6 1
-condolence/1 1
-condoling 1
-condom/1 1
-condominium/1 1
-condonable
-condone/6 1
-condor/1 1
-Condorcet
-conduce/6 1
-conducive 1
-conduct/23 1
-conductance/2 1
-conductibility/2 1
-conductible
-conduction/2 1
-conductive 1
-conductivity/15 1
-conductor/1 1
-conductress/4 1
-conduit/1 1
-cone/28 1
-Conestoga/2 1
-coney/1 1
-confab/136 1
-confabulate/6 1
-confabulation/1 1
-confection/18 1
-confectioner/1 1
-confectionery/15 1
-confectionist
-confederacy/15 1
-Confederacy/2 1
-confederate/1 1
-Confederate/1 1
-confederate/6 1
-confederation/1 1
-confer/208 1
-conferee/1 1
-conference/73 1
-conferencing 1
-conferment/1 1
-conferrable
-conferral/2 1
-conferrer/1 1
-confess/7 1
-confessed/8 1
-confession/1 1
-confessional/1 1
-confessor/1 1
-confetti
-confetti's
-confidant/1 1
-confidante/1 1
-confide/6 1
-confidence/1 1
-confident/8 1
-confidential/8 1
-confidentiality/2 1
-confident 1
-confider/1 1
-confiding/8 1
-configurable
-configuration/1 1
-configure/6 1
-confine/28 1
-confined 1
-confinement/1 1
-confirm/11 1
-confirmation/1 1
-confirmatory
-confirmed 1
-confirming 1
-confiscate/6 1
-confiscation/1 1
-confiscator/1 1
-confiscatory
-conflagration/1 1
-conflate/6 1
-conflation/1 1
-conflict/23 1
-conflicting/8 1
-conflictual
-confluence/1 1
-confluent 1
-confocal
-conform/11 1
-conformable 1
-conformal
-conformance/2 1
-conformation/1 1
-conformational
-conformer/1 1
-conforming 1
-conformism/2 1
-conformist/1 1
-conformity/2 1
-confound/11 1
-confounded/8 1
-confounding 1
-confraternity/15 1
-confrere/1 1
-confront/11 1
-confrontation/1 1
-confrontational
-Confucian/1 1
-Confucianism/1 1
-Confucius/2 1
-confusable 1
-confuse/6 1
-confused/8 1
-confuser/10 1
-confusing/8 1
-confusion/1 1
-confutation/2 1
-confute/6 1
-Cong
-conga/23 1
-congeal/11 1
-congealed 1
-congealment/2 1
-congenial/8 1
-congeniality/2 1
-congenital/8 1
-conger/1 1
-congeries/2 1
-congest/11 1
-congestion/2 1
-congestive
-conglomerate/28 1
-conglomeration/1 1
-Congo/2 1
-Congolese/2 1
-congrats/2 1
-congratulate/6 1
-congratulation/1 1
-congratulatory
-congregant/1 1
-congregate/6 1
-congregation/1 1
-Congregational
-congregationalism/2 1
-congregationalist/1 1
-Congregationalist/1 1
-congregational 1
-congress/40 1
-Congress/4 1
-Congressional
-congressional 1
-congressman/2 335
-congressmen 336
-congresspeople 337
-congressperson/1 338
-congresswoman/2 339
-congresswomen 340
-Congreve
-congruence/1 1
-congruency 1
-congruent/8 1
-congruential
-congruity/15 1
-congruous 1
-conic/1 1
-conical/8 1
-conic 1
-conifer/1 1
-coniferous
-conj
-conjectural 1
-conjecture/28 1
-conjoin/11 1
-conjoined 1
-conjoiner/1 1
-conjoint/8 1
-conjugacy
-conjugal/8 1
-conjugate/43 1
-conjugating 1
-conjugation/1 1
-conjunct/1 1
-conjunction/1 1
-conjunctiva/1 1
-conjunctive/1 1
-conjunctivitis/2 1
-conjunct 1
-conjuncture/1 1
-conjuration/1 1
-conjure/6 1
-conjurer/1 1
-conjuring 1
-conjuror/1 1
-conk/23 1
-conker/10 1
-Conley/3
-conman/2 1
-Conn
-connect/11 1
-connectable
-connected/153 1
-connecter/1 1
-connectible
-Connecticut/2 1
-connection/1 1
-connectionless
-connective/1 1
-connectivity/2 1
-connector/1 1
-Connemara 1
-Conner/3
-Connery/3
-Connie/3
-conning 1
-conniption/1 1
-connivance/2 1
-connive/6 1
-conniver/1 1
-conniving 1
-connoisseur/1 1
-connoisseurship 1
-Connolly/3
-Connors
-connotation/1 1
-connotative 1
-connote/6 1
-connubial 1
-conquer/11 1
-conquerable 1
-conquering 1
-conqueror/1 1
-conquest/1 1
-conquistador/1 1
-Conrad
-Conrail/3
-cons/7 1
-consanguineous 1
-consanguinity/2 1
-conscience/1 1
-conscienceless 1
-conscientious/16 1
-conscionable 1
-conscious/151 1
-conscript/23 1
-conscription/2 1
-consecrate/6 1
-consecrated 1
-consecration/1 1
-consecutive/8 1
-consensual/8 1
-consensus/4 1
-consent/23 1
-consequence/1 1
-consequent/8 1
-consequential/8 1
-consequent 1
-conservancy/15 1
-conservation/1 1
-conservationism/2 1
-conservationist/1 1
-conservatism/2 1
-conservative/209 1
-Conservative 1
-conservatoire/10 1
-conservator/1 1
-conservatory/15 1
-conserve/28 1
-consider/11 1
-considerable/19 1
-considerate/16 1
-consideration/1 1
-considering 1
-consign/11 1
-consignee/1 1
-consignment/1 1
-consignor/1 1
-consist/11 1
-consistence/1 1
-consistency/15 1
-consistent/8 1
-consistory/15 1
-consolable
-consolation/1 1
-consolatory
-console/28 1
-consolidate/6 1
-consolidation/1 1
-consolidator/1 1
-consoling/8 1
-consomme/2 1
-consonance/1 1
-consonant/30 1
-consonantal 1
-consort/23 1
-consortia 341
-consortium/2 342
-conspectus/4 1
-conspicuous/16 1
-conspiracy/15 1
-conspirator/1 1
-conspiratorial/8 1
-conspire/6 1
-Constable
-constable/1 1
-constabulary/15 1
-Constance
-constancy/2 1
-constant/30 1
-Constantine
-Constantinople/2 1
-constellation/1 1
-consternating
-consternation/2 1
-constipate/6 1
-constipation/2 1
-constituency/15 1
-constituent/1 1
-constitute/6 1
-Constitution
-constitution/1 1
-constitutional/30 1
-constitutionalism 1
-constitutionalists
-constitutionality/2 1
-constitutive 1
-constrain/11 1
-constrained 1
-constraining 1
-constraint/1 1
-constrict/11 1
-constriction/1 1
-constrictive
-constrictor/1 1
-construable 1
-construct/23 1
-constructable
-construction/1 1
-constructional 1
-constructionist/1 1
-constructive/16 1
-constructivism 1
-constructivist 1
-constructor/1 1
-construe/43 1
-consubstantiation/2 1
-Consuelo/3
-consul/1 1
-consular 1
-consulate/1 1
-consulship/2 1
-consult/11 1
-consultancy/15 1
-consultant/1 1
-consultation/1 1
-consultative 1
-consumable/1 1
-consume/6 1
-consumed 1
-consumer/1 1
-consumerism/2 1
-consumerist/1 1
-consuming 1
-consummate/68 1
-consummation/1 1
-consumption/1 1
-consumptive/1 1
-cont
-contact/23 1
-contactable
-contagion/1 1
-contagious/16 1
-contain/11 1
-containable
-contained 1
-container/1 1
-containerization/2 1
-containerize/6 1
-containment/2 1
-contaminant/1 1
-contaminate/6 1
-contamination/2 1
-contaminator/1 1
-contd
-contemn/11 1
-contemplate/6 1
-contemplation/1 1
-contemplative/30 1
-contemporaneity/2 1
-contemporaneous/8 1
-contemporary/15 1
-contempt/2 1
-contemptible/19 1
-contemptuous/16 1
-contend/11 1
-contender/1 1
-contending 1
-content/210 1
-contented/16 1
-contention/1 1
-contentious/16 1
-contentment/2 1
-conterminous/8 1
-contest/23 1
-contestable 1
-contestant/1 1
-context/1 1
-contextual/8 1
-contextualization 1
-contextualize/6 1
-contiguity/2 1
-contiguous/8 1
-continence/2 1
-continent/1 1
-Continent/2 1
-continental/1 1
-Continental 1
-continent 1
-contingency/15 1
-contingent/30 1
-continuable
-continual/8 1
-continuance/1 1
-continua 343
-continuation/1 1
-continue/6 1
-continued 1
-continuing 1
-continuity/15 1
-continuous/8 1
-continuum/2 344
-contort/11 1
-contorted 1
-contortion/1 1
-contortionist/1 1
-contour/23 1
-contra/10 1
-contraband/2 1
-contraception/2 1
-contraceptive/1 1
-contract/23 1
-contracted 1
-contractible 1
-contractile
-contraction/1 1
-contractor/1 1
-contractual/8 1
-contradict/11 1
-contradiction/1 1
-contradictory/211 1
-contradistinction/1 1
-contraflow/10 1
-contrail/1 1
-contraindicate/6 1
-contraindication/1 1
-contralto/1 1
-contraption/1 1
-contrapuntal/8 1
-contrariety/2 1
-contrariwise
-contrary/212 1
-contrast/23 1
-contrasting/8 1
-contrastive 1
-contrasty 1
-contravene/6 1
-contravention/1 1
-Contreras/3
-contretemps/2 1
-contribute/6 1
-contribution/1 1
-contributor/1 1
-contributory 1
-contrite/16 1
-contrition/2 1
-contrivance/1 1
-contrive/6 1
-contriver/1 1
-control/213 1
-controllable 1
-controller/1 1
-controlling 1
-controversial/8 1
-controversy/15 1
-controvert/11 1
-controvertible 1
-con 1
-contumacious/8 1
-contumacy/2 1
-contumelies
-contumelious 1
-contumely/3
-contuse/6 1
-contusion/1 1
-conundrum/1 1
-conurbation/1 1
-convalesce/6 1
-convalescence/1 1
-convalescent/1 1
-convect/11 1
-convection/2 1
-convectional
-convective 1
-convector/10 1
-convene/6 1
-convener/1 1
-convenience/1 1
-convenient/8 1
-convenor/10 1
-convent/18 1
-conventicle/1 1
-convention/1 1
-conventional/8 1
-conventionalism 1
-conventionalist 1
-conventionality/2 1
-conventionalize/6 1
-conventioneer/10 1
-converge/6 1
-convergence/1 1
-convergent 1
-conversant 1
-conversation/1 1
-conversational/8 1
-conversationalist/1 1
-conversazione 1
-converse/54 1
-conversion/1 1
-convert/23 1
-converter/1 1
-convertibility/2 1
-convertible/1 1
-convertor/1 1
-convex/8 1
-convexity/2 1
-convex 1
-convey/11 1
-conveyable
-conveyance/1 1
-conveyancing 1
-conveyer/1 1
-conveyor/1 1
-convict/23 1
-conviction/1 1
-convict 1
-convince/6 1
-convinced 1
-convincing/8 1
-convivial/8 1
-conviviality/2 1
-convocation/1 1
-convoke/6 1
-convoluted 1
-convolution/1 1
-convolve/214 1
-convoy/23 1
-convulse/6 1
-convulsion/1 1
-convulsive/8 1
-Conway
-cony/15 1
-coo/23 1
-cooing 1
-Cook
-cook/23 1
-cookbook/1 1
-Cooke/3
-cooker/1 1
-cookery/15 1
-cookhouse/10 1
-cookie/1 1
-cooking/2 1
-cookout/1 1
-cookware/1 1
-cooky/15 1
-cool/52 1
-coolant/1 1
-cooler/1 1
-Cooley/3
-Coolidge/2 1
-coolie/1 1
-cooling 1
-coon/80 1
-coonskin/1 1
-coop/23 1
-Cooper
-cooper/23 1
-cooperage/2 1
-cooperate/6 1
-cooperation/2 1
-cooperative/36 1
-cooperator/1 1
-coopering 1
-Cooperstown/3
-coordinate/54 1
-coordination/2 1
-coordinator/1 1
-Coors/3
-coot/1 1
-cootie/1 1
-cop/47 1
-Copacabana/3
-copacetic
-copay/2 1
-cope/28 1
-Copeland/3
-Copenhagen/2 1
-Copernican 1
-Copernicus/2 1
-copier/1 1
-copilot/1 1
-coping/1 1
-copious/16 1
-coplanar
-Copland
-Copley
-copper/18 1
-Copperfield/3
-copperhead/1 1
-copperplate/2 1
-Coppertone/3
-coppery 1
-coppice/28 1
-Coppola/3
-copra/2 1
-coprocessor/10 1
-coprolite 1
-coprophagous
-cops/205 1
-copse/18 1
-copter/1 1
-Coptic/2 1
-copula/1 1
-copulate/6 1
-copulation/1 1
-copulative/1 1
-copulatory
-copy/56 1
-copyable
-copybook/1 1
-copycat/109 1
-copyist/1 1
-copyleft/10 1
-copyright/23 1
-copyrightable
-copyright 1
-copywriter/1 1
-coquetry/15 1
-coquette/28 1
-coquettish/8 1
-Cora/2 1
-coracle/1 1
-coral/1 1
-coralline 1
-coral 1
-corbel/18 1
-cord/23 1
-cordage/2 1
-Cordelia/3
-cordial/30 1
-cordiality/2 1
-cordillera/1 1
-Cordilleras
-cording 1
-cordite/2 1
-cordless 1
-Cordoba/2 1
-cordon/23 1
-cordovan/2 1
-corduroy/138 1
-core/28 1
-coreligionist/10 1
-corer/1 1
-corespondent/1 1
-Corey/3
-Corfu
-corgi/1 1
-coriander/2 1
-Corina/3
-Corine/3
-Corinne/3
-Corinth/2 1
-Corinthian/1 1
-Coriolanus
-Coriolis/3
-Cork
-cork/23 1
-corkage 1
-corker/1 1
-corkscrew/23 1
-Corleone/3
-corm/1 1
-Cormack/3
-cormorant/1 1
-corn/23 1
-cornball/1 1
-cornbread/2 1
-corncob/1 1
-corncrake/10 1
-cornea/1 1
-corneal 1
-cornea's 345
-cornea 346
-Corneille
-Cornelia/3
-Cornelius/3
-Cornell/3
-corner/23 1
-cornerstone/1 1
-cornet/1 1
-cornfield/10 1
-cornflake/32 1
-cornflour 1
-cornflower/1 1
-cornice/18 1
-cornily 1
-corniness/3
-Corning/3
-Cornish/4 1
-cornmeal/2 1
-cornrow/23 1
-cornstalk/1 1
-cornstarch/2 1
-cornucopia/1 1
-Cornwall/2 1
-Cornwallis
-corny/34 1
-corolla/1 1
-corollary/15 1
-corona/1 1
-Coronado
-coronal/1 1
-coronary/15 1
-coronation/1 1
-coroner/1 1
-coronet/1 1
-Corot
-Corp
-corp/32 1
-corporal/1 1
-corpora 347
-corporate/8 1
-corporates
-corporation/1 1
-corporatism 1
-corporatist 1
-corpora 1
-corporeal/8 1
-corporeality/2 1
-corps/2 1
-corpse/1 1
-corpsman/2 348
-corpsmen 349
-corpulence/2 1
-corpulent 1
-corpus/2 350
-corpuscle/1 1
-corpuscular
-corr
-corral/213 1
-corralling 1
-correct/98 1
-correctable
-corrected 1
-correction/1 1
-correctional
-corrective/1 1
-corrector/10 1
-Correggio
-correlate/28 1
-correlation/1 1
-correlative/1 1
-correspond/11 1
-correspondence/1 1
-correspondent/1 1
-corresponding/8 1
-corridor/1 1
-corrie/10 1
-corrigenda 351
-Corrine/3
-corroborate/6 1
-corroboration/1 1
-corroborative 1
-corroborator/1 1
-corroboratory 1
-corrode/6 1
-corrosion/2 1
-corrosive/30 1
-corrugate/6 1
-corrugation/1 1
-corrupt/98 1
-corrupted 1
-corrupter 1
-corruptibility/2 1
-corruptible 1
-corruption/1 1
-corsage/1 1
-corsair/1 1
-corset/23 1
-Corsica/2 1
-Corsican 1
-cortege/1 1
-Cortes/4 1
-cortex/2 352
-Cortez/2 1
-cortical 1
-cortices 353
-corticosteroid/10 1
-cortisol 1
-cortisone/2 1
-Cortland/2 1
-cor 1
-corundum/2 1
-coruscate/6 1
-coruscation/2 1
-Corvallis/3
-Corvette/3
-corvette/1 1
-Corvus/2 1
-Cory/3
-cos/2 1
-Cosby/3
-cosh/156 1
-cosign/11 1
-cosignatory/15 1
-cosigner/1 1
-cosine/1 1
-cosiness
-cosiness's
-cosines 1
-cosmetic/51 1
-cosmetician/1 1
-cosmetologist/1 1
-cosmetology/2 1
-cosmic/39 1
-cosmical
-cosmogonist/1 1
-cosmogony/15 1
-cosmological/8 1
-cosmologist/1 1
-cosmology/15 1
-cosmonaut/1 1
-cosmopolitan/1 1
-cosmopolitanism/2 1
-cosmopolitan 1
-cosmos/4 1
-cosponsor/23 1
-cossacks
-Cossack 1
-cosset/5 1
-cossetted
-cossetting
-cost/86 1
-costar/103 1
-Costco/3
-Costello/3
-costing/10 1
-costless 1
-costly/49 1
-Costner/3
-cos 1
-costume/139 1
-costumer/1 1
-costumier/10 1
-cot/18 1
-cotangent/1 1
-Cote/3
-cote/18 1
-coterie/1 1
-coterminous
-cotillion/1 1
-Cotonou
-Cotopaxi/2 1
-Cotswold/2 1
-cottage/73 1
-cottager/1 1
-cottar/1 1
-cotter/18 1
-Cotton/3
-cotton/23 1
-cottonmouth/1 1
-cottonseed/1 1
-cottontail/1 1
-cottonwood/1 1
-cottony 1
-cotyledon/1 1
-couch/22 1
-couchette/10 1
-couching 1
-cougar/1 1
-cough/23 1
-coughing 1
-couldn't
-could 354
-coulee/1 1
-coulis 1
-Coulomb
-coulomb/1 1
-Coulter/3
-council/1 1
-councilman/2 355
-councilmen 356
-councilor/1 1
-councilperson/1 1
-councilwoman/2 357
-councilwomen 358
-counsel/23 1
-counseling/10 1
-counselor/1 1
-count/23 1
-countability 1
-countable/19 1
-countdown/1 1
-countenance/28 1
-counter/23 1
-counteract/11 1
-counteraction/1 1
-counteractive 1
-counterargument/10 1
-counterattack/23 1
-counterbalance/28 1
-counterblast/10 1
-counterclaim/23 1
-counterclockwise
-counterculture/1 1
-counterespionage/2 1
-counterexample/10 1
-counterfeit/23 1
-counterfeiter/1 1
-counterfeit 1
-counterfoil/1 1
-counterinsurgency/15 1
-counterintelligence/2 1
-counterman/2 359
-countermand/23 1
-countermeasure/1 1
-countermen 360
-counteroffensive/1 1
-counteroffer/18 1
-counterpane/1 1
-counterpart/1 1
-counterpoint/23 1
-counterpoise/28 1
-counterproductive
-counterrevolution/1 1
-counterrevolutionary/15 1
-countersign/23 1
-countersignature/1 1
-countersink/86 361
-counterspy/15 1
-counterstrike 1
-countersunk 362
-countertenor/1 1
-counter 1
-countervail/11 1
-counterweight/18 1
-countess/4 1
-countless 1
-countrified 1
-country/15 1
-countryman/2 363
-countrymen 364
-countryside/1 1
-country 1
-countrywide 1
-countrywoman/2 365
-countrywomen 366
-county/15 1
-countywide 1
-coup/18 1
-coupe/18 1
-Couperin
-couple/28 1
-coupler/10 1
-couplet/1 1
-coupling/1 1
-coupon/1 1
-courage/2 1
-courageous/16 1
-Courbet
-courgette/10 1
-courier/23 1
-course/139 1
-coursebook/10 1
-courser/1 1
-coursework
-coursing 1
-court/23 1
-courteous/16 1
-courtesan/1 1
-courtesy/167 1
-courthouse/1 1
-courtier/1 1
-courting 1
-courtly/49 1
-Courtney/3
-courtroom/1 1
-courtship/1 1
-courtyard/1 1
-couscous/2 1
-cousin/1 1
-cousinly 1
-Cousteau
-couture/2 1
-couturier/1 1
-covalent/8 1
-covariance/10 1
-cove/18 1
-coven/1 1
-covenant/23 1
-Coventry/15 1
-cover/23 1
-coverage/1 1
-coverall/1 1
-covering/1 1
-coverlet/1 1
-coversheet
-covert/36 1
-coverup/1 1
-covet/11 1
-covetous/16 1
-covey/1 1
-cow/23 367
-Coward
-coward/30 1
-cowardice/2 1
-cowardly/140 1
-cowbell/1 1
-cowbird/1 1
-cowboy/1 1
-cowcatcher/1 1
-cower/11 1
-cowering 1
-cowgirl/1 1
-cowhand/1 1
-cowherd/1 1
-cowhide/18 1
-cowl/23 1
-Cowley
-cowlick/1 1
-cowling/1 1
-cowman/2 368
-cowmen 369
-coworker/1 1
-cowpat/10 1
-Cowper
-cowpoke/1 1
-cowpox/2 1
-cowpuncher/1 1
-cowrie/1 1
-cowshed/10 1
-cowslip/1 1
-Cox
-cox/156 1
-coxcomb/1 1
-coxswain/18 1
-Coy/3
-coy/21 1
-coyote/1 1
-coypu/1 1
-coy 1
-cozen/11 1
-cozenage/2 1
-cozier 370
-coziest 370
-Cozumel/3
-cozy/215 1
-CPA/2 1
-cpd
-CPI/2 1
-cpl
-Cpl
-CPO
-CPR/2 1
-cps 1
-CPU/2 1
-Cr/2 1
-crab/136 1
-Crabbe
-crabbed 1
-crabber/1 1
-crabbily 1
-crabbing 1
-crabby/49 1
-crabgrass/2 1
-crablike 1
-crabwise 1
-crack/216 1
-crackable
-crackdown/1 1
-cracked 1
-cracker/1 1
-crackerjack/1 1
-crackhead/1 1
-cracking/10 1
-crackle/28 1
-crackling/1 1
-cracklings 1
-crackpot/1 1
-crackup/1 1
-cradle/28 1
-cradling 1
-Craft/3
-craft/23 1
-craftsman/2 371
-craftsmanship/2 1
-craftsmen 372
-craftspeople 373
-craftswoman/2 374
-craftswomen 375
-crafty/50 1
-crag/1 1
-craggy/49 1
-Craig
-cram/217 1
-crammer/10 1
-cramp/23 1
-cramped 1
-cramping's
-crampon/1 1
-Cranach
-cranberry/15 1
-Crane
-crane/28 1
-cranial 1
-cranium/1 1
-crank/179 1
-crankcase/1 1
-crankshaft/1 1
-cranky/50 1
-Cranmer
-cranny/148 1
-crap/218 1
-crape/18 1
-crapper/10 1
-crappie/41 1
-crappy/219 1
-crapshooter/1 1
-crash/147 1
-crasher/10 1
-crashing/8 1
-crass/21 1
-crate/28 1
-crater/1 1
-Crater/2 1
-crater/11 1
-cravat/18 1
-crave/6 1
-craven/220 1
-craving/1 1
-craw/1 1
-crawdad/1 1
-Crawford/3
-crawl/23 1
-crawler/1 1
-crawlies
-crawling 1
-crawlspace/1 1
-crawly/34 1
-crawly's
-Cray/3
-cray/10 1
-crayfish/4 1
-Crayola/3
-crayola/10 1
-crayon/23 1
-craze/28 1
-crazed 1
-crazing 1
-crazy/221 1
-creak/23 1
-creaking 1
-creaky/50 1
-cream/78 1
-creamer/1 1
-creamery/15 1
-creamy/50 1
-crease/28 1
-creatable
-create/6 1
-creation/1 1
-Creation/2 1
-creationism/1 1
-creationist/1 1
-creative/16 1
-creatives
-creative's
-creativity/2 1
-creator/1 1
-Creator/2 1
-creature/1 1
-creche/1 1
-Crecy/2 1
-cred
-credence/2 1
-credential/23 1
-credenza/1 1
-credibility/2 1
-credible/19 1
-credit/23 1
-creditability 1
-creditable/19 1
-creditor/1 1
-creditworthy/222 1
-credo/1 1
-credulity/2 1
-credulous/16 1
-Cree/1 1
-Creed
-creed/1 1
-creek/1 1
-Creek/1 1
-creel/18 1
-creep/86 376
-creeper/1 1
-creeping 1
-creepy/50 1
-Creighton/3
-cremains/2 1
-cremate/6 1
-cremation/1 1
-crematoria 377
-crematorium/1 378
-crematory/15 1
-creme/1 1
-crenelate/6 1
-crenelation/1 1
-creole/1 1
-Creole/1 1
-creole 1
-Creole 1
-Creon
-creosote/28 1
-crepe/18 1
-crept 379
-crepuscular
-crescendo/18 1
-crescent/1 1
-cress/2 1
-Crest/3
-crest/23 1
-crestfallen 1
-cresting 1
-crestless 1
-Cretaceous/2 1
-cretaceous 1
-Cretan/1 1
-Crete/2 1
-cretin/1 1
-cretinism/2 1
-cretinous
-cretonne/2 1
-crevasse/18 1
-crevice/1 1
-crew/23 1
-crewel/2 1
-crewelwork/2 1
-crewman/2 380
-crewmen 381
-crib/136 1
-cribbage/2 1
-cribber/1 1
-cribbing 1
-Crichton
-Crick
-crick/23 1
-cricket/86 1
-cricketer/1 1
-crier/1 1
-crikey 1
-crime/18 1
-Crimea/2 1
-Crimean
-criminal/30 1
-criminality/2 1
-criminalization 1
-criminalize/6 1
-criminological 1
-criminologist/1 1
-criminology/2 1
-crimp/23 1
-crimson/23 1
-cringe/28 1
-cringing 1
-crinkle/28 1
-crinkly/34 1
-crinoline/1 1
-Criollo 1
-cripes 1
-cripple/28 1
-crippler/1 1
-crippleware/10 1
-crippling/8 1
-Crisco/3
-crises 382
-crisis/2 383
-crisp/52 1
-crispbread/10 1
-crisper 1
-crispy/49 1
-crisscross/22 1
-Cristina/3
-criteria 384
-criterion/2 385
-critic/1 1
-critical/8 1
-criticism/1 1
-criticize/6 1
-criticizer/1 1
-critique/28 1
-critter/1 1
-croak/23 1
-croaking 1
-croaky/34 1
-Croat/1 1
-Croatia/2 1
-Croatian/1 1
-Croce
-crochet/23 1
-crocheter/1 1
-crocheting/2 1
-crock/62 1
-crockery/2 1
-Crockett
-crocodile/1 1
-crocus/4 1
-Croesus 1
-croft/10 1
-crofter/10 1
-crofting 1
-croissant/1 1
-Cromwell/2 1
-Cromwellian
-crone/1 1
-Cronin/3
-Cronkite/3
-Cronus/2 1
-crony/15 1
-cronyism/2 1
-crook/23 1
-crooked/21 1
-Crookes
-crookneck/1 1
-crook 1
-croon/23 1
-crooner/1 1
-crooning 1
-crop/47 1
-cropland/1 1
-cropper/1 1
-croquet/108 1
-croquette/1 1
-Crosby
-crosier/1 1
-Cross
-cross/74 1
-crossbar/18 1
-crossbeam/1 1
-crossbones/2 1
-crossbow/1 1
-crossbowman/2 386
-crossbowmen 387
-crossbred 388
-crossbreed/86 389
-crosscheck/23 1
-crosscurrent/1 1
-crosscut/128 1
-crosscutting 1
-crosser 1
-crossfire/1 1
-crosshatch/156 1
-crosshatching 1
-crossing/1 1
-crossover/1 1
-crosspatch/4 1
-crosspiece/1 1
-crossroad/130 1
-crosstalk 1
-crosstown 1
-crosswalk/1 1
-crossways
-crosswind/1 1
-crosswise 1
-crossword/1 1
-crotch/4 1
-crotchet/1 1
-crotchety/222 1
-crotchless
-crouch/22 1
-crouching 1
-croup/2 1
-croupier/1 1
-croup 1
-croupy/34 1
-crouton/1 1
-crow/1 1
-Crow/1 1
-crow/11 1
-crowbar/18 1
-crowd/23 1
-crowded 1
-crowfeet 390
-crowfoot/2 391
-crowing 1
-Crowley/3
-crown/23 1
-crowning 1
-crozier/1 1
-CRT/1 1
-crucial/8 1
-cruciate 1
-crucible/1 1
-crucifiable
-crucifix/4 1
-crucifixion/1 1
-Crucifixion/1 1
-cruciform/1 1
-crucify/31 1
-crud/2 1
-cruddy/34 1
-crude/223 1
-crudites/2 1
-crudity/15 1
-crud 1
-cruel/21 1
-cruelty/15 1
-cruet/1 1
-cruft/10 1
-crufted
-crufties
-crufting
-crufty
-Cruikshank
-Cruise/3
-cruise/28 1
-cruiser/1 1
-cruising 1
-cruller/1 1
-crumb/224 1
-crumble/28 1
-crumbling 1
-crumbly/140 1
-crumbs 1
-crumby/34 1
-crumminess/3
-crummy/34 1
-crumpet/1 1
-crumple/28 1
-crumpling 1
-crunch/22 1
-cruncher/10 1
-crunchy/49 1
-crupper/1 1
-crusade/28 1
-crusader/1 1
-Crusades
-cruse/1 1
-crush/22 1
-crusher/1 1
-crushing/8 1
-Crusoe/3
-crust/23 1
-crustacean/1 1
-crustal 1
-crusted 1
-crusty/50 1
-crutch/40 1
-Crux/2 1
-crux/4 1
-Cruz/3
-cry/56 1
-crybaby/15 1
-crying/10 1
-cryogenic/32 1
-cryonics
-cryostat 1
-cryosurgery/2 1
-crypt/1 1
-cryptanalysis 1
-cryptanalyst 1
-cryptanalytic 1
-cryptically
-cryptic 1
-cryptogram/1 1
-cryptographer/1 1
-cryptographic
-cryptographically
-cryptography/2 1
-cryptology 1
-Cryptozoic/3
-Crystal/3
-crystal/18 1
-crystalline 1
-crystallization/2 1
-crystallize/6 1
-crystallographer/10 1
-crystallographic
-crystallography 1
-crystal 1
-ct
-Ct
-CT/2 1
-Ctesiphon
-Cthulhu/3
-ctn
-ctr
-c 1
-cu
-Cu/2 1
-cub/18 1
-Cuba/2 1
-Cuban/1 1
-cubbyhole/1 1
-cube/28 1
-cuber/1 1
-cubical/8 1
-cubicle/1 1
-cubic 1
-cubing/11 1
-cubism/2 1
-cubist/1 1
-cubit/1 1
-cuboid/10 1
-Cuchulain/3
-cuckold/23 1
-cuckoldry/2 1
-cuckoo/18 1
-cucumber/1 1
-cud/1 1
-cuddle/28 1
-cuddliness
-cuddly/34 1
-cudgel/23 1
-cudgelings
-cue/28 1
-cuff/23 1
-cufflink/1 1
-Cuisinart
-cuisine/1 1
-Culbertson
-culinary 1
-cull/23 1
-Cullen/3
-cullender/1 1
-culling 1
-culminate/6 1
-culmination/1 1
-culotte/1 1
-culpability/2 1
-culpable/19 1
-culprit/1 1
-cult/1 1
-cultism/2 1
-cultist/1 1
-cultivable 1
-cultivatable
-cultivate/6 1
-cultivation/1 1
-cultivator/1 1
-cultural/8 1
-culture/28 1
-culvert/1 1
-cum/1 1
-cumber/5 1
-Cumberland/2 1
-cumbersome/16 1
-cumbrous 1
-cumin/2 1
-cummerbund/1 1
-cumming
-Cummings
-cumquat/1 1
-cumulative/8 1
-cumuli 392
-cumulonimbi 393
-cumulonimbus/2 394
-cumulus/2 395
-Cunard/3
-cuneiform/2 1
-cunnilingus/2 1
-cunning/225 1
-Cunningham/3
-cunt/80 1
-cup/47 1
-cupboard/1 1
-cupcake/1 1
-cupful/1 1
-cupid/1 1
-Cupid/2 1
-cupidinously
-cupidity/2 1
-cupola/62 1
-cuppa/10 1
-cupping 1
-cupric 1
-cur/226 1
-curability/2 1
-curable 1
-Curacao/2 1
-curacao 1
-curacy/15 1
-curare/2 1
-curate/28 1
-curative/1 1
-curator/1 1
-curatorial
-curatorships
-curb/23 1
-curbing/2 1
-curbside 1
-curbstone/1 1
-curd/18 1
-curdle/6 1
-curdling 1
-cure/28 1
-curer/1 1
-curettage/2 1
-curfew/1 1
-curia/53 1
-curial
-curia's 396
-curia 397
-Curie
-curie/1 1
-curio/1 1
-curiosity/15 1
-curious/21 1
-Curitiba
-curium/2 398
-curl/23 1
-curled 1
-curler/1 1
-curlew/1 1
-curlicue/28 1
-curling/2 1
-curly/140 1
-curlycue/1 1
-curmudgeon/1 1
-curmudgeonly
-currant/1 1
-currency/15 1
-current/30 1
-curricle 1
-curricular
-curricula 399
-curriculum/2 400
-Currier/3
-Curry
-curry/56 1
-currycomb/23 1
-currying 401
-curs/7 1
-curse/28 1
-cursed/75 1
-cursing 1
-cursive/37 1
-cursor/18 1
-cursory/72 1
-Curt/3
-curt/21 1
-curtail/11 1
-curtailment/1 1
-curtain/23 1
-Curtis/3
-curtsey/23 1
-curtsy/56 1
-curvaceous/33 1
-curvacious
-curvature/1 1
-curve/28 1
-curved 1
-curvier 402
-curviest 402
-curvilinear 1
-curvy/34 1
-cushion/23 1
-cushy/34 1
-cusp/1 1
-cuspid/1 1
-cuspidor/1 1
-cuss/22 1
-cussed/83 1
-custard/1 1
-Custer
-custodial 1
-custodian/1 1
-custodianship/2 1
-custody/2 1
-custom/129 1
-customary/211 1
-customer/1 1
-customhouse/1 1
-customizable
-customization/1 1
-customize/6 1
-cut/227 1
-cutaneous 1
-cutaway/1 1
-cutback/1 1
-cute/27 1
-cutesie/150 1
-cutesy/34 1
-cute 1
-cutey/10 1
-cuticle/1 1
-cutie/1 1
-cutlas/228 1
-cutlass/4 1
-cutler/1 1
-cutlery/2 1
-cutlet/1 1
-cutoff/1 1
-cutout/1 1
-cutter/1 1
-cutthroat/1 1
-cutting/30 1
-cuttlefish/4 1
-cuttle 1
-cutup/1 1
-cutworm/1 1
-Cuvier/3
-Cuzco
-CV
-CVE/1 1
-cw
-cwt 1
-cyan/2 1
-cyanide/2 1
-cyanogen 1
-cyan 1
-Cybele/2 1
-cybercafe/10 1
-cybernetic/32 1
-cyberpunk/1 1
-cyberspace/1 1
-cyborg/1 1
-Cyclades/2 1
-cyclamen/1 1
-cycle/28 1
-cycleway/10 1
-cyclical/8 1
-cyclic 1
-cycling 1
-cyclist/1 1
-cycloid 1
-cyclometer/1 1
-cyclone/1 1
-cyclonic 1
-cyclopaedia/1 1
-cyclopedia/1 1
-Cyclopes/2 1
-cyclops/229 1
-Cyclops/2 1
-cyclotron/1 1
-cyder/1 1
-cygnet/1 1
-Cygnus/2 1
-cylinder/18 1
-cylindrical/8 1
-cymbal/1 1
-cymbalist/1 1
-Cymbeline/3
-cynic/1 1
-cynical/8 1
-cynicism/2 1
-cynic 1
-cynosure/1 1
-Cynthia/2 1
-cypher/23 1
-cypress/4 1
-Cyprian/2 1
-Cypriot/1 1
-Cyprus/2 1
-Cyrano/3
-Cyril
-Cyrillic/2 1
-Cyrus
-cyst/1 1
-cysteine 1
-cystic 1
-cystitis 1
-cytochrome 1
-cytological 1
-cytologist/1 1
-cytology/2 1
-cytoplasm/2 1
-cytoplasmic
-cytosine/2 1
-cytotoxic
-CZ
-czar/1 1
-czarina/1 1
-czarism 1
-czarist/1 1
-Czech/1 1
-Czechoslovakia/2 1
-Czechoslovakian/1 1
-Czechoslovak 1
-Czech 1
-Czerny
-Csonka/3
-CST/2 1
-D/2 1
-d/230 1
-DA/2 1
-dab/136 1
-dabber/1 1
-dabble/6 1
-dabbler/1 1
-dabbling 1
-Dacca/2 1
-dace/1 1
-dacha/1 1
-Dachau/2 1
-dachshund/1 1
-Dacron/1 1
-dactyl/1 1
-dactylic/1 1
-dad/1 1
-Dada/2 1
-dadaism/2 1
-Dadaism/2 1
-dadaist/1 1
-daddy/15 1
-dado/40 1
-Daedalus/2 1
-daemon/1 1
-daemonic
-daffiness/3
-daffodil/1 1
-daffy/34 1
-daft/21 1
-dag/70 1
-dagger/18 1
-dago/231 1
-Daguerre
-daguerreotype/28 1
-Dagwood 1
-dahlia/1 1
-Dahomey/2 1
-dailies
-daily/140 1
-daily's
-Daimler/3
-dainty/221 1
-daiquiri/1 1
-dairy/15 1
-dairying/2 1
-dairymaid/1 1
-dairyman/2 403
-dairymen 404
-dairywoman/2 405
-dairywomen 406
-dais/4 1
-daisy/15 1
-Daisy 1
-Dakar/2 1
-Dakota/1 1
-Dakotan 1
-Dale
-dale/1 1
-dalesman 1
-dales 407
-Daley/3
-Dali
-Dalian/3
-Dallas/2 1
-dalliance/1 1
-dallier/1 1
-Dalmatia/2 1
-dalmatian/1 1
-Dalmatian/1 1
-Dalton/2 1
-dally/31 1
-dam/160 1
-damage/232 1
-damageable 1
-damaging/8 1
-Damascus/2 1
-damask/23 1
-dame/1 1
-Dame 1
-Damian/3
-Damien
-Damion/3
-dammit 1
-damn/23 1
-damnable/19 1
-damnation/2 1
-damned/166 1
-damnedest 1
-damning/8 1
-damn 1
-Damocles
-Damon/2 1
-damp/52 1
-dampen/11 1
-dampener/1 1
-damper/1 1
-damping 1
-damsel/1 1
-damselflies
-damselfly/3
-damson/1 1
-Dana/53 1
-dance/28 1
-danceable 1
-dancer/1 1
-dancing/2 1
-dandelion/1 1
-dander/2 1
-dandify/31 1
-dandle/6 1
-dandruff/2 1
-dandy/42 1
-Dane/1 1
-Danelaw
-dang/233 1
-danger/18 1
-Dangerfield/3
-dangerous/83 1
-dangle/43 1
-dangler/1 1
-dangling 1
-Danial/3
-Daniel/1 1
-Danielle/3
-Danish/2 1
-danish/4 1
-Danish 1
-dank/21 1
-Dannie/3
-Danone/3
-danseuse/1 1
-Dante/2 1
-Danton 1
-Dan 1
-Danube/2 1
-Danubian
-Danny/3
-Daphne/2 1
-dapper/166 1
-dapple/28 1
-DAR
-Darby/3
-Darcy/3
-Dardanelles/2 1
-Dare
-dare/28 408
-daredevil/1 1
-daredevilry/2 1
-Daren/3
-darer/1 1
-daresay 1
-dares 409
-d'Arezzo
-Darfur
-Darin/3
-daring/37 1
-Dario/3
-Darius
-Darjeeling 1
-dark/234 1
-darken/11 1
-darkener/1 1
-darkie/10 1
-darkish 1
-darkroom/1 1
-dark 1
-Darla/3
-Darlene/3
-darling/1 1
-Darling/2 1
-darling 1
-darn/78 1
-darned/166 1
-Darnell/3
-darner/1 1
-darning 1
-Darrel/3
-Darrell/3
-Darren/3
-Darrin/3
-Darrow
-Darryl/3
-dart/23 1
-dartboard/1 1
-darter/1 1
-Darth/3
-darting 1
-Dartmoor
-Dartmouth
-Darvon/2 1
-Darwin/2 1
-Darwinian 1
-Darwinism/1 1
-Darwinist 1
-Daryl/3
-dash/22 1
-dashboard/1 1
-dashed 1
-dasher/1 1
-dashes 410
-dashiki/1 1
-dashing/8 1
-dastard/30 1
-dastardly/140 1
-DAT/2 1
-databank/1 1
-database/18 1
-datable 1
-Datamation/10 1
-data 411
-date/28 1
-datebook/10 1
-dateless 1
-dateline/28 1
-dater/1 1
-dative/1 1
-datum/1 412
-daub/23 1
-dauber/1 1
-daubing 1
-Daugherty/3
-daughter/1 1
-daughterly 1
-Daumier
-daunt/11 1
-daunting/8 1
-dauntless/16 1
-dauphin/1 1
-Davao
-Dave/3
-Davenport
-davenport/1 1
-David/1 1
-Davidson/3
-Davis
-davit/1 1
-Davy/60 1
-dawdle/6 1
-dawdler/1 1
-dawdling 1
-Dawes
-Dawn/3
-dawn/23 1
-dawning 1
-Dawson
-day/1 1
-Dayan
-daybed/1 1
-daybreak/2 1
-daycare/2 1
-daydream/23 1
-daydreamer/1 1
-daylight/138 1
-daylong 1
-daysack
-daytime/2 1
-Dayton 1
-Day 1
-daze/28 1
-dazed/8 1
-dazzle/28 1
-dazzler/1 1
-dazzling/8 1
-dbl
-DBMS/2 1
-db 1
-dB 1
-dc
-DC/2 1
-dd
-DD/2 1
-dded
-dding
-dds
-DDS/2 1
-DDT/10 1
-DE
-DEA
-deacon/18 1
-deaconess/3
-deaconesses
-deactivate/6 1
-deactivation/2 1
-dead/235 1
-deadbeat/1 1
-deadbolt/1 1
-deaden/11 1
-deadening 1
-deader 1
-Deadhead/3
-deadhead/5 1
-deadline/18 1
-deadlines 1
-deadlock/23 1
-deadly/140 1
-deadpan/133 1
-deadweight/1 1
-deadwood/2 1
-deaf/236 1
-deafen/11 1
-deafening/8 1
-deaf 1
-deal/237 1
-dealer/1 1
-dealership/1 1
-dealing/1 1
-Dean
-dean/18 1
-Deana/3
-Deandre/3
-deanery/15 1
-Deann/3
-Deanna/3
-Deanne/3
-deanship/2 1
-dear/38 1
-dearests
-dearie/1 1
-dearth/1 1
-deary/15 1
-death/1 1
-deathbed/1 1
-deathblow/1 1
-deathless/8 1
-deathlike 1
-deathly/34 1
-deathtrap/1 1
-deathwatch/4 1
-deb/1 1
-debacle/1 1
-debar/13 1
-debark/11 1
-debarkation/2 1
-debarment/2 1
-debase/6 1
-debased 1
-debasement/1 1
-debaser 1
-debasing 1
-debatable
-debate/28 1
-debater/1 1
-debating's
-debauch/22 1
-debauched 1
-debauchee/1 1
-debauchery/15 1
-Debbie/3
-Debby/3
-debenture/1 1
-Debian/3
-debilitate/6 1
-debilitation/2 1
-debility/15 1
-debit/23 1
-debonair/16 1
-debonaire
-Debora/3
-Deborah
-debouch/156 1
-Debouillet/3
-Debra/3
-debrief/11 1
-debriefing/1 1
-debris/2 1
-Debs
-debt/1 1
-debtor/1 1
-debug/117 1
-debugger/10 1
-debunk/11 1
-Debussy
-debut/23 1
-debutante/1 1
-debutant 1
-Dec/2 1
-DEC/5 1
-decade/1 1
-decadence/2 1
-decadency/2 1
-decadent/30 1
-decaf/1 1
-decaff
-decaffeinate/6 1
-decaffs
-decagon/1 1
-decal/18 1
-Decalog
-Decalogue/2 1
-decamp/11 1
-decampment/2 1
-decant/11 1
-decanter/1 1
-decapitate/6 1
-decapitation/1 1
-decapitator/1 1
-decathlete/10 1
-decathlon/1 1
-Decatur
-decay/23 1
-decayed 1
-Decca/3
-Deccan
-decease/28 1
-deceased's
-decedent/1 1
-deceit/1 1
-deceitful/16 1
-deceive/6 1
-deceiver/1 1
-deceivingly
-decelerate/6 1
-deceleration/1 1
-decelerator/1 1
-December/1 1
-decency/15 1
-decennial/1 1
-decent/75 1
-decenter 1
-decentralization/2 1
-decentralize/6 1
-deception/1 1
-deceptive/16 1
-decibel/1 1
-decidability 1
-decidable
-decide/6 1
-decided/8 1
-decider/10 1
-deciduous 1
-deciles
-deciliter/1 1
-decimal/1 1
-decimalization 1
-decimalize 1
-decimal 1
-decimate/6 1
-decimation/2 1
-decimeter/1 1
-decipher/11 1
-decipherable 1
-decipherment/10 1
-decision/18 1
-decisive/16 1
-deck/23 1
-deckchair/10 1
-Decker
-deckhand/1 1
-decking 1
-deckle/10 1
-declaim/11 1
-declaimer/1 1
-declaiming 1
-declamation/1 1
-declamatory
-declarable
-declaration/1 1
-declarative 1
-declaratory
-declare/6 1
-declared 1
-declarer/1 1
-declassification/2 1
-declassify/31 1
-declension/1 1
-declination/1 1
-decline/28 1
-decliner/1 1
-declivity/15 1
-decode/6 1
-decoder/1 1
-decolletage/1 1
-decollete 1
-decolonization/2 1
-decolonize/6 1
-decolorizing
-decommission/11 1
-decomposable
-decompose/6 1
-decomposition/1 1
-decompress/7 1
-decompression/2 1
-decongestant/1 1
-deconstruct/11 1
-deconstruction/1 1
-deconstructionism 1
-deconstructionist/10 1
-deconstructive
-decontaminate/6 1
-decontamination/2 1
-decontrol/61 1
-decontrolling 1
-deconvolution
-deconvolve
-decor/1 1
-decorate/6 1
-decorating/2 1
-decoration/1 1
-decorative/8 1
-decorator/1 1
-decorous/16 1
-decorum/2 1
-deco 1
-decoupage/28 1
-decouple/6 1
-decoy/23 1
-decrease/28 1
-decreasing/8 1
-decree/63 1
-decrement/5 1
-decremental
-decrepit 1
-decrepitude/2 1
-decrescendo/18 1
-decriminalization/2 1
-decriminalize/6 1
-decry/31 1
-decrypt/11 1
-decryption 1
-decustomised
-Dedekind/3
-dedicate/6 1
-dedication/1 1
-dedicator/1 1
-dedicatory 1
-deduce/6 1
-deducible 1
-deduct/11 1
-deductible/1 1
-deduction/1 1
-deductive/8 1
-Dee
-deed/23 1
-deejay/18 1
-deem/11 1
-Deena/3
-deep/38 1
-deepen/11 1
-deepening 1
-deepish
-deer/1 1
-Deere/3
-deerskin/2 1
-deerstalker/10 1
-deerstalking 1
-deescalate/6 1
-deescalation/2 1
-def/238 1
-deface/6 1
-defacement/2 1
-defacer/1 1
-defaecate
-defalcate/6 1
-defalcation/1 1
-defamation/2 1
-defamatory
-defame/6 1
-defamer/1 1
-defaming 1
-default/23 1
-defaulter/1 1
-defeat/23 1
-defeater/1 1
-defeatism/2 1
-defeatist/1 1
-defecate/6 1
-defecation/2 1
-defect/23 1
-defection/1 1
-defective/36 1
-defector/1 1
-defend/11 1
-defendant/1 1
-defender/1 1
-defenestrate/214 1
-defenestration/10 1
-defense/28 1
-defenseless/16 1
-defensibility 1
-defensible/19 1
-defensive/239 1
-defer/13 1
-deference/2 1
-deferential/8 1
-deferment/1 1
-deferral/1 1
-defiance/2 1
-defiant/8 1
-defibrillator/10 1
-deficiency/15 1
-deficient 1
-deficit/1 1
-defile/28 1
-defilement/2 1
-defiler/1 1
-defiling 1
-definable/19 1
-define/6 1
-definer/1 1
-definite/16 1
-definition/1 1
-definitional
-definitive/83 1
-deflatable
-deflate/6 1
-deflation/2 1
-deflationary
-deflect/11 1
-deflection/1 1
-deflective
-deflector/1 1
-deflower/11 1
-Defoe
-defog/117 1
-defogger/1 1
-defoliant/1 1
-defoliate/6 1
-defoliation/2 1
-defoliator/1 1
-deforest/11 1
-deforestation/2 1
-deform/11 1
-deformable
-deformation/1 1
-deformed 1
-deformity/15 1
-defraud/11 1
-defrauder/1 1
-defray/11 1
-defrayal/2 1
-defrock/11 1
-defrost/11 1
-defroster/1 1
-deft/21 1
-defunct 1
-defuse/6 1
-defy/31 1
-deg
-Degas
-degas/240 1
-degauss/241 1
-degeneracy/15 1
-degenerate/28 1
-degeneration/2 1
-degenerative
-DeGeneres/3
-degradable
-degradation/1 1
-degrade/6 1
-degraded 1
-degrading 1
-degrease 1
-degree/1 1
-dehumanization/2 1
-dehumanize/6 1
-dehumidifier/1 1
-dehumidify/31 1
-dehydrate/6 1
-dehydration/2 1
-dehydrator/1 1
-dehydrogenate/6 1
-dehydrogenation 1
-deice/6 1
-deicer/1 1
-deictic 1
-Deidre/3
-deification/2 1
-deify/31 1
-deign/11 1
-Deimos
-deionized
-Deirdre
-deism/2 1
-deist/1 1
-deistic 1
-Deity
-deity/15 1
-deject/11 1
-dejected/8 1
-dejection/2 1
-deject 1
-Dejesus/3
-Del
-Delacroix
-Delacruz/3
-Delaney/3
-Delano/3
-Delaware/1 1
-Delawarean/1 1
-delay/23 1
-delayer/18 1
-Delbert/3
-delectable/19 1
-delectation/2 1
-delegate/28 1
-delegation/1 1
-Deleon/3
-deletable
-delete/6 1
-deleter
-deleterious/8 1
-deletion/1 1
-delft/2 1
-delftware/2 1
-Delgado
-Delhi/2 1
-deli/1 1
-Delia/3
-deliberate/67 1
-deliberation/1 1
-deliberative 1
-Delibes
-delicacy/15 1
-delicate/16 1
-delicatessen/1 1
-delicate 1
-delicious/16 1
-Delicious/2 1
-delight/23 1
-delighted/8 1
-delightful/8 1
-Delilah/1 1
-deliminator
-deliminators
-delimit/11 1
-delimitation/2 1
-delimiter/10 1
-delineate/6 1
-delineation/1 1
-delinquency/15 1
-delinquent/30 1
-delint
-delinted
-delinting
-delints
-deliquesce/6 1
-deliquescent
-delirious/16 1
-delirium/1 1
-delis 1
-Delius
-deliver/11 1
-deliverable
-deliverance/2 1
-deliverer/1 1
-delivery/15 1
-deliveryman/2 413
-deliverymen 414
-Dell/3
-dell/1 1
-Della/3
-Delmar/3
-Delmarva/3
-Delmer/3
-Delmonico 1
-Delores/3
-Deloris/3
-delouse/6 1
-Delphi/2 1
-Delphic 1
-delphinium/1 1
-Delphinus/2 1
-Delta
-delta/1 1
-deltoids
-delude/6 1
-deluge/28 1
-delusion/1 1
-delusional
-delusive/8 1
-deluxe 1
-delve/6 1
-delver/1 1
-Dem
-demagnetization/2 1
-demagnetize/6 1
-demagog/18 1
-demagogic
-demagogically
-demagogue/18 1
-demagoguery/2 1
-demagogy/2 1
-demand/23 1
-demanding 1
-demarcate/6 1
-demarcation/1 1
-dematerialize/122 1
-Demavend/2 1
-demean/11 1
-demeaning 1
-demeanor/2 1
-demented/8 1
-dementia/2 1
-demerit/18 1
-Demerol/2 1
-demesne/1 1
-Demeter/2 1
-Demetrius/2 1
-demigod/1 1
-demigoddess/4 1
-demijohn/1 1
-demilitarization/2 1
-demilitarize/6 1
-demimondaine/1 1
-demimonde/2 1
-Deming/3
-demise/28 1
-demist/11 1
-demister/10 1
-demitasse/1 1
-demo/23 1
-demob/145 1
-demobilization/2 1
-demobilize/6 1
-democracy/15 1
-democrat/1 1
-Democrat/1 1
-Democratic
-democratic/39 1
-democratization/2 1
-democratize/6 1
-Democritus
-demode 1
-demodulate/6 1
-demodulation/2 1
-demodulator 1
-demographer/1 1
-demographic/130 1
-demographically
-demography/2 1
-demolish/7 1
-demolisher 1
-demolition/1 1
-demon/1 1
-demonetization/2 1
-demonetize/6 1
-demoniacal/8 1
-demoniac 1
-demonic
-demonically
-demonize/6 1
-demonology/15 1
-demonstrability 1
-demonstrable/19 1
-demonstrate/6 1
-demonstrated 1
-demonstration/1 1
-demonstrative/36 1
-demonstrator/1 1
-demoralization/2 1
-demoralize/6 1
-Demosthenes/2 1
-demos 1
-demote/6 1
-demotic 1
-demotion/1 1
-demotivate/6 1
-demount/241 1
-demountable
-Dempsey
-demulcent/1 1
-demur/242 1
-demure/27 1
-demurral/1 1
-demurrer/1 1
-demystification/2 1
-demystify/31 1
-den/18 1
-Dena/3
-Denali
-denationalization 1
-denationalize/6 1
-denature/6 1
-dendrite/1 1
-dendrochronological 1
-dendrochronology 1
-Deneb
-Denebola/3
-Deng/3
-dengue/2 1
-deniable 1
-denial/1 1
-denier/1 1
-denigrate/6 1
-denigration/1 1
-denim/1 1
-Denise/3
-Denis 1
-denizen/18 1
-Denmark/2 1
-Dennis
-denominate/6 1
-denomination/1 1
-denominational 1
-denominator/1 1
-denotation/1 1
-denotational
-denotative 1
-denote/6 1
-denouement/1 1
-denounce/6 1
-denouncement/1 1
-dens/166 1
-dense/27 1
-density/15 1
-dent/23 1
-dental 1
-dentally 1
-dentifrice/1 1
-dentin/2 1
-dentine/2 1
-dentist/1 1
-dentistry/2 1
-dentition/2 1
-denture/1 1
-denuclearize/6 1
-denudation/2 1
-denude/6 1
-denunciation/1 1
-Denver/2 1
-deny/31 1
-Denny/3
-deodorant/1 1
-deodorization/2 1
-deodorize/6 1
-deodorizer/1 1
-Deon/3
-depart/11 1
-departed's
-departing 1
-department/1 1
-departmental/8 1
-departmentalization/2 1
-departmentalize/6 1
-departure/1 1
-depend/11 1
-dependability/2 1
-dependable/19 1
-dependance/2 1
-dependence/2 1
-dependency/15 1
-dependent/30 1
-depersonalization 1
-depersonalize/6 1
-depict/11 1
-depiction/1 1
-depilatory/15 1
-deplane/6 1
-deplete/6 1
-depletion/2 1
-deplorable/19 1
-deplore/6 1
-deploy/11 1
-deployment/1 1
-depolarization/1 1
-depolarize/6 1
-depoliticize/6 1
-deponent/1 1
-depopulate/6 1
-depopulation/2 1
-deport/11 1
-deportation/1 1
-deportee/1 1
-deportment/2 1
-depose/6 1
-deposit/23 1
-depositary 1
-deposition/1 1
-depositional
-depositor/1 1
-depository/15 1
-depot/1 1
-Depp/3
-deprave/6 1
-depraved 1
-depravity/15 1
-deprecate/6 1
-deprecating/8 1
-deprecation/1 1
-deprecatory 1
-depreciate/6 1
-depreciating 1
-depreciation/2 1
-depredation/1 1
-depress/7 1
-depressant/1 1
-depressing/8 1
-depression/1 1
-depressive/1 1
-depressor/1 1
-depressurization 1
-depressurize/6 1
-deprivation/1 1
-deprive/6 1
-deprogram/114 1
-dept
-depth/1 1
-deputation/1 1
-depute/6 1
-deputize/6 1
-deputy/15 1
-derail/5 1
-derailleur/1 1
-derailment/1 1
-derange/6 1
-derangement/2 1
-derby/15 1
-Derby 1
-deregulate/6 1
-deregulation/2 1
-Derek/3
-derelict/1 1
-dereliction/1 1
-derelict 1
-deres
-Derick/3
-deride/6 1
-deriders
-derision/2 1
-derisive/16 1
-derisory 1
-derivable
-derivation/1 1
-derivative/30 1
-derive/6 1
-dermal 1
-dermatitis/2 1
-dermatological
-dermatologist/1 1
-dermatology/2 1
-dermis/2 1
-derogate/6 1
-derogation/2 1
-derogatory/211 1
-Derrick/3
-derrick/18 1
-Derrida/3
-derriere/1 1
-derringer/1 1
-dervish/4 1
-derv 1
-desalinate/6 1
-desalination/2 1
-desalinization/2 1
-desalinize/6 1
-desalt/11 1
-desalting 1
-desaturated
-descale/6 1
-descant/23 1
-Descartes/2 1
-descend/11 1
-descendant/1 1
-descendent/1 1
-descender/10 1
-descending 1
-descent/1 1
-describable 1
-describe/6 1
-describer/1 1
-description/1 1
-descriptive/16 1
-descriptivism 1
-descriptor/10 1
-descry/31 1
-Desdemona/3
-desecrate/6 1
-desecration/2 1
-desegregate/6 1
-desegregation/2 1
-deselect/11 1
-deselection 1
-desensitization/2 1
-desensitize/6 1
-desert/78 1
-deserted 1
-deserter/1 1
-desertification 1
-desertion/1 1
-deserve/6 1
-deserved/8 1
-deserving 1
-deshabille/2 1
-desiccant/1 1
-desiccate/6 1
-desiccation/2 1
-desiccator/1 1
-desiderata 415
-desideratum/2 416
-design/23 1
-designable
-designate/6 1
-designation/1 1
-designational
-designator/10 1
-designed/8 1
-designer/1 1
-designing/2 1
-desirabilia
-desirability/2 1
-desirable/29 1
-desire/28 1
-desired 1
-Desiree/3
-desirous 1
-desist/11 1
-desk/1 1
-deskill/11 1
-desktop/1 1
-Desmond/3
-desolate/67 1
-desolation/2 1
-desorption 1
-despair/23 1
-despairing/8 1
-desperado/4 1
-desperate/16 1
-desperation/2 1
-despicable/19 1
-despise/6 1
-despite 1
-despoil/11 1
-despoiler/1 1
-despoilment/2 1
-despoliation/2 1
-despondence/2 1
-despondency/2 1
-despondent/8 1
-despond 1
-despot/1 1
-despotic
-despotically
-despotism/2 1
-dessert/1 1
-dessertspoon/10 1
-dessertspoonful/10 1
-destabilization/2 1
-destabilize/6 1
-d'Estaing
-destination/1 1
-destine/6 1
-destiny/15 1
-destitute 1
-destitution/2 1
-destroy/11 1
-destroyable
-destroyer/1 1
-destruct/23 1
-destructibility/2 1
-destructible 1
-destruction/2 1
-destructive/16 1
-destruct 1
-desuetude/2 1
-desultory/243 1
-detach/7 1
-detachable
-detached 1
-detachment/1 1
-detail/23 1
-detailed 1
-detain/11 1
-detainee/1 1
-detainment/2 1
-detect/11 1
-detectability 1
-detectable
-detectably
-detectible
-detection/1 1
-detective/1 1
-detector/1 1
-detente/1 1
-detention/1 1
-deter/13 1
-detergent/1 1
-deteriorate/6 1
-deterioration/2 1
-determent/2 1
-determinable 1
-determinacy 1
-determinant/1 1
-determinate/8 1
-determination/1 1
-determinative 1
-determine/6 1
-determined/8 1
-determiner/1 1
-determinism/2 1
-deterministic
-deterministically
-determinist 1
-deterrence/2 1
-deterrent/1 1
-detest/11 1
-detestable/19 1
-detestation/2 1
-detester/10 1
-dethrone/6 1
-dethronement/2 1
-dethroning 1
-detonate/6 1
-detonation/1 1
-detonator/1 1
-detour/23 1
-detox/22 1
-detoxification/2 1
-detoxify/31 1
-detract/11 1
-detracting 1
-detraction/2 1
-detractor/1 1
-detriment/1 1
-detrimental/8 1
-detritus/2 1
-Detroit/2 1
-deuce/18 1
-deuterium/2 1
-Deuteronomy/2 1
-deuteron 1
-Deutschmark/1 1
-devaluation/1 1
-devalue/6 1
-Devanagari/2 1
-devastate/6 1
-devastatingly
-devastation/2 1
-devastator/1 1
-develop/11 1
-developer/1 1
-development/1 1
-developmental/8 1
-Devi/2 1
-deviance/2 1
-deviancy/2 1
-deviant/1 1
-deviate/28 1
-deviation/1 1
-device/1 1
-devil/1 1
-Devil/2 1
-devil/11 1
-deviling 1
-devilish/16 1
-devilment/2 1
-devilry/15 1
-deviltry/15 1
-Devin/3
-devious/16 1
-devise/28 1
-devitalize/6 1
-devoid 1
-devolution/2 1
-devolve/6 1
-Devon/2 1
-Devonian/2 1
-devote/6 1
-devoted/83 1
-devotee/1 1
-devotion/1 1
-devotional/1 1
-devour/11 1
-devourer/10 1
-devouring 1
-devout/21 1
-dew/18 1
-Dewar/2 1
-Dewayne/3
-dewberry/15 1
-dewclaw/1 1
-dewdrop/1 1
-Dewey/2 1
-Dewitt/3
-dewlap/1 1
-dewy/49 1
-Dexedrine/2 1
-Dexter
-dexterity/2 1
-dexterous/16 1
-dextrose/2 1
-dextrous/8 1
-DH
-Dhaka/2 1
-Dhaulagiri/2 1
-dhoti/1 1
-dhow/1 1
-Di
-DI
-diabetes/2 1
-diabetic/1 1
-diabolic
-diabolical/8 1
-diabolism 1
-diachronic
-diacritic/1 1
-diacriticals
-diacritical 1
-diadem/18 1
-diaereses 417
-diaeresis/2 418
-Diaghilev
-diagnosable
-diagnose/6 1
-diagnoses 419
-diagnosis/2 420
-diagnostic/35 1
-diagnostician/1 1
-diagonal/30 1
-diagonalize/6 1
-diagram/160 1
-diagrammatic
-diagrammatically
-Dial/3
-dial/23 1
-dialect/1 1
-dialectal 1
-dialectic/130 1
-dialectical/8 1
-dialer 1
-dialing/10 1
-dialog/18 1
-dialogue/18 1
-dialysis/2 1
-dialyzes
-diamante 1
-diameter/1 1
-diametric
-diametrical/8 1
-diamond/18 1
-diamondback/1 1
-diamond 1
-diam 1
-Diana/2 1
-Diane/3
-Diann/3
-Dianna/3
-Dianne/3
-diapason/1 1
-diaper/23 1
-diapering 1
-diaphanous 1
-diaphragm/18 1
-diaphragmatic 1
-diarist/1 1
-diarrhea/2 1
-diary/15 1
-Dias
-Diaspora/1 1
-diaspora 1
-diastase/2 1
-diastole/2 1
-diastolic
-diathermy/2 1
-diatom/1 1
-diatomic
-diatonic 1
-diatribe/1 1
-Diaz
-dibble/28 1
-dibs
-dibs's
-DiCaprio/3
-dice/43 1
-dices 421
-dicey 422
-dichloride 1
-dichotomous 1
-dichotomy/15 1
-dicier 423
-diciest 423
-dicing 1
-Dick
-dick/18 1
-Dickens
-Dickensian 1
-dickens 1
-dicker/5 1
-Dickerson/3
-dickey/1 424
-dickhead/10 1
-dickier 425
-dickiest 425
-Dickinson
-Dickson/3
-dicky/244 1
-dickybird/10 1
-dicotyledon/1 1
-dicotyledonous
-dict
-Dictaphone/1 1
-dicta 426
-dictate/28 1
-dictation/1 1
-dictator/1 1
-dictatorial/8 1
-dictatorship/1 1
-diction/2 1
-dictionary/15 1
-dictum/2 427
-didactically
-didactic 1
-diddle/6 1
-diddler/1 1
-diddly
-diddlysquat
-diddums
-Diderot
-didgeridoo/10 1
-didn't
-Dido/2 1
-dido/4 1
-Didrikson/3
-did 428
-didst 428
-die/245 429
-Diefenbaker
-Diego/3
-diehard/1 1
-dielectric/1 1
-Diem/3
-diereses 430
-dieresis/2 431
-diesel/1 1
-Diesel/2 1
-diesel/11 1
-dieseling 1
-dies 1
-diet/78 1
-dietary/15 1
-dieter/1 1
-dietetic/32 1
-dietician/1 1
-dietitian/1 1
-Dietrich
-diff/11 1
-differ/11 1
-difference/73 1
-different/8 1
-differentiability 1
-differentiable
-differential/30 1
-differentiate/6 1
-differentiation/1 1
-differentiators
-difficult/8 1
-difficulty/15 1
-diffidence/2 1
-diffident/8 1
-diffract/11 1
-diffraction/2 1
-diffuse/246 1
-diffused 1
-diffuser/10 1
-diffusion/2 1
-diffusional
-diffusive 1
-diffusivity 1
-dig/247 432
-digerati/2 1
-digest/23 1
-digested 1
-digestibility/2 1
-digestible 1
-digestion/1 1
-digestive/10 1
-digger/1 1
-digging/32 1
-digit/1 1
-digital/8 1
-digitalis/2 1
-digital 1
-digitization 1
-digitize/6 1
-digitizer/10 1
-dignified 1
-dignify/31 1
-dignitary/15 1
-dignity/15 1
-digraph/1 1
-digress/7 1
-digression/1 1
-digressive 1
-dihedral 1
-Dijkstra/3
-Dijon
-dike/28 1
-diktat/10 1
-dilapidated
-dilapidation/2 1
-dilatation/2 1
-dilate/6 1
-dilation/2 1
-dilator/1 1
-dilatory 1
-Dilbert/1 1
-dildo/10 1
-dilemma/1 1
-dilettante/1 1
-dilettantish
-dilettantism/2 1
-diligence/2 1
-diligent/8 1
-dill/18 1
-Dillard/3
-dillies
-Dillinger/3
-Dillon/3
-diluent 1
-dilute/6 1
-dilution/1 1
-dilly/3
-dillydally/31 1
-dim/248 1
-DiMaggio
-dime/48 1
-dimension/23 1
-dimensional/8 1
-dimensionality 1
-dimensionless 1
-dimer/10 1
-diminish/7 1
-diminishable 1
-diminishing 1
-diminuendo/1 1
-diminution/1 1
-diminutive/1 1
-dimity/2 1
-dimmer/1 1
-dimorphic
-dimorphism 1
-dimple/28 1
-dimply/34 1
-dimwit/1 1
-dimwitted
-din/133 1
-Dina/3
-Dinah
-dinar/1 1
-dine/6 1
-diner/1 1
-dinette/1 1
-ding/23 1
-dingbat/1 1
-dingdong/23 1
-dinghy/15 1
-dingier 433
-dingiest 433
-dingle/1 1
-dingo/4 1
-dingos
-dingus/4 1
-dingy/50 1
-dink/166 1
-dinkier 434
-dinkiest 434
-dink 1
-dinky/42 1
-dinner/23 1
-dinnertime/2 1
-dinnerware/2 1
-Dino/3
-dinosaur/1 1
-dint/18 1
-diocesan/1 1
-diocese/1 1
-Diocletian
-diode/1 1
-Diogenes
-Dion/3
-Dionne/3
-Dionysian
-Dionysus/2 1
-Diophantine/3
-diopter/10 1
-Dior
-diorama/1 1
-dioxide/1 1
-dioxin/1 1
-dip/47 1
-diphtheria/2 1
-diphthong/18 1
-diplexers
-diploid/1 1
-diploma/249 1
-diplomacy/2 1
-diplomat/1 1
-diplomatically
-diplomatic 1
-diplomatist/1 1
-dipole/1 1
-dipper/1 1
-Dipper/2 1
-dippy/34 1
-dipso/10 1
-dipsomania/2 1
-dipsomaniac/1 1
-dipstick/1 1
-dipterous
-diptych/1 1
-Dir
-Dirac
-dire/250 1
-direct/98 1
-direction/1 1
-directionality 1
-directional 1
-directionally
-directionless 1
-directive/1 1
-director/1 1
-directorate/1 1
-directorial 1
-directorship/1 1
-directory/15 1
-direful 1
-dirge/1 1
-Dirichlet
-dirigible/1 1
-Dirk/3
-dirk/18 1
-dirndl/1 1
-dirt/2 1
-dirtball
-dirtballs
-dirt 1
-dirty/143 1
-dis/228 1
-Dis/2 1
-dis/79 1
-disability/15 1
-disable/6 1
-disablement/2 1
-disabuse/6 1
-disadvantage/28 1
-disadvantageous/8 1
-disaffect/11 1
-disaffected 1
-disaffection/2 1
-disaffiliate/6 1
-disaffiliation/2 1
-disafforest/11 1
-disaggregated
-disaggregation 1
-disagree/46 1
-disagreeable/29 1
-disagreement/1 1
-disallow/11 1
-disambiguate/251 1
-disambiguation 1
-disappear/11 1
-disappearance/1 1
-disappoint/11 1
-disappointed 1
-disappointing/8 1
-disappointment/1 1
-disapprobation/2 1
-disapproval/2 1
-disapprove/6 1
-disapproving/8 1
-disarm/11 1
-disarmament/2 1
-disarming/8 1
-disarrange/6 1
-disarrangement/2 1
-disarray/23 1
-disassemble/6 1
-disassembler 1
-disassociate/6 1
-disassociation/2 1
-disaster/1 1
-disastrous/8 1
-disavow/11 1
-disavowal/1 1
-disband/11 1
-disbandment/2 1
-disbar/13 1
-disbarment/2 1
-disbelief/120 1
-disbelieve/6 1
-disbeliever/1 1
-disbelieving/8 1
-disbursal/2 1
-disburse/6 1
-disbursement/1 1
-disc/18 1
-discard/23 1
-discern/11 1
-discernible/19 1
-discerning/8 1
-discernment/2 1
-discharge/28 1
-disciple/18 1
-discipleship/2 1
-disciplinarian/1 1
-disciplinary
-discipline/28 1
-disclaim/11 1
-disclaimer/1 1
-disclose/6 1
-disclosure/1 1
-disco/23 1
-discography/15 1
-discolor/11 1
-discoloration/1 1
-discombobulate/6 1
-discombobulation/2 1
-discomfit/5 1
-discomfiture/2 1
-discomfort/23 1
-discommode/6 1
-discompose/6 1
-discomposed 1
-discomposure/2 1
-disconcert/11 1
-disconcerted 1
-disconcerting/8 1
-disconnect/11 1
-disconnected/16 1
-disconnection/1 1
-disconsolate/8 1
-disconsolation 1
-discontent/23 1
-discontented/8 1
-discontentment/2 1
-discontinuance/1 1
-discontinuation/1 1
-discontinue/6 1
-discontinuity/15 1
-discontinuous/8 1
-discord/23 1
-discordance/2 1
-discordant/8 1
-discotheque/1 1
-disco 1
-discount/78 1
-discountability
-discountable
-discountenance/43 1
-discounter/1 1
-discourage/6 1
-discouragement/1 1
-discouraging/8 1
-discourse/28 1
-discourteous/8 1
-discourtesy/15 1
-discover/11 1
-discoverable 1
-discoverer/1 1
-discovery/15 1
-discredit/23 1
-discreditable/19 1
-discreet/21 1
-discrepancy/15 1
-discrepant 1
-discrete/16 1
-discretion/2 1
-discretionary 1
-discriminant/10 1
-discriminate/6 1
-discriminating 1
-discrimination/2 1
-discriminative 1
-discriminator/1 1
-discriminatory
-discursive/16 1
-discus/252 1
-discuss/7 1
-discussable
-discussant/1 1
-discussion/1 1
-disdain/23 1
-disdainful/8 1
-disease/77 1
-diseased 1
-disembark/11 1
-disembarkation/2 1
-disembodiment/2 1
-disembody/31 1
-disembowel/11 1
-disembowelment/2 1
-disenchant/11 1
-disenchantment/2 1
-disencumber/11 1
-disenfranchise/6 1
-disenfranchisement/2 1
-disengage/6 1
-disengagement/1 1
-disentangle/6 1
-disentanglement/2 1
-disequilibrium/2 1
-disestablish/7 1
-disestablishment/2 1
-disesteem/23 1
-disfavor/23 1
-disfigure/6 1
-disfigurement/1 1
-disfranchise/6 1
-disfranchisement/2 1
-disgorge/6 1
-disgorgement/2 1
-disgrace/28 1
-disgraceful/16 1
-disgruntle/6 1
-disgruntlement/2 1
-disguise/28 1
-disguised 1
-disguising 1
-disgust/23 1
-disgusted/8 1
-disgusting/8 1
-dish/22 1
-dishabille/2 1
-disharmonious
-disharmony/2 1
-dishcloth/1 1
-dishearten/11 1
-disheartening/8 1
-dishevel/11 1
-dishevelment/2 1
-dishing 1
-dishonest/8 1
-dishonesty/2 1
-dishonor/23 1
-dishonorable/19 1
-dishpan/1 1
-dishrag/1 1
-dishtowel/1 1
-dishware/2 1
-dishwasher/1 1
-dishwater/2 1
-dishy 1
-disillusion/23 1
-disillusionment/2 1
-disincentive/10 1
-disinclination/2 1
-disincline/6 1
-disinfect/11 1
-disinfectant/1 1
-disinfection/2 1
-disinflation/2 1
-disinformation/2 1
-disingenuous/8 1
-disinherit/11 1
-disinheritance/2 1
-disintegrate/6 1
-disintegration/2 1
-disinter/13 1
-disinterest/62 1
-disinterested/16 1
-disinterment/2 1
-disinvestment/2 1
-disinvest 1
-disjoint/11 1
-disjointed/16 1
-disjointness
-disjoint 1
-disjunction/10 1
-disjunctive 1
-disjuncture 1
-disk/18 1
-diskette/1 1
-dislike/28 1
-dislocate/6 1
-dislocation/1 1
-dislodge/6 1
-disloyal/8 1
-disloyalty/2 1
-dismal/75 1
-dismantle/6 1
-dismantlement/2 1
-dismay/23 1
-dismayed 1
-dismember/11 1
-dismemberment/2 1
-dismiss/7 1
-dismissal/1 1
-dismissible
-dismissive
-dismissively
-dismount/23 1
-Disney
-Disneyland 1
-disobedience/2 1
-disobedient/8 1
-disobey/11 1
-disoblige/6 1
-disobliging 1
-disorder/23 1
-disordered 1
-disorderly/140 1
-disorganization/2 1
-disorganize/6 1
-disorient/11 1
-disorientate/6 1
-disorientation/2 1
-disown/11 1
-disparage/6 1
-disparagement/2 1
-disparaging/8 1
-disparate/8 1
-disparity/15 1
-dispassion/2 1
-dispassionate/8 1
-dispatch/22 1
-dispatcher/1 1
-dispel/61 1
-dispelling 1
-dispensable 1
-dispensary/15 1
-dispensation/1 1
-dispense/6 1
-dispenser/1 1
-dispersal/2 1
-dispersant 1
-disperse/253 1
-dispersed 1
-disperser/10 1
-dispersion/1 1
-dispersive/8 1
-dispirit/11 1
-dispirited/8 1
-displace/6 1
-displacement/1 1
-displacer 1
-display/23 1
-displayable
-displease/6 1
-displeasing 1
-displeasure/2 1
-disport/5 1
-disposable/1 1
-disposal/1 1
-dispose/43 1
-disposed 1
-disposer/1 1
-disposing 1
-disposition/1 1
-dispossess/7 1
-dispossession/2 1
-dispraise/28 1
-disproof/1 1
-disproportion/18 1
-disproportional/8 1
-disproportionate/8 1
-disprovable
-disprove/6 1
-disputable/19 1
-disputant/1 1
-disputation/1 1
-disputatious/8 1
-dispute/28 1
-disputer/1 1
-disqualification/1 1
-disqualify/31 1
-disquiet/23 1
-disquieted 1
-disquieting 1
-disquiet 1
-disquietude/2 1
-disquisition/1 1
-Disraeli
-disregard/23 1
-disregardful 1
-disrepair/2 1
-disreputable/19 1
-disrepute/2 1
-disrespect/23 1
-disrespectful/8 1
-disrobe/6 1
-disrupt/11 1
-disruption/1 1
-disruptive/8 1
-disruptor 1
-diss/7 1
-dissatisfaction/2 1
-dissatisfied 1
-dissatisfy/31 1
-dissect/11 1
-dissecting 1
-dissection/1 1
-dissector/1 1
-dissemblance/2 1
-dissemble/6 1
-dissembler/1 1
-dissembling 1
-disseminate/6 1
-dissemination/2 1
-dissension/1 1
-dissent/23 1
-dissenter/1 1
-dissenting 1
-dissertation/1 1
-disservice/1 1
-dissever/11 1
-dissidence/2 1
-dissident/1 1
-dissimilarity/15 1
-dissimilar 1
-dissimilitude/1 1
-dissimulate/6 1
-dissimulation/2 1
-dissimulator/1 1
-dissipate/6 1
-dissipated 1
-dissipation/2 1
-dissipative
-dissociate/6 1
-dissociation/2 1
-dissociative
-dissociatively
-dissoluble 1
-dissolute/16 1
-dissolution/2 1
-dissolve/43 1
-dissolving 1
-dissonance/1 1
-dissonant 1
-dissuade/6 1
-dissuasion/2 1
-dissuasive 1
-dist
-distaff/1 1
-distal/8 1
-distance/28 1
-distant/8 1
-distaste/18 1
-distasteful/16 1
-distemper/62 1
-distend/11 1
-distended 1
-distension/1 1
-distention/1 1
-distil/61 1
-distill/11 1
-distillate/1 1
-distillation/1 1
-distiller/1 1
-distillery/15 1
-distilling 1
-distinct/21 1
-distinction/1 1
-distinctive/16 1
-distinguish/7 1
-distinguishable/19 1
-distinguished 1
-distinguishing 1
-distort/11 1
-distorted 1
-distorter 1
-distortion/1 1
-distract/11 1
-distracted/83 1
-distractingly
-distraction/1 1
-distrait 1
-distraught 1
-distress/22 1
-distressed 1
-distressful 1
-distressing/8 1
-distributable
-distribute/6 1
-distribution/1 1
-distributional
-distributive/8 1
-distributivity 1
-distributor/1 1
-distributorship/10 1
-district/18 1
-distrust/23 1
-distrustful/8 1
-disturb/11 1
-disturbance/1 1
-disturber/1 1
-disturbing/8 1
-disulphide 1
-disunion/2 1
-disunite/6 1
-disunity/2 1
-disuse/28 1
-disyllabic
-disyllable 1
-ditch/22 1
-dither/23 1
-ditherer/1 1
-ditransitive 1
-ditsy/34 1
-ditto/23 1
-ditz/4 1
-ditzy/34 1
-ditty/167 1
-diuresis 1
-diuretic/1 1
-diurnal/8 1
-diva/1 1
-divalent 1
-divan/1 1
-dive/254 435
-diver/1 1
-diverge/6 1
-divergence/1 1
-divergent 1
-diverse/16 1
-diversification/2 1
-diversify/31 1
-diversion/1 1
-diversionary
-diversity/15 1
-divert/11 1
-diverted 1
-diverticulitis/2 1
-diverting 1
-divest/11 1
-divestiture/1 1
-divestment/2 1
-dividable 1
-divide/28 1
-divided 1
-dividend/1 1
-divider/1 1
-dividing 1
-divination/2 1
-divine/255 1
-Divine/2 1
-divine/6 1
-diviner/1 1
-diving/2 1
-divinity/15 1
-divisibility/2 1
-divisible 1
-division/1 1
-divisional 1
-divisive/16 1
-divisor/1 1
-divorce/28 1
-divorcee/1 1
-divorcement/1 1
-divot/1 1
-div 1
-divulge/6 1
-divvy/56 1
-Diwali/3
-Dix
-Dixie/2 1
-Dixiecrat 1
-Dixieland/1 1
-dixieland/2 1
-Dixon/3
-dizzy/143 1
-Djakarta/2 1
-djellaba/1 1
-djellabah/1 1
-Djibouti/2 1
-djinn's
-DJ 1
-DMD/2 1
-Dmitri/3
-DMZ
-DNA/2 1
-Dnepr
-Dnepropetrovsk
-Dnieper
-Dniester
-do/256 436
-DOA
-doable 1
-dob
-DOB
-dobbed
-Dobbin/3
-dobbin/1 1
-dobbing
-doberman/3
-Doberman/2 1
-dobermans
-Dobro 1
-dobs
-doc/64 1
-docent/1 1
-docile/8 1
-docility/2 1
-dock/23 1
-docker/10 1
-docket/23 1
-docking 1
-dockland/10 1
-dockside 1
-dockworker/1 1
-dockyard/1 1
-doctor/23 1
-doctoral 1
-doctorate/1 1
-Doctorow/3
-Doctor 1
-doctrinaire/1 1
-doctrinal/8 1
-doctrine/1 1
-docudrama/1 1
-document/23 1
-documentary/15 1
-documentation/1 1
-DOD
-dodder/23 1
-doddery 1
-doddle 1
-dodecahedral
-dodecahedra 437
-dodecahedron 438
-Dodge/3
-dodge/28 1
-dodgem/10 1
-dodger/1 1
-Dodgson/2 1
-dodgy/34 1
-dodo/1 1
-Dodoma/3
-Dodson/3
-Doe
-DOE
-doe/48 1
-doer/1 1
-doeskin/1 1
-doesn't
-doff/11 1
-dog/92 1
-dogcart/1 1
-dogcatcher/1 1
-doge/1 1
-dogear/11 1
-dogear's
-dogfight/18 1
-dogfish/4 1
-dogged/16 1
-doggerel/2 1
-doggie/41 1
-dogging 1
-doggone/257 1
-doggoned/166 1
-doghouse/1 1
-dogie/1 1
-dogleg/92 1
-dogma/1 1
-dogmatically
-dogmatic 1
-dogmatism/2 1
-dogmatist/1 1
-dogsbody/60 1
-dogsled/70 1
-dogtrot/109 1
-dogwood/1 1
-dogy/15 1
-doggy/42 1
-doh/2 1
-Doha/2 1
-doilies
-doily/3
-doing/1 1
-Dolby 1
-doldrums/2 1
-Dole/3
-dole/28 1
-doleful/85 1
-dolerite 1
-doling 1
-doll/23 1
-dollar/1 1
-dollhouse/1 1
-Dollie/3
-dolling 1
-dollop/23 1
-dolmen/1 1
-dolmen's 439
-dolmen 440
-dolomite/2 1
-dolor/2 1
-Dolores/3
-dolorous/8 1
-dolphin/1 1
-dolt/1 1
-doltish/16 1
-Dolly/3
-dolly/258 1
-dolly's
-domain/1 1
-dome/28 1
-Domesday/3
-domestic/51 1
-domesticate/6 1
-domestication/2 1
-domesticity/2 1
-domicile/28 1
-domiciliary
-dominance/2 1
-dominant/30 1
-dominate/6 1
-dominating 1
-domination/2 1
-dominatrix/184 1
-domineer/11 1
-domineering/8 1
-Domingo/3
-Dominguez/3
-Dominic
-Dominica/2 1
-Dominican/1 1
-Dominick/2 1
-dominion/1 1
-Dominion 1
-Dominique/2 1
-domino/4 1
-Domitian
-don/1 1
-Don/1 1
-don/192 1
-Dona
-dona/1 1
-Donahue/3
-Donald/3
-Donaldson/3
-donate/6 1
-Donatello
-donation/1 1
-Donetsk/2 1
-dong/23 1
-dongle/1 1
-Donizetti/3
-donkey/1 1
-Donn/3
-Donna 1
-Donne/2 1
-Donnell/3
-Donner/3
-Donnie/3
-donnish 1
-donor/1 1
-Donovan/3
-don't
-donuts/89 1
-Donny/3
-donnybrook/1 1
-doodad/1 1
-doodah/10 1
-doodle/28 1
-doodlebug/1 1
-doodler/1 1
-doohickey/1 1
-doolally
-Dooley/3
-Doolittle
-doom/23 1
-doomsayer/1 1
-doomsday/2 1
-doomster/10 1
-Doonesbury/3
-door/18 1
-doorbell/1 1
-doorhandles
-doorjamb/10 1
-doorkeeper/1 1
-doorknob/1 1
-doorknocker/10 1
-doorman/2 441
-doormat/1 1
-doormen 442
-doornail 1
-doorplate/1 1
-doorpost/10 1
-doorstep/47 1
-doorstop/1 1
-doorway/1 1
-dooryard/1 1
-dopa/2 1
-dopamine 1
-dope/28 1
-doper/1 1
-dopey 443
-dopier 444
-dopiest 444
-dopiness/3
-doping/2 1
-doppelganger/10 1
-Doppler
-dopy/34 1
-Dora/2 1
-Dorcas
-Doreen/3
-Dorian/2 1
-Doric/2 1
-Doris/2 1
-Doritos/3
-dork/1 1
-dorky/34 1
-dorm/1 1
-dormancy/2 1
-dormant 1
-dormer/1 1
-dormice 445
-dormitory/15 1
-dormouse/2 446
-Dorothea/3
-Dorothy/3
-dorsal/8 1
-Dorset 1
-Dorsey/3
-Dorthy/3
-Dortmund
-dory/15 1
-dos/240 1
-DOS/2 1
-dosage/1 1
-dose/28 1
-dosh
-dosimeter/1 1
-doss/241 1
-dosser/10 1
-dosshouse/10 1
-dossier/1 1
-Dostoevsky/2 1
-Dostoyevsky/2 1
-DOT
-Dot/3
-dot/109 1
-dotage/2 1
-dotard/1 1
-dote/6 1
-doter/1 1
-doting/8 1
-Dotson/3
-dotty/259 1
-Douala/2 1
-Douay/3
-double/260 1
-Doubleday/3
-doubleheader/1 1
-doubler 1
-doublespeak/2 1
-doublet/1 1
-doubletalk
-doublethink 1
-doubling 1
-doubloon/1 1
-doubt/23 1
-doubter/1 1
-doubtful/16 1
-doubting/8 1
-doubtlessly 1
-doubtless 1
-douche/28 1
-Doug/3
-dough/1 1
-doughnut/18 1
-doughty/34 1
-doughy/34 1
-Douglas
-Douglass
-dour/21 1
-Douro
-douse/43 1
-dove/1 1
-dovecot/10 1
-dovecote/1 1
-Dover/2 1
-dove 447
-dovetail/23 1
-dovish 1
-Dow
-dowager/1 1
-dowdy/97 1
-dowel/23 1
-dower/23 1
-down/78 1
-downbeat/1 1
-downcast 1
-downdraft/1 1
-downer/1 1
-downfall/1 1
-downfallen
-downgrade/28 1
-downhearted/16 1
-downhill/1 1
-downland/10 1
-download/11 1
-download's
-downmarket
-downpipes
-downplay/11 1
-downpour/1 1
-downrange 1
-downright 1
-downriver
-Downs
-downscale 1
-downshift/11 1
-downside/1 1
-downsize/6 1
-downsizing/2 1
-downspout/1 1
-downstage 1
-downstairs
-downstairs's
-downstate/2 1
-downstream 1
-downswing/1 1
-downtime/2 1
-downtown/2 1
-downtrend/1 1
-downtrodden 1
-downturn/1 1
-downward/191 1
-downwind 1
-Downy/3
-downy/34 1
-dowry/15 1
-dowse/43 1
-dowser/1 1
-doxology/15 1
-doyen/1 1
-doyenne/1 1
-Doyle
-doz
-doze/28 1
-dozen/18 1
-dozenth 1
-dozen 1
-dozing 1
-dozy/193 1
-DP/1 1
-dpt
-DPT
-Dr
-drab/261 1
-drabber 1
-drachma/1 1
-Draco/2 1
-draconian
-Draconian
-Dracula/2 1
-draft/23 1
-draftboard
-draftee/1 1
-drafter/1 1
-drafting/2 1
-draftsman/2 448
-draftsmanship/2 1
-draftsmen 449
-draftswoman/2 450
-draftswomen 451
-drafty/50 1
-drag/92 1
-dragging 1
-dragnet/1 1
-dragon/1 1
-dragonflies
-dragonfly/3
-dragoon/23 1
-dragster/10 1
-draggy/34 1
-drain/23 1
-drainage/2 1
-drainboard/1 1
-drainer/1 1
-drainpipe/1 1
-Drake
-drake/1 1
-dram/18 1
-drama/1 1
-Dramamine/1 1
-dramatic/35 1
-dramatist/1 1
-dramatization/1 1
-dramatize/6 1
-Drambuie
-drank 452
-Drano/3
-drape/28 1
-draper/1 1
-drapery/15 1
-drastic/39 1
-drat/262 1
-draughtboards
-draughtswoman
-draughtswomen
-Dravidian/2 1
-draw/144 453
-drawable
-drawback/1 1
-drawbridge/1 1
-drawcord
-drawer/1 1
-drawing/1 1
-drawl/23 1
-drawling 1
-drawstring/1 1
-dray/18 1
-dread/23 1
-dreadful/16 1
-dreadlocks
-dreadlocks's
-dreadnaught/1 1
-dreadnought/1 1
-dread 1
-dream/23 1
-dreamboat/1 1
-dreamer/1 1
-dreaming 1
-dreamland/2 1
-dreamless 1
-dreamlike 1
-dreamworld/1 1
-dreamy/50 1
-drear 1
-dreary/50 1
-dredge/28 1
-dredger/1 1
-dredging 1
-dregs
-dregs's
-Dreiser
-drench/156 1
-Dresden/2 1
-dress/147 1
-dressage/2 1
-dresser/1 1
-dressing/1 1
-dressmaker/1 1
-dressmaking/2 1
-dressy/49 1
-Drew/3
-drew 454
-Dreyfus/2 1
-dribble/28 1
-dribbler/1 1
-driblet/1 1
-drier/1 455
-driest 456
-drift/23 1
-drifter/1 1
-drifting 1
-driftnet
-driftnets
-driftwood/2 1
-drill/23 1
-driller/1 1
-drilling 1
-drillmaster/1 1
-drink/86 457
-drinkable 1
-drinker/1 1
-drinking/10 1
-drip/47 1
-dripping/1 1
-drippy/34 1
-Dristan/3
-drivable
-drive/263 458
-drivel/23 1
-driveler/1 1
-driveling 1
-driver/1 1
-driveway/1 1
-driving/10 1
-drizzle/28 1
-drizzly/34 1
-drogue/1 1
-droid/10 1
-droll/178 1
-drollery/15 1
-droll 1
-drolly 1
-dromedary/15 1
-drone/28 1
-droning 1
-drool/23 1
-droop/23 1
-drooping/8 1
-droopy/49 1
-drop/47 1
-dropkick/1 1
-droplet/1 1
-dropout/1 1
-dropper/1 1
-dropping/32 1
-dropsical 1
-dropsy/2 1
-dross/2 1
-drought/1 1
-drouth/1 1
-drove/73 1
-drover/1 1
-drove 459
-drown/11 1
-drowning/1 1
-drowse/28 1
-drowsy/50 1
-drub/264 1
-drubber/1 1
-drubbing/1 1
-Drudge/3
-drudge/28 1
-drudgery/2 1
-drudging 1
-drug/92 1
-druggie/1 1
-druggist/1 1
-drugstore/1 1
-druggy/15 1
-druid/1 1
-druidism/2 1
-Druid 1
-drum/160 1
-drumbeat/18 1
-drumlin/1 1
-drummer/1 1
-drumstick/1 1
-drunk/188 1
-drunkard/1 1
-drunken/16 1
-drunk 452
-drupe/1 1
-druthers/2 1
-dry/265 1
-dryad/1 1
-Dryden
-dryer/1 1
-drying 1
-dryish
-drystone
-drywall/2 1
-Dschubba/3
-DST
-DTP
-Du
-dual/191 1
-dualism/2 1
-dualistic 1
-dualist 1
-duality/15 1
-Duane/3
-dub/136 1
-Dubai
-dubber/1 1
-dubbin/2 1
-dubbing 1
-Dubcek/3
-Dubhe/3
-dubiety/2 1
-dubious/16 1
-Dublin/2 1
-Dubrovnik/2 1
-ducal 1
-ducat/1 1
-Duchamp
-duchess/4 1
-duchy/15 1
-duck/23 1
-duckbill/1 1
-duckboards
-ducking/10 1
-duckling/1 1
-duckpins
-duckpins's
-duckpond
-duckweed/2 1
-ducky/42 1
-duct/23 1
-ductile 1
-ductility/2 1
-ducting 1
-ductless 1
-dud/18 1
-dude/28 1
-dudgeon/2 1
-Dudley
-dud 1
-due/1 1
-duel/23 1
-dueler/1 1
-duelings
-dueling 1
-duelist/1 1
-duenna/1 1
-duet/18 1
-due 1
-duff/23 1
-duffel 1
-duffer/1 1
-Duffy/3
-dugout/1 1
-dug 460
-duh
-DUI
-Duisburg
-Duke/3
-duke/18 1
-dukedom/1 1
-dulcet 1
-dulcimer/1 1
-dull/266 1
-dullard/1 1
-Dulles
-dulness/3
-Duluth
-dully 1
-duly 1
-Dumas
-dumb/21 1
-dumbbell/1 1
-dumbfound/11 1
-Dumbledore/3
-Dumbo/3
-dumbo/10 1
-dumbstruck 1
-dumb 1
-dumbwaiter/1 1
-dumdum/1 1
-dumfound/11 1
-dummy/167 1
-dump/23 1
-dumper/10 1
-dumping 1
-dumpling/1 1
-dumplings 1
-dumpster/1 1
-Dumpster 1
-dumpy/49 1
-dun/267 1
-Dunant
-Dunbar
-Duncan
-dunce/1 1
-Dundee
-dunderhead/1 1
-dune/1 1
-Dunedin
-dung/23 1
-dungaree/1 1
-dungeon/18 1
-dunghill/1 1
-dunk/23 1
-Dunkirk/2 1
-Dunlap/3
-Dunn/3
-Dunne/3
-dunno
-duo/1 1
-duodecimal 1
-duodenal
-duodena 461
-duodenum/2 462
-duologue 1
-duopolies
-duopoly
-dupe/28 1
-duper/1 1
-duple 1
-duplex/40 1
-duplicability 1
-duplicate/28 1
-duplication/1 1
-duplicator/1 1
-duplicitous
-duplicity/15 1
-DuPont
-durability/2 1
-durable/268 1
-Duracell/3
-Duran/3
-durance/2 1
-Durant
-Durante/3
-duration/1 1
-Durban
-Durer
-duress/2 1
-Durex/3
-Durham/1 1
-during
-Durkheim
-Durocher/3
-Duroc 1
-durst 463
-durum/2 1
-Duse/3
-Dushanbe/2 1
-dusk/2 1
-dusky/49 1
-Dusseldorf/2 1
-dust/23 1
-dustbin/1 1
-Dustbuster/3
-dustcart/10 1
-dustcover 1
-duster/1 1
-Dustin/3
-dusting 1
-dustless 1
-dustman 464
-dustmen 465
-dustpan/1 1
-dustsheet/10 1
-Dusty/3
-dusty/50 1
-Dutch/2 1
-Dutchman/2 466
-Dutchmen 467
-dutch 1
-Dutch 1
-dutch 1
-Dutchwoman 1
-duteous/8 1
-dutiable 1
-dutiful/16 1
-duty/15 1
-Duvalier
-duvet/1 1
-DVD 1
-Dvina
-Dvorak
-dwarf/179 1
-dwarfish 1
-dwarfism/2 1
-Dwayne/3
-dweeb/1 1
-dwell/269 1
-dweller/1 1
-dwelling/1 1
-DWI
-Dwight/3
-dwindle/6 1
-Dy/2 1
-dyadic 1
-dyad 1
-dybbuk/186 1
-dye/270 1
-dyeing 1
-Dyer/3
-dyer/1 1
-dyestuff/1 1
-dying/2 468
-dyke/18 1
-Dylan/2 1
-dynamic/130 1
-dynamical/8 1
-dynamic 1
-dynamism/2 1
-dynamite/139 1
-dynamiter/1 1
-dynamo/1 1
-dynastic 1
-dynasty/15 1
-dyne 1
-dysentery/2 1
-dysfunction/1 1
-dysfunctional
-dyslectic/1 1
-dyslexia/2 1
-dyslexic/1 1
-dyslexically
-dyslexic 1
-Dyson/3
-dyspepsia/2 1
-dyspeptic/1 1
-dysprosium/2 1
-dystrophy 1
-dz
-Dzerzhinsky/3
-Dzungaria
-E/1 1
-e/10 1
-each 1
-eager/21 1
-eagle/18 1
-eaglet/1 1
-Eakins
-ear/62 1
-earache/1 1
-eardrum/1 1
-earful/1 1
-Earhart
-Earl/3
-earl/1 1
-earldom/1 1
-Earle/3
-Earlene/3
-Earline/3
-earlobe/1 1
-early/49 1
-earmark/23 1
-earmuff/1 1
-earn/271 1
-earner/1 1
-Earnest/3
-earnest/36 1
-Earnestine/3
-Earnhardt/3
-earning/32 1
-Earp/3
-earphone/1 1
-earpiece/10 1
-earplug/1 1
-earring/1 1
-earshot/2 1
-earsplitting
-earth/1 1
-Earth/2 1
-earth/11 1
-earthbound 1
-earthen 1
-earthenware/2 1
-earthling/1 1
-earthly/34 1
-earthquake/18 1
-earthshaking
-earthward/10 1
-earthwork/1 1
-earthworm/1 1
-earthy/49 1
-earwax/2 1
-earwig/18 1
-ease/28 1
-easel/1 1
-easement/1 1
-East/1 1
-east/2 1
-eastbound 1
-ea 469
-Easter/1 1
-easterlies
-easterly's
-easterly 1
-Eastern
-eastern/44 1
-easterner/1 1
-Easterner 1
-easternmost
-easting 1
-Eastman
-east 1
-eastward/10 1
-Eastwood/3
-easy/50 1
-easygoing 1
-easy 1
-eat/116 470
-eatable/1 1
-eater/1 1
-eatery/15 1
-eating 1
-Eaton/3
-eave/1 1
-eavesdrop/105 1
-eavesdropper/1 1
-eBay/3
-ebb/23 1
-Eben/3
-Ebeneezer/3
-Ebert
-Ebola 1
-Ebonics/2 1
-Ebony/3
-ebony/15 1
-Ebro/2 1
-ebullience/2 1
-ebullient/8 1
-ebullition/2 1
-EC
-eccentric/1 1
-eccentrically
-eccentricity/15 1
-eccl
-Ecclesiastes
-ecclesiastic/1 1
-ecclesiastical/8 1
-ECG/2 1
-echelon/18 1
-echinoderm/1 1
-echo/272 1
-echoic 1
-echolocation/2 1
-eclair/1 1
-eclat/2 1
-eclectic/51 1
-eclecticism/2 1
-eclipse/28 1
-eclipses 471
-ecliptic/2 1
-eclogue/1 1
-Eco/3
-ecocide/2 1
-ecol
-ecologic
-ecological/8 1
-ecologist/1 1
-ecology/2 1
-econ
-econometric/10 1
-economic/32 1
-economical/8 1
-economist/1 1
-economization
-economize/6 1
-economizer/1 1
-economy/15 1
-ecosystem/1 1
-ecru/2 1
-ectopic
-ectoplasm 1
-ecu/10 1
-Ecuador/2 1
-Ecuadoran/1 1
-Ecuadorean 1
-Ecuadorian/1 1
-ecumenical/8 1
-ecumenicism/2 1
-ecumenism/2 1
-eczema/2 1
-ecstasy/15 1
-Ecstasy 1
-ecstatic/39 1
-ed/3
-Ed/3
-Edam/1 1
-Edda
-Eddie/3
-Eddington/2 1
-eddy/15 1
-Eddy/2 1
-eddy/31 1
-edelweiss/2 1
-edema/1 1
-Eden/1 1
-Edgardo/3
-Edgar 1
-edge/139 1
-edgeless 1
-edger/1 1
-edgeways
-edgewise
-edging/1 1
-edgy/50 1
-edibility/2 1
-edible/20 1
-edict/1 1
-edification/2 1
-edifice/1 1
-edifier/1 1
-edify/31 1
-edifying 1
-Edinburgh/2 1
-Edison/2 1
-edit/23 1
-editable
-Edith/3
-edition/1 1
-editor/1 1
-editorial/30 1
-editorialize/6 1
-editorship/1 1
-Edmond/3
-Edmonton/2 1
-Edmund/3
-Edna/3
-EDP/2 1
-eds
-Edsel 1
-EDT
-Eduardo/3
-educ
-educability/2 1
-educable 1
-educate/6 1
-education/1 1
-educational/8 1
-educationalist/10 1
-educationist/10 1
-educative
-educator/1 1
-educe/6 1
-eduction 1
-edutainment/2 1
-Edward/1 1
-Edwardian/2 1
-Edwardo/3
-Edwin
-Edwina/3
-EEC/2 1
-EEG/2 1
-eek 1
-eel/1 1
-e'en
-EEO
-EEOC
-e'er
-eerie/150 1
-eery/50 1
-Eeyore/3
-eff/11 1
-efface/6 1
-effacement/2 1
-effect/23 1
-effective/16 1
-effector/10 1
-effectual/8 1
-effectuate/6 1
-effeminacy/2 1
-effeminate/8 1
-effendi/1 1
-efferent 1
-effervesce/6 1
-effervescence/2 1
-effervescent/8 1
-effervescing 1
-effete/16 1
-efficacious/8 1
-efficacy/2 1
-efficiency/15 1
-efficient/8 1
-Effie/3
-effigy/15 1
-efflorescence/2 1
-efflorescent
-effluence/2 1
-effluent/1 1
-effluvia 472
-effluvium/2 473
-effort/1 1
-effortless/16 1
-effrontery/2 1
-effulgence/2 1
-effulgent 1
-effuse/6 1
-effusion/1 1
-effusive/16 1
-EFL
-Efrain/3
-Efren/3
-EFT
-egad 1
-egalitarian/1 1
-egalitarianism/2 1
-egg/23 1
-eggbeater/1 1
-eggcup/1 1
-egghead/1 1
-eggnog/2 1
-Eggo/3
-eggplant/1 1
-eggshell/1 1
-egis/2 1
-eglantine/1 1
-ego/1 1
-egocentric/1 1
-egocentrically
-egocentricity/2 1
-egoism/2 1
-egoist/1 1
-egoistic
-egoistical/8 1
-egomania/2 1
-egomaniac/1 1
-egotism/2 1
-egotist/1 1
-egotistic
-egotistical/8 1
-egregious/16 1
-egress/40 1
-egret/1 1
-Egypt/2 1
-Egyptian/1 1
-Egyptology/2 1
-eh
-Ehrenberg/3
-Ehrlich
-Eichmann
-eider/1 1
-eiderdown/1 1
-eidetic 1
-Eiffel
-eigenfunction
-eigenfunctions
-eigenstate
-eigenstates
-eigenvalue/10 1
-eight/1 1
-eighteen/1 1
-eighteenth/1 1
-eighteen 1
-eightfold 1
-eighth/1 1
-eightieth/1 1
-eightpence 1
-eight 1
-eighty/15 1
-Eileen/3
-Einstein/1 1
-einsteinium/2 1
-Eire/2 1
-Eisenhower/2 1
-Eisenstein
-Eisner/3
-eisteddfod/10 1
-either 1
-ejaculate/43 1
-ejaculation/1 1
-ejaculatory
-eject/11 1
-ejecta
-ejection/1 1
-ejector/1 1
-eke/6 1
-EKG/2 1
-elaborate/67 1
-elaboration/1 1
-Elaine
-Elam
-elan/2 1
-eland/1 1
-Elanor/3
-elapse/6 1
-elastic/51 1
-elasticated
-elasticity/15 1
-elasticize/6 1
-elastodynamics
-Elastoplast/2 1
-elate/6 1
-elated/8 1
-elation/2 1
-Elba 1
-Elbe/2 1
-Elbert
-elbow/23 1
-elbowroom/2 1
-Elbrus
-elder/30 1
-elderberry/15 1
-elderflower 1
-elderly 1
-elder 474
-eldest 474
-Eldon/3
-Eldorado 1
-Eleanor/3
-Eleazar/3
-elect/273 1
-electability 1
-electable
-election/1 1
-electioneer/11 1
-electioneering 1
-elective/1 1
-elector/1 1
-electoral/8 1
-electorate/1 1
-Electra/2 1
-electric/10 1
-electrical/8 1
-electrician/1 1
-electricity/2 1
-electrification/2 1
-electrifier/1 1
-electrify/31 1
-electrocardiogram/1 1
-electrocardiograph/1 1
-electrocardiography/2 1
-electrochemical/8 1
-electrocute/6 1
-electrocution/1 1
-electrode/1 1
-electrodynamic/10 1
-electroencephalogram/1 1
-electroencephalograph/1 1
-electroencephalographic
-electroencephalography/2 1
-electrologist/1 1
-electroluminescent
-electrolysis/2 1
-electrolyte/1 1
-electrolytic/39 1
-electrolyze/251 1
-electromagnet/1 1
-electromagnetically
-electromagnetic 1
-electromagnetism/2 1
-electromechanical
-electromechanics
-electromotive
-electron/1 1
-electronegative
-electronic/35 1
-electrophoresis 1
-electroplate/43 1
-electroplating 1
-electroscope/1 1
-electroscopic
-electroshock/2 1
-electrostatic/32 1
-electrotype/18 1
-eleemosynary
-elegance/2 1
-elegant/8 1
-elegiac/1 1
-elegiacal
-elegy/15 1
-elem
-element/1 1
-elemental/8 1
-elementary/211 1
-Elena/3
-elephant/1 1
-elephantiasis/2 1
-elephantine
-elev
-elevate/6 1
-elevated 1
-elevation/1 1
-elevator/1 1
-eleven/1 1
-elevens/89 1
-eleventh/1 1
-elf/120 1
-ELF/2 1
-elfin 1
-elfish 1
-Elgar
-Eli
-Elias
-elicit/11 1
-elicitation/2 1
-elide/6 1
-eligibility/2 1
-eligible/19 1
-Elijah/2 1
-eliminate/6 1
-elimination/1 1
-eliminator/10 1
-Elinor/3
-Eliot
-Elisa/3
-Elisabeth
-Elise/3
-Eliseo/3
-Elisha
-elision/1 1
-elite/1 1
-elitism/2 1
-elitist/1 1
-elixir/1 1
-Eliza/3
-Elizabeth/2 1
-Elizabethan/1 1
-elk/1 1
-ell/1 1
-Ella/2 1
-Ellen/3
-Ellesmere/3
-Ellie/3
-Ellington
-Elliot/3
-Elliott/3
-ellipse/1 1
-ellipses 475
-ellipsis/2 476
-ellipsoid/1 1
-ellipsoidal
-elliptic
-elliptical/8 1
-Ellis
-Ellison/3
-elm/1 1
-Elma/3
-Elmer/3
-Elmo/3
-Elnath/3
-Elnora/3
-elocution/2 1
-elocutionary
-elocutionist/1 1
-elodea/1 1
-Elohim
-Eloise/3
-elongate/6 1
-elongation/1 1
-elope/6 1
-elopement/1 1
-eloquence/2 1
-eloquent/8 1
-Eloy/3
-Elroy/3
-Elsa/3
-else 1
-elsewhere
-Elsie/3
-Elsinore
-Eltanin/3
-Elton/3
-elucidate/6 1
-elucidation/1 1
-elude/6 1
-Elul/2 1
-elusive/16 1
-eluted
-Elva/3
-elven
-elver/1 1
-Elvia/3
-Elvin/3
-Elvira/3
-Elvis/3
-elvish/89 1
-Elway/3
-Elwood/3
-Elysee/3
-Elysian
-Elysium/1 1
-EM
-em/1 1
-emaciate/6 1
-emaciation/2 1
-Emacs/3
-email/23 1
-emanate/6 1
-emanation/1 1
-emancipate/6 1
-emancipation/2 1
-emancipator/1 1
-emancipatory
-Emanuel/3
-emasculate/6 1
-emasculation/2 1
-embalm/11 1
-embalmer/1 1
-embalming 1
-embank/11 1
-embankment/1 1
-embargo/22 1
-embark/11 1
-embarkation/1 1
-embarrass/7 1
-embarrassed 1
-embarrassing/8 1
-embarrassment/1 1
-embassy/15 1
-embattled
-embed/274 1
-embeddable
-embedding/10 1
-embellish/7 1
-embellishment/1 1
-ember/1 1
-embezzle/6 1
-embezzlement/2 1
-embezzler/1 1
-embitter/11 1
-embitterment/2 1
-emblazon/11 1
-emblazonment/2 1
-emblem/18 1
-emblematic
-emblematically
-embodiment/1 1
-embody/31 1
-embolden/11 1
-embolism/1 1
-embosom 1
-emboss/7 1
-embosser/1 1
-embouchure/2 1
-embower/11 1
-embrace/28 1
-embraceable
-embrasure/1 1
-embrocation/1 1
-embroider/11 1
-embroiderer/1 1
-embroidery/15 1
-embroil/11 1
-embroilment/2 1
-embryo/1 1
-embryological 1
-embryologist/1 1
-embryology/2 1
-embryonic 1
-embryo 1
-emcee/63 1
-emend/11 1
-emendation/1 1
-emerald/1 1
-emerge/6 1
-emergence/2 1
-emergency/15 1
-emergent 1
-emerita 1
-emeritus 1
-Emerson
-Emery/3
-emery/2 1
-emetic/1 1
-emf/10 1
-emigrant/1 1
-emigrate/6 1
-emigration/1 1
-emigre/1 1
-Emil/3
-Emile/2 1
-Emilia/2 1
-Emilio/3
-Emily/3
-Eminem/3
-eminence/1 1
-Eminence 1
-eminent/8 1
-emir/1 1
-emirate/1 1
-emissary/15 1
-emission/1 1
-emissivity/60 1
-emit/12 1
-emitter/1 1
-Emma/3
-Emmanuel
-Emmett/3
-Emmy 1
-emollient/1 1
-emolument/1 1
-Emory/3
-emote/6 1
-emoticon/1 1
-emotion/1 1
-emotional/8 1
-emotionalism/2 1
-emotionality 1
-emotionalize/6 1
-emotionless 1
-emotive/8 1
-empanel/11 1
-empathetical
-empathetic 1
-empathic 1
-empathize/6 1
-empathy/2 1
-emperor/1 1
-emphases 477
-emphasis/2 478
-emphasize/6 1
-emphatic/39 1
-emphysema/2 1
-empire/1 1
-empirical/8 1
-empiricism/2 1
-empiricist/1 1
-empiric 1
-emplacement/1 1
-employ/23 1
-employable 1
-employe/28 1
-employee/1 1
-employer/1 1
-employment/1 1
-emporium/1 1
-empower/11 1
-empowerment/2 1
-empress/4 1
-emptier 1
-empty/275 1
-emptying 1
-empyrean/2 1
-EMT
-emu/1 1
-emulate/6 1
-emulation/1 1
-emulative 1
-emulator/1 1
-emulsification/2 1
-emulsifier/1 1
-emulsify/31 1
-emulsion/1 1
-en/1 1
-enable/6 1
-enabler/1 1
-enact/11 1
-enactment/1 1
-enamel/23 1
-enameler/1 1
-enamelings
-enamelware/2 1
-enamor/11 1
-enamored 1
-enc
-encamp/11 1
-encampment/1 1
-encapsulate/6 1
-encapsulation/1 1
-Encarta/3
-encase/6 1
-encasement/2 1
-encephalitic
-encephalitis/2 1
-encephalopathy 1
-enchain/11 1
-enchant/11 1
-enchanter/1 1
-enchanting/8 1
-enchantment/1 1
-enchantress/4 1
-enchilada/1 1
-encipher/11 1
-encircle/6 1
-encirclement/1 1
-encircling 1
-encl
-enclave/18 1
-enclose/6 1
-enclosure/1 1
-encode/6 1
-encoder/1 1
-encomium/1 1
-encompass/7 1
-encore/28 1
-encounter/23 1
-encourage/6 1
-encouragement/1 1
-encourager 1
-encouraging/8 1
-encroach/7 1
-encroachment/1 1
-encrust/11 1
-encrustation/1 1
-encrypt/11 1
-encryption 1
-encumber/11 1
-encumbrance/1 1
-ency
-encyclical/1 1
-encyclopaedic 1
-encyclopedia/1 1
-encyclopedic 1
-encyst/11 1
-encystment/2 1
-end/23 1
-endanger/11 1
-endangerment/2 1
-endear/11 1
-endearing/8 1
-endearment/1 1
-endeavor/23 1
-endemic/51 1
-endgame/10 1
-ending/1 1
-endive/1 1
-endless/16 1
-endmost 1
-endocrine/1 1
-endocrinologist/1 1
-endocrinology/2 1
-endogenous
-endogenously
-endomorphism/10 1
-endoplasmic
-endorphin/1 1
-endorse/6 1
-endorsement/1 1
-endorser/1 1
-endoscope/1 1
-endoscopic
-endoscopy/2 1
-endothermic 1
-endow/11 1
-endowment/1 1
-endpapers
-endpoint/1 1
-endue/6 1
-endungeoned
-endurable 1
-endurance/2 1
-endure/6 1
-enduring 1
-endways 1
-endwise 1
-Endymion
-ENE/2 1
-enema/1 1
-enemy/15 1
-energetic/276 1
-energize/6 1
-energizer/1 1
-energy/15 1
-enervate/6 1
-enervation/2 1
-enfeeble/6 1
-enfeeblement/2 1
-enfilade/28 1
-enfold/11 1
-enforce/6 1
-enforceability 1
-enforceable
-enforced 1
-enforcement/1 1
-enforcer/1 1
-enfranchise/6 1
-enfranchisement/2 1
-enfranchiser
-Eng
-engage/6 1
-engaged 1
-engagement/1 1
-engaging/8 1
-Engels/2 1
-engender/11 1
-engine/77 1
-engineer/23 1
-engineering/2 1
-England/2 1
-English/277 1
-Englishman/2 479
-Englishmen 480
-Englishwoman/2 481
-Englishwomen 482
-engorge/6 1
-engorgement/2 1
-engrained 1
-engram/1 1
-engrave/6 1
-engraver/1 1
-engraving/1 1
-engross/7 1
-engrossed 1
-engrossing 1
-engrossment/2 1
-engulf/11 1
-engulfment/2 1
-enhance/6 1
-enhanceable
-enhancement/1 1
-enhancer/10 1
-enharmonic 1
-Enid
-Enif/3
-enigma/1 1
-enigmatic
-enigmatically
-Eniwetok/2 1
-enjambement/1 1
-enjambment/1 1
-enjoin/11 1
-enjoy/11 1
-enjoyability
-enjoyable/19 1
-enjoyment/1 1
-Enkidu/2 1
-enlarge/6 1
-enlargeable
-enlarged 1
-enlargement/1 1
-enlarger/1 1
-enlighten/11 1
-enlightened 1
-enlightening 1
-enlightenment/2 1
-enlist/11 1
-enlistee/1 1
-enlistment/1 1
-enliven/11 1
-enlivening 1
-enlivenment/2 1
-enmesh/7 1
-enmeshment/2 1
-enmity/15 1
-ennoble/6 1
-ennoblement/2 1
-ennobling 1
-ennui/2 1
-Enoch
-enormity/15 1
-enormous/16 1
-Enos
-enough/2 1
-enplane/6 1
-enquirer/10 1
-enquiringly
-enrage/6 1
-enraged 1
-enrapture/6 1
-enraptured 1
-enrich/7 1
-enrichment/2 1
-Enrico/3
-Enrique/3
-enrobed
-enroll/11 1
-enrolling 1
-enrollment/1 1
-Enron/3
-ensconce/6 1
-ensemble/1 1
-enshrine/6 1
-enshrinement/2 1
-enshroud/11 1
-ensign/1 1
-ensilage/2 1
-enslave/6 1
-enslavement/2 1
-ensnare/6 1
-ensnarement/2 1
-ensue/6 1
-ensuing 1
-ensure/6 1
-ensurer/1 1
-entail/5 1
-entailment/2 1
-entangle/6 1
-entangled 1
-entanglement/1 1
-entangler 1
-entente/1 1
-enter/11 1
-entering 1
-enteritis/2 1
-Enterprise/3
-enterprise/1 1
-enterprising/8 1
-entertain/11 1
-entertainer/1 1
-entertaining/37 1
-entertainment/1 1
-enthalpy/60 1
-enthrall/11 1
-enthralling 1
-enthrallment/2 1
-enthrone/6 1
-enthronement/1 1
-enthuse/6 1
-enthusiasm/1 1
-enthusiast/1 1
-enthusiastic/39 1
-entice/6 1
-enticement/1 1
-enticing/8 1
-entire/8 1
-entirety/2 1
-entitle/6 1
-entitlement/1 1
-entity/15 1
-entomb/11 1
-entombment/2 1
-entomological 1
-entomologist/1 1
-entomology/2 1
-entourage/1 1
-entr'acte 1
-entrails
-entrails's
-entrain/195 1
-entrainment 1
-entrance/28 1
-entrancement/2 1
-entrancing/8 1
-entrant/1 1
-entrap/105 1
-entrapment/2 1
-entreat/11 1
-entreatingly
-entreaty/15 1
-entree/1 1
-entrench/7 1
-entrenchment/1 1
-entrepreneur/1 1
-entrepreneurial
-entrepreneurship 1
-entropic
-entropy/2 1
-entrust/11 1
-entry/15 1
-entryphone
-entryphones
-entryway/1 1
-entwine/6 1
-enumerable 1
-enumerate/6 1
-enumeration/1 1
-enumerator/1 1
-enunciate/6 1
-enunciation/2 1
-enure/6 1
-enuresis/2 1
-enures 1
-envelop/11 1
-envelope/28 1
-enveloper/1 1
-envelopment/2 1
-envenom/11 1
-enviable/19 1
-envious/16 1
-environ/58 1
-environment/1 1
-environmental/8 1
-environmentalism/2 1
-environmentalist/1 1
-environs's
-envisage/6 1
-envision/11 1
-envoy/1 1
-envy/56 1
-envyingly 1
-enzymatic 1
-enzyme/1 1
-Eocene/2 1
-EOE
-eolian 1
-eon/1 483
-EPA/2 1
-epaulet/1 1
-epaulette/1 1
-Epcot/3
-epee/1 1
-ephedrine/2 1
-ephemera/2 1
-ephemeral/8 1
-ephemera's 484
-ephemera 485
-ephemeris 1
-Ephesian/10 1
-Ephesus
-Ephraim
-epic/1 1
-epically
-epicenter/1 1
-Epictetus
-epic 1
-epicure/1 1
-epicurean/1 1
-Epicurean 1
-Epicurus/2 1
-epicycles
-epicycloid 1
-epidemic/51 1
-epidemiological 1
-epidemiologist/1 1
-epidemiology/2 1
-epidermal
-epidermic 1
-epidermis/4 1
-epidural/10 1
-epiglottis/4 1
-epigram/1 1
-epigrammatic 1
-epigraph/1 1
-epigraphical
-epigraphy/2 1
-epilepsy/2 1
-epileptic/1 1
-epilog/1 1
-epilogue/18 1
-Epimethius/3
-epinephrin/2 1
-epinephrine/2 1
-epiphany/15 1
-Epiphany/15 1
-epiphenomena 486
-epiphenomenon 487
-episcopacy/2 1
-Episcopalian/1 1
-episcopalian 1
-episcopal 1
-Episcopal 1
-episcopate/2 1
-episode/1 1
-episodic/39 1
-epistemic 1
-epistemological 1
-epistemology 1
-epistle/1 1
-Epistle 1
-epistolary 1
-epitaph/18 1
-epitaxial
-epitaxy 1
-epithelial
-epithelium/2 1
-epithet/1 1
-epithetic
-epitome/1 1
-epitomize/6 1
-epoch/1 1
-epochal 1
-eponymous
-epoxy/56 1
-epsilon/1 1
-Epsom
-Epson/3
-Epstein
-equability/2 1
-equable/19 1
-equal/210 1
-equality/15 1
-equalization/2 1
-equalize/6 1
-equalizer/1 1
-equanimity/2 1
-equatable
-equate/6 1
-equation/1 1
-equator/1 1
-equatorial 1
-equerry/15 1
-equestrian/1 1
-equestrianism/2 1
-equestrienne/1 1
-equiangular
-equidistant/8 1
-equilateral/1 1
-equilibrating
-equilibration 1
-equilibrium/2 1
-equine/1 1
-equinoctial 1
-equinox/4 1
-equip/105 1
-equipage/1 1
-equipartition
-equipment/1 1
-equipoise/2 1
-equitable/19 1
-equitation/2 1
-equity/15 1
-equiv
-equivalence/1 1
-equivalency/15 1
-equivalent/30 1
-equivocal/16 1
-equivocate/6 1
-equivocation/1 1
-equivocator/1 1
-Equuleus
-er
-ER
-Er/2 1
-ERA
-era/1 1
-eradicable 1
-eradicate/6 1
-eradication/2 1
-eradicator/1 1
-eras/205 1
-erasable
-erase/6 1
-eraser/1 1
-Erasmus/2 1
-erasure/1 1
-Erato/2 1
-Eratosthenes/2 1
-erbium/2 1
-ere
-Erebus/2 1
-erect/158 1
-erectile
-erection/1 1
-erector/1 1
-Erector 1
-erelong
-eremite/1 1
-Erewhon/2 1
-erg/1 1
-ergodic
-ergonomic/32 1
-ergonomically
-ergophobia
-ergosterol/2 1
-ergot/2 1
-ergo 1
-Erhard
-Eric/3
-Erica/3
-Erich/3
-Erick/3
-Ericka/3
-Erickson/3
-Ericson
-Ericsson
-Eridanus
-Erie 1
-Erik/3
-Erika/3
-Eriksson
-Erin
-Eris/4 1
-Eritrea/2 1
-Eritrean/1 1
-Erlenmeyer/3
-Erma/3
-ermine/1 1
-Erna/3
-Ernest/3
-Ernestine/3
-Ernesto/3
-Ernie/3
-Ernst
-erode/6 1
-erodible
-erogenous
-Eros/4 1
-erosion/2 1
-erosional
-erosive 1
-erotic/276 1
-erotica/2 1
-eroticism/2 1
-erotics/89 1
-err/11 1
-errand/1 1
-errant 1
-errata/1 1
-errata's 488
-errata 489
-erratic/39 1
-erratum/2 490
-erring 1
-Errol/3
-erroneous/8 1
-error/1 1
-ersatz/4 1
-Erse/2 1
-erst 1
-erstwhile 1
-eruct/11 1
-eructation/1 1
-erudite/8 1
-erudition/2 1
-erupt/11 1
-eruption/1 1
-eruptive 1
-ErvIn/3
-Erwin/3
-erysipelas/2 1
-erythrocyte/1 1
-Esau/2 1
-escalate/6 1
-escalation/1 1
-escalator/1 1
-escallop/23 1
-escalop/11 1
-escalope/6 1
-escapade/1 1
-escape/28 1
-escapee/1 1
-escapement/1 1
-escapism/2 1
-escapist/1 1
-escapologist/10 1
-escapology 1
-escargot/1 1
-escarole/1 1
-escarpment/1 1
-eschatology 1
-Escher/3
-Escherichia/3
-eschew/11 1
-Escondido
-escort/23 1
-escritoire/1 1
-escrow/18 1
-escudo/1 1
-escutcheon/1 1
-ESE/2 1
-Eskimo/1 1
-ESL
-Esmeralda/3
-esophageal
-esophagi 491
-esophagus/2 492
-esoteric/39 1
-esoterica 1
-ESP/2 1
-espadrille/1 1
-espalier/23 1
-especial/8 1
-Esperanto/2 1
-Esperanza/3
-Espinoza/3
-espionage/2 1
-esplanade/1 1
-ESPN
-espousal/2 1
-espouse/6 1
-espresso/1 1
-esprit/2 1
-esp 1
-espy/31 1
-Esq/2 1
-esquire/1 1
-Esquire/1 1
-esquire/58 1
-essay/23 1
-essayer/1 1
-essayist/1 1
-Essen/2 1
-essence/1 1
-Essene 1
-essential/30 1
-essentialist 1
-Essequibo
-Essex
-Essie/3
-est
-EST/2 1
-establish/7 1
-establishment/1 1
-Establishment 1
-estate/18 1
-Esteban/3
-esteem/23 1
-Estela/3
-Estella/3
-Estelle/3
-Ester/3
-ester/1 1
-Esterhazy/3
-Estes
-Esther/2 1
-esthete/1 1
-esthetic/32 1
-esthetically
-estimable 1
-estimate/28 1
-estimation/1 1
-estimator/1 1
-Estonia/2 1
-Estonian/1 1
-Estrada/3
-estrange/6 1
-estranged 1
-estrangement/1 1
-estrogen/2 1
-estrous 1
-estrus/4 1
-estuarine
-estuary/15 1
-ET
-ETA
-eta/1 1
-etc
-etch/7 1
-etcher/1 1
-etching/1 1
-ETD
-eternal/16 1
-eternity/15 1
-Ethan/3
-ethane/2 1
-ethanol/2 1
-Ethel/3
-Ethelred/3
-ether/2 1
-ethereal/8 1
-etherized
-Ethernet
-ethic/130 1
-ethical/8 1
-ethicist 1
-ethic 1
-Ethiopia/2 1
-Ethiopian/1 1
-ethnic/1 1
-ethnically
-ethnicity/2 1
-ethnic 1
-ethnocentric 1
-ethnocentrism/2 1
-ethnographer/10 1
-ethnographic
-ethnographically
-ethnography 1
-ethnological/8 1
-ethnologist/1 1
-ethnology/2 1
-ethological 1
-ethologist/1 1
-ethology/2 1
-ethos/2 1
-ethyl/2 1
-ethylene/2 1
-etiolated
-etiologic
-etiological 1
-etiology/15 1
-etiquette/2 1
-Etna/2 1
-Eton 1
-Etruria
-Etruscan 1
-Etta/3
-etude/1 1
-etymological/8 1
-etymologist/1 1
-etymology/15 1
-EU
-Eu/2 1
-eucalypti 493
-eucalyptus/4 494
-Eucharist/1 1
-Eucharistic
-euchre/28 1
-Euclid/2 1
-euclidean
-Euclidean
-Eugene
-Eugenia/2 1
-eugenic/35 1
-eugenicist/1 1
-Eugenie/3
-Eugenio/3
-eukaryote 1
-Eula/3
-Euler
-eulogist/1 1
-eulogistic 1
-eulogize/6 1
-eulogizer/1 1
-eulogy/15 1
-Eumenides/2 1
-Eunice/3
-eunuch/1 1
-euphemism/1 1
-euphemistic
-euphemistically
-euphonious/8 1
-euphonium/10 1
-euphony/2 1
-euphoria/2 1
-euphoric
-euphorically
-Euphrates/2 1
-Eur
-Eurasia/2 1
-Eurasian/1 1
-eureka 1
-Euripides
-euro/1 1
-Eurodollar/1 1
-Europa/2 1
-Europe/2 1
-European/1 1
-europium/2 1
-Eurydice/2 1
-Eustachian/3
-eutectic 1
-Euterpe/2 1
-euthanasia/2 1
-euthanize 1
-euthenics/2 1
-Eva/3
-evacuate/6 1
-evacuation/1 1
-evacuee/1 1
-evadable
-evade/6 1
-evader/1 1
-evaluable
-evaluate/6 1
-evaluation/1 1
-evaluational
-evaluative
-evaluator/10 1
-Evan/1 1
-evanescence/2 1
-evanescent 1
-evangelic
-evangelical/30 1
-evangelicalism/2 1
-Evangelical 1
-Evangelina/3
-Evangeline/3
-evangelism/2 1
-evangelist/1 1
-evangelistic 1
-Evangelist 1
-evangelize/6 1
-Evansville
-evaporate/6 1
-evaporation/2 1
-evaporator/1 1
-evasion/1 1
-evasive/16 1
-eve/1 1
-Eve/2 1
-Evelyn
-even/52 1
-evener 1
-evenhanded/8 1
-evening/1 1
-Evenki/2 1
-evensong/2 1
-event/1 1
-eventful/16 1
-eventide/2 1
-eventing
-eventual/8 1
-eventuality/15 1
-eventuate/6 1
-Everest/2 1
-Everett/3
-Everette/3
-everglade/1 1
-Everglades/2 1
-evergreen/1 1
-everlasting/30 1
-everliving
-evermore
-EverReady/3
-Evert/3
-ever 1
-everybody/2 1
-everyday 1
-everyman 1
-everyone/2 1
-everyplace
-everything/2 1
-every 1
-everywhere
-Evian/3
-evict/11 1
-eviction/1 1
-evidence/28 1
-evident/8 1
-evidential 1
-evident 1
-evil/278 1
-evildoer/1 1
-evildoing/2 1
-evince/6 1
-eviscerate/6 1
-evisceration/2 1
-Evita/3
-evocation/1 1
-evocative/8 1
-evoke/6 1
-evolute 1
-evolution/1 1
-evolutionary/211 1
-evolutionism 1
-evolutionist/1 1
-evolve/6 1
-ewe/1 1
-ewer/1 1
-Ewing/3
-ex/4 495
-exacerbate/6 1
-exacerbating 1
-exacerbation/2 1
-exact/98 1
-exacter 1
-exacting/8 1
-exaction/2 1
-exactitude/2 1
-exaggerate/6 1
-exaggerated/8 1
-exaggeration/1 1
-exaggerator/1 1
-exalt/11 1
-exaltation/2 1
-exalted 1
-exam/1 1
-examinable
-examination/1 1
-examine/6 1
-examinees
-examiner/1 1
-example/28 1
-exasperate/6 1
-exasperated/8 1
-exasperating/8 1
-exasperation/2 1
-Excalibur/2 1
-excavate/6 1
-excavation/1 1
-excavator/1 1
-Excedrin/3
-exceed/11 1
-exceeding/8 1
-excel/61 1
-excellence/2 1
-excellency/15 1
-Excellency/15 1
-excellent/8 1
-excelling 1
-excelsior/2 1
-except/11 1
-exception/1 1
-exceptionable 1
-exceptional/8 1
-excerpt/23 1
-excerpting 1
-excess/40 1
-excessive/8 1
-excess 1
-exchange/28 1
-exchangeable 1
-exchanger/10 1
-exchequer/1 1
-Exchequer 1
-excise/28 1
-excision/1 1
-excitability/2 1
-excitable/19 1
-excitation/1 1
-excite/6 1
-excited/8 1
-excitement/1 1
-exciter/1 1
-exciting/8 1
-exciton 1
-excl/10 1
-exclaim/11 1
-exclamation/1 1
-exclamatory 1
-exclude/6 1
-exclusion/1 1
-exclusionary
-exclusive/36 1
-exclusivity/2 1
-excommunicate/43 1
-excommunication/1 1
-excoriate/6 1
-excoriation/1 1
-excrement/2 1
-excremental
-excrescence/1 1
-excrescent 1
-excreta/2 1
-excrete/6 1
-excretion/1 1
-excretory 1
-excruciating/8 1
-excruciation 1
-exculpate/6 1
-exculpation/2 1
-exculpatory
-excursion/18 1
-excursionist/1 1
-excursive/16 1
-excusable/19 1
-excuse/28 1
-exec/64 1
-execrable/19 1
-execrate/6 1
-execration/2 1
-executable 1
-execute/6 1
-execution/1 1
-executioner/1 1
-executive/1 1
-executor/1 1
-executrix/184 1
-exegeses 496
-exegesis/2 497
-exegetical 1
-exegetic 1
-exemplar/1 1
-exemplary 1
-exemplification/1 1
-exemplify/31 1
-exempt/5 1
-exemption/1 1
-exempt 1
-exercisable
-exercise/28 1
-exerciser/1 1
-Exercycle 1
-exert/11 1
-exertion/1 1
-exeunt
-exfoliate/6 1
-exfoliation 1
-exhalation/1 1
-exhale/6 1
-exhaust/23 1
-exhaustible
-exhausting 1
-exhaustion/2 1
-exhaustive/16 1
-exhibit/23 1
-exhibition/1 1
-exhibitioner/10 1
-exhibitionism/2 1
-exhibitionist/1 1
-exhibitor/1 1
-exhilarate/6 1
-exhilarating 1
-exhilaration/2 1
-exhort/11 1
-exhortation/1 1
-exhumation/1 1
-exhume/6 1
-exigence/1 1
-exigency/15 1
-exigent 1
-exiguity/2 1
-exiguous 1
-exile/28 1
-exist/11 1
-existence/1 1
-existential/8 1
-existentialism/2 1
-existentialist/1 1
-existentialistic 1
-existent 1
-exit/23 1
-exobiology/2 1
-Exocet/2 1
-exocrine 1
-Exodus/2 1
-exodus/4 1
-exogenous 1
-exonerate/6 1
-exoneration/2 1
-exorbitance/2 1
-exorbitant/8 1
-exorcise/6 1
-exorcism/1 1
-exorcist/1 1
-exorcize/6 1
-exoskeleton/1 1
-exosphere/1 1
-exothermic/39 1
-exotic/51 1
-exotica
-exoticism/2 1
-exp
-expand/11 1
-expandability 1
-expandable
-expanded 1
-expander 1
-expanse/1 1
-expansible
-expansion/1 1
-expansionary
-expansionism/2 1
-expansionist/1 1
-expansive/16 1
-expat/10 1
-expatiate/6 1
-expatiation/2 1
-expatriate/28 1
-expatriation/2 1
-expect/11 1
-expectancy/15 1
-expectant/8 1
-expectation/1 1
-expectational
-expected 1
-expecting 1
-expectorant/1 1
-expectorate/6 1
-expectoration/2 1
-expedience/1 1
-expediency/15 1
-expedient/30 1
-expedite/6 1
-expediter/1 1
-expedition/1 1
-expeditionary
-expeditious/16 1
-expeditor/1 1
-expel/61 1
-expelling 1
-expend/11 1
-expendable/1 1
-expenditure/1 1
-expense/18 1
-expensive/16 1
-experience/28 1
-experiential 1
-experiment/23 1
-experimental/8 1
-experimentalist/10 1
-experimentation/2 1
-experimenter/1 1
-expert/220 1
-expertise/2 1
-expertize 1
-expiate/6 1
-expiation/2 1
-expiatory
-expiration/2 1
-expiratory
-expire/6 1
-expiring 1
-expiry/2 1
-explain/11 1
-explainable
-explanation/1 1
-explanatory 1
-expletive/1 1
-explicable
-explicate/6 1
-explication/1 1
-explicative 1
-explicit/16 1
-explode/6 1
-exploder/10 1
-exploit/23 1
-exploitable
-exploitation/1 1
-exploitative
-exploiter/1 1
-explorable
-exploration/1 1
-exploratory
-explore/6 1
-explorer/1 1
-explosion/1 1
-explosive/36 1
-expo/1 1
-exponent/1 1
-exponential/8 1
-exponentiation 1
-export/23 1
-exportability 1
-exportable
-exportation/2 1
-exporter/1 1
-expos/205 1
-expose/28 1
-exposed 1
-exposition/1 1
-expositor/1 1
-expository 1
-expostulate/6 1
-expostulation/1 1
-exposure/1 1
-expound/11 1
-expounder/1 1
-express/279 1
-expressible
-expression/1 1
-expressionism/2 1
-expressionist/1 1
-expressionistic
-expressionless/8 1
-expressive/16 1
-expressway/1 1
-expropriate/6 1
-expropriation/1 1
-expropriator/1 1
-expulsion/1 1
-expunge/6 1
-expurgate/6 1
-expurgation/1 1
-exquisite/16 1
-ext
-extant 1
-extemporaneous/16 1
-extempore 1
-extemporization/2 1
-extemporize/6 1
-extend/11 1
-extendability 1
-extendable
-extended 1
-extender/1 1
-extendible
-extensibility 1
-extensible 1
-extension/1 1
-extensional/8 1
-extensive/16 1
-extensors
-extent/1 1
-extenuate/6 1
-extenuating 1
-extenuation/2 1
-exterior/1 1
-exterminate/6 1
-extermination/1 1
-exterminator/1 1
-external/30 1
-externalization/1 1
-externalize/6 1
-extinct/11 1
-extinction/1 1
-extinct 1
-extinguish/7 1
-extinguishable
-extinguisher/1 1
-extirpate/6 1
-extirpation/2 1
-extol/61 1
-extoll/11 1
-extolling 1
-extort/11 1
-extortion/2 1
-extortionate/8 1
-extortioner/1 1
-extortionist/1 1
-extra/1 1
-extracellular 1
-extract/23 1
-extractable
-extraction/1 1
-extractive 1
-extractor/1 1
-extracurricular 1
-extraditable
-extradite/6 1
-extradition/1 1
-extragalactic
-extrajudicial 1
-extralegal 1
-extralinguistic
-extramarital
-extramural 1
-extraneous/8 1
-extraordinaire
-extraordinary/211 1
-extrapolate/6 1
-extrapolation/1 1
-extrasensory
-extrasolar
-extraterrestrial/1 1
-extraterritoriality/2 1
-extraterritorial 1
-extra 1
-extravagance/1 1
-extravagant/8 1
-extravaganza/1 1
-extravehicular
-extravert/18 1
-extremal
-extrema 498
-extreme/25 1
-extremism/2 1
-extremist/1 1
-extremity/15 1
-extricable
-extricate/6 1
-extrication/2 1
-extrinsic/39 1
-extroversion/2 1
-extrovert/62 1
-extrude/6 1
-extrusion/1 1
-extrusive
-ex 1
-exuberance/2 1
-exuberant/8 1
-exudate 1
-exudation/2 1
-exude/6 1
-exult/11 1
-exultant/8 1
-exultation/2 1
-exulting/8 1
-exurb/1 1
-exurban
-exurbanite/1 1
-exurbia/2 1
-Exxon/3
-Eyck/3
-eye/28 1
-eyeball/23 1
-eyebrow/1 1
-eyedropper/1 1
-eyed 1
-eyeful/1 1
-eyeglass/4 1
-eyelash/4 1
-eyeless 1
-eyelet/18 1
-eyelid/1 1
-eyeliner/1 1
-eyeopener/1 1
-eyeopening
-eyepiece/1 1
-eyeshadow 1
-eyesight/2 1
-eyesore/1 1
-eyestrain/2 1
-eyeteeth 499
-eyetooth/2 500
-eyewash/2 1
-eyewitness/3
-eyewitnesses
-Eyre
-eyrie/1 1
-eyry/15 1
-Eysenck/3
-Ezekiel
-Ezra
-f/280 1
-F/2 1
-fa/2 1
-FAA
-Faberge
-Fabian/1 1
-fable/77 1
-fabric/1 1
-fabricate/6 1
-fabrication/1 1
-fabricator/1 1
-fab 1
-fabulists
-fabulous/8 1
-facade/1 1
-face/28 1
-facecloth/1 1
-faceless 1
-facelift/18 1
-faceplate 1
-facet/23 1
-facetious/16 1
-facial/30 1
-facile/8 1
-facilitate/6 1
-facilitation/2 1
-facilitative
-facilitator/1 1
-facility/15 1
-facing/1 1
-fact/1 1
-faction/1 1
-factional
-factionalism/2 1
-factious 1
-factitious 1
-factoid/1 1
-factor/23 1
-factorial/1 1
-factorisable
-factorization/10 1
-factorize/6 1
-factory/15 1
-factotum/1 1
-factual/8 1
-faculty/15 1
-facsimile/63 1
-fad/18 1
-faddiness
-faddish/153 1
-faddist/1 1
-faddy 1
-fade/28 1
-faded 1
-fadeout 1
-fading 1
-faecal 1
-faeces/2 1
-faerie/1 1
-Faeroe/3
-faery/15 1
-faff/11 1
-Fafnir
-fag/92 1
-fagging 1
-faggoting's
-Fagin/2 1
-fagot/86 1
-fagoting/2 1
-Fahd/3
-Fahrenheit 1
-faience/2 1
-fail/23 1
-failing/1 1
-faille/2 1
-failure/1 1
-fain/166 1
-faint/52 1
-fainter 1
-fainthearted 1
-fainting 1
-fain 1
-fair/281 1
-Fairbanks
-fairground/1 1
-fairing/1 1
-fairings/89 1
-fairish 1
-fairway/1 1
-fairy/15 1
-fairyland/1 1
-fairytale 1
-fairy 1
-Faisal/3
-Faisalabad
-Faith
-faith/18 1
-faithful/36 1
-faithless/16 1
-fajita/130 1
-fake/139 1
-faker/1 1
-fakir/1 1
-Falasha 1
-falcon/18 1
-falconer/1 1
-falconry/2 1
-Falkland/3
-Falklands
-fall/112 501
-fallacious/8 1
-fallacy/15 1
-fallback 1
-faller/10 1
-fallibility/2 1
-fallible/29 1
-falling 1
-falloff/1 1
-fallopian
-Fallopian/3
-fallout/2 1
-fallow/23 1
-false/27 1
-falsehood/1 1
-falsetto/1 1
-falsie/1 1
-falsifiability 1
-falsifiable
-falsification/1 1
-falsifier/1 1
-falsify/31 1
-falsity/15 1
-Falstaff/2 1
-falter/23 1
-faltering/191 1
-Falwell/3
-fame/149 1
-familial
-familiar/30 1
-familiarity/15 1
-familiarization/2 1
-familiarize/6 1
-families
-family/3
-famine/1 1
-famish/7 1
-famous/8 1
-fan/133 1
-fanatic/1 1
-fanatical/8 1
-fanaticism/2 1
-fanciable
-fancier/1 1
-fanciful/16 1
-fancily 1
-fancy/282 1
-fancywork/2 1
-fandango/1 1
-fanfare/1 1
-fang/62 1
-fanlight/1 1
-Fannie/3
-fanning 1
-fantail/1 1
-fantasia/1 1
-fantasist/10 1
-fantasize/6 1
-fantastical/8 1
-fantastic 1
-fantasy/56 1
-fantasying 502
-fanzine/1 1
-Fanny/3
-fanny/15 1
-FAQ/1 1
-far/283 503
-farad/1 1
-Faraday/2 1
-faradize/6 1
-faraway 1
-farce/18 1
-farcical/8 1
-fare/28 1
-farewell/18 1
-farfetched 1
-Fargo/2 1
-farina/2 1
-farinaceous
-Farley/3
-farm/78 1
-Farmer
-farmer/1 1
-farmhand/1 1
-farmhouse/1 1
-farming/1 1
-farmland/1 1
-farmstead/1 1
-farmyard/1 1
-faro/2 1
-farrago/4 1
-Farragut
-Farrakhan/3
-Farrell/3
-farrier/1 1
-Farrow/3
-farrow/23 1
-farseeing 1
-Farsi/2 1
-farsighted/33 1
-fart/23 1
-farthermost
-farthing/1 1
-far 1
-fascia/1 1
-fascicle/1 1
-fascinate/6 1
-fascinated 1
-fascinating/8 1
-fascination/1 1
-fascism/2 1
-Fascism 1
-fascist/1 1
-fascistic 1
-fascist 1
-Fascist 1
-fashion/23 1
-fashionable/19 1
-fashioner/1 1
-Fassbinder/3
-fa's 504
-fast/284 1
-fastback/1 1
-fastball/1 1
-fasten/11 1
-fastener/1 1
-fastening/1 1
-faster 1
-fa 505
-fastidious/16 1
-fasting 1
-fat/285 1
-Fatah/3
-fatal/8 1
-fatalism/2 1
-fatalist/1 1
-fatalistic/39 1
-fatality/15 1
-fatback/2 1
-fate/28 1
-fateful/16 1
-Fates
-fathead/1 1
-fatheaded
-fatheadedness
-father/1 1
-Father/1 1
-father/11 1
-fatherhood/2 1
-fatherland/1 1
-fatherless 1
-fatherly 1
-fathom/23 1
-fathomable
-fathomless 1
-fatigue/232 1
-Fatima
-Fatimid 1
-fatso/10 1
-fatten/11 1
-fattening 1
-fatuity/2 1
-fatuous/16 1
-fatwa/1 1
-fatty/286 1
-faucet/1 1
-Faulkner/2 1
-Faulknerian
-fault/23 1
-faultfinder/1 1
-faultfinding/2 1
-faultless/16 1
-faulty/50 1
-faun/1 1
-fauna/1 1
-Fauntleroy/3
-Faust/2 1
-Faustian 1
-Faustino/3
-Faustus/2 1
-fauvism/2 1
-fauvist/1 1
-fave/10 1
-favor/23 1
-favorable/19 1
-favored 1
-favoring 1
-favorite/1 1
-favoritism/2 1
-Fawkes
-fawn/23 1
-fawner/1 1
-fawning/8 1
-fax/287 1
-Fay/3
-fay/288 1
-Faye/3
-faze/6 1
-FBI/2 1
-FCC
-FD
-FDA
-FDIC/2 1
-FDR/2 1
-Fe/2 1
-fealty/2 1
-fear/23 1
-fearful/85 1
-fearless/16 1
-fearsome/83 1
-feasibility/2 1
-feasible/19 1
-feast/23 1
-feasting 1
-feat/1 1
-feather/23 1
-featherbedding/2 1
-featherbrained
-feathering 1
-featherless 1
-featherlight
-featherweight/1 1
-feathery/34 1
-feat 1
-feature/28 1
-featureless 1
-Feb/2 1
-febrile 1
-February/15 1
-fecal 1
-feces/2 1
-feckless/83 1
-fecundate/6 1
-fecundation/2 1
-fecundity/2 1
-fecund 1
-fed/1 1
-Fed/1 1
-federal/30 1
-Federal/1 1
-federalism/2 1
-federalist/1 1
-Federalist/2 1
-federalization/2 1
-federalize/6 1
-federate/6 1
-federation/1 1
-Federico/3
-FedEx
-fedora/1 1
-fed 506
-fee/77 1
-feeble/289 1
-feed/86 507
-feedback/2 1
-feedbag/1 1
-feeder/1 1
-feeding/1 1
-feedlot/1 1
-feedstock 1
-feedstuffs
-feel/86 508
-feeler/1 1
-feelgood
-feeling/30 1
-feelings 1
-fees 509
-feet 510
-feign/11 1
-feigned 1
-feigning 1
-feint/23 1
-feisty/34 1
-felafel/10 1
-feldspar/2 1
-Felecia/3
-Felice/3
-Felicia/2 1
-felicitate/6 1
-felicitation/1 1
-felicitous/8 1
-Felicity/3
-felicity/15 1
-feline/1 1
-Felipe/3
-Felix/3
-fell/179 1
-fella/10 511
-fellatio/2 1
-feller/10 1
-Fellini
-fellow/18 1
-fellowman/2 512
-fellowmen 513
-fellowship/18 1
-fellow 1
-fell 514
-felon/1 1
-felonious 1
-felon 1
-felony/15 1
-felt/23 1
-felting 1
-felt 515
-female/20 1
-feminine/30 1
-femininity/2 1
-feminism/2 1
-feminist/1 1
-feminize/6 1
-femoral
-fem 1
-femur/1 1
-fen/1 1
-fence/28 1
-fencepost 1
-fencer/1 1
-fencing/2 1
-fend/11 1
-fender/1 1
-fenestration/2 1
-Fenian 1
-fenland 1
-fennel/2 1
-feral 1
-Ferber/3
-Ferdinand
-Fergus
-Ferguson/3
-Ferlinghetti/3
-Fermat/2 1
-ferment/23 1
-fermentation/2 1
-Fermi
-fermion/10 1
-fermium/2 1
-Fern/3
-fern/1 1
-Fernandez/3
-Fernando/3
-ferny/34 1
-ferocious/16 1
-ferocity/2 1
-Ferrari/3
-Ferraro/3
-Ferrell/3
-ferret/23 1
-ferreting 1
-ferric 1
-Ferris
-ferrite 1
-ferromagnetic
-ferrous 1
-ferrule/18 1
-ferry/56 1
-ferryboat/1 1
-ferryman/2 516
-ferrymen 517
-fertile 1
-fertility/2 1
-fertilization/2 1
-fertilize/6 1
-fertilizer/1 1
-fer 1
-ferule/18 1
-fervency/2 1
-fervent/8 1
-fervid/8 1
-fervor/2 1
-fess/156 1
-fest/1 1
-festal 1
-fester/23 1
-festival/1 1
-festive/16 1
-festivity/15 1
-festoon/23 1
-feta/2 1
-fetal 1
-fetch/156 1
-fetcher/1 1
-fetching/8 1
-fete/28 1
-fetich/4 1
-fetid/33 1
-fetish/4 1
-fetishism/2 1
-fetishist/1 1
-fetishistic
-fetlock/1 1
-fetter/23 1
-fettle/2 1
-fettuccine/2 1
-fetus/4 1
-feud/23 1
-feudalism/2 1
-feudalistic
-feudal 1
-feuding 1
-fever/62 1
-feverish/16 1
-few/187 1
-Feynman/3
-fey 1
-Fez
-fez/290 1
-ff
-FHA/2 1
-fiance/1 1
-fiancee/1 1
-fiasco/4 1
-Fiat/3
-fiat/1 1
-fib/136 1
-fibber/1 1
-fiber/1 1
-fiberboard/2 1
-fibered
-fiberfill/2 1
-fiberglass/2 1
-Fiberglas 1
-Fibonacci/3
-fibril/1 1
-fibrillate/6 1
-fibrillation/2 1
-fibrin/2 1
-fibroblast/10 1
-fibroid 1
-fibrosis/2 1
-fibrous 1
-fibula/53 1
-fibular
-FICA/2 1
-fiche/1 1
-Fichte
-fichu/1 1
-fickle/84 1
-fiction/1 1
-fictional/8 1
-fictionalization/1 1
-fictionalize/6 1
-fictitious/8 1
-fictive 1
-ficus/2 1
-fiddle/28 1
-fiddler/1 1
-fiddlesticks
-fiddlier 518
-fiddliest 518
-fiddlings
-fiddly/34 1
-Fidel/3
-fidelity/2 1
-fidget/23 1
-fidgety 1
-Fido/3
-fiduciary/15 1
-fief/1 1
-fiefdom/1 1
-field/23 1
-fielder/1 1
-Fielding
-fielding 1
-Fields
-fieldsman 519
-fieldsmen 520
-fieldwork/2 1
-fieldworker/1 1
-fiend/1 1
-fiendish/8 1
-fierce/27 1
-fiery/50 1
-fiesta/1 1
-fie 1
-fife/18 521
-fifer/1 1
-FIFO
-fifteen/1 1
-fifteenth/1 1
-fifteen 1
-fifth/30 1
-fiftieth/1 1
-fifty/15 1
-fig/18 1
-Figaro/3
-fight/86 522
-fightback 1
-fighter/1 1
-fighting/2 1
-figment/1 1
-Figueroa/3
-figural 1
-figuration/2 1
-figurative/8 1
-figure/28 1
-figured 1
-figurehead/1 1
-figurine/1 1
-Fiji/2 1
-Fijian/1 1
-filament/1 1
-filamentary
-filamentous
-filbert/1 1
-filch/7 1
-filching 1
-file/28 1
-filer/1 1
-filet/23 1
-filial 1
-filibuster/23 1
-filibusterer/1 1
-filibustering 1
-filigree/63 1
-filing/1 1
-Filipino/1 1
-fill/23 1
-filler/1 1
-fillet/23 1
-fillies
-filling/1 1
-fillip/23 1
-Fillmore/2 1
-film/23 1
-filmmaker/1 1
-filmstrip/1 1
-filmy/49 1
-Filofax 1
-filo 1
-filter/23 1
-filterable 1
-filterer/1 1
-filth/2 1
-filthy/50 1
-filtrable 1
-filtrate/28 1
-filtration/2 1
-filly/3
-fin/291 1
-finagle/6 1
-finagler/1 1
-final/30 1
-finale/1 1
-finalist/1 1
-finality/2 1
-finalization/2 1
-finalize/6 1
-finance/28 1
-financial/8 1
-financier/18 1
-financing/2 1
-Finch/3
-finch/4 1
-find/86 523
-findable
-finder/1 1
-finding/130 1
-fine/107 1
-finer 1
-finery/2 1
-fines/79 1
-finespun
-finesse/28 1
-finessing 1
-fines 524
-finger/23 1
-fingerboard/1 1
-fingering/1 1
-fingerless 1
-fingerling/1 1
-fingermark/10 1
-fingernail/1 1
-fingerprint/23 1
-fingerprinting 1
-fingertip/1 1
-finial/1 1
-finical 1
-finickiness/3
-finicky/34 1
-fining 1
-finis/4 525
-finish/22 1
-finisher/1 1
-finishing 1
-finite/83 1
-fink/23 1
-Finland/2 1
-Finley/3
-Finn/1 1
-Finnbogadottir/3
-Finnegan/3
-Finnish/2 1
-fin 1
-finny/34 1
-Fiona/3
-fiord/1 1
-fir/18 1
-fire/28 1
-firearm/1 1
-fireball/1 1
-firebomb/23 1
-firebombings
-firebox/4 1
-firebrand/1 1
-firebreak/1 1
-firebrick/1 1
-firebug/1 1
-firecracker/1 1
-firedamp/2 1
-firefight/121 1
-firefighter/1 1
-firefighting/1 1
-firefight's
-fireflies
-firefly/3
-Firefox/3
-fireguard/10 1
-firehouse/1 1
-firelight/2 1
-firelighter/10 1
-fireman/2 526
-firemen 527
-fireplace/1 1
-fireplug/1 1
-firepower/2 1
-fireproof/11 1
-firer/1 1
-firesafe
-firescreen
-firescreens
-fireside/1 1
-Firestone/3
-firestorm/1 1
-firetrap/1 1
-firetruck/1 1
-firewall/18 1
-firewater/2 1
-firewood/2 1
-firework/1 1
-firing/10 1
-firkin 1
-firm/52 1
-firmament/1 1
-firmer 1
-firmware/1 1
-first/30 1
-firstborn/1 1
-firsthand 1
-firth/1 1
-fiscal/30 1
-Fischer
-fish/22 1
-fishbowl/1 1
-fishcake/1 1
-Fisher
-fisher/1 1
-fisherman/2 528
-fishermen 529
-fishery/15 1
-fishhook/1 1
-fishing/2 1
-fishmonger/1 1
-fishnet/1 1
-fishpond/1 1
-fishtail/5 1
-fishwife/2 530
-fishwives 531
-fishy/50 1
-Fisk/3
-fissile 1
-fission/18 1
-fissionable 1
-fissure/77 1
-fist/18 1
-fistfight/18 1
-fistful/1 1
-fisticuffs
-fisticuffs's
-fistula/1 1
-fistulous/2 1
-fit/292 1
-Fitch/3
-fitful/16 1
-fitment/10 1
-fitted 1
-fitter/1 1
-fitting/30 1
-Fitzgerald
-Fitzpatrick/3
-Fitzroy/3
-five/48 1
-fivefold
-fiver/10 1
-fives 532
-fix/287 1
-fixable 1
-fixate/6 1
-fixation/1 1
-fixative/1 1
-fixed/8 1
-fixer/1 1
-fixing/32 1
-fixity/2 1
-fixture/1 1
-Fizeau/3
-fizz/22 1
-fizzing 1
-fizzle/28 1
-fizzling 1
-fizzy/34 1
-fjord/1 1
-fl
-FL
-Fla
-flab/2 1
-flabbergast/11 1
-flabby/50 1
-flaccid/8 1
-flaccidity/2 1
-flack/18 1
-flag/92 1
-flagellant/10 1
-flagella 533
-flagellate/43 1
-flagellation/2 1
-flagellum/2 534
-flagging 1
-flagman/2 535
-flagmen 536
-flagon/1 1
-flagpole/1 1
-flagrance/2 1
-flagrancy/2 1
-flagrant/8 1
-flagship/1 1
-flagstaff/1 1
-flagstone/1 1
-flail/23 1
-flair/1 1
-flak/2 1
-flake/28 1
-flakier 537
-flakiest 537
-flak 1
-flaky/49 1
-flamage
-flamages
-flambe/23 1
-flamboyance/2 1
-flamboyancy/2 1
-flamboyant/8 1
-flame/28 1
-flamenco/1 1
-flameproof/11 1
-flamer/10 1
-flamethrower/1 1
-flaming/10 1
-flamingo/1 1
-flaming 1
-flammability/2 1
-flammable/1 1
-flam 1
-flan/1 1
-Flanagan/3
-Flanders/2 1
-flange/77 1
-flank/23 1
-flanker/1 1
-flannel/23 1
-flannelet/2 1
-flannelette/2 1
-flap/47 1
-flapjack/1 1
-flapper/1 1
-flare/28 1
-flareup/1 1
-flaring 1
-flash/293 1
-flashback/1 1
-flashbulb/1 1
-flashcard/1 1
-flashcube/1 1
-flasher/1 1
-flashgun/1 1
-flashing/2 1
-flashlight/1 1
-flashpoint/1 1
-flashy/50 1
-flask/1 1
-flat/292 1
-flatbed/1 1
-flatboat/1 1
-flatcar/1 1
-flatfeet 538
-flatfish/4 1
-flatfoot/62 539
-flatfooted 1
-Flathead 1
-flatiron/1 1
-flatland/2 1
-flatlet/10 1
-flatmate/10 1
-Flatt/3
-flatten/11 1
-flatter/11 1
-flatterer/1 1
-flattering/8 1
-flattery/2 1
-flattish 1
-flattop/1 1
-flatulence/2 1
-flatulent 1
-flatus/2 1
-flatware/2 1
-flatworm/1 1
-Flaubert
-flaunt/23 1
-flauntingly 1
-flautist/1 1
-flavor/23 1
-flavorful 1
-flavoring/1 1
-flavorless 1
-flavorsome 1
-flaw/23 1
-flawed 1
-flawless/16 1
-flax/2 1
-flaxen 1
-flay/11 1
-flayer/10 1
-flea/1 1
-fleabag/1 1
-fleabite/10 1
-fleapit/10 1
-fleck/23 1
-fledged
-fledgeling/1 1
-fledgling/1 1
-flee/294 1
-fleece/28 1
-fleecer/1 1
-fleecy/49 1
-fleet/52 1
-fleeting/16 1
-fleetingly/2 1
-Fleischer/3
-Fleming 1
-Flemish/2 1
-flesh/22 1
-fleshing 1
-fleshless 1
-fleshly/34 1
-fleshpot/1 1
-fleshy/34 1
-Fletcher
-flew 1
-flex/22 1
-flexibility/15 1
-flexible/19 1
-flexitime/2 1
-flextime/2 1
-flibbertigibbet/1 1
-flick/23 1
-flicker/23 1
-flickering 1
-flickery
-flier/1 540
-fliest 541
-flight/62 1
-flightless 1
-flightpath
-flighty/49 1
-flimflam/160 1
-flimsy/50 1
-flinch/22 1
-fling/86 542
-Flint
-flint/18 1
-flintlock/1 1
-Flintstones
-flinty/34 1
-flip/295 1
-flippable
-flippancy/2 1
-flippant/8 1
-flipper/1 1
-flippy/60 1
-flirt/23 1
-flirtation/1 1
-flirtatious/16 1
-flirting 1
-flirty 1
-flit/109 1
-flitting 1
-Flo/3
-float/23 1
-floatation 1
-floater/1 1
-floating 1
-floaty 1
-flocculation 1
-flock/23 1
-flocking/2 1
-floe/1 1
-flog/117 1
-flogger/1 1
-flogging/1 1
-flood/78 1
-flooder 1
-floodgate/1 1
-flooding 1
-floodlight/23 543
-floodlit 544
-floodplain/1 1
-floodwater/2 1
-floor/23 1
-floorboard/1 1
-flooring/2 1
-floorspace
-floorwalker/1 1
-floozie/1 1
-floozy/15 1
-flop/296 1
-flophouse/1 1
-flopper 1
-floppy/221 1
-Flora
-flora/1 1
-floral 1
-Florence/2 1
-Florentine 1
-Flores
-florescence/2 1
-florescent
-floret/1 1
-florid/16 1
-Florida/2 1
-Floridan 1
-Floridian/1 1
-florin/1 1
-Florine/3
-florist/1 1
-Florsheim/3
-Flory/3
-floss/22 1
-Flossie/3
-flossy/34 1
-flotation/1 1
-flotilla/1 1
-flotsam/2 1
-flounce/28 1
-flouncing 1
-flouncy/34 1
-flounder/23 1
-flour/23 1
-flourish/22 1
-flourishing 1
-floury/34 1
-flout/11 1
-flouter/1 1
-flout's
-flow/23 1
-flowchart/1 1
-flower/23 1
-flowerbed/1 1
-flowering/10 1
-flowerless 1
-flowerpot/1 1
-Flowers
-flowery/49 1
-flowing 1
-Floyd
-flt
-flu/2 1
-flub/136 1
-fluctuate/6 1
-fluctuation/1 1
-flue/1 1
-fluency/2 1
-fluent/8 1
-fluff/23 1
-fluffy/49 1
-fluid/30 1
-fluidity/2 1
-fluidized
-fluke/18 1
-flukey 545
-flukier 546
-flukiest 546
-fluky/34 1
-flume/18 1
-flummox/7 1
-flung 547
-flunk/23 1
-flunkey/1 1
-flunky/15 1
-fluoresce/6 1
-fluorescence/2 1
-fluorescent 1
-fluoridate/6 1
-fluoridation/2 1
-fluoride/1 1
-fluorine/2 1
-fluorite/2 1
-fluorocarbon/1 1
-fluoroscope/18 1
-fluoroscopic 1
-flurried 1
-flurry/56 1
-flush/293 1
-flusher 1
-flushing 1
-fluster/23 1
-flute/28 1
-fluting/2 1
-flutist/1 1
-flutter/23 1
-fluttering 1
-fluttery 1
-fluvial 1
-flux/22 1
-fly/297 1
-flyable 1
-flyaway 1
-flyblown
-flyby/1 1
-flycatcher/1 1
-flying/2 1
-flyleaf/120 1
-Flynn/3
-flyover/1 1
-flypaper/1 1
-flypast/10 1
-fly's
-flysheet/10 1
-flyspeck/23 1
-flyswatter/1 1
-flytrap/10 1
-flyway/1 1
-flyweight/1 1
-flywheel/1 1
-FM/1 1
-Fm/2 1
-FNMA/2 1
-foal/23 1
-foam/23 1
-foaming 1
-foamy/49 1
-fob/136 1
-focal/8 1
-Foch
-fo'c'sle
-fo'c's'le 1
-focus/22 1
-fodder/18 1
-foe/1 1
-foetid 1
-FOFL
-fog/92 1
-fogbound 1
-foghorn/1 1
-fogy/15 1
-foggy/50 1
-fogyish 1
-foible/1 1
-foil/23 1
-foiling 1
-foist/11 1
-Fokker
-fol
-fold/78 1
-foldaway 1
-folder/1 1
-folding 1
-foldout/1 1
-Foley
-Folgers
-foliage/2 1
-foliate 1
-folio/18 1
-folk/1 1
-folklore/2 1
-folkloric
-folklorist/1 1
-folksinger/1 1
-folksinging/2 1
-folksong 1
-folksy/49 1
-folktale/1 1
-folk 1
-folkway/1 1
-foll
-follicle/1 1
-follicular
-follies
-follow/5 1
-followable
-follower/1 1
-following/1 1
-followup/10 1
-Folsom
-folly/3
-Fomalhaut
-foment/11 1
-fomentation/2 1
-fond/21 1
-Fonda
-fondant/1 1
-fondle/6 1
-fondling 1
-fond 1
-fondu/2 1
-fondue/1 1
-fondu 1
-font/1 1
-fontanel/1 1
-fontanelle/1 1
-foobar
-foobars
-food/1 1
-foodie/1 1
-foodstuff/1 1
-fool/23 1
-foolery/15 1
-foolhardy/50 1
-fooling 1
-foolish/21 1
-foolproof 1
-foolscap/2 1
-fool 1
-Foosball/3
-foot/273 548
-footage/2 1
-football/1 1
-footballer/1 1
-footballing
-footbridge/1 1
-footed 1
-footer/10 1
-footfall/1 1
-foothill/1 1
-foothold/1 1
-footie 1
-footing/1 1
-footless 1
-footlights
-footlights's
-footling/1 1
-footlocker/1 1
-footloose 1
-footman/2 549
-footmarks
-footmen 550
-footnote/28 1
-footpads
-footpath/1 1
-footplate/10 1
-footprint/1 1
-footrace/1 1
-footrest/1 1
-footsie/1 1
-footslogging
-foo 1
-footsore 1
-footstep/1 1
-footstool/1 1
-footwear/2 1
-footwork/2 1
-footy 1
-fop/18 1
-foppery/2 1
-foppish/33 1
-forage/28 1
-forager/1 1
-fora 551
-foray/23 1
-forbade 552
-forbear/86 553
-forbearance/2 1
-forbearing 1
-Forbes
-forbid/298 554
-forbidden 1
-forbidding/191 1
-forbore 555
-forborne 555
-force/28 1
-forced 1
-forceful/16 1
-forceps/2 1
-forcible/19 1
-ford/1 1
-Ford/2 1
-ford/11 1
-fordable 1
-fore/299 1
-forearm/23 1
-forebear/18 1
-forebode/6 1
-foreboding/1 1
-forecast/86 1
-forecaster/1 1
-forecastle/1 1
-foreclose/6 1
-foreclosure/1 1
-forecourt/1 1
-foredeck 1
-foredoom/11 1
-forefather/1 1
-forefeet 556
-forefinger/1 1
-forefoot/2 557
-forefront/1 1
-foregather/11 1
-foregoing 1
-foregone 1
-foreground/23 1
-forehand/1 1
-forehead/1 1
-foreign/300 1
-foreigner/1 1
-foreknew 558
-foreknow/301 559
-foreknowledge/2 1
-foreleg/1 1
-forelimb/1 1
-forelock/18 1
-Foreman/3
-foreman/2 560
-foremast/1 1
-foremen 561
-foremost
-forename/1 1
-forenamed
-forenoon/1 1
-forensic/69 1
-foreordain/11 1
-forepart/1 1
-forepaws
-foreperson/1 1
-foreplay/2 1
-forequarter/1 1
-forerunner/1 1
-foresail/1 1
-foresaw 562
-foresee/301 563
-foreseeability 1
-foreseeable
-foreseer/1 1
-foreshadow/11 1
-foreshadowing 1
-foreshore/10 1
-foreshorten/11 1
-foreshortening 1
-foresight/2 1
-foresighted/33 1
-foreskin/1 1
-Forest/3
-forest/23 1
-forestall/11 1
-forestalling 1
-forestation/2 1
-forester/1 1
-Forester 1
-forestland/2 1
-forestry/2 1
-foreswear/121 564
-foreswore 565
-foresworn 565
-foretaste/28 1
-foretell/121 566
-forethought/2 567
-foretold 568
-forever/2 1
-forevermore
-forewarn/11 1
-forewarning 1
-forewent 569
-forewoman/2 570
-forewomen 571
-foreword/1 1
-forfeit/23 1
-forfeiture/1 1
-forgather/11 1
-forgave 572
-forge/28 1
-forger/1 1
-forgery/15 1
-forget/88 573
-forgetful/16 1
-forgettable
-forgetting 1
-forging/1 1
-forgivable 1
-forgive/76 574
-forgiveness/3
-forgiver/1 1
-forgiving 1
-forgo/302 575
-forgoer/1 1
-forgot 576
-forgotten 576
-fork/23 1
-forked 1
-forkful/1 1
-forklift/18 1
-forlorn/303 1
-form/23 1
-formal/30 1
-formaldehyde/2 1
-formalin 1
-formalism/1 1
-formalist/1 1
-formalistic
-formality/15 1
-formalization/1 1
-formalize/6 1
-formant 1
-format/109 1
-formation/1 1
-formative 1
-formatting's
-former/30 1
-formfitting
-Formica/1 1
-formic 1
-formidable/19 1
-forming 1
-formless/16 1
-Formosa/2 1
-Formosan/2 1
-formula/1 1
-formulaic 1
-formulate/6 1
-formulation/1 1
-formulator/1 1
-fornicate/6 1
-fornication/2 1
-fornicator/1 1
-Forrest
-forsake/76 577
-forsaken 1
-forsaking 1
-forsook 578
-forsooth 1
-Forster
-forswear/121 579
-forswore 580
-forsworn 580
-forsythia/1 1
-fort/18 1
-Fortaleza
-forte/1 1
-fortes 581
-forte 1
-forthcoming/2 1
-forthright/16 1
-forth 1
-forthwith 1
-fortieth/1 1
-fortification/1 1
-fortifier/1 1
-fortify/31 1
-fortifying 1
-fortissimo 1
-fortitude/2 1
-fortnight/1 1
-fortnightly 1
-FORTRAN/2 1
-fortress/40 1
-for 1
-fortuitous/16 1
-fortuity/2 1
-fortunate/8 1
-fortune/18 1
-fortuneteller/1 1
-fortunetelling/2 1
-forty/15 1
-forum/1 582
-forward/52 1
-forwarder/1 1
-forwarding 1
-forwent 583
-Fosse/3
-fossil/1 1
-fossiliferous
-fossilization/2 1
-fossilize/6 1
-Foster
-foster/11 1
-fostering 1
-foster 1
-Fotomat/3
-Foucault
-fought 584
-foul/52 1
-foulard/2 1
-fouler 1
-fouling 1
-foulmouthed
-found/5 1
-foundation/1 1
-foundational 1
-founder/23 1
-founding 1
-foundling/1 1
-foundry/15 1
-found 585
-fount/1 1
-fountain/18 1
-fountainhead/1 1
-four/1 1
-fourfold 1
-Fourier
-Fourneyron/3
-fourpence 1
-fourpenny 1
-fourposter/1 1
-fourscore/2 1
-foursome/1 1
-foursquare 1
-fourteen/1 1
-fourteenth/1 1
-fourteen 1
-fourth/30 1
-Fourth 1
-four 1
-fowl/23 1
-Fowler
-fowling 1
-fox/4 1
-Fox/4 1
-fox/7 1
-foxfire/2 1
-foxglove/1 1
-foxhole/1 1
-foxhound/1 1
-foxhunt/141 1
-foxhunting 1
-foxing 1
-foxtrot/109 1
-foxy/50 1
-foyer/1 1
-FPO
-fps
-fr
-Fr/2 1
-fracas/4 1
-fractal/1 1
-fraction/18 1
-fractional/8 1
-fractionate/251 1
-fractionation 1
-fractious/16 1
-fracture/28 1
-frag/58 1
-fragile/150 1
-fragility/2 1
-fragment/23 1
-fragmentary/2 1
-fragmentation/2 1
-Fragonard
-fragrance/1 1
-fragrant/8 1
-frail/21 1
-frailty/15 1
-frame/28 1
-framer/1 1
-framework/1 1
-framing 1
-Fran/3
-franc/1 1
-France/1 1
-Francesca
-Frances 586
-franchise/28 1
-franchisee/1 1
-franchiser/1 1
-franchisor/1 1
-Francine/3
-Francisca/3
-Franciscan/1 1
-Francisco/3
-Francis 587
-francium/2 1
-Franck
-Franco
-Francois/3
-Francoise/3
-francophone 1
-frangibility/2 1
-frangible 1
-Franglais
-frank/38 1
-Frank/1 1
-frank/11 1
-Frankel/3
-Frankenstein 1
-franker 1
-Frankfort/2 1
-Frankfurt/2 1
-Frankfurter
-frankfurter/1 1
-Frankie/3
-frankincense/2 1
-Frankish
-Franklin
-frantic/39 1
-Franz/3
-Franny/3
-frappe/18 1
-Fraser
-frat/1 1
-fraternal/8 1
-fraternity/15 1
-fraternization/2 1
-fraternize/6 1
-fraternizer/1 1
-fratricidal
-fratricide/1 1
-Frau/2 1
-fraud/1 1
-fraudster/10 1
-fraudulence/2 1
-fraudulent/8 1
-Frauen
-fraught 1
-Fraulein 1
-fray/23 1
-fraying 1
-Frazier/3
-frazzle/28 1
-freak/23 1
-freakish/16 1
-freakout/1 1
-freaky/34 1
-freckle/28 1
-freckling 1
-freckly/34 1
-Fred/3
-Freda/3
-Freddie/3
-Freddy/3
-Frederic/3
-Frederick
-Fredericton/2 1
-Fredric/3
-Fredrick/3
-free/304 1
-freebase/28 1
-freebee/1 1
-freebie/1 1
-freebooter/1 1
-freeborn 1
-freedman/2 588
-freedmen 589
-freedom/1 1
-freehand 1
-freehold/1 1
-freeholder/1 1
-freelance/139 1
-freelancer/1 1
-freeload/11 1
-freeloader/1 1
-freeloading 1
-Freeman/3
-freeman/2 590
-Freemason/1 1
-Freemasonry/15 1
-freemasonry 1
-freemen 591
-freephone
-freer 1
-freesia/10 1
-freestanding
-freestone/1 1
-freestyle/1 1
-freethinker/1 1
-freethinking/2 1
-Freetown/2 1
-freeware/1 1
-freeway/1 1
-freewheel/5 1
-freewill 1
-freezable 1
-freeze/73 592
-freezer/1 1
-freezing/2 1
-Freida/3
-freight/23 1
-freighter/1 1
-Fremont
-French/40 1
-Frenchman/2 593
-Frenchmen 594
-French 1
-french 1
-Frenchwoman/2 595
-Frenchwomen 596
-frenetic/39 1
-frenzied/8 1
-frenzy/148 1
-freon
-freons
-Freon 1
-freq
-frequency/15 1
-frequent/305 1
-frequenter/1 1
-fresco/40 1
-fresh/21 1
-freshen/11 1
-freshener/1 1
-fresher/10 1
-freshet/1 1
-freshman/2 597
-freshmen 598
-fresh 1
-freshwater/2 1
-Fresnel/3
-Fresno/2 1
-fret/109 1
-fretboard
-fretful/16 1
-fretsaw/1 1
-fretwork/2 1
-Freud/2 1
-Freudian 1
-Frey/2 1
-Freya/2 1
-Fri/2 1
-friable 1
-friar/1 1
-friary/15 1
-fricassee/63 1
-fricative/1 1
-friction/1 1
-frictional 1
-frictionless 1
-Friday/1 1
-fridge/1 1
-Frieda/3
-Friedan
-friedcake/1 1
-Friedman
-friend/1 1
-Friend/1 1
-friend/58 1
-friendless/153 1
-friendlies
-friendlily
-friendly/49 1
-friendly's
-friendship/1 1
-frier/1 1
-frieze/18 1
-frig/117 1
-frigate/1 1
-Frigga/2 1
-frigging 1
-fright/23 1
-frighten/11 1
-frightened 1
-frighteners
-frightening/8 1
-frightful/16 1
-frigid/16 1
-Frigidaire 1
-frigidity/2 1
-frill/62 1
-frilly/34 1
-fringe/28 1
-frippery/15 1
-Frisbee 1
-Frisco
-Frisian/1 1
-frisk/5 1
-frisking 1
-frisky/50 1
-frisson/10 1
-Frito/3
-fritter/23 1
-Fritz/3
-fritz/2 1
-frivolity/15 1
-frivolous/16 1
-friz/306 1
-frizz/22 1
-frizzle/28 1
-frizzling 1
-frizzly/34 1
-frizzy/34 1
-Frobisher
-frock/18 1
-frog/307 1
-frogging/11 1
-frogman/2 599
-frogmarch/7 1
-frogmen 600
-frogspawn
-Froissart
-frolic/64 1
-frolicker/1 1
-frolic 1
-frolicsome 1
-from
-Fromm
-frond/1 1
-Fronde
-front/23 1
-frontage/1 1
-frontal/8 1
-frontbench/89 1
-frontbencher/10 1
-Frontenac/3
-frontier/1 1
-frontiersman/2 601
-frontiersmen 602
-frontierswoman 603
-frontierswomen 604
-frontier 1
-frontispiece/1 1
-frontrunner/1 1
-front 1
-frontward/10 1
-frosh/2 1
-frost/1 1
-Frost/2 1
-frost/11 1
-Frostbelt
-frostbite/134 1
-frostbiting 1
-frosted 1
-frosting/2 1
-frosty/50 1
-froth/23 1
-frothy/49 1
-fro 1
-froufrou/2 1
-froward/33 1
-frown/23 1
-frowning/8 1
-frowsty 1
-frowsy/34 1
-frowzy/50 1
-frozen 605
-froze 605
-fructify/31 1
-fructose/2 1
-frugal/8 1
-frugality/2 1
-fruit/23 1
-fruitcake/1 1
-fruiterer/10 1
-fruitful/85 1
-fruiting 1
-fruition/2 1
-fruitless/16 1
-fruity/49 1
-frump/1 1
-frumpish 1
-frumpy/34 1
-Frunze/2 1
-frustrate/6 1
-frustratedly
-frustrate 1
-frustratingly
-frustration/1 1
-frustum/1 1
-Fry
-fry/56 1
-Frye/3
-fryer/1 1
-frying 1
-FSLIC
-FTC
-ftp/141 1
-ftper/10 1
-ft 1
-Fuchs/3
-fuchsia/1 1
-fuck/308 1
-fucker/80 1
-fuckhead/189 1
-fucking/309 1
-FUD/10 1
-fuddle/28 1
-fudge/28 1
-fuehrer/1 1
-fuel/23 1
-Fuentes
-fugal 1
-Fugger
-fugitive/1 1
-fug 1
-fugue/18 1
-fuggy 1
-fuhrer/1 1
-Fuji/2 1
-Fujitsu/3
-Fujiwara/3
-Fujiyama/2 1
-Fukuoka/2 1
-Fulani/2 1
-Fulbright 1
-fulcrum/18 1
-fulfill/11 1
-fulfilling 1
-fulfillment/2 1
-full/165 1
-fullback/18 1
-Fuller
-fuller/18 1
-Fullerton
-fullish
-fullstops
-fulminate/43 1
-fulmination/1 1
-fulness/3
-fulsome/16 1
-Fulton/2 1
-fully 1
-fum/58 1
-fumarole/10 1
-fumble/28 1
-fumbler/1 1
-fumbling/8 1
-fume/28 1
-fumigant/1 1
-fumigate/6 1
-fumigation/2 1
-fumigator/1 1
-fumingly
-fumy/34 1
-fun/310 1
-Funafuti
-function/23 1
-functional/8 1
-functionalism 1
-functionalist/10 1
-functionality 1
-functional 1
-functionary/15 1
-functionless 1
-fund/23 1
-fundamental/30 1
-fundamentalism/2 1
-fundamentalist/1 1
-fundholders
-fundholding
-funding/2 1
-fundraiser/1 1
-Fundy
-funeral/1 1
-funerary
-funereal/8 1
-funfair/10 1
-fungal 1
-fungible/1 1
-fungicidal 1
-fungicide/1 1
-fungi 606
-fungoid 1
-fungous 1
-fungus/2 607
-funicular/1 1
-funk/23 1
-funkiness/3
-funky/34 1
-funnel/23 1
-fun 1
-funny/221 1
-funnyman/2 608
-funnymen 609
-fur/103 1
-furbelow/2 1
-furbish/7 1
-Furies/2 1
-furious/8 1
-furl/23 1
-furling 1
-furlong/1 1
-furlough/23 1
-furn
-furnace/18 1
-furnish/7 1
-furnishing/32 1
-furniture/2 1
-furor/1 1
-furore/1 1
-furrier/1 1
-furring/2 1
-furrow/23 1
-furry/49 1
-further/11 1
-furtherance/2 1
-furthermore
-furthermost
-further 610
-furthest 610
-furtive/16 1
-fur 1
-Furtwangler/3
-fury/15 1
-furze/2 1
-fuse/28 1
-fusee/1 1
-fuselage/1 1
-Fushun
-fusibility/2 1
-fusible 1
-fusileer/1 1
-fusilier/1 1
-fusillade/18 1
-fusion/1 1
-fuss/22 1
-fussbudget/1 1
-fusspot/1 1
-fussy/50 1
-fustian/2 1
-fusty/49 1
-fut
-futile/8 1
-futility/2 1
-futon/1 1
-future/1 1
-futurism/2 1
-futurist/1 1
-futuristic 1
-futurity/15 1
-futurologist/1 1
-futurology/2 1
-futz/7 1
-fuze/28 1
-Fuzhou/3
-fuzz/22 1
-fuzzball/10 1
-Fuzzbuster
-fuzzy/50 1
-fwd
-FWD
-fwy
-FY
-FYI
-G/2 1
-g/10 1
-GA
-Ga/2 1
-gab/136 1
-gabardine/1 1
-gabbiness/3
-gabble/28 1
-gabbling 1
-gabby/34 1
-gaberdine/1 1
-gabfest/1 1
-Gable
-gable/77 1
-Gabon/2 1
-Gabonese/2 1
-Gaborone/2 1
-Gabriel
-Gabriela/3
-Gabrielle/3
-Gacrux/3
-gad/311 1
-gadabout/1 1
-Gaddafi
-gadder/1 1
-gadflies
-gadfly/3
-gadget/1 1
-gadgetry/2 1
-gadolinium/2 1
-Gadsden/3
-Gaea/2 1
-Gael/1 1
-Gaelic/2 1
-gaff/23 1
-gaffe/28 1
-gaffer/1 1
-gaffing 1
-gag/92 1
-Gagarin
-gaga 1
-Gage
-gaggle/18 1
-gaiety/2 1
-Gail/3
-Gaiman/3
-gain/23 1
-gainer/1 1
-Gaines/3
-gainful/8 1
-gaining 1
-gainsay/312 1
-gainsayer/1 1
-gainsaying 1
-Gainsborough/2 1
-gait/18 1
-gaiter/1 1
-gal/213 1
-gala/1 1
-galactic
-Galahad/1 1
-Galapagos/2 1
-Galatea
-Galatia
-Galatians
-gala 1
-Galaxy
-galaxy/15 1
-Galbraith
-Gale/3
-gale/1 1
-Galen
-galena/2 1
-Galibi 1
-Galilean/1 1
-Galilee
-Galileo/2 1
-Gall/3
-gall/23 1
-Gallagher/3
-gallant/164 1
-gallantry/15 1
-gallbladder/1 1
-Gallegos/3
-galleon/1 1
-galleria/1 1
-gallery/148 1
-galley/1 1
-Gallicism/1 1
-Gallic 1
-gallimaufry/15 1
-galling 1
-gallium/2 1
-gallivant/11 1
-Gallo/3
-gallon/1 1
-gallop/23 1
-Galloway/2 1
-gallows/2 1
-gallstone/1 1
-Gallup
-Galois/3
-galoot/1 1
-galore 1
-galosh/40 1
-galoshe/18 1
-Galsworthy
-galumph/11 1
-Galvani
-galvanic 1
-galvanism/2 1
-galvanization/2 1
-galvanize/6 1
-galvanometer/1 1
-galvanometric
-Galveston/3
-Gama
-Gamay 1
-Gambia/2 1
-Gambian/1 1
-gambit/1 1
-Gamble/3
-gamble/28 1
-gambler/1 1
-gambling/2 1
-gambol/23 1
-gamboling 1
-game/107 1
-gamecock/1 1
-gamekeeper/1 1
-gamer/10 1
-gamesmanship/2 1
-gamesmen 611
-gamester/1 1
-gamete/1 1
-gametic 1
-gamey 612
-gamier 613
-gamiest 613
-gamin/1 1
-gamine/1 1
-gamines 1
-gaming/2 1
-gamma/1 1
-gamma's 614
-gamma 615
-gammon/2 616
-gammy 1
-Gamow/3
-gamut/1 1
-gamy/49 1
-gander/18 1
-Gandhi/2 1
-Gandhian 1
-Ganesha/2 1
-gang/23 1
-gangbusters
-gangbusters's
-Ganges/2 1
-ganging 1
-gangland/2 1
-ganglia 617
-gangling 1
-ganglion/2 618
-ganglionic
-gangly/34 1
-gangplank/1 1
-gangrene/28 1
-gangrenous
-gangsta/10 1
-gangster/1 1
-gangsterism 1
-Gangtok/3
-gangway/1 1
-ganja 1
-gannet/1 1
-gantlet/18 1
-Gantry/3
-gantry/15 1
-Ganymede/2 1
-GAO
-gaolbird/10 1
-gaolbreak/10 1
-Gap/3
-gap/18 1
-gape/28 1
-gaping/8 1
-gar/18 1
-garage/28 1
-garaging 1
-garb/23 1
-garbage/2 1
-garbageman 1
-garbanzo/1 1
-garble/43 1
-garbling 1
-Garbo
-Garcia/3
-garcon/1 1
-garden/23 1
-gardener/1 1
-gardenia/1 1
-gardening/2 1
-Gardner/3
-Gareth/3
-Garfield/2 1
-garfish/4 1
-Garfunkel/3
-Gargantua
-gargantuan
-gargle/28 1
-gargoyle/1 1
-Garibaldi/2 1
-garish/16 1
-Garland
-garland/23 1
-garlic/2 1
-garlicky 1
-garlic 1
-garment/18 1
-Garner
-garner/5 1
-garnet/1 1
-garnish/22 1
-garnishee/63 1
-garnishing 1
-garnishment/1 1
-garote/28 1
-garotte/28 1
-garotting 1
-garret/1 1
-Garrett/3
-Garrick
-Garrison
-garrison/23 1
-garrote/28 1
-garroter/1 1
-garrotte/28 1
-garrotting 1
-garrulity/2 1
-garrulous/16 1
-Garry/3
-garter/18 1
-Garth/3
-Garvey
-Gary
-Garza/3
-gas/252 1
-gasbag/1 1
-Gascony/2 1
-gaseous 1
-gash/22 1
-gasholder/10 1
-gash 1
-gasket/1 1
-gaslight/1 1
-gasman 619
-gasmen 620
-gasohol/2 1
-gasolene/2 1
-gasoline/2 1
-gasometer/10 1
-gasp/23 1
-gasping 1
-Gasser
-gassing 1
-gassy/34 1
-gastric 1
-gastritis/2 1
-gastroenteritis/2 1
-gastrointestinal
-gastronome/10 1
-gastronomic
-gastronomical/8 1
-gastronomy/2 1
-gastropod/1 1
-gasworks/2 1
-gate/28 1
-gateau/313 1
-gatecrash/7 1
-gatecrasher/1 1
-gatehouse/1 1
-gatekeeper/1 1
-gatepost/1 1
-Gates
-gateway/1 1
-gather/23 1
-gatherer/1 1
-gathering/1 1
-gating 1
-Gatling/3
-gator/1 1
-Gatorade/3
-Gatsby/3
-GATT/2 1
-Gatun/3
-gauche/27 1
-gaucherie/2 1
-gaucho/1 1
-gaudy/50 1
-gauge/28 1
-gauging 1
-Gauguin/2 1
-Gaul/1 1
-Gaulish
-gaunt/21 1
-gauntlet/18 1
-gaunt 1
-Gauss/2 1
-Gaussian 1
-Gautama/2 1
-Gautier
-gauze/2 1
-gauzy/49 1
-gavel/18 1
-gave 621
-Gavin/3
-gavotte/18 1
-Gawain/2 1
-gawd
-gawk/5 1
-gawky/50 1
-gawp/11 1
-Gay
-gay/314 1
-gayety/2 1
-Gayle/3
-Gaza
-gaze/28 1
-gazebo/1 1
-gazelle/1 1
-gazer/1 1
-gazette/28 1
-gazetteer/18 1
-Gaziantep
-gazillion/10 1
-gazpacho/2 1
-gazump/11 1
-GB/2 1
-Gd/2 1
-Gdansk/2 1
-GDP/2 1
-GE/3
-Ge/2 1
-gear/23 1
-gearbox/4 1
-gearing/2 1
-gearshift/1 1
-gearstick 1
-gearwheel/1 1
-gecko/1 1
-GED
-geddit
-gee/315 1
-geegaw/1 1
-geek/1 1
-geeky/34 1
-Geer/3
-geese 622
-geez
-geezer/1 1
-Geffen/3
-Gehenna/2 1
-Gehrig
-Geiger/2 1
-geisha/2 1
-gel/213 1
-gelatin/2 1
-gelatine/2 1
-gelatinous 1
-Gelbvieh/3
-gelcap/2 1
-geld/5 1
-gelding/1 1
-gelid 1
-gelignite/2 1
-Geller/3
-gelling 1
-gem/18 1
-Gemini/1 1
-gemmology/2 1
-gemological
-gemologist/1 1
-gemology/2 1
-gemstone/1 1
-Gen
-gen/10 1
-Gena/3
-Genaro/3
-gendarme/1 1
-gender/62 1
-genderless 1
-Gene/3
-gene/1 1
-genealogical/8 1
-genealogist/1 1
-genealogy/15 1
-general/164 1
-generalissimo/1 1
-generalist/1 1
-generality/15 1
-generalizable
-generalization/1 1
-generalize/6 1
-generalship/2 1
-genera 623
-generate/6 1
-generation/1 1
-generational
-generative 1
-generator/1 1
-generic/51 1
-generosity/15 1
-generous/16 1
-genes/89 1
-geneses 624
-Genesis/2 1
-genesis/2 625
-Genet/3
-genetic/32 1
-genetically
-geneticist/1 1
-Geneva/2 1
-Genevieve/3
-Genghis/3
-genial/8 1
-geniality/2 1
-genie/1 1
-genii 626
-genital/32 1
-genitalia/2 1
-genitally
-genitive/1 1
-genitourinary
-genius/4 627
-genned
-genning
-Genoa/1 1
-genocidal
-genocide/1 1
-genome/1 1
-genomic 1
-genotype/10 1
-genre/1 1
-gent/1 1
-genteel/21 1
-gentian/1 1
-gentile/1 1
-Gentile/1 1
-gentiles 1
-gentile 1
-gentility/2 1
-gentle/316 1
-gentlefolk/130 1
-gentleman/2 628
-gentlemanly 1
-gentlemen 629
-gentlewoman/2 630
-gentlewomen 631
-gentling 1
-Gentoo 1
-gentrification/2 1
-gentrify/31 1
-Gentry/3
-gentry/15 1
-genuflect/11 1
-genuflection/1 1
-genuine/16 1
-genus/2 632
-Geo/3
-geocentric/39 1
-geochemical
-geochemistry/2 1
-geode/1 1
-geodesic/1 1
-geodesy/2 1
-geodetic 1
-Geoffrey/3
-geog
-geographer/1 1
-geographical/8 1
-geographic 1
-geography/15 1
-geologic
-geological/8 1
-geologist/1 1
-geology/15 1
-geom
-geomagnetic
-geomagnetically
-geomagnetism/2 1
-geometer/10 1
-geometrical/8 1
-geometric 1
-geometry/15 1
-geomorphology 1
-geophysical 1
-geophysicist/1 1
-geophysics/2 1
-geopolitical 1
-geopolitics/2 1
-George/1 1
-Georgetown/2 1
-Georgette
-Georgia/2 1
-Georgian/1 1
-Georgina/3
-geoscientific
-geostationary
-geosynchronous
-geosyncline/1 1
-geothermal
-geothermic
-Ger
-Gerald/3
-Geraldine/3
-geranium/1 1
-Gerard/3
-Gerardo/3
-Gerber/3
-gerbil/1 1
-geriatric/32 1
-geriatrician/10 1
-Geritol/3
-germ/1 1
-German/1 1
-germane 1
-Germanic/2 1
-germanium/2 1
-German 1
-Germany/2 1
-germicidal
-germicide/1 1
-germinal/2 1
-germinate/6 1
-germination/2 1
-Geronimo
-gerontocracy 1
-gerontological
-gerontologist/1 1
-gerontology/2 1
-Gerry/3
-gerrymander/23 1
-gerrymandering's
-Gershwin
-Gertrude/3
-gerund/1 1
-gerundive 1
-gestalt/10 1
-gestapo/1 1
-Gestapo/1 1
-gestate/6 1
-gestation/2 1
-gestational
-gesticulate/6 1
-gesticulation/1 1
-gestural
-gesture/28 1
-gesundheit
-get/128 633
-getaway/1 1
-Gethsemane 1
-gettable 1
-getter 1
-getting 1
-getup/2 1
-Getty
-Gettysburg/2 1
-gewgaw/1 1
-Gewurztraminer 1
-geyser/18 1
-Ghana/2 1
-Ghanaian 1
-Ghanian/1 1
-ghastlier
-ghastliest
-ghastly/140 1
-ghat/1 1
-Ghats
-Ghazvanid/3
-ghee 1
-Ghent
-gherkin/1 1
-ghetto/18 1
-ghettoize/6 1
-Ghibelline 1
-ghost/23 1
-ghosting 1
-ghostlike 1
-ghostly/49 1
-ghostwrite/317 634
-ghostwriter/1 1
-ghostwrote 635
-ghoul/1 1
-ghoulish/16 1
-GHQ/2 1
-GHz 1
-GI
-Giacometti
-Giannini/3
-giant/1 1
-giantess/4 1
-giantkiller
-giant 1
-Giauque/3
-gibber/5 1
-gibberish/2 1
-gibbet/23 1
-Gibbon
-gibbon/1 1
-gibbous 1
-Gibbs
-gibe/28 1
-giblet/1 1
-Gibraltar/1 1
-Gibson 1
-giddy/50 1
-Gide
-Gideon 1
-Gielgud
-Gienah/3
-gift/23 1
-gifted 1
-gig/92 1
-gigabyte/1 1
-gigahertz/2 1
-gigantic/39 1
-gigavolt
-giggle/28 1
-giggler/1 1
-giggling 1
-giggly/34 1
-GIGO
-gigolo/1 1
-Gil/4 1
-Gila/2 1
-Gilbert/2 1
-Gilberto/3
-Gilchrist/3
-gild/318 1
-Gilda/3
-gilder/1 1
-gilding/2 1
-Gilead
-Gilgamesh
-gill/18 1
-Gillespie
-Gillette/3
-Gilliam/3
-Gillian/3
-gillie/70 1
-Gilligan/3
-gillion/10 1
-Gill 1
-Gilmore/3
-gilt/1 1
-gimbals
-gimbals's
-gimcrack/1 1
-gimcrackery/2 1
-gimcrack 1
-gimlet/23 1
-gimme/1 1
-gimmick/18 1
-gimmickry/2 1
-gimmicky 1
-gimp/23 1
-gimpy/34 1
-gin/133 1
-Gina/3
-Ginger/3
-ginger/210 1
-gingerbread/2 1
-gingerly 1
-gingersnap/1 1
-gingery 1
-gingham/2 1
-gingivitis/2 1
-gingko/2 1
-Gingrich/3
-ginkgo/4 1
-ginning 1
-Gino/3
-ginormous
-Ginsberg
-Ginsburg/3
-ginseng/2 1
-Ginsu/3
-Ginny/3
-Giorgione
-Giotto
-Giovanni/3
-gipsy/15 1
-Gipsy/15 1
-gipsy/258 1
-giraffe/1 1
-Giraudoux
-gird/319 1
-girder/1 1
-girding 1
-girdle/28 1
-girdling 1
-girl/1 1
-girlfriend/1 1
-girlhood/1 1
-girlie/10 1
-girlish/16 1
-girly 1
-giro/10 1
-girt/11 1
-girth/18 1
-girt's
-Giselle/3
-Gish
-gismo/1 1
-gist/2 1
-git/10 1
-gite/10 1
-Giuliani/3
-Giuseppe/3
-give/263 636
-giveaway/1 1
-giveback/1 1
-given/1 1
-giver/1 1
-giving/10 1
-Giza/2 1
-gizmo/1 1
-gizzard/1 1
-Gk
-glace/11 1
-glaces 637
-glace 1
-glacial/8 1
-glaciate/6 1
-glaciation/1 1
-glacier/1 1
-glaciological
-glaciologist/10 1
-glaciology 1
-glad/320 1
-gladden/11 1
-glade/1 1
-gladiator/1 1
-gladiatorial
-gladiola/1 1
-gladioli 638
-gladiolus/2 639
-gladsome/150 1
-Gladstone/1 1
-Gladys
-glamor/1 1
-glamored
-glamoring
-glamorization/2 1
-glamorize/6 1
-glamorous/8 1
-glamor 1
-glamourize/6 1
-glam 1
-glance/28 1
-glancing 1
-gland/71 1
-glandular 1
-glans/321 1
-glare/28 1
-glaring/8 1
-Glaser
-Glasgow/2 1
-glasnost/2 1
-Glass/3
-glass/22 1
-glassblower/1 1
-glassblowing/2 1
-glassful/1 1
-glasshouse/10 1
-glassless 1
-glass 1
-glassware/2 1
-glassy/50 1
-Glastonbury/3
-Glaswegian/1 1
-glaucoma/2 1
-Glaxo/3
-glaze/28 1
-glazier/1 1
-glazing/2 1
-gleam/23 1
-gleaming/10 1
-glean/11 1
-gleaner/1 1
-gleaning/32 1
-Gleason/3
-glee/2 1
-gleeful/16 1
-glee 1
-Glen/3
-glen/1 1
-Glenda/3
-Glendale
-Glenlivet/3
-Glenn/2 1
-Glenna/3
-glib/322 1
-glide/28 1
-glider/1 1
-gliding/2 1
-glimmer/23 1
-glimmering/1 1
-glimpse/28 1
-glint/23 1
-glissando/323 1
-glisten/23 1
-glistening 1
-glister/5 1
-glistering 1
-glitch/22 1
-glitter/23 1
-glitterati
-glittering 1
-glittery 1
-glitz/2 1
-glitzy/34 1
-GLSA/1 1
-gloaming/1 1
-gloat/23 1
-gloatingly 1
-glob/18 1
-global/8 1
-globalism/2 1
-globalist/1 1
-globalization/2 1
-globalize/6 1
-globe/28 1
-globetrotter/1 1
-globetrotting
-globular 1
-globule/1 1
-globulin/2 1
-glockenspiel/1 1
-gloom/2 1
-gloomy/50 1
-glop/2 1
-gloppy/34 1
-glop 1
-Gloria 1
-glorification/2 1
-glorify/31 1
-glorious/8 1
-glory/56 1
-gloss/22 1
-glossary/15 1
-glossolalia/2 1
-glossy/221 1
-glottal 1
-glottis/4 1
-Gloucester
-glove/28 1
-Glover/3
-glow/23 1
-glower/23 1
-glowering 1
-glowing/8 1
-glowworm/1 1
-glucose/2 1
-glue/28 1
-gluey 640
-gluier 641
-gluiest 641
-glum/324 1
-gluon 1
-glut/109 1
-glutamate 1
-gluten/2 1
-glutenous
-glutinous/8 1
-glutton/1 1
-gluttonous/8 1
-gluttony/2 1
-glycerin/2 1
-glycerine's
-glycerol/2 1
-glycine 1
-glycogen/2 1
-glycol 1
-glyph/10 1
-GM
-GMAT
-GMT/2 1
-gm 1
-gnarl/23 1
-gnarling 1
-gnarly/34 1
-gnash/22 1
-gnat/1 1
-gnaw/11 1
-gnawing 1
-gneiss/2 1
-gnocchi 1
-gnome/1 1
-gnomic 1
-gnomish 1
-Gnosticism/2 1
-gnosticism 1
-gnostic 1
-Gnostic 1
-gnostic 1
-Gnostic 1
-GNP/2 1
-gnu/1 1
-go/325 642
-Goa
-goad/23 1
-goal/18 1
-goalie/1 1
-goalkeeper/1 1
-goalkeeping/2 1
-goalless 1
-goalmouth/10 1
-goalpost/1 1
-goalscorer/10 1
-goalscoring
-goaltender/1 1
-goat/1 1
-goatee/1 1
-goatherd/1 1
-goatskin/1 1
-gob/136 1
-gobbet/1 1
-gobble/28 1
-gobbledegook/2 1
-gobbledygook/2 1
-gobbler/1 1
-Gobi/2 1
-goblet/1 1
-goblin/1 1
-gobsmacked
-gobstopper/10 1
-god/1 1
-God/2 1
-god/58 1
-Godard
-godawful
-godchild/155 1
-goddammit
-goddamn/195 1
-goddam 1
-Goddard
-goddaughter/1 1
-goddess/4 1
-Godel/3
-godfather/18 1
-godforsaken
-godhead/2 1
-Godhead/2 1
-godhood/2 1
-Godiva/2 1
-godless/16 1
-godlike 1
-godly/49 1
-godmother/1 1
-Godot/3
-godparent/1 1
-godsend/1 1
-godson/1 1
-Godspeed/1 1
-godspeed 1
-Godthaab
-Godunov
-Godzilla/3
-Goebbels
-goer/1 1
-Goering
-Goethals/3
-Goethe/2 1
-gofer/1 1
-Goff/3
-Gog
-goggle/232 1
-Gogol
-Goiania/3
-going/1 1
-goiter/1 1
-Golan/3
-Golconda 1
-gold/188 1
-Golda/3
-Goldberg/3
-goldbrick/23 1
-goldbricker/1 1
-Golden/3
-golden/166 1
-goldenrod/2 1
-goldfield/10 1
-goldfinch/4 1
-goldfish/4 1
-Goldie/3
-Goldilocks/3
-Golding
-Goldman/3
-goldmine/1 1
-Goldsmith
-goldsmith/1 1
-Goldwater/3
-Goldwyn
-golf/23 1
-golfer/1 1
-golfing 1
-Golgi
-Golgotha/2 1
-Goliath 1
-gollies
-golliwog/10 1
-golly/3
-Gomez/3
-Gomorrah/2 1
-Gompers
-Gomulka
-gonad/1 1
-gonadal
-gondola/1 1
-gondolier/1 1
-Gondwanaland/2 1
-goner/1 1
-gone 1
-gong/23 1
-gonk/11 1
-gonna
-gonorrhea/2 1
-gonorrheal
-Gonzales
-Gonzalez/3
-Gonzalo/3
-gonzo
-goo/2 1
-goober/1 1
-Good/3
-good/326 643
-Goodall/3
-goodby/1 1
-goodbye/1 1
-goodhearted
-goodie/1 1
-goodish 1
-goodly 1
-Goodman
-goodnight
-Goodrich/3
-Goodwill/3
-goodwill/2 1
-Goodwin/3
-goody/15 1
-Goodyear
-gooey 644
-goof/23 1
-goofball/1 1
-goofy/49 1
-Google/3
-googlies
-googly
-gooier 645
-gooiest 645
-gook/1 1
-Goolagong/3
-goon/1 1
-goop/2 1
-goose/28 646
-gooseberry/15 1
-goosebumps
-goosebumps's
-gooseflesh/2 1
-goosestep/10 1
-goosestepped
-goosestepping
-GOP/2 1
-Gopher
-gopher/18 1
-Gorbachev
-Gordian/3
-Gordimer
-Gordon
-Gore
-gore/28 1
-Goren/3
-Gorey/3
-Gorgas
-gorge/28 1
-gorged 1
-gorgeous/16 1
-gorgon/1 1
-Gorgon/2 1
-Gorgonzola 1
-gorilla/1 1
-goring 1
-Gorky/2 1
-gormandize/43 1
-gormandizer/1 1
-gormless 1
-gorp/1 1
-gorse/2 1
-gory/50 1
-goshawk/1 1
-gosh 1
-gosling/1 1
-gospel/1 1
-Gospel/1 1
-gospel/58 1
-gossamer/2 1
-gossip/23 1
-gossiper/1 1
-gossiping 1
-gossipy 1
-gotcha/10 1
-Goteborg/2 1
-Goth/1 1
-goth/10 1
-Gotham
-Gothic/1 1
-got 647
-gotta
-gotten 647
-gouache/10 1
-Gouda/1 1
-gouge/28 1
-gouger/1 1
-goulash/4 1
-Gould
-Gounod
-gourd/1 1
-gourde/1 1
-gourmand/1 1
-gourmet/1 1
-gout/2 1
-gouty/34 1
-govern/11 1
-governable 1
-governance/2 1
-governess/205 1
-governess's
-government/1 1
-governmental 1
-Governor
-governor/1 1
-governorship/1 1
-govt
-gov 1
-gown/23 1
-Goya
-GP/2 1
-GPA
-GPO
-gr
-Gr
-grab/327 1
-grabber/1 1
-grabby/34 1
-Grable/3
-Gracchus
-Grace
-grace/28 1
-graceful/85 1
-Graceland/3
-graceless/16 1
-Gracie/3
-Graciela/3
-gracious/16 1
-grackle/1 1
-grad/18 1
-gradable 1
-gradate/6 1
-gradation/1 1
-grade/139 1
-grader/1 1
-gradient/1 1
-gradings
-gradual/16 1
-gradualism/2 1
-gradualist 1
-gradual 1
-graduand/10 1
-graduate/28 1
-graduation/1 1
-Grady/3
-Graffias/3
-graffito/323 1
-graft/23 1
-grafter/1 1
-grafting 1
-Grafton/3
-Graham
-graham/10 1
-Grahame
-graham 1
-grail/10 1
-Grail 1
-grain/62 1
-grained 1
-grainy/49 1
-gram/1 1
-grammar/1 1
-grammarian/1 1
-grammatical/8 1
-gramme/1 1
-Grammy 1
-gramophone/1 1
-Grampians
-grampus/4 1
-gran/10 1
-Granada/2 1
-granary/15 1
-grand/38 1
-grandad/10 1
-grandaddy/60 1
-grandam/1 1
-grandaunt/1 1
-grandchild/155 1
-granddad/1 1
-granddaddy/15 1
-granddaughter/1 1
-grandee/1 1
-grandeur/2 1
-grandfather/23 1
-grandfatherly
-grandiloquence/2 1
-grandiloquent 1
-grandiose/8 1
-grandiosity/2 1
-grandma/1 1
-grandmaster/10 1
-grandmother/1 1
-grandmotherly 1
-grandnephew/1 1
-grandniece/1 1
-grandpa/1 1
-grandparent/1 1
-grandson/1 1
-grandstand/23 1
-granduncle/1 1
-grange/1 1
-granite/1 1
-granitic
-grannie/1 1
-granola/2 1
-grant/1 1
-Grant/2 1
-grant/11 1
-granted 1
-grantee/1 1
-granter/1 1
-grantor/1 1
-grantsmanship/2 1
-granularity/2 1
-granular 1
-granulate/6 1
-granulation/2 1
-granule/1 1
-granny/15 1
-grape/18 1
-grapefruit/1 1
-grapeshot/2 1
-grapevine/1 1
-graph/23 1
-graphic/1 1
-graphical/8 1
-graphic 1
-graphite/2 1
-graphologist/1 1
-graphology/2 1
-grapnel/1 1
-grapple/28 1
-grappling 1
-grasp/23 1
-graspable 1
-grasper 1
-grasping 1
-Grass
-grass/22 1
-grasshopper/1 1
-grassing 1
-grassland/1 1
-grassroots
-grassy/34 1
-grate/28 1
-grateful/85 1
-grater/1 1
-grates 648
-graticule 1
-gratification/1 1
-gratified 1
-gratify/31 1
-gratifying/8 1
-gratin/10 1
-grating/30 1
-gratis 649
-gratitude/2 1
-gratuitous/16 1
-gratuity/15 1
-gravamen/1 1
-grave/328 1
-gravedigger/1 1
-gravel/210 1
-graveling 1
-graver 1
-Graves
-graveside/1 1
-gravestone/1 1
-graveyard/1 1
-gravid 1
-gravimeter/1 1
-graving 1
-gravitas 1
-gravitate/6 1
-gravitation/2 1
-gravitational/8 1
-graviton/10 1
-gravity/15 1
-gravy/15 1
-gray/165 1
-graybeard/1 1
-grayish 1
-Gray 1
-graze/28 1
-grazer/1 1
-grazing 1
-grease/28 1
-greasepaint/2 1
-greaseproof 1
-greaser/10 1
-greasy/50 1
-great/38 1
-greatcoat/1 1
-greathearted 1
-grebe/1 1
-Grecian 1
-Greece/2 1
-greed/2 1
-greedy/50 1
-Greek/1 1
-Greeley
-green/38 1
-Green/1 1
-green/11 1
-greenback/1 1
-greenbelt/1 1
-Greene
-greenery/2 1
-greenfield
-greenflies
-greenfly
-greengage/1 1
-greengrocer/1 1
-greengrocery 1
-greenhorn/1 1
-greenhouse/1 1
-greening 1
-greenish 1
-Greenland/2 1
-Greenlandic
-greenmail/2 1
-Greenpeace/3
-greenroom/1 1
-Greensboro/2 1
-Greensleeves/3
-Greenspan/3
-greensward/2 1
-Greenwich/2 1
-greenwood/2 1
-Greer/3
-greet/11 1
-greeter/1 1
-greeting/1 1
-Greg/3
-gregarious/16 1
-Gregg/3
-Gregorian
-Gregorio/3
-Gregory/2 1
-gremlin/1 1
-Grenada/2 1
-grenade/1 1
-Grenadian/1 1
-grenadier/1 1
-grenadine/2 1
-Grenadines
-Grendel
-Grenoble
-grep
-grepped
-grepping
-greps
-Gresham
-Greta/3
-Gretchen/3
-Gretel/3
-Gretzky/3
-grew 650
-Grey
-greybeard 1
-greyhound/1 1
-greyish 1
-greyness
-gribble/10 1
-grid/329 1
-griddle/18 1
-griddlecake/1 1
-gridiron/18 1
-gridlock/62 1
-grief/123 1
-Grieg
-grievance/1 1
-grieve/6 1
-griever/1 1
-grieving 1
-grievous/16 1
-Griffin/3
-griffin/1 1
-Griffith 1
-griffon/1 1
-grill/23 1
-grille/28 1
-grilling/10 1
-grim/324 1
-grimace/28 1
-grime/28 1
-Grimes 1
-Grimm/2 1
-grimy/49 1
-grin/133 1
-Grinch/3
-grind/86 651
-grinder/1 1
-grinding/10 1
-grindstone/1 1
-gringo/1 1
-grinner 1
-grip/47 1
-gripe/28 1
-griper/1 1
-grippe/330 1
-gripper/1 1
-gripping 1
-Gris
-grisly/49 1
-grist/2 1
-gristle/2 1
-gristly/34 1
-gristmill/1 1
-grit/331 1
-gritter/1 1
-gritty/49 1
-grizzle/43 1
-grizzlies
-grizzly/34 1
-grizzly's
-groan/23 1
-groaner/10 1
-groaning 1
-groat/1 1
-grocer/1 1
-grocery/15 1
-grog/2 1
-groggy/50 1
-groin/18 1
-grok/332 1
-grommet/18 1
-Gromyko
-groom/23 1
-groomer/1 1
-grooming/2 1
-groomsman/2 652
-groomsmen 653
-groove/28 1
-groovy/34 1
-grope/28 1
-groper/1 1
-groping/8 1
-gropings
-Gropius/2 1
-grosbeak/1 1
-grosgrain/2 1
-Gross
-gross/74 1
-grosser 1
-Grosz
-grotesque/36 1
-Grotius
-grotto/4 1
-grotty/34 1
-grouch/22 1
-grouchy/50 1
-ground/23 1
-groundbreaking/1 1
-groundcloth
-groundcloths
-grounder/1 1
-groundhog/1 1
-grounding/1 1
-groundless/8 1
-groundnut/1 1
-groundsheet/10 1
-groundskeeper/10 1
-groundsman 654
-groundsmen 655
-ground 656
-groundswell/1 1
-groundwater/2 1
-groundwork/2 1
-group/78 1
-grouper/1 1
-groupie/1 1
-grouping/1 1
-groupware/2 1
-grouse/139 1
-grouser/1 1
-grout/23 1
-grouting 1
-grove/1 1
-grovel/333 1
-groveler/1 1
-groveling 1
-grovelling 1
-Grover/3
-grow/301 657
-grower/1 1
-growing 1
-growl/23 1
-growler/1 1
-growling 1
-grownup/1 1
-growth/1 1
-groyne/10 1
-Grozny
-grub/136 1
-grubber/1 1
-grubby/50 1
-grubstake/2 1
-grudge/28 1
-grudging/8 1
-grue/58 1
-gruel/334 1
-grueling/10 1
-gruelingly
-gruesome/27 1
-gruff/21 1
-grumble/28 1
-grumbler/1 1
-grumbling/10 1
-Grumman/3
-grump/18 1
-grumpy/50 1
-Grundy 1
-Grunewald/3
-grunge/1 1
-grungy/34 1
-grunion/1 1
-grunt/23 1
-grunting 1
-Grus/2 1
-Gruyere/1 1
-gryphon/1 1
-GSA
-gt
-GTE/3
-GU
-guacamole/2 1
-Guadalajara/2 1
-Guadalcanal/2 1
-Guadalquivir
-Guadalupe/3
-Guadeloupe/2 1
-Guallatiri/2 1
-Guam/2 1
-Guamanian 1
-Guangzhou/2 1
-guanine/2 1
-guano/2 1
-Guantanamo/3
-guarani/1 1
-Guarani/2 1
-guarantee/63 1
-guarantor/1 1
-guaranty/56 1
-guard/23 1
-guarded/83 1
-guarder/1 1
-guardhouse/1 1
-guardian/1 1
-guardianship/2 1
-guardian 1
-guardrail/1 1
-guardroom/1 1
-guardsman/2 658
-guardsmen 659
-Guarnieri/2 1
-Guatemala/2 1
-Guatemalan/1 1
-guava/1 1
-Guayaquil/2 1
-gubernatorial
-Gucci/3
-gudgeon 1
-Guelph 1
-guerillas
-guerilla's
-Guernsey/1 1
-Guerra/3
-Guerrero
-guerrilla/1 1
-guess/22 1
-guessable
-guesser/1 1
-guessing 1
-guesstimate/28 1
-guesswork/2 1
-guest/23 1
-guesthouse/10 1
-guestroom/10 1
-guest 1
-Guevara
-guff/2 1
-guffaw/23 1
-Guggenheim
-GUI/2 1
-Guiana/2 1
-guidance/2 1
-guide/28 1
-guidebook/1 1
-guideline/1 1
-guidepost/1 1
-guider/1 1
-guiding 1
-Guido
-guild/1 1
-guilder/1 1
-guildhall/1 1
-guile/2 1
-guileful 1
-guileless/16 1
-guile 1
-guillemot/10 1
-Guillermo/3
-guillotine/28 1
-guilt/2 1
-guiltless 1
-guilty/50 1
-guinea/1 1
-Guinea/2 1
-Guinean/1 1
-Guinevere/2 1
-Guinness/3
-guise/18 1
-guitar/1 1
-guitarist/1 1
-Guiyang
-Guizot
-Gujarat/2 1
-Gujarati/2 1
-Gujranwala
-gulag/1 1
-gulch/4 1
-gulden/1 1
-gulf/18 1
-gull/23 1
-Gullah 1
-gullet/18 1
-gulley/18 1
-gullibility/2 1
-gullible 1
-gulling 1
-Gulliver/2 1
-gulp/23 1
-gulper/1 1
-gully/258 1
-gully's
-gum/160 1
-gumball/10 1
-Gumbel/3
-gumbo/1 1
-gumboil/1 1
-gumboot/10 1
-gumdrop/1 1
-gummy/34 1
-gumption/2 1
-gumshoe/63 1
-gumtree/10 1
-gun/133 1
-gunboat/1 1
-gunfight/18 1
-gunfighter/1 1
-gunfire/2 1
-gunge 1
-gungy
-gunk/2 1
-gunky/34 1
-gunman/2 660
-gunmen 661
-gunmetal/2 1
-gunnel/1 1
-gunner/1 1
-gunnery/2 1
-gunning 1
-gunpoint/2 1
-gunpowder/2 1
-gunrunner/1 1
-gunrunning/2 1
-gunship/1 1
-gunshot/1 1
-gunslinger/1 1
-gunsmith/1 1
-Gunther
-gunwale/1 1
-gunny/2 1
-gunnysack/1 1
-Guofeng/3
-guppy/15 1
-Gupta/3
-gurgle/28 1
-gurgling 1
-Gurkha/2 1
-gurney/1 1
-guru/1 1
-Gus/3
-gush/22 1
-gusher/1 1
-gushing/8 1
-gushy/34 1
-gusset/23 1
-gussy/31 1
-gussying 662
-gust/23 1
-gustatory
-Gustav/3
-Gustavo/3
-Gustavus/3
-gusto/2 1
-gusty/59 1
-gut/109 1
-Gutenberg
-Guthrie
-Gutierrez/3
-gutless/33 1
-guts 1
-gutsy/34 1
-gutter/23 1
-guttering 1
-guttersnipe/1 1
-guttural/30 1
-gutty/34 1
-guv/10 1
-guvnor/10 1
-guy/1 1
-Guy/2 1
-guy/11 1
-Guyana/2 1
-Guyanese/2 1
-Guzman/3
-guzzle/6 1
-guzzler/1 1
-Gwalior
-Gwen/3
-Gwendoline/3
-Gwendolyn/3
-Gwyn/2 1
-gym/1 1
-gymkhana/1 1
-gymnasium/1 1
-gymnast/1 1
-gymnastic/35 1
-gymnosperm/1 1
-gymslip/10 1
-gynecologic
-gynecological
-gynecologist/1 1
-gynecology/2 1
-gyp/47 1
-gypper/1 1
-gypster/1 1
-gypsum/2 1
-gypsy/15 1
-Gypsy/15 1
-gypsy/258 1
-Gypsy 1
-gyrate/6 1
-gyration/1 1
-gyrator/1 1
-gyrfalcon/1 1
-gyro/1 1
-gyromagnetic
-gyroscope/1 1
-gyroscopic 1
-gyve/28 1
-h
-H/2 1
-Ha
-Haas/3
-Habakkuk
-Haber/3
-haberdasher/1 1
-haberdashery/15 1
-habiliment/1 1
-habit/18 1
-habitability/2 1
-habitable 1
-habitat/1 1
-habitation/1 1
-habitual/16 1
-habituate/6 1
-habituation/2 1
-habitue/1 1
-hacienda/1 1
-hack/78 1
-hackable
-hacker/1 1
-hacking/2 1
-hackish
-hackishes
-hackishness
-hackishnesses
-hackitude
-hackitudes
-hackle/18 1
-hackney/23 1
-hacksaw/18 1
-hackwork/2 1
-Hadar/3
-haddock/1 1
-Hades/2 1
-hadj/4 1
-hadjes 663
-hadji/1 1
-hadjis 664
-hadn't
-Hadrian
-hadron/10 1
-had 665
-hadst 665
-had 1
-haemoglobin's
-haemophilia/2 1
-haemorrhage/28 1
-haemorrhoid/32 1
-Hafiz/3
-hafnium/2 1
-haft/18 1
-hag/18 1
-Hagar
-Haggai
-haggard/16 1
-haggis/4 1
-haggish 1
-haggle/28 1
-haggler/1 1
-Hagiographa/2 1
-hagiographer/1 1
-hagiography/15 1
-Hague
-Hahn
-hahnium/2 1
-hah 1
-Haida/1 1
-Haifa/2 1
-haiku/2 1
-hail/23 1
-hailstone/1 1
-hailstorm/1 1
-Haiphong
-hair/1 1
-hairball/1 1
-hairband/10 1
-hairbreadth/1 1
-hairbrush/4 1
-haircare
-haircloth/2 1
-haircut/18 1
-hairdo/1 1
-hairdresser/1 1
-hairdressing/2 1
-hairdrier/10 1
-hairdryer/1 1
-haired 1
-hairgrip/10 1
-hairless 1
-hairlike 1
-hairline/1 1
-hairnet/1 1
-hairpiece/1 1
-hairpin/1 1
-hairsbreadth/1 1
-hairsplitter/1 1
-hairsplitting/2 1
-hairspray/10 1
-hairspring/1 1
-hairstyle/1 1
-hairstyling 1
-hairstylist/1 1
-hairy/49 1
-Haiti/2 1
-Haitian/1 1
-hajj/4 1
-hajjes 666
-hajji/1 1
-hajjis 667
-haj 1
-hake/1 1
-Hakka/2 1
-Hakluyt
-Hal/1 1
-halal/2 1
-halberd/1 1
-halcyon 1
-Haldane
-Hale
-hale/257 1
-Haleakala
-haler 1
-Haley/3
-half/120 1
-halfback/1 1
-halfbreed
-halfhearted/16 1
-halfpence 668
-halfpennies
-halfpenny/2 669
-halfpennyworth 1
-halftime/1 1
-halftone/1 1
-half 1
-halfway 1
-halfwit/1 1
-halibut/1 1
-halide/10 1
-Halifax/2 1
-haling 1
-halite/2 1
-halitosis/2 1
-hall/1 1
-halleluiah/1 1
-hallelujah/1 1
-Halley
-halliard/1 1
-Halliburton/3
-Hallie/3
-Hallmark/3
-hallmark/23 1
-hallo/2 1
-halloo/23 1
-hallo 1
-hallow/11 1
-hallowed 1
-Hallowe'en
-Halloween/1 1
-Hallstatt
-Hall 1
-hallucinate/6 1
-hallucination/1 1
-hallucinatory
-hallucinogen/1 1
-hallucinogenic/1 1
-hallway/1 1
-halo/23 1
-halogen/1 1
-halogenated
-Halon/3
-halon/10 1
-Halsey
-halt/78 1
-halter/23 1
-halterneck
-halternecks
-halting/8 1
-halve/6 1
-halyard/1 1
-Ham/3
-ham/335 1
-Haman/2 1
-hamburg/1 1
-Hamburg/1 1
-hamburger/1 1
-Hamhung
-Hamilcar/3
-Hamill/3
-Hamilton/2 1
-Hamiltonian 1
-Hamitic/2 1
-Hamlet
-hamlet/1 1
-Hamlin/3
-Hammarskjold
-hammer/23 1
-hammerer/1 1
-hammerhead/1 1
-hammering/10 1
-hammerlock/1 1
-Hammerstein
-hammertoe/1 1
-Hammett/3
-hammock/1 1
-Hammond
-Hammurabi
-hammy/34 1
-hamper/23 1
-Hampshire/2 1
-Hampton
-hamster/1 1
-hamstring/86 670
-hamstrung 671
-Hamsun
-Han/10 1
-Hancock
-hand/23 1
-handbag/18 1
-handball/1 1
-handbarrow/1 1
-handbasin 1
-handbill/1 1
-handbook/1 1
-handbrake/10 1
-handcar/1 1
-handcart/1 1
-handclasp/1 1
-handcraft/23 1
-handcuff/23 1
-handed/153 1
-Handel/2 1
-handful/1 1
-handgun/1 1
-handhold/18 1
-handicap/47 1
-handicapper/1 1
-handicraft/1 1
-handiwork/2 1
-handkerchief/1 1
-handle/28 1
-handlebar/1 1
-handler/1 1
-handling 1
-handmade 1
-handmaid/1 1
-handmaiden/1 1
-handout/1 1
-handover/10 1
-handpick/11 1
-handrail/1 1
-handsaw/1 1
-handset/18 1
-handshake/1 1
-handshaking/10 1
-handsome/27 1
-handspring/1 1
-handstand/1 1
-handwork/2 1
-handwoven
-handwriting/2 1
-handwritten
-Handy
-handy/50 1
-handyman/2 672
-handymen 673
-Haney/3
-hang/23 674
-hangar/18 1
-hangdog 1
-hanger/1 1
-hanging/1 1
-hangman/2 675
-hangmen 676
-hangnail/1 1
-hangout/1 1
-hangover/1 1
-Hangul/3
-hangup/1 1
-Hangzhou/2 1
-Hank/3
-hank/18 1
-hanker/11 1
-hankering/1 1
-hankie/1 1
-hanky/15 1
-Hanna/3
-Hannah
-Hannibal/2 1
-Hanoi/2 1
-Hanover/2 1
-Hanoverian/2 1
-Hansel/3
-Hansen/3
-hansom/1 1
-Hanson/3
-Hans 1
-Hanukah/2 1
-Hanuka 1
-Hanukkah/1 1
-hap/2 1
-haphazard/16 1
-hapless/16 1
-haploid/1 1
-haply 1
-happen/11 1
-happening/1 1
-happenstance/1 1
-happy/50 1
-Hapsburg/2 1
-hap 1
-harangue/28 1
-Harare/2 1
-harass/7 1
-harassed 1
-harasser/1 1
-harassing 1
-harassment/2 1
-Harbin
-harbinger/18 1
-harbor/23 1
-harbormaster/10 1
-hard/21 1
-hardback/1 1
-hardball/2 1
-hardboard/2 1
-hardbound 1
-hardcore 1
-hardcover/1 1
-harden/11 1
-hardener/1 1
-hardening 1
-hardhat/1 1
-hardheaded/16 1
-hardhearted/16 1
-hardihood/2 1
-Hardin/3
-Harding/2 1
-hardline/336 1
-hardliner/1 1
-hardscrabble 1
-hardship/1 1
-hardstand/1 1
-hardtack/2 1
-hardtop/1 1
-hard 1
-hardware/2 1
-hardwired
-hardwood/1 1
-hardworking
-Hardy
-hardy/50 1
-hare/28 1
-harebell/1 1
-harebrained 1
-harelip/1 1
-harelipped
-harem/1 1
-Hargreaves
-haricot/10 1
-hark/11 1
-harken/11 1
-Harlan/3
-Harlem/2 1
-harlequin/18 1
-Harlequin 1
-Harley
-harlot/1 1
-harlotry/2 1
-Harlow
-harm/23 1
-harmer 1
-harmful/16 1
-harmless/16 1
-Harmon/3
-harmonic/1 1
-harmonica/1 1
-harmonically
-harmonica's 677
-harmonica 678
-harmonious/16 1
-harmonium/1 1
-harmonization/2 1
-harmonize/6 1
-harmonizer/1 1
-harmony/15 1
-harness/7 1
-harness's
-Harold/3
-harp/23 1
-Harper/3
-harping 1
-harpist/1 1
-harpoon/23 1
-harpooner/1 1
-harpsichord/1 1
-harpsichordist/1 1
-harpy/15 1
-Harpy/15 1
-Harrell/3
-harridan/1 1
-harrier/1 1
-Harriet/3
-Harriett/3
-Harrington/3
-Harris
-Harrisburg/2 1
-Harrison/2 1
-Harrods
-harrow/23 1
-harrowing 1
-harrumph/11 1
-Harry/3
-harry/31 1
-harsh/21 1
-Hart
-hart/1 1
-Harte
-Hartford/2 1
-Hartline/3
-Hartman/3
-Harvard/2 1
-harvest/23 1
-harvester/1 1
-Harvey
-Hasbro/3
-hash/22 1
-hasheesh/2 1
-hashish/2 1
-Hasidim
-hasn't
-hasp/18 1
-hassle/28 1
-hassock/1 1
-has 665
-haste/28 1
-hasten/11 1
-ha 679
-Hastings/2 1
-hasting 1
-hast 665
-hasty/50 1
-hat/109 1
-hatband/10 1
-hatbox/4 1
-hatch/22 1
-hatchback/1 1
-hatcheck/1 1
-hatchery/15 1
-hatchet/18 1
-hatching/2 1
-hatchway/1 1
-hate/28 1
-hateful/16 1
-hatemonger/1 1
-hater/1 1
-Hatfield
-Hathaway
-hath 665
-hatpin/10 1
-hatred/1 1
-Hatsheput/3
-hatstand/10 1
-hatter/1 1
-Hatteras
-Hattie/3
-hatting 1
-hauberk/1 1
-haughty/50 1
-haul/23 1
-haulage/2 1
-hauler/1 1
-haulier/10 1
-haunch/40 1
-haunt/23 1
-haunter/1 1
-haunting/8 1
-Hauptmann
-Hausa/2 1
-Hausdorff/3
-hauteur/2 1
-Havana/1 1
-Havarti 1
-have/337 680
-Havel
-haven/18 1
-haven't
-havering 1
-haversack/1 1
-having 1
-havoc/2 1
-Havoline/3
-Haw
-haw/23 1
-Hawaii/2 1
-Hawaiian/1 1
-hawk/23 1
-hawker/1 1
-Hawking
-hawking 1
-Hawkins
-hawkish/33 1
-Hawks
-hawser/1 1
-haws 1
-hawthorn/1 1
-Hawthorne
-Hay/3
-hay/23 1
-haycock/1 1
-Hayden/3
-Haydn/2 1
-Hayes/2 1
-hayfield 1
-haying 1
-hayloft/1 1
-haymaking 1
-haymow/1 1
-Haynes
-hayrick/1 1
-hayride/1 1
-Hays
-hayseed/1 1
-haystack/1 1
-haywain
-Hayward
-haywire 1
-Haywood/3
-Hayworth/3
-hazard/23 1
-hazardous/8 1
-haze/28 1
-Hazel/3
-hazel/1 1
-hazelnut/1 1
-hazel 1
-hazer/1 1
-hazing/1 1
-Hazlitt
-hazy/50 1
-HBO
-hdqrs
-HDTV
-he/1 1
-He/2 1
-Head/3
-head/78 1
-headache/1 1
-headband/1 1
-headbanger/10 1
-headbanging
-headboard/1 1
-headbutt/10 1
-headbutted
-headbutting
-headcase/10 1
-headcheese 1
-headcount/10 1
-headdress/4 1
-header/1 1
-headfirst 1
-headgear/2 1
-headhunt/11 1
-headhunter/1 1
-headhunting/2 1
-headily 1
-headiness/3
-heading/1 1
-headlamp/1 1
-headland/1 1
-headless 1
-headlight/1 1
-headline/28 1
-headliner/1 1
-headlock/1 1
-headlong 1
-headman/2 681
-headmaster/1 1
-headmastership 1
-headmen 682
-headmistress/4 1
-headnote 1
-headphone/1 1
-headpiece/1 1
-headpin/1 1
-headquarter/11 1
-headquarters's
-headrest/1 1
-headroom/2 1
-headscarf/338 1
-headset/1 1
-headship/1 1
-headshrinker/1 1
-headsman/2 683
-headsmen 684
-headstall/1 1
-headstand/1 1
-headstock 1
-headstone/1 1
-headstrong 1
-headteacher
-headteachers
-headwaiter/1 1
-headwaters
-headwaters's
-headway/2 1
-headwind/1 1
-headword/1 1
-heady/34 1
-heal/11 1
-healer/1 1
-healing 1
-health/1 1
-healthcare/2 1
-healthful/16 1
-healthy/50 1
-heap/23 1
-hear/46 1
-hearer/1 1
-hearing/1 1
-hearken/11 1
-hears/205 1
-hearsay/2 1
-hearse/18 1
-Hearst
-heart/18 1
-heartache/1 1
-heartbeat/1 1
-heartbreak/86 685
-heartbreaking 1
-heartbroken 686
-heartburn/2 1
-hearten/11 1
-heartening 1
-heartfelt 1
-hearth/1 1
-hearthrug/10 1
-hearthstone/1 1
-heartland/1 1
-heartless/16 1
-heartrending/8 1
-heartsick/33 1
-heartstrings
-heartstrings's
-heartthrob/1 1
-heartwarming
-heartwood/2 1
-hearty/221 1
-heat/23 1
-heated/8 1
-heater/1 1
-Heath
-heath/1 1
-heathen/1 1
-heathendom/2 1
-heathenish 1
-heathenism/2 1
-heathen 1
-Heather/3
-heather/1 1
-heathery 1
-heathland 1
-heating/2 1
-heatproof 1
-heatstroke/2 1
-heatwave
-heatwaves
-heave/28 687
-heaven/130 1
-Heaven/1 1
-heavenly/34 1
-heavenward/10 1
-heaver/1 1
-heaving 1
-Heaviside
-heavy/221 1
-heavyhearted 1
-heavyset 1
-heavyweight/1 1
-Heb
-Hebert/3
-Hebe 1
-Hebraic 1
-Hebraism/1 1
-Hebrew/1 1
-Hebrides/2 1
-Hecate
-heck/2 1
-heckle/28 1
-heckler/1 1
-heckling/2 1
-hectare/1 1
-hectic/39 1
-hectogram/1 1
-hectoliters
-hectometer/1 1
-hector/1 1
-Hector/2 1
-hector/11 1
-Hecuba
-he'd
-hedge/28 1
-hedgehog/1 1
-hedgehop/105 1
-hedger/1 1
-hedgerow/1 1
-hedging 1
-hedonism/2 1
-hedonist/1 1
-hedonistic 1
-heed/23 1
-heedful/8 1
-heedless/16 1
-heehaw/23 1
-heel/23 1
-heeling 1
-heelless 1
-Heep/3
-Hefner/3
-heft/23 1
-hefty/50 1
-Hegel/2 1
-Hegelian 1
-hegemonic
-hegemony/2 1
-Hegira
-hegira/1 1
-Heidegger
-Heidelberg
-Heidi/3
-heifer/1 1
-Heifetz
-height/1 1
-heighten/11 1
-Heimlich/3
-Heine
-Heineken/3
-Heinlein/3
-heinous/16 1
-Heinrich/3
-Heinz
-heir/18 1
-heiress/4 1
-heirloom/1 1
-Heisenberg
-Heisman/3
-heist/23 1
-Hejira
-held 688
-Helen/2 1
-Helena/2 1
-Helene/3
-Helga/3
-helical 1
-Helicon
-helicopter/23 1
-heliocentric 1
-heliography 1
-Heliopolis
-Helios/2 1
-heliosphere 1
-heliotrope/1 1
-helipad/10 1
-heliport/1 1
-helium/2 1
-helix/184 1
-he'll
-hell/1 1
-Hell/1 1
-hell/58 1
-hellbent 1
-hellcat/1 1
-hellebore/2 1
-Hellene/1 1
-Hellenic/2 1
-Hellenism/1 1
-Hellenistic 1
-Hellenist 1
-Hellenization 1
-Hellenize 1
-Heller
-Hellespont/2 1
-hellfire 1
-hellhole/1 1
-hellion/1 1
-hellish/16 1
-Hellman
-hello/18 1
-helluva
-helm/18 1
-helmet/62 1
-Helmholtz/2 1
-helmsman/2 689
-helmsmen 690
-Heloise/3
-helot/1 1
-help/23 1
-helper/1 1
-helpful/16 1
-helping/1 1
-helpless/16 1
-helpline/10 1
-helpmate/1 1
-helpmeet/1 1
-Helsinki/2 1
-helve/18 1
-Helvetian 1
-Helvetius/3
-hem/160 1
-hematite/2 1
-hematologic
-hematological
-hematologist/1 1
-hematology/2 1
-heme/2 1
-Hemingway/2 1
-hemisphere/1 1
-hemispheric
-hemispherical 1
-hemline/1 1
-hemlock/1 1
-hemmer/1 1
-hemoglobin/2 1
-hemophilia/2 1
-hemophiliac/1 1
-hemorrhage/28 1
-hemorrhagic
-hemorrhoid/1 1
-hemostat/1 1
-hemp/2 1
-hempen 1
-hemstitch/22 1
-hen/1 1
-henceforth
-henceforward
-hence 1
-Hench/3
-henchman/2 691
-henchmen 692
-Henderson/3
-Hendricks
-Hendrix
-henge 1
-Henley
-henna/23 1
-Hennessy/3
-henpeck/11 1
-Henri/3
-Henrietta/3
-Henry/2 1
-Hensley/3
-Henson/3
-hep/339 1
-heparin/2 1
-hepatic 1
-hepatitis/2 1
-Hepburn
-Hephaestus/2 1
-Hepplewhite
-heptagon/1 1
-heptagonal
-heptane 1
-heptathlon/1 1
-hep 1
-her/1 1
-Hera/2 1
-Heracles/2 1
-Heraclitus
-Herakles/2 1
-herald/23 1
-heraldic 1
-heraldry/2 1
-herb/1 1
-herbaceous 1
-herbage/2 1
-herbal/10 1
-herbalism
-herbalist/1 1
-herbal 1
-Herbart
-Herbert
-herbicidal
-herbicide/1 1
-herbivore/1 1
-herbivorous
-Herculaneum/2 1
-herculean
-Herculean
-Hercules/2 1
-herd/23 1
-Herder
-herder/1 1
-herdsman/2 693
-herdsmen 694
-here/2 1
-hereabout/10 1
-hereafter/1 1
-hereby 1
-hereditary 1
-heredity/2 1
-Hereford/1 1
-hereinafter
-herein 1
-hereof 1
-hereon 1
-Herero 1
-heresy/15 1
-heretic/1 1
-heretical 1
-hereto
-heretofore
-here 1
-hereunder
-hereunto
-hereupon
-herewith
-Heriberto/3
-heritability 1
-heritable 1
-heritage/1 1
-Herman/3
-hermaphrodite/1 1
-hermaphroditic 1
-Hermaphroditus
-hermeneutic/10 1
-Hermes/2 1
-hermetic/39 1
-hermetical
-hermetic 1
-Herminia/3
-hermit/1 1
-hermitage/1 1
-Hermitage 1
-Hermite/3
-Hermosillo/3
-Hernandez/3
-hernia/1 1
-hernial 1
-herniate/6 1
-herniation/2 1
-hero/4 1
-Herod/2 1
-Herodotus/2 1
-heroic/32 1
-heroically
-heroic 1
-heroin/1 1
-heroine/1 1
-heroism/2 1
-heron/1 1
-herpes/2 1
-herpetologist/1 1
-herpetology/2 1
-Herr/2 1
-Herrera/3
-Herrick
-Herring/3
-herring/1 1
-herringbone/2 1
-Herschel
-herself 1
-Hersey/3
-Hershel/3
-Hershey/3
-her 1
-hertz/2 1
-Hertz/2 1
-Hertzsprung/3
-Herzegovina
-Herzl
-Heshvan/2 1
-Hesiod
-hesitance/2 1
-hesitancy/2 1
-hesitant/8 1
-hesitate/6 1
-hesitating/8 1
-hesitation/1 1
-Hesperus
-Hess
-Hesse
-hessian 1
-Hessian 1
-hes 695
-Hester/3
-Heston/3
-hetero/1 1
-heterodox 1
-heterodoxy/2 1
-heterogeneity/2 1
-heterogeneous/8 1
-heterosexual/1 1
-heterosexuality/2 1
-heterosexually
-heteros 1
-heterozygous
-Hettie/3
-heuristic/69 1
-hew/11 1
-hewer/1 1
-hewing 1
-Hewitt/3
-Hewlett/3
-hex/22 1
-hexadecimal/10 1
-hexagon/1 1
-hexagonal 1
-hexagram/1 1
-hexameter/1 1
-hexane 1
-hexing 1
-hex 1
-hey
-heyday/1 1
-Heyerdahl
-Heywood
-Hezbollah/3
-Hezekiah
-hf
-Hf/2 1
-HF/2 1
-Hg/2 1
-hgt
-hgwy
-HHS
-HI
-hi/10 1
-Hialeah
-hiatus/4 1
-Hiawatha/2 1
-hibachi/18 1
-hibernate/6 1
-hibernation/2 1
-hibernator/1 1
-Hibernia/2 1
-Hibernian 1
-hibiscus/4 1
-hiccup/23 1
-hick/1 1
-hickey/1 1
-Hickman/3
-Hickok
-hickory/15 1
-Hicks/3
-hick 1
-hidden 1
-hide/340 1
-hideaway/1 1
-hidebound 1
-hided
-hideous/16 1
-hideout/1 1
-hider/1 1
-hiding/1 1
-hid 1
-hie/46 696
-hierarchic
-hierarchical/8 1
-hierarchy/15 1
-hieratic 1
-hieroglyph/1 1
-hieroglyphic/1 1
-Hieronymus
-Higashiosaka
-Higgins/3
-high/38 1
-highball/18 1
-highborn 1
-highboy/1 1
-highbrow/1 1
-highchair/1 1
-highers
-highfalutin
-highfaluting
-highhanded/16 1
-highish
-highjack/23 1
-highland/129 1
-highlander/1 1
-Highlander/1 1
-Highlands
-highlight/23 1
-highlighter/1 1
-Highness/3
-highpoint
-highrise/1 1
-highroad/1 1
-hightail/11 1
-highway/1 1
-highwayman/2 697
-highwaymen 698
-hijack/23 1
-hijacker/1 1
-hijacking/1 1
-hijinks 1
-hike/28 1
-hiker/1 1
-hiking's
-Hilario/3
-hilarious/16 1
-hilarity/2 1
-Hilary/3
-Hilbert
-Hilda/3
-Hildebrand
-Hilfiger/3
-Hill
-hill/18 1
-Hillary
-hillbillies
-hillbilly's
-hillbilly 1
-Hillel
-hillock/1 1
-hillside/1 1
-hilltop/18 1
-hillwalking
-hilt/18 1
-Hilton
-hilly/49 1
-him/1 1
-Himalaya/1 1
-Himalayan 1
-Himmler
-himself 1
-Hinayana/2 1
-hind/129 1
-Hindemith
-Hindenburg
-hinder/11 1
-hindering 1
-Hindi 699
-hindmost 1
-hindquarter/1 1
-hindrance/1 1
-hindsight/2 1
-Hindu/1 1
-Hinduism/1 1
-Hindustan/2 1
-Hindustani/1 1
-Hindus 700
-Hindu 1
-Hines
-hing/11 1
-hinge/28 1
-hint/23 1
-hinter/1 1
-hinterland/1 1
-Hinton/3
-hip/295 1
-hipbath
-hipbaths
-hipbone/1 1
-hiphuggers
-hipness/3
-Hipparchus
-hippie/1 1
-hipping 1
-hippo/1 1
-Hippocrates/2 1
-Hippocratic
-hippodrome/1 1
-hippopotamus/4 1
-hipster/1 1
-Hiram
-hire/28 1
-hireling/1 1
-hirer 1
-hiring 1
-Hirobumi/3
-Hirohito
-Hiroshima/2 1
-hirsute/33 1
-his/341 701
-Hispanic/1 1
-Hispaniola/2 1
-Hiss/3
-hiss/22 1
-hissing/10 1
-histamine/1 1
-histogram/1 1
-histological 1
-histologist/1 1
-histology/2 1
-historian/1 1
-historic
-historical/8 1
-historicist 1
-historicity/2 1
-historiographer/1 1
-historiographical 1
-historiography/2 1
-history/15 1
-histrionic/35 1
-hist 1
-hit/128 1
-Hitachi/3
-hitch/22 1
-Hitchcock
-hitcher/1 1
-hitchhike/6 1
-hitchhiker/1 1
-hitchhike's
-hitherto
-hither 1
-Hitler/1 1
-hi 1
-hittable
-hitter/1 1
-Hittite/1 1
-HIV/2 1
-hive/28 1
-hiya 1
-h'm
-HM
-hmm
-HMO/2 1
-Hmong 1
-HMS
-hm 1
-ho/1 1
-Ho/2 1
-hoagie/1 1
-hoagy/15 1
-hoard/23 1
-hoarder/1 1
-hoarding/1 1
-hoarfrost/2 1
-hoarse/27 1
-hoar 1
-hoary/49 1
-hoax/22 1
-hoaxer/1 1
-hob/18 1
-Hobart/2 1
-Hobbes
-hobbit/10 1
-hobble/28 1
-hobbler/1 1
-Hobbs
-hobby/15 1
-hobbyhorse/1 1
-hobbyist/1 1
-hobgoblin/1 1
-hobnail/23 1
-hobnob/145 1
-hobnobbing 1
-hobo/18 1
-hock/23 1
-hockey/2 1
-Hockney/3
-hockshop/1 1
-hod/1 1
-Hodge/1 1
-hodgepodge/1 1
-Hodgkin
-hoe/63 1
-hoecake/1 1
-hoedown/1 1
-hoer/1 1
-Hoff/3
-Hoffa/3
-Hoffman/3
-Hofstadter/3
-hog/92 1
-Hogan/3
-hogan/1 1
-Hogarth
-hogback/1 1
-hogger 1
-hogging 1
-hoggish/8 1
-hogshead/1 1
-hogtie/122 702
-hogtying 703
-Hogwarts/3
-hogwash/2 1
-Hohenlohe
-Hohenstaufen 1
-Hohenzollern/2 1
-Hohhot/3
-Hohokam
-hoick/11 1
-hoicks 1
-hoist/23 1
-hoke/6 1
-hokey 704
-hokier 705
-hokiest 705
-Hokkaido/2 1
-hokum/2 1
-Hokusai
-Holbein
-Holcomb/3
-hold/86 706
-holdable
-holdall/10 1
-Holden/3
-Holder/3
-holder/1 1
-holding/1 1
-holdout/1 1
-holdover/1 1
-holdup/1 1
-hole/28 1
-holey 707
-Holiday
-holiday/23 1
-holidaymaker/10 1
-holier 708
-holiest 708
-Holiness
-holing 1
-holism 1
-holistic/39 1
-Holland/1 1
-Hollander/1 1
-holler/23 1
-Hollerith/3
-Holley/3
-Hollie/3
-hollies
-Hollis
-hollow/52 1
-Holloway/3
-Holman/3
-Holmes/2 1
-holmium/2 1
-Holocaust
-holocaust/1 1
-Holocene/2 1
-hologram/1 1
-holograph/18 1
-holographic
-holography/2 1
-hols
-Holst
-Holstein/1 1
-holster/23 1
-Holt
-holy/49 1
-Holly
-holly/3
-hollyhock/1 1
-Hollywood/2 1
-homage/18 1
-hombre/1 1
-homburg/1 1
-home/342 1
-homebody/15 1
-homeboy/1 1
-homecoming/1 1
-homegrown
-homeland/1 1
-homeless/343 1
-homelike 1
-homely/140 1
-homemade
-homemaker/1 1
-homemaking/2 1
-homeomorphism/10 1
-homeopath/1 1
-homeopathic 1
-homeopathy/2 1
-homeostasis/2 1
-homeostatic 1
-homeowner/1 1
-homepage/1 1
-homer/1 1
-Homer/2 1
-homer/11 1
-Homeric 1
-homeroom/1 1
-homeschooling/2 1
-homesick/33 1
-homespun/2 1
-homestead/23 1
-homesteader/1 1
-homesteading 1
-homestretch/4 1
-hometown/1 1
-homeward/10 1
-homework/2 1
-homeworker
-homeworkers
-homeworking
-homey/20 709
-homicidal 1
-homicide/1 1
-homier 710
-homiest 710
-homiletic 1
-homilies
-homily's
-homing 1
-hominid/1 1
-hominy/2 1
-homo/1 1
-homoerotic
-homogenates
-homogeneity/2 1
-homogeneous/8 1
-homogenization/2 1
-homogenize/6 1
-homogenous
-homograph/1 1
-homological 1
-homologous
-homologue 1
-homology/60 1
-homomorphism/10 1
-homonym/1 1
-homophobes
-homophobia/2 1
-homophobic
-homophone/1 1
-homophony 1
-homosexual/1 1
-homosexuality/2 1
-homosexually
-homotopy
-homozygous
-homunculus 1
-homy/50 1
-Hon
-hon/18 711
-honcho/18 1
-Honda/3
-Honduran/1 1
-Honduras/2 1
-hone/254 1
-Honecker/3
-honer/1 1
-honest/75 1
-honesty/2 1
-honey/23 1
-honeybee/1 1
-honeycomb/23 1
-honeydew/1 1
-honeyed 1
-honeylocust/2 1
-honeymoon/23 1
-honeymooner/1 1
-honeypot/10 1
-honeysuckle/1 1
-honey 1
-Honeywell/3
-Honiara
-honk/23 1
-honker/1 1
-honkie/1 1
-honky/15 1
-Honolulu/2 1
-honor/23 1
-Honorable
-honorable/29 1
-honorarily
-honorarium/1 1
-honorary 1
-honoree/1 1
-honorer/1 1
-honorific/1 1
-Honshu/2 1
-hon 1
-hooch/2 1
-Hood
-hood/23 1
-hooded 1
-hoodlum/1 1
-hoodoo/23 1
-hoodwink/11 1
-hooey/2 1
-hoof/115 1
-hoofer/10 1
-hook/23 1
-hooka/1 1
-hookah/1 1
-Hooke
-hooked 1
-Hooker
-hooker/1 1
-hookey/2 1
-hookup/1 1
-hookworm/1 1
-hooky/2 1
-hooligan/1 1
-hooliganism/2 1
-hoop/23 1
-Hooper/3
-hoopla/2 1
-hooray/23 1
-hoosegow/1 1
-Hoosier/1 1
-hoot/23 1
-hootch/2 1
-hootenanny/15 1
-hooter/1 1
-Hooters/3
-Hoover/1 1
-hoover/11 1
-hop/47 1
-Hope
-hope/28 1
-hopeful/36 1
-hopeless/16 1
-Hopewell/3
-Hopi/1 1
-Hopkins
-Hopper
-hopper/1 1
-hopping 1
-hopscotch/22 1
-hora/1 1
-Horace
-Horacio/3
-Horatio/3
-horde/28 1
-horehound/1 1
-horizon/1 1
-horizontal/30 1
-Hormel/3
-hormonal
-hormonally
-hormone/1 1
-Hormuz
-Horn
-horn/62 1
-hornbeam 1
-hornblende/2 1
-Hornblower/3
-Horne/3
-horned 1
-hornet/1 1
-hornless 1
-hornlike 1
-hornpipe/1 1
-horn 1
-horny/34 1
-horological
-horologic 1
-horologist/1 1
-horology/2 1
-horoscope/1 1
-Horowitz
-horrendous/8 1
-horrible/29 1
-horrid/8 1
-horrific/39 1
-horrified 1
-horrify/31 1
-horrifying/8 1
-horror/1 1
-horse/28 1
-horseback/2 1
-horsebox/89 1
-horseflesh/2 1
-horseflies
-horsefly/3
-horsehair/2 1
-horsehide/2 1
-horselaugh/18 1
-horseless 1
-horseman/2 712
-horsemanship/2 1
-horsemen 713
-horseplay/2 1
-horsepower/2 1
-horseradish/4 1
-horseshit/309 1
-horseshoe/63 1
-horsetail/1 1
-horsetrading
-horsewhip/47 1
-horsewoman/2 714
-horsewomen 715
-horsey 716
-horsier 717
-horsiest 717
-horsing 1
-horsy/34 1
-hortatory 1
-Horthy
-horticulturalist
-horticulturalists
-horticultural 1
-horticulture/2 1
-horticulturist/1 1
-Horton/3
-Horus/2 1
-hos/205 1
-hosanna/18 1
-hose/28 1
-Hosea/2 1
-hosepipe/10 1
-hosier/1 1
-hosiery/2 1
-hosp
-hospice/1 1
-hospitable/19 1
-hospital/1 1
-hospitality/2 1
-hospitalization/1 1
-hospitalize/6 1
-host/1 1
-Host/1 1
-host/11 1
-hostage/18 1
-hostel/23 1
-hosteler/1 1
-hostelry/15 1
-hostess/22 1
-hostile/30 1
-hostility/344 1
-hostler/1 1
-hot/345 1
-hotbed/1 1
-hotblooded
-hotbox/4 1
-hotcake/1 1
-hotchpotch 1
-hotdog/92 1
-hotel/1 1
-hotelier/1 1
-hotfoot/23 1
-hothead/1 1
-hotheaded/16 1
-hothouse/18 1
-hotline/1 1
-hotlink/58 1
-hotplate/1 1
-Hotpoint/3
-hotpot/10 1
-hotshot/1 1
-hotspot/1 1
-hots's
-Hottentot/1 1
-hotter 1
-Houdini
-houmous
-houmus 1
-hound/23 1
-hour/1 1
-hourglass/4 1
-houri/1 1
-hourly 1
-House
-house/28 1
-houseboat/1 1
-housebound
-houseboy/1 1
-housebreak/121 718
-housebreaker/1 1
-housebreaking/2 1
-housebroken 719
-housebroke 719
-housebuilding
-houseclean/11 1
-housecleaning/2 1
-housecoat/1 1
-houseflies
-housefly/3
-houseful/1 1
-household/1 1
-householder/1 1
-househusband/1 1
-housekeeper/1 1
-housekeeping/2 1
-houselights/2 1
-housemaid/1 1
-houseman/2 720
-housemaster/10 1
-housemate/10 1
-housemen 721
-housemistress/89 1
-housemother/1 1
-housemoving
-houseparent/1 1
-houseplant/1 1
-houseproud
-houseroom 1
-housetop/1 1
-housewares/2 1
-housewarming/1 1
-housewife/2 722
-housewifely 1
-housewives 723
-housework/2 1
-housing/1 1
-Housman
-Houston/2 1
-Houyhnhnm/2 1
-HOV
-hovel/18 1
-hover/5 1
-hovercraft/2 1
-hovercrafts
-hoverer 1
-hove 724
-Hovhaness/3
-how/1 1
-Howard
-howbeit 1
-howdah/1 1
-howdy 1
-Howe
-Howell/3
-Howells
-however
-howitzer/1 1
-howl/23 1
-howler/1 1
-howling 1
-Howrah
-howsoever
-how 1
-hoyden/18 1
-hoydenish 1
-hoyden 1
-Hoyle 1
-HP/2 1
-hp 1
-HQ/2 1
-HR
-hr/10 1
-HRH
-Hrothgar/3
-HS
-HSBC/3
-HST
-ht
-HT
-HTML/2 1
-Hts
-HTTP 1
-Huang
-huarache/1 1
-hub/18 1
-Hubbard 1
-Hubble/3
-hubbub/1 1
-hubby/15 1
-hubcap/1 1
-Huber/3
-Hubert/3
-hubris/2 1
-Huck/3
-huckleberry/15 1
-huckster/23 1
-hucksterism/2 1
-HUD/2 1
-Huddersfield
-huddle/28 1
-Hudson/2 1
-hue/77 1
-Huerta/3
-Huey/3
-Huff/3
-huff/23 1
-Huffman/3
-huffy/50 1
-hug/92 1
-huge/27 1
-Huggins
-Hugh/3
-Hughes
-Hugo/2 1
-hug 1
-Huguenot/1 1
-huh 1
-Hui
-Huitzilopotchli/3
-hula/18 1
-hulk/86 1
-hull/1 1
-Hull/2 1
-hull/11 1
-hullabaloo/1 1
-huller/1 1
-hullo/2 1
-hum/160 711
-human/38 1
-humane/27 1
-humanism/2 1
-humanist/1 1
-humanistic 1
-humanitarian/1 1
-humanitarianism/2 1
-humanity/344 1
-humanization/2 1
-humanize/6 1
-humanizer/1 1
-humankind/2 1
-humanoid/1 1
-Humberto/3
-humble/346 1
-humbler/1 1
-humbles 1
-humbling/10 1
-Humboldt
-humbug/92 1
-humdinger/1 1
-humdrum/2 1
-Hume
-humeral 1
-humeri 725
-humerus/2 726
-humid/8 1
-humidification/2 1
-humidifier/1 1
-humidify/31 1
-humidity/2 1
-humidor/1 1
-humiliate/6 1
-humiliating/8 1
-humiliation/1 1
-humility/2 1
-hummable
-Hummer/3
-hummer/1 1
-hummingbird/1 1
-humming 1
-hummock/18 1
-hummocky 1
-hummus/2 1
-humongous
-humor/23 1
-humorist/1 1
-humorless/16 1
-humorous/16 1
-hump/23 1
-humpback/1 1
-humpbacked
-humph/11 1
-Humphrey
-humungous
-humus/2 1
-Humvee 1
-Hun/1 1
-hunch/22 1
-hunchback/1 1
-hunchbacked
-hunchback 1
-hundred/1 1
-hundredfold 1
-hundredth/1 1
-hundred 1
-hundredweight/1 1
-Hung
-Hungarian/1 1
-Hungary/2 1
-hunger/23 1
-hungover
-hungry/50 1
-hung 727
-hunk/1 1
-hunker/11 1
-hunkier 728
-hunkiest 728
-hunks 1
-hunky/34 1
-Hunspell/3
-Hunt
-hunt/23 1
-hunted 1
-Hunter/3
-hunter/1 1
-hunting/2 1
-Huntington/2 1
-Huntley/3
-huntress/4 1
-huntsman/2 729
-huntsmen 730
-Huntsville
-hurdle/28 1
-hurdler/1 1
-hurdling/2 1
-hurl/23 1
-hurler/1 1
-Hurley/3
-hurling/2 1
-Huron 1
-hurrah's
-hurray/23 1
-hurricane/1 1
-hurried/8 1
-hurry/56 1
-hurrying 1
-Hurst/3
-hurt/86 1
-hurtful/16 1
-hurtle/6 1
-hurtling 1
-Hus
-husband/23 1
-husbandman/2 731
-husbandmen 732
-husbandry/2 1
-hush/22 1
-hushed 1
-husk/23 1
-husker/1 1
-husking 1
-husky/221 1
-hussar/1 1
-Hussein
-Husserl
-Hussite 1
-hussy/15 1
-hustings/2 1
-hustle/28 1
-hustler/1 1
-hustling 1
-Huston
-hut/18 1
-hutch/40 1
-Hutchinson
-Hutton/3
-Hutu 1
-hutzpa/2 1
-hutzpah/2 1
-Huxley/2 1
-Huygens
-huzza/23 1
-huzzah/23 1
-huzzaing 1
-hwy
-hyacinth/1 1
-Hyades/2 1
-hyaena/1 1
-hybrid/1 1
-hybridism/2 1
-hybridization/2 1
-hybridize/6 1
-hybrid 1
-Hyde
-Hyderabad
-hydra/1 1
-Hydra/2 1
-hydrangea/1 1
-hydrant/1 1
-hydras 1
-hydrate/28 1
-hydration/2 1
-hydraulic/347 1
-hydraulics's
-hydrazine 1
-hydride 1
-hydro/2 1
-hydrocarbon/1 1
-hydrocephalus/2 1
-hydrocephaly/3
-hydrochloric
-hydrochloride 1
-hydrodynamic/32 1
-hydrodynamical
-hydrodynamic 1
-hydroelectric
-hydroelectrically
-hydroelectricity/2 1
-hydrofluoric
-hydrofoil/1 1
-hydrogen/2 1
-hydrogenate/6 1
-hydrogenation/2 1
-hydrogenous
-hydrological 1
-hydrologist/1 1
-hydrology/2 1
-hydrolysis/2 1
-hydrolyze/6 1
-hydromagnetic 1
-hydromechanics
-hydrometer/1 1
-hydrometry/2 1
-hydrophobia/2 1
-hydrophobic
-hydrophone/1 1
-hydroplane/28 1
-hydroponic/35 1
-hydrosphere/2 1
-hydrostatic/10 1
-hydrotherapy/2 1
-hydrothermal 1
-hydrous 1
-hydroxide/1 1
-hyena/1 1
-hygiene/2 1
-hygienically
-hygienic 1
-hygienist/1 1
-hygrometer/1 1
-hygroscopic 1
-hying 733
-hymen/1 1
-Hymen/2 1
-hymeneal 1
-hymn/23 1
-hymnal/1 1
-hymnbook/1 1
-hype/28 1
-hyperactive 1
-hyperactivity/2 1
-hyperbola/1 1
-hyperbole/2 1
-hyperbolic 1
-hyperboloid/10 1
-hypercritical/8 1
-hypercube/10 1
-hyperfine 1
-hyperglycemia/2 1
-hyperinflation 1
-Hyperion/2 1
-hyperlink/58 1
-hyperlink's
-hypermarket/10 1
-hypermedia/2 1
-hyperplane/10 1
-hypersensitive/33 1
-hypersensitivity/15 1
-hypersonic 1
-hyperspace/10 1
-hypersphere
-hypertension/2 1
-hypertensive/1 1
-hypertext/2 1
-hyperthyroidism/2 1
-hyperthyroid's
-hyperthyroid 1
-hypertrophy/56 1
-hyper 1
-hyperventilate/6 1
-hyperventilation/2 1
-hyphen/23 1
-hyphenate/6 1
-hyphenate's
-hyphenation/1 1
-hypnoses 734
-hypnosis/2 735
-hypnotherapist/10 1
-hypnotherapy/2 1
-hypnotic/51 1
-hypnotism/2 1
-hypnotist/1 1
-hypnotize/6 1
-hypo/18 1
-hypoallergenic
-hypocaust 1
-hypochondria/2 1
-hypochondriac/1 1
-hypochondria's 736
-hypochondria 737
-hypocrisy/15 1
-hypocrite/1 1
-hypocritical/8 1
-hypodermic/1 1
-hypoglycemia/2 1
-hypoglycemic/1 1
-hypotenuse/1 1
-hypothalami 738
-hypothalamus/2 739
-hypothermia/2 1
-hypotheses 740
-hypothesis/2 741
-hypothesize/6 1
-hypothesizer 1
-hypothetical/8 1
-hypothyroidism/2 1
-hypothyroid's
-hypothyroid 1
-hypoxia 1
-hyssop/2 1
-hysterectomy/15 1
-hysteresis 1
-hysteria/2 1
-hysteric/130 1
-hysterical/8 1
-hysteric 1
-Hyundai/3
-Hz/2 1
-I/2 1
-Ia
-IA
-Iaccoca/3
-Iago/3
-iamb/1 1
-iambic/1 1
-iambi 742
-iambus/4 743
-Ian/3
-Iapetus/2 1
-iatrogenic
-Ibadan
-Iberia/2 1
-Iberian 1
-ibex/4 1
-ibid
-ibidem
-ibis/4 1
-Ibiza
-Iblis/3
-IBM/3
-Ibo 1
-Ibsen/2 1
-ibuprofen/2 1
-Icahn/3
-Icarus/2 1
-ICBM/1 1
-ICC
-Ice
-ice/28 1
-iceberg/1 1
-iceboat/1 1
-icebound
-icebox/4 1
-icebreaker/1 1
-icecap/1 1
-Iceland/2 1
-Icelander/1 1
-Icelandic/2 1
-iceman/2 744
-icemen 745
-icepack 1
-icepick/10 1
-ices 746
-ichneumon 1
-ichthyologist/1 1
-ichthyology/2 1
-icicle/1 1
-icing/1 1
-icky/34 1
-icon/1 1
-iconic 1
-iconoclasm/2 1
-iconoclast/1 1
-iconoclastic 1
-iconographic
-iconography/2 1
-icosahedral
-icosahedra 747
-icosahedron 748
-ictus/2 1
-ICU
-icy/50 1
-I'd
-id/1 1
-ID/1 1
-Ida
-Idaho/71 1
-Idahoan/1 1
-idea/1 1
-ideal/30 1
-idealism/2 1
-idealist/1 1
-idealistic/39 1
-idealization/1 1
-idealize/6 1
-idempotent 1
-idem 1
-identical/8 1
-identifiable/19 1
-identification/1 1
-identifier/10 1
-identify/31 1
-identikit/10 1
-identity/15 1
-ideogram/1 1
-ideograph/1 1
-ideographic
-ideological/8 1
-ideologist/1 1
-ideologue/1 1
-ideology/15 1
-ides
-ides's
-idiocy/15 1
-idiolect 1
-idiom/1 1
-idiomatic
-idiomatically
-idiopathic 1
-idiosyncrasy/15 1
-idiosyncratic/39 1
-idiot/1 1
-idiotic/39 1
-idle/346 1
-idler/1 1
-idle's
-idles 1
-idling 1
-idol/1 1
-idolater/1 1
-idolatress/4 1
-idolatrous 1
-idolatry/2 1
-idolization/2 1
-idolize/6 1
-idyl/1 1
-idyll/1 1
-idyllic/39 1
-IE
-Ieyasu
-if/1 1
-iffiness/3
-iffy/34 1
-igloo/1 1
-Ignacio/3
-Ignatius
-igneous 1
-ignitable
-ignite/6 1
-ignitible
-ignition/1 1
-ignoble/19 1
-ignominious/8 1
-ignominy/15 1
-ignorable
-ignoramus/4 1
-ignorance/2 1
-ignorant/8 1
-ignore/6 1
-Igor/3
-iguana/1 1
-Iguassu/2 1
-iii 1
-ii 1
-Ijssel
-Ijsselmeer/3
-Ike/2 1
-Ikea/3
-Ikhnaton
-ikon/1 1
-IL
-Ila
-ilea 749
-ileitis/2 1
-Ilene/3
-ileum/2 750
-Iliad/1 1
-ilia 751
-ilium/2 752
-ilk/1 1
-Ill
-I'll
-ill/348 100
-illegal/30 1
-illegality/15 1
-illegibility/2 1
-illegible/19 1
-illegitimacy/2 1
-illegitimate/8 1
-illiberal/8 1
-illiberality/2 1
-illicit/16 1
-illimitable 1
-Illinois/2 1
-Illinoisan/1 1
-illiquid 1
-illiteracy/2 1
-illiterate/30 1
-illogical/8 1
-illogicality/2 1
-illuminable
-illuminant 1
-illuminate/43 1
-Illuminati
-illuminating/8 1
-illumination/1 1
-illumine/6 1
-illus
-illusion/1 1
-illusionist/1 1
-illusive 1
-illusory 1
-illustrate/6 1
-illustrated 1
-illustration/1 1
-illustrative/8 1
-illustrator/1 1
-illustrious/16 1
-ilmenite 1
-Ilyushin/3
-I'm
-image/28 1
-imagery/2 1
-imaginable/19 1
-imaginary 1
-imagination/1 1
-imaginative/8 1
-imagine/6 1
-imaging 1
-imagining/10 1
-imago/349 1
-imam/1 1
-Imam 1
-imbalance/1 1
-imbalanced
-imbecile/1 1
-imbecilic
-imbecility/15 1
-imbed/274 1
-imbibe/6 1
-imbiber/1 1
-imbrication/2 1
-imbroglio/1 1
-imbue/6 1
-Imelda/3
-IMF/2 1
-IMHO
-Imhotep/3
-imitable 1
-imitate/6 1
-imitation/1 1
-imitative/16 1
-imitator/1 1
-immaculate/16 1
-immanence/2 1
-immanency/2 1
-immanent/8 1
-immaterial/16 1
-immateriality/2 1
-immature/8 1
-immaturity/2 1
-immeasurable/19 1
-immediacy/344 1
-immediate/16 1
-immemorial/8 1
-immense/250 1
-immensity/15 1
-immerse/6 1
-immersible
-immersion/1 1
-immigrant/1 1
-immigrate/6 1
-immigration/1 1
-imminence/2 1
-imminent/8 1
-immiscible 1
-immobile
-immobilisers
-immobility/2 1
-immobilization/2 1
-immobilize/6 1
-immobilizer/10 1
-immoderate/8 1
-immodest/8 1
-immodesty/2 1
-immolate/6 1
-immolation/2 1
-immoral/8 1
-immorality/15 1
-immortal/30 1
-immortality/2 1
-immortalize/6 1
-immovability/2 1
-immovable/19 1
-immoveable 1
-immune 1
-immunity/15 1
-immunization/1 1
-immunize/6 1
-immunoassay 1
-immunodeficiency/2 1
-immunodeficient
-immunologic
-immunological/8 1
-immunologist/1 1
-immunology/2 1
-immure/6 1
-immutability/2 1
-immutable/19 1
-IMNSHO
-Imodium/3
-Imogene/3
-IMO 1
-imp/18 1
-impact/23 1
-impaction 1
-impair/11 1
-impairment/1 1
-impala/1 1
-impale/6 1
-impalement/2 1
-impaler 1
-impalpable/19 1
-impanel/11 1
-impart/11 1
-impartial/8 1
-impartiality/2 1
-impassable/19 1
-impasse/1 1
-impassibility/2 1
-impassible/19 1
-impassioned 1
-impassive/16 1
-impassivity/2 1
-impasto/2 1
-impatience/1 1
-impatiens/2 1
-impatient/8 1
-impeach/7 1
-impeachable
-impeacher/1 1
-impeachment/1 1
-impeccability/2 1
-impeccable/19 1
-impecunious/16 1
-impedance/2 1
-impede/6 1
-impediment/1 1
-impedimenta/2 1
-impeding 1
-impel/61 1
-impeller/1 1
-impelling 1
-impend/11 1
-impenetrability/2 1
-impenetrable/19 1
-impenitence/2 1
-impenitent/8 1
-imper
-imperative/30 1
-imperceptibility/2 1
-imperceptible/19 1
-imperceptive 1
-imperf
-imperfect/36 1
-imperfection/1 1
-imperial/30 1
-imperialism/2 1
-imperialist/1 1
-imperialistic/39 1
-imperil/11 1
-imperilment/2 1
-imperious/16 1
-imperishable/19 1
-impermanence/2 1
-impermanent/8 1
-impermeability/2 1
-impermeable/19 1
-impermissible 1
-impersonal/8 1
-impersonality 1
-impersonate/6 1
-impersonation/1 1
-impersonator/1 1
-impertinence/1 1
-impertinent/8 1
-imperturbability/2 1
-imperturbable/19 1
-impervious/8 1
-impetigo/2 1
-impetuosity/2 1
-impetuous/16 1
-impetus/4 1
-impiety/15 1
-impinge/6 1
-impingement/2 1
-impious/16 1
-impish/16 1
-implacability/2 1
-implacable/19 1
-implant/23 1
-implantable
-implantation/2 1
-implausibility/15 1
-implausible/19 1
-implement/23 1
-implementable
-implementation/1 1
-implementer/10 1
-implicate/6 1
-implication/1 1
-implicit/16 1
-implied/8 1
-implode/6 1
-implore/6 1
-imploring/8 1
-implosion/1 1
-implosive 1
-imply/31 1
-impolite/151 1
-impolitic 1
-imponderable/1 1
-import/23 1
-importable
-importance/2 1
-important/8 1
-importation/1 1
-importer/1 1
-importunate/8 1
-importune/6 1
-importunity/2 1
-imposable
-impose/6 1
-imposer/1 1
-imposing/8 1
-imposition/1 1
-impossibility/15 1
-impossible/268 1
-impost/18 1
-imposter/1 1
-impostor/1 1
-imposture/1 1
-impotence/2 1
-impotency/2 1
-impotent/8 1
-impound/11 1
-impoverish/7 1
-impoverishment/2 1
-impracticability 1
-impracticable/19 1
-impracticality/15 1
-impractical 1
-impractically
-imprecate/6 1
-imprecation/1 1
-imprecise/16 1
-imprecision/2 1
-impregnability/2 1
-impregnable/19 1
-impregnate/6 1
-impregnation/2 1
-impresario/1 1
-impress/22 1
-impressibility/2 1
-impressible 1
-impression/1 1
-impressionability/2 1
-impressionable 1
-impressionism/2 1
-impressionist/1 1
-impressionistic 1
-impressive/16 1
-imprimatur/1 1
-imprint/23 1
-imprinter/1 1
-imprinting 1
-imprison/11 1
-imprisonment/1 1
-improbability/15 1
-improbable/19 1
-impromptu/1 1
-improper/8 1
-impropriety/15 1
-improvable 1
-improve/6 1
-improvement/1 1
-improver 1
-improvidence/2 1
-improvident/8 1
-improving 1
-improvisation/1 1
-improvisational
-improvisatory
-improvise/6 1
-improvised 1
-improviser/1 1
-improvisor/1 1
-imprudence/2 1
-imprudent/8 1
-impudence/2 1
-impudent/8 1
-impugn/11 1
-impugnable
-impugner/1 1
-impulse/28 1
-impulsion/2 1
-impulsive/16 1
-impunity/2 1
-impure/45 1
-impurity/15 1
-imputable 1
-imputation/1 1
-impute/6 1
-Imus/3
-IN
-in/350 1
-In/2 1
-Ina/3
-inability/15 1
-inaccessibility/2 1
-inaccessible/19 1
-inaccuracy/15 1
-inaccurate/8 1
-inaction/2 1
-inactivate/6 1
-inactivation/2 1
-inactive/8 1
-inactivity/2 1
-inadequacy/15 1
-inadequate/8 1
-inadmissibility/2 1
-inadmissible 1
-inadvertence/2 1
-inadvertent/8 1
-inadvisability/2 1
-inadvisable 1
-inadvisedly
-inalienability/2 1
-inalienable/19 1
-inamorata/1 1
-inane/45 1
-inanimate/16 1
-inanity/15 1
-inapplicability 1
-inapplicable 1
-inappreciable/19 1
-inapproachable 1
-inappropriate/16 1
-inapt/16 1
-inarguable 1
-inarticulacy 1
-inarticulate/16 1
-inartistic 1
-inasmuch
-inattention/2 1
-inattentive/16 1
-inaudibility/2 1
-inaudible/19 1
-inaugural/1 1
-inaugurate/6 1
-inauguration/1 1
-inauspicious/8 1
-inauthentic
-inboard/1 1
-inborn 1
-inbound 1
-inbred 753
-inbreed/121 754
-inbreeding/2 1
-inbuilt 1
-Inc
-inc/11 1
-Inca/1 1
-incalculable/19 1
-incandescence/2 1
-incandescent/8 1
-incantation/1 1
-incantatory
-incant 1
-incapability/2 1
-incapable/19 1
-incapacitate/6 1
-incapacitation 1
-incapacity/2 1
-incarcerate/6 1
-incarceration/1 1
-incarnadine/6 1
-incarnate/6 1
-incarnation/1 1
-incautious/8 1
-inced 1
-incendiary/15 1
-incense/28 1
-incentive/1 1
-inception/1 1
-incertitude/2 1
-incessant/8 1
-incest/1 1
-incestuous/16 1
-inch/22 1
-inchoate 1
-Inchon/2 1
-inchworm/1 1
-incidence/1 1
-incident/1 1
-incidental/30 1
-incinerate/6 1
-incineration/2 1
-incinerator/1 1
-incipience/2 1
-incipient/8 1
-incise/6 1
-incision/1 1
-incisive/16 1
-incisor/1 1
-incite/6 1
-incitement/1 1
-inciter/1 1
-incivility/15 1
-incl
-inclemency/2 1
-inclement 1
-inclination/1 1
-incline/28 1
-inclining 1
-inclose/6 1
-inclosure/1 1
-include/6 1
-included 1
-inclusion/1 1
-inclusive/16 1
-incognito/1 1
-incoherence/2 1
-incoherency 1
-incoherent/8 1
-incombustible 1
-income/73 1
-incomer/10 1
-incoming 1
-incommensurable 1
-incommensurate/8 1
-incommode/6 1
-incommodious 1
-incommunicable 1
-incommunicado
-incomparable/19 1
-incompatibility/15 1
-incompatible/82 1
-incompetence/2 1
-incompetency/2 1
-incompetent/30 1
-incomplete/16 1
-incomprehensibility/2 1
-incomprehensible/19 1
-incomprehension/2 1
-incompressible 1
-inconceivability/2 1
-inconceivable/19 1
-inconclusive/16 1
-incongruity/15 1
-incongruous/16 1
-inconsequential/8 1
-inconsiderable 1
-inconsiderate/16 1
-inconsideration/2 1
-inconsistency/15 1
-inconsistent/8 1
-inconsolable/19 1
-inconspicuous/16 1
-inconstancy/2 1
-inconstant/8 1
-incontestability/2 1
-incontestable/19 1
-incontinence/2 1
-incontinent/8 1
-incontrovertible/19 1
-inconvenience/28 1
-inconvenient/8 1
-incorporable
-incorporate/6 1
-Incorporated
-incorporated 1
-incorporation/2 1
-incorporeal 1
-incorrect/16 1
-incorrigibility/2 1
-incorrigible/19 1
-incorruptibility/2 1
-incorruptible/19 1
-increase/28 1
-increased 1
-increasing/8 1
-incredibility/2 1
-incredible/19 1
-incredulity/2 1
-incredulous/8 1
-increment/23 1
-incremental
-incrementally
-incrementation
-incriminate/6 1
-incriminating 1
-incrimination/2 1
-incriminatory
-incrust/11 1
-incrustation/1 1
-incubate/6 1
-incubation/2 1
-incubator/1 1
-incubus/4 1
-inculcate/6 1
-inculcation/2 1
-inculpable 1
-inculpate/6 1
-incumbency/15 1
-incumbent/1 1
-incumber/11 1
-incunabula 755
-incunabulum/2 756
-incur/13 1
-incurable/82 1
-incurious 1
-incursion/1 1
-ind
-Ind
-indebted/33 1
-indecency/15 1
-indecent/75 1
-indecipherable 1
-indecision/2 1
-indecisive/16 1
-indeclinable 1
-indecorous/8 1
-indeed 1
-indefatigable/19 1
-indefeasible/19 1
-indefensible/19 1
-indefinable/19 1
-indefinite/16 1
-indelible/19 1
-indelicacy/15 1
-indelicate/8 1
-indemnification/1 1
-indemnify/31 1
-indemnity/15 1
-indemonstrable 1
-indent/23 1
-indentation/1 1
-indention/2 1
-indenture/28 1
-independence/2 1
-Independence/2 1
-independent/30 1
-indescribable/19 1
-indestructibility/2 1
-indestructible/19 1
-indeterminable/19 1
-indeterminacy/2 1
-indeterminate/8 1
-index/22 1
-indexation/1 1
-indexer/1 1
-indexing 1
-India/2 1
-Indian/1 1
-Indiana/2 1
-Indianan/1 1
-Indianapolis/2 1
-Indianian 1
-Indian 1
-indicant/10 1
-indicate/6 1
-indication/1 1
-indicative/30 1
-indicator/1 1
-indict/11 1
-indictable 1
-indictment/1 1
-indie/10 1
-Indies
-indifference/2 1
-indifferent/8 1
-indigence/2 1
-indigenous 1
-indigent/30 1
-indigestible 1
-indigestion/2 1
-indignant/8 1
-indignation/2 1
-indignity/15 1
-indigo/2 1
-Indira/3
-indirect/16 1
-indirection/1 1
-indirect 1
-indiscernible 1
-indiscipline 1
-indiscreet/8 1
-indiscretion/1 1
-indiscriminate/8 1
-indispensability/2 1
-indispensable/82 1
-indispose/214 1
-indisposed 1
-indisposition/1 1
-indisputable/19 1
-indissolubility 1
-indissoluble/19 1
-indistinct/16 1
-indistinguishable/19 1
-indite/6 1
-indium/2 1
-individual/30 1
-individualism/2 1
-individualist/1 1
-individualistic/39 1
-individuality/2 1
-individualization/2 1
-individualize/6 1
-individuate/6 1
-individuation/2 1
-indivisibility/2 1
-indivisible/19 1
-Indochina/2 1
-Indochinese
-indoctrinate/6 1
-indoctrination/1 1
-indoctrinator/10 1
-indolence/2 1
-indolent/8 1
-indomitable/19 1
-Indonesia/2 1
-Indonesian/1 1
-indoor/10 1
-Indore
-indorse/6 1
-Indra/2 1
-indrawn 1
-indubitable/19 1
-induce/6 1
-inducement/1 1
-inducer/1 1
-inducible
-induct/11 1
-inductance/2 1
-inductee/1 1
-induction/1 1
-inductive/8 1
-inductor/10 1
-indue/6 1
-indulge/6 1
-indulgence/18 1
-indulgent/8 1
-indulger 1
-Indus/2 1
-industrial/8 1
-industrialism/2 1
-industrialist/1 1
-industrialization/2 1
-industrialize/6 1
-industrial 1
-industrious/16 1
-industry/15 1
-indwell/351 1
-Indy/3
-inebriate/28 1
-inebriation/2 1
-inedible
-ineducable
-ineffability/2 1
-ineffable/19 1
-ineffective/16 1
-ineffectual/83 1
-inefficacy/2 1
-inefficiency/15 1
-inefficient/8 1
-inelastic
-inelegance/2 1
-inelegant/8 1
-ineligibility/2 1
-ineligible/82 1
-ineluctable/19 1
-inept/16 1
-ineptitude/2 1
-inequality/15 1
-inequitable/19 1
-inequity/15 1
-ineradicable/19 1
-inerrant 1
-inert/16 1
-inertia/2 1
-inertial
-inert 1
-Ines
-inescapable/19 1
-inessential/1 1
-inestimable/19 1
-inevitability/2 1
-inevitable/352 1
-inexact/16 1
-inexactitude/10 1
-inexcusable/19 1
-inexhaustible/19 1
-inexorability 1
-inexorable/19 1
-inexpedience/2 1
-inexpediency/2 1
-inexpedient 1
-inexpensive/16 1
-inexperience/2 1
-inexperienced
-inexpert/8 1
-inexpiable 1
-inexplicable/19 1
-inexpressibility 1
-inexpressible/19 1
-inexpressive 1
-inextensible
-inextinguishable 1
-inextricable/19 1
-Inez/3
-inf
-infallibility/2 1
-infallible/19 1
-infamous/8 1
-infamy/15 1
-infancy/2 1
-infant/1 1
-infanticide/1 1
-infantile
-infantry/15 1
-infantryman/2 757
-infantrymen 758
-infant 1
-infarct/1 1
-infarction/2 1
-infatuate/43 1
-infatuated 1
-infatuation/1 1
-infeasibility 1
-infeasible 1
-infect/11 1
-infected 1
-infection/1 1
-infectious/16 1
-infective 1
-infect 1
-infelicitous 1
-infelicity/15 1
-infer/13 1
-inference/1 1
-inferential/8 1
-inferior/1 1
-inferiority/2 1
-inferior 1
-infernal/8 1
-inferno/1 1
-infertile 1
-infertility/2 1
-infest/11 1
-infestation/1 1
-infidel/1 1
-infidelity/15 1
-infield/1 1
-infielder/1 1
-infighter/1 1
-infighting/2 1
-infill/11 1
-infilling 1
-infiltrate/43 1
-infiltration/1 1
-infiltrator/1 1
-infinite/37 1
-infinitesimal/30 1
-infinitival 1
-infinitive/1 1
-infinitude/2 1
-infinity/15 1
-infirmary/15 1
-infirmity/15 1
-infirm 1
-infix 1
-inflame/6 1
-inflamed 1
-inflammability/2 1
-inflammable 1
-inflammation/1 1
-inflammatory 1
-inflatable/1 1
-inflate/6 1
-inflated 1
-inflation/2 1
-inflationary
-inflect/11 1
-inflected 1
-inflection/1 1
-inflectional 1
-inflexibility/2 1
-inflexible/19 1
-inflexion/1 1
-inflict/11 1
-inflicter 1
-infliction/1 1
-inflictive
-inflight 1
-inflorescence/2 1
-inflorescent
-inflow/1 1
-inflowing
-influence/28 1
-influential/8 1
-influenza/2 1
-influx/4 1
-info/2 1
-infold/11 1
-infomercial/1 1
-inform/11 1
-informal/8 1
-informality/2 1
-informant/1 1
-informatics
-information/2 1
-informational
-informative/16 1
-informatory
-informed 1
-informer/1 1
-infotainment/2 1
-infraction/1 1
-infrared/2 1
-infrasonic
-infrastructural
-infrastructure/1 1
-infra 1
-infrequence/2 1
-infrequency/2 1
-infrequent/8 1
-infringe/6 1
-infringement/1 1
-infuriate/6 1
-infuriating/8 1
-infuse/6 1
-infuser/1 1
-infusion/1 1
-ING/3
-ingathered
-Inge
-ingenious/16 1
-ingenue/1 1
-ingenuity/2 1
-ingenuous/16 1
-ingest/11 1
-ingestion/2 1
-inglenook/1 1
-Inglewood
-inglorious/8 1
-ingoing 1
-ingot/18 1
-ingrain/23 1
-ingrained 1
-ingrain 1
-Ingram/3
-ingrate/1 1
-ingratiate/6 1
-ingratiating/8 1
-ingratiation/2 1
-ingratitude/2 1
-ingredient/1 1
-Ingres
-ingress/4 1
-ingression 1
-Ingrid/3
-ingrowing
-ingrown 1
-inguinal
-inhabit/11 1
-inhabitable
-inhabitant/1 1
-inhabited 1
-inhalant/1 1
-inhalation/1 1
-inhalator/1 1
-inhale/6 1
-inhaler/1 1
-inharmonious 1
-inhere/6 1
-inherent/8 1
-inherit/11 1
-inheritable 1
-inheritance/1 1
-inheritor/1 1
-inhibit/11 1
-inhibition/1 1
-inhibitor/1 1
-inhibitory
-inhomogeneity/60 1
-inhomogeneous 1
-inhospitable/19 1
-inhuman/8 1
-inhumane/8 1
-inhumanity/15 1
-inimical/8 1
-inimitable/19 1
-iniquitous/8 1
-iniquity/15 1
-initial/210 1
-initialization/10 1
-initialize/6 1
-initiate/28 1
-initiation/1 1
-initiative/1 1
-initiator/1 1
-initiatory 1
-inject/11 1
-injection/1 1
-injector/1 1
-injudicious/16 1
-injunction/1 1
-injure/6 1
-injured 1
-injurer/1 1
-injurious/8 1
-injury/15 1
-injustice/1 1
-ink/23 1
-inkblot/1 1
-inkling/1 1
-inkstand/1 1
-inkwell/1 1
-inky/49 1
-inland/2 1
-inlay/353 1
-inlaying 1
-inlet/18 1
-inline
-inmate/1 1
-inmost 1
-inn/86 1
-innards/2 1
-innate/16 1
-innermost 1
-innersole/1 1
-innerspring
-inner 1
-innervate/6 1
-innervation/2 1
-inning/1 1
-innit
-innkeeper/1 1
-innocence/2 1
-Innocent/3
-innocent/183 1
-innocuous/16 1
-innovate/6 1
-innovation/1 1
-innovative 1
-innovator/1 1
-innovatory
-Innsbruck
-innuendo/18 1
-innumerable/19 1
-innumeracy/2 1
-innumerate 1
-inoculate/6 1
-inoculation/1 1
-inoffensive/16 1
-Inonu/3
-inoperable
-inoperative 1
-inopportune/8 1
-inordinate/8 1
-inorganic/39 1
-inpatient/1 1
-input/109 1
-inquest/1 1
-inquietude/2 1
-inquire/6 1
-inquirer/1 1
-inquiring/8 1
-inquiry/15 1
-inquisition/1 1
-inquisitional
-Inquisition 1
-inquisitive/16 1
-inquisitor/1 1
-inquisitorial/8 1
-inquorate
-INRI
-inroad/1 1
-inrush/4 1
-INS
-insalubrious 1
-insane/45 1
-insanitary 1
-insanity/15 1
-insatiability/2 1
-insatiable/19 1
-inscribe/6 1
-inscriber/1 1
-inscription/1 1
-inscrutability/2 1
-inscrutable/29 1
-inseam/1 1
-insect/1 1
-insecticidal
-insecticide/1 1
-insectivore/1 1
-insectivorous
-insecure/8 1
-insecurity/15 1
-inseminate/6 1
-insemination/2 1
-insensate 1
-insensibility/2 1
-insensible/19 1
-insensitive/8 1
-insensitivity/2 1
-insentience/2 1
-insentient
-inseparability/2 1
-inseparable/82 1
-insert/23 1
-insertion/1 1
-inset/128 1
-inshore 1
-inside/48 1
-insider/1 1
-insidious/16 1
-insight/1 1
-insightful 1
-insigne/354 1
-insignia/1 1
-insignificance/2 1
-insignificant/8 1
-insincere/8 1
-insincerity/2 1
-insinuate/6 1
-insinuating/8 1
-insinuation/1 1
-insinuative 1
-insinuator/1 1
-insipid/83 1
-insipidity/2 1
-insist/11 1
-insistence/2 1
-insistent/8 1
-insistingly
-insobriety/2 1
-insofar
-insole/1 1
-insolence/2 1
-insolent/8 1
-insolubility/2 1
-insoluble/19 1
-insolvable 1
-insolvency/15 1
-insolvent/1 1
-insomnia/2 1
-insomniac/1 1
-insomuch
-insouciance/2 1
-insouciant 1
-inspect/11 1
-inspection/1 1
-inspector/1 1
-inspectorate/1 1
-inspiration/1 1
-inspirational 1
-inspire/6 1
-inspired 1
-inspiring 1
-inspirit/11 1
-inspiriting 1
-Inst
-instability/15 1
-instal/61 1
-install/11 1
-installable
-installation/1 1
-installer/1 1
-installing 1
-installment/1 1
-Instamatic/3
-instance/28 1
-instant/355 1
-instantaneous/8 1
-instantiate/6 1
-instantiation/10 1
-instate/6 1
-instead 1
-instep/1 1
-instigate/6 1
-instigation/2 1
-instigator/1 1
-instil/61 1
-instill/11 1
-instillation/2 1
-instilling 1
-instinct/1 1
-instinctive/8 1
-instinct 1
-instinctual 1
-institute/28 1
-instituter/1 1
-institution/1 1
-institutional/8 1
-institutionalism 1
-institutionalization/2 1
-institutionalize/6 1
-institutor/1 1
-instr
-instruct/11 1
-instructed 1
-instruction/1 1
-instructional
-instructive/8 1
-instructor/1 1
-instrument/23 1
-instrumental/30 1
-instrumentalist/1 1
-instrumentality/2 1
-instrumentation/2 1
-inst 1
-insubordinate 1
-insubordination/2 1
-insubstantial/8 1
-insufferable/19 1
-insufficiency/2 1
-insufficient/8 1
-insularity/2 1
-insular 1
-insulate/6 1
-insulation/2 1
-insulator/1 1
-insulin/2 1
-insult/23 1
-insulter 1
-insulting/8 1
-insuperable/19 1
-insupportable 1
-insurable
-insurance/1 1
-insure/6 1
-insured/1 1
-insurer/1 1
-insurgence/1 1
-insurgency/15 1
-insurgent/1 1
-insurmountable/19 1
-insurrection/1 1
-insurrectionist/1 1
-insusceptible 1
-int
-intact 1
-intaglio/18 1
-intake/1 1
-intangibility/2 1
-intangible/82 1
-integer/1 1
-integrability 1
-integrable
-integral/30 1
-integrand/10 1
-integrate/6 1
-integration/1 1
-integrative
-integrator/10 1
-integrity/2 1
-integument/1 1
-Intel/3
-intellect/1 1
-intellectual/30 1
-intellectualism/2 1
-intellectuality 1
-intellectualize/6 1
-intelligence/1 1
-intelligent/8 1
-intelligentsia/2 1
-intelligibility/2 1
-intelligible/19 1
-Intelsat
-intemperance/2 1
-intemperate/8 1
-intend/11 1
-intended/1 1
-intense/45 1
-intensification/2 1
-intensifier/1 1
-intensify/31 1
-intensity/15 1
-intensive/36 1
-intent/36 1
-intention/1 1
-intentional/8 1
-intentionality 1
-intentioned
-inter/356 1
-interact/11 1
-interaction/1 1
-interactive
-interactively
-interactiveness
-interactivity
-interbank
-interbred 759
-interbreed/121 760
-interbreeding 1
-intercede/6 1
-intercept/23 1
-interception/1 1
-interceptor/1 1
-intercession/1 1
-intercessor/1 1
-intercessory
-interchange/28 1
-interchangeability 1
-interchangeable/19 1
-intercity
-intercollegiate
-intercom/1 1
-intercommunicate/6 1
-intercommunication/2 1
-interconnect/11 1
-interconnected/153 1
-interconnection/1 1
-intercontinental
-interconversion 1
-intercourse/2 1
-intercultural
-interdenominational
-interdepartmental 1
-interdependence/2 1
-interdependency 1
-interdependent/8 1
-interdict/23 1
-interdiction/2 1
-interdisciplinary
-interest/23 1
-interested/8 1
-interesting/8 1
-interface/28 1
-interfacing 1
-interfaith
-interfere/6 1
-interference/1 1
-interferer 1
-interfering 1
-interferometer/10 1
-interferometric 1
-interferometry 1
-interferon/2 1
-interfile/6 1
-intergalactic
-interglacial 1
-intergovernmental
-interim/2 1
-interior/1 1
-interj
-interject/11 1
-interjection/1 1
-interjectional 1
-interlace/6 1
-interlaced 1
-interlard/11 1
-interleave/6 1
-interleukin/2 1
-interline/6 1
-interlinear 1
-interlingual
-interlining/1 1
-interlink/5 1
-interlock/23 1
-interlocutor/1 1
-interlocutory 1
-interlope/6 1
-interloper/1 1
-interlude/28 1
-intermarriage/1 1
-intermarry/31 1
-intermediary/15 1
-intermediate/164 1
-interment/1 1
-intermezzo/65 1
-interminable/19 1
-intermingle/6 1
-intermission/1 1
-intermittent/8 1
-intermix/7 1
-intermolecular
-intern/23 1
-internal/191 1
-internalization/2 1
-internalize/6 1
-international/30 1
-Internationale/2 1
-internationalism/2 1
-internationalist/1 1
-internationalization 1
-internationalize/6 1
-interne/28 1
-internecine
-internee/1 1
-Internet/10 1
-internet 1
-internist/1 1
-internment/1 1
-internship/1 1
-intern 1
-internuclear
-interocular
-interoffice
-interoperability 1
-interoperable
-interpenetrate/6 1
-interpenetration 1
-interpersonal
-interplanetary
-interplay/18 1
-Interpol
-interpolatable
-interpolate/6 1
-interpolation/1 1
-interpose/6 1
-interposition/2 1
-interpret/11 1
-interpretable 1
-interpretation/1 1
-interpretative 1
-interpreter/1 1
-interpretive/8 1
-interracial 1
-interregnum/1 1
-interrelate/6 1
-interrelated/153 1
-interrelation/1 1
-interrelationship/1 1
-interrogate/6 1
-interrogation/1 1
-interrogative/30 1
-interrogator/1 1
-interrogatory/15 1
-interrupt/23 1
-interrupted 1
-interrupter/1 1
-interruptibility
-interruption/1 1
-interscholastic
-intersect/11 1
-intersection/1 1
-intersession/1 1
-intersperse/6 1
-interspersion/2 1
-interstate/1 1
-interstellar
-interstice/1 1
-interstitial/8 1
-intertidal
-intertwine/6 1
-intertwining 1
-interurban 1
-interval/1 1
-intervene/6 1
-intervention/1 1
-interventionism/2 1
-interventionist/1 1
-interview/23 1
-interviewee/1 1
-interviewer/1 1
-intervocalic 1
-interwar
-interweave/357 761
-interwoven 762
-interwove 762
-intestacy/2 1
-intestate 1
-intestinal 1
-intestine/1 1
-intifada 1
-intimacy/15 1
-intimate/54 1
-intimation/1 1
-intimidate/6 1
-intimidatingly
-intimidation/2 1
-intimidatory
-intolerable/19 1
-intolerance/2 1
-intolerant/8 1
-intonation/1 1
-intonational
-intone/6 1
-intoner/1 1
-intoning 1
-into 1
-intoxicant/1 1
-intoxicate/6 1
-intoxicated 1
-intoxicating 1
-intoxication/2 1
-intracellular 1
-intractability/2 1
-intractable/19 1
-intramural
-intramuscular 1
-intranet/10 1
-intrans
-intransigence/2 1
-intransigent/30 1
-intransitive/30 1
-intrastate
-intrauterine
-intravenous/358 1
-intrench/7 1
-intrepid/8 1
-intrepidity/2 1
-intricacy/15 1
-intricate/8 1
-intrigue/28 1
-intriguer/1 1
-intriguing/8 1
-intrinsic
-intrinsically
-intro/1 1
-introduce/6 1
-introduction/1 1
-introductory 1
-introit/1 1
-introspect/11 1
-introspection/2 1
-introspective/8 1
-introversion/2 1
-introvert/62 1
-intrude/6 1
-intruder/1 1
-intruding 1
-intrusion/1 1
-intrusive/16 1
-intrust/11 1
-intuit/11 1
-intuition/1 1
-intuitionist 1
-intuitive/16 1
-Inuit/1 1
-Inuktitut/3
-inundate/6 1
-inundation/1 1
-inure/6 1
-inured 1
-invade/6 1
-invader/1 1
-invalid/210 1
-invalidate/6 1
-invalidation/2 1
-invaliding 1
-invalidism/2 1
-invalidity/2 1
-invaluable/19 1
-Invar/2 1
-invariability/2 1
-invariable/82 1
-invariance 1
-invariant/10 1
-invasion/1 1
-invasive
-invective/1 1
-inveigh/11 1
-inveigle/6 1
-inveigler/1 1
-invent/11 1
-invention/1 1
-inventive/16 1
-inventor/1 1
-inventory/56 1
-inverse/164 1
-inversion/1 1
-invert/23 1
-invertebrate/1 1
-inverter/10 1
-invertible
-invest/11 1
-investigate/6 1
-investigation/1 1
-investigative
-investigator/1 1
-investigatory
-investiture/1 1
-investment/1 1
-investor/1 1
-inveteracy/2 1
-inveterate 1
-invidious/16 1
-invigilate/6 1
-invigilation 1
-invigilator/10 1
-invigorate/6 1
-invigorating/8 1
-invigoration/2 1
-invincibility/2 1
-invincible/19 1
-inviolability/2 1
-inviolable/19 1
-inviolate 1
-inviscid
-invisibility/15 1
-invisible/19 1
-invitation/1 1
-invitational/1 1
-invite/28 1
-invitee/1 1
-inviting/8 1
-invocation/1 1
-invoice/28 1
-invokable
-invoke/6 1
-invoker/10 1
-involuntary/72 1
-involute 1
-involution/1 1
-involve/6 1
-involved 1
-involvement/1 1
-invulnerability/2 1
-invulnerable/19 1
-inward/191 1
-Io/2 1
-ioctl
-iodide/1 1
-iodine/2 1
-iodize/6 1
-ion/1 1
-Ionesco
-Ionian/1 1
-Ionic/1 1
-ionic 1
-ionization/2 1
-ionize/6 1
-ionizer/1 1
-ionosphere/1 1
-ionospheric
-iota/1 1
-IOU/2 1
-Iowa/1 1
-Iowan/1 1
-IPA
-ipecac/1 1
-Iphigenia
-iPod/3
-Ipswich
-IQ/2 1
-Iqaluit/3
-Iqbal
-Iquitos
-Ir/2 1
-Ira/3
-IRA/1 1
-Iran/2 1
-Iranian/1 1
-Iraq/2 1
-Iraqi/1 1
-irascibility/2 1
-irascible/19 1
-irate/45 1
-irateness/3
-ire/2 1
-ireful 1
-Ireland/2 1
-Irene
-irenic 1
-ire 1
-iridescence/2 1
-iridescent/8 1
-iridium/2 1
-Iris
-iris/359 1
-Irish/161 1
-Irisher 1
-Irishman/2 763
-Irishmen 764
-Irishwoman/2 765
-Irishwomen 766
-irk/11 1
-irksome/16 1
-Irkutsk
-Irma/3
-iron/23 1
-ironclad/1 1
-ironic
-ironical/8 1
-ironing/2 1
-ironmonger/10 1
-ironmongery 1
-ironstone/2 1
-iron 1
-ironware/2 1
-ironwood/1 1
-ironwork/1 1
-irony/15 1
-Iroquoian/1 1
-Iroquois/2 1
-irradiate/6 1
-irradiation/2 1
-irrational/30 1
-irrationality/15 1
-Irrawaddy
-irreclaimable 1
-irreconcilability/2 1
-irreconcilable/19 1
-irrecoverable/19 1
-irredeemable/19 1
-irreducibility 1
-irreducible/19 1
-irrefutable/19 1
-irregardless
-irregular/30 1
-irregularity/15 1
-irrelevance/1 1
-irrelevancy/15 1
-irrelevant/8 1
-irreligious 1
-irremediable/19 1
-irremovable 1
-irreparable/19 1
-irreplaceable 1
-irrepressible/19 1
-irreproachable/19 1
-irresistible/19 1
-irresolute/16 1
-irresolution/2 1
-irresolvable 1
-irrespective/8 1
-irresponsibility/2 1
-irresponsible/19 1
-irretrievable/19 1
-irreverence/2 1
-irreverent/8 1
-irreversibility 1
-irreversible/19 1
-irrevocable/19 1
-irrigable 1
-irrigate/6 1
-irrigation/2 1
-irritability/2 1
-irritable/19 1
-irritant/1 1
-irritate/6 1
-irritated/8 1
-irritating/8 1
-irritation/1 1
-irrupt/11 1
-irruption/1 1
-irruptive 1
-IRS/2 1
-Irtish/2 1
-Irvin/3
-Irvine
-Irving
-Irwin/3
-Isaac/2 1
-Isabel/3
-Isabella
-Isabelle/3
-Isaiah
-ISBN
-Iscariot
-Isfahan
-Isherwood
-Ishim/3
-Ishmael 1
-Ishtar/2 1
-Isiah/3
-Isidro/3
-isinglass/2 1
-Isis/2 1
-isl
-Islam/1 1
-Islamabad/2 1
-Islamic 1
-Islamism/2 1
-Islamist 1
-island/18 1
-islander/1 1
-isle/18 1
-islet/1 1
-ism/1 1
-Ismael/3
-Ismail/3
-isn't
-ISO
-isobar/1 1
-isobaric
-isolate/6 1
-isolated 1
-isolate's
-isolation/2 1
-isolationism/2 1
-isolationist/1 1
-isolator/10 1
-Isolde
-isomer/1 1
-isomeric 1
-isomerism/2 1
-isometric/32 1
-isometrically
-isomorphic
-isomorphism/10 1
-isoperimetrical
-isosceles
-isostatic 1
-isotherm/1 1
-isothermal/8 1
-isotonic
-isotope/1 1
-isotopic
-isotropic
-isotropically
-isotropy 1
-Ispahan
-Ispell/3
-Israel/1 1
-Israeli/1 1
-Israelite 1
-Issac/3
-Issachar
-is 46
-issuable 1
-issuance/2 1
-issue/28 1
-issuer/1 1
-Istanbul/2 1
-isthmian 1
-isthmus/4 1
-i 767
-Isuzu/3
-It
-IT
-it/1 1
-Itaipu/3
-ital
-Ital
-Italian/1 1
-Italianate 1
-italic/130 1
-italicization/2 1
-italicize/6 1
-Italy/2 1
-Itasca/3
-itch/22 1
-itching 1
-itchy/49 1
-it'd
-item/18 1
-itemization/2 1
-itemize/6 1
-item 1
-iterate/6 1
-iteration/1 1
-iterative/8 1
-iterator
-iterators
-Ithaca
-Ithacan 1
-itinerant/1 1
-itinerary/15 1
-it'll
-Ito
-i 1
-itself 1
-iTunes/3
-IUD
-IV/1 1
-Iva/3
-Ivan
-Ivanhoe/3
-I've
-Ives
-ivied 1
-Ivorian 1
-Ivory/3
-ivory/15 1
-iv 1
-ivy/15 1
-Ivy 1
-ix 1
-Iyar/2 1
-Izaak/3
-Izanagi/2 1
-Izanami/2 1
-Izhevsk
-Izmir
-Izod/3
-Izvestia/3
-j
-J/2 1
-jab/136 1
-jabber/23 1
-jabberer/1 1
-jabbering 1
-jabot/1 1
-jacaranda/1 1
-jack/23 1
-jackal/1 1
-jackass/4 1
-jackboot/1 1
-jackbooted
-jackdaw/1 1
-jacket/62 1
-jackhammer/18 1
-Jackie/2 1
-jackknife/360 768
-jackknives 769
-Jacklyn/3
-jackpot/1 1
-jackrabbit/18 1
-Jackson/2 1
-Jacksonian 1
-Jacksonville/2 1
-jackstraw/1 1
-jack 1
-Jack 1
-Jacky/2 1
-Jaclyn/3
-Jacob/1 1
-Jacobean/2 1
-Jacobin/2 1
-Jacobi 770
-Jacobite/2 1
-Jacobson/3
-jacquard/2 1
-Jacquard 1
-Jacqueline/3
-Jacquelyn/3
-Jacques
-jacuzzi 1
-Jacuzzi 1
-jade/28 1
-jaded/16 1
-jadeite/2 1
-jade 1
-jag/361 1
-jagged/21 1
-Jagger/3
-jaggies/89 1
-Jagiellon/3
-Jaguar/3
-jaguar/1 1
-Jahangir/3
-jail/23 1
-jailbird/1 1
-jailbreak/1 1
-jailer/1 1
-jailhouse/10 1
-jailor/1 1
-Jaime/3
-Jainism/2 1
-Jain 1
-Jaipur
-Jakarta/2 1
-Jake/3
-jalapeno/1 1
-jalopy/15 1
-jalousie/1 1
-jam/160 1
-Jamaal/3
-Jamaica/2 1
-Jamaican/1 1
-Jamal/3
-Jamar/3
-jamb/18 1
-jambalaya/2 1
-jamboree/1 1
-Jame/3
-Jamel/3
-James/2 1
-Jamestown
-Jami/3
-Jamie/3
-jammy/34 1
-Jan/2 1
-Jana/3
-Janacek/3
-Jane
-Janell/3
-Janelle/3
-Janet
-Janette/3
-jangle/28 1
-jangler/1 1
-jangling 1
-jangly 1
-Janice/3
-Janie/3
-Janine/3
-Janis/3
-Janissary/2 1
-janitor/1 1
-janitorial
-Janjaweed/3
-Janna/3
-Jannie/3
-Jansen/2 1
-Jansenist/2 1
-January/15 1
-Janus/2 1
-japan/1 1
-Japan/2 1
-japan/192 1
-Japanese/1 1
-japan 1
-jape/28 1
-Japura/3
-jar/103 1
-jardiniere/1 1
-Jared/3
-jarful/1 1
-jargon/2 1
-Jarlsberg 1
-Jarred/3
-Jarrett/3
-jarring/8 1
-Jarrod/3
-Jarvis/3
-Jasmine/3
-jasmine/1 1
-Jason/2 1
-Jasper/3
-jasper/2 1
-Jataka
-jato/1 1
-jaundice/28 1
-jaunt/23 1
-jaunty/50 1
-Java/1 1
-java/2 1
-Javanese/2 1
-JavaScript/3
-javelin/18 1
-Javier/3
-jaw/23 1
-jawbone/28 1
-jawboning 1
-jawbreaker/1 1
-jawing 1
-jawline/10 1
-Jaxartes
-Jay
-jay/1 1
-Jayapura/3
-Jayawardene/3
-jaybird/1 1
-Jaycee/10 1
-Jayne/3
-Jayson/3
-jaywalk/11 1
-jaywalker/1 1
-jaywalking/2 1
-jazz/22 1
-jazzy/34 1
-jct
-JCS
-JD
-jealous/8 1
-jealousy/15 1
-jean/130 1
-Jean/2 1
-Jeanette/3
-Jeanie/3
-Jeanine/3
-Jeanne/3
-Jeannette/3
-Jeannie/3
-Jeannine/3
-Jed/3
-Jedi/3
-jeep/18 1
-Jeep 1
-jeer/23 1
-jeering/37 1
-Jeeves/3
-jeez
-Jeff/3
-Jefferey/3
-Jefferson/2 1
-Jeffersonian 1
-Jeffery/3
-Jeffrey
-Jeffry/3
-jehad/1 1
-Jehoshaphat
-Jehovah/2 1
-jejuna 771
-jejune 1
-jejunum/2 772
-Jekyll/3
-jell/11 1
-jellied 1
-jello/1 1
-jelly/31 1
-jellybean/1 1
-jellyfish/4 1
-jellylike 1
-jellyroll/1 1
-jelly's
-jemmy/362 1
-Jenifer/3
-Jenkins
-Jenna/3
-Jenner
-jennet/1 1
-Jennie/3
-Jennifer/3
-Jennings/3
-Jensen/3
-Jenny/3
-jenny/15 1
-jeopardize/6 1
-jeopardy/2 1
-Jephthah
-Jerald/3
-jeremiad/1 1
-Jeremiah/1 1
-Jeremy/3
-Jeri/3
-Jericho/2 1
-jerk/23 1
-jerkin/1 1
-jerking 1
-jerkwater 1
-jerky/363 1
-Jermaine/3
-jeroboam/10 1
-Jeroboam 1
-Jerold/3
-Jerome
-Jerri/3
-Jerrod/3
-Jerrold/3
-Jerry/2 1
-jerrybuilt
-jerrycan/10 1
-jersey/1 1
-Jersey/1 1
-Jerusalem/2 1
-Jess/3
-jessamine/1 1
-Jesse
-Jessica/3
-Jessie/3
-jest/23 1
-jester/1 1
-jesting/8 1
-Jesuit/1 1
-Jesus
-jet/109 1
-jetliner/1 1
-jetport/1 1
-jetsam/2 1
-jetting 1
-jettison/23 1
-jet 1
-Jetway
-jetty/167 1
-Jew/1 1
-Jewel/3
-jewel/23 1
-jeweler/1 1
-jeweleries
-jewelery
-Jewell/3
-jewellery's
-jewelry/15 1
-Jewess/4 1
-Jewish/153 1
-Jewry 1
-Jezebel/1 1
-JFK/3
-jg
-jib/136 1
-jibbing 1
-jibe/28 1
-Jidda
-jiff/1 1
-jiffy/15 1
-jig/92 1
-jigger/23 1
-jigging 1
-jiggle/28 1
-jiggly/34 1
-jigsaw/23 1
-jihad/1 1
-Jilin
-Jillian/3
-Jill 1
-jilt/23 1
-Jim/3
-Jimenez/3
-Jimmie/3
-Jimmy/3
-jimmy/56 1
-jimmying 773
-jimsonweed/2 1
-Jinan
-jingle/28 1
-jingling 1
-jingly/34 1
-jingoism/2 1
-jingoist/1 1
-jingoistic 1
-jingoist 1
-jingo 1
-jink/11 1
-jinn/1 1
-Jinnah
-jinni/364 1
-jinricksha/1 1
-jinrikisha/1 1
-jinriksha/1 1
-jinx/22 1
-Jinny/3
-jitney/18 1
-jitter/58 1
-jitterbug/92 1
-jitterbugger/2 1
-jitters's
-jittery/34 1
-jiujitsu/2 1
-Jivaro 1
-jive/28 1
-Jo/3
-Joan
-Joann/3
-Joanna/3
-Joanne/3
-Joaquin/3
-job/1 1
-Job/1 1
-job/145 1
-jobber/1 1
-jobholder/1 1
-jobless/33 1
-jobshare
-jobshares
-jobsworth/10 1
-Jocasta
-Jocelyn/3
-Jock
-jock/18 1
-Jockey
-jockey/23 1
-jockstrap/1 1
-jocose/16 1
-jocosity/2 1
-jocular/8 1
-jocularity/2 1
-jocund/8 1
-jocundity/2 1
-jodhpurs
-jodhpurs's
-Jodi/3
-Jodie/3
-Jody/3
-Joel
-Joesph/3
-Joe 1
-Joey/3
-joey/10 1
-jog/92 1
-jogger/1 1
-jogging/2 1
-joggle/28 1
-Jogjakarta/3
-Johann/3
-Johanna/3
-Johannes
-Johannesburg/2 1
-john/1 1
-John/1 1
-Johnathan/3
-Johnathon/3
-Johnie/3
-Johnnie 1
-Johnson/2 1
-Johnston/3
-johnny/15 1
-Johnny/2 1
-johnnycake/1 1
-join/23 1
-joiner/1 1
-joinery/2 1
-joining 1
-joint/210 1
-jointed 1
-jointing 1
-jointures 1
-joist/18 1
-jojoba 1
-joke/28 1
-joker/1 1
-jokey 774
-jokier 775
-jokiest 775
-jokily
-joking/8 1
-joky/34 1
-Jolene/3
-Joliet
-jollification/1 1
-jollily
-jollity/2 1
-Jolson
-jolt/23 1
-jolter/1 1
-jolting 1
-jolly/365 1
-jolly's
-Jon/3
-Jonah/1 1
-Jonas
-Jonathan/2 1
-Jonathon/3
-Jones 1
-Joni/3
-jonquil/1 1
-Jonson
-Joplin
-Jordan/2 1
-Jordanian/1 1
-Jorge/3
-Jose/3
-Josef/3
-Josefa/3
-Josefina/3
-Joseph/1 1
-Josephine
-Josephson/3
-Josephus
-Josh
-josh/22 1
-josher/1 1
-Joshua/2 1
-Josiah
-Josie/3
-jostle/28 1
-jostling 1
-Josue/2 1
-jot/109 1
-jotter/1 1
-jotting/1 1
-Joule
-joule/1 1
-jounce/28 1
-jouncy/34 1
-journal/18 1
-journalese/2 1
-journalism/2 1
-journalist/1 1
-journalistic 1
-journey/23 1
-journeyer/1 1
-journeyman/2 776
-journeymen 777
-journo/10 1
-joust/23 1
-jouster/1 1
-jousting's
-Jove/2 1
-jovial/8 1
-joviality/2 1
-Jovian 1
-jowl/1 1
-jowly/34 1
-Joy/3
-joy/23 1
-Joyce
-Joycean
-joyful/85 1
-joyless/16 1
-Joyner/3
-joyous/16 1
-joyride/366 778
-joyrider/1 1
-joyriding/2 1
-joyrode 779
-joystick/1 1
-JP
-Jpn
-Jr/2 1
-Juan/3
-Juana/3
-Juanita/3
-Juarez/2 1
-Jubal
-jubilant/8 1
-jubilation/2 1
-jubilee/1 1
-Judah
-Judaical
-Judaic 1
-Judaism/1 1
-Judas/4 1
-Judd/3
-judder/11 1
-Jude
-Judea
-judge/28 1
-Judges
-judgeship/2 1
-judgment/1 1
-judgmental
-judgmentally
-judicatory/15 1
-judicature/2 1
-judicial/8 1
-judiciary/15 1
-judicious/16 1
-Judith/2 1
-judo/2 1
-Judson/3
-Judy
-jug/92 1
-jugful/1 1
-juggernaut/1 1
-Juggernaut/2 1
-juggle/28 1
-juggler/1 1
-jugglery/2 1
-juggling 1
-jugular/1 1
-juice/28 1
-juicer/1 1
-juicy/50 1
-jujitsu/2 1
-jujube/1 1
-jujutsu/2 1
-jukebox/4 1
-Jul
-julep/1 1
-Jules
-Julia/3
-Juliana
-Julianne/3
-Julian 1
-Julie/1 1
-julienne 1
-Juliet
-Juliette/3
-Julio/3
-Julius/3
-Julliard/3
-July/3
-jumble/28 1
-jumbo/1 1
-jump/23 1
-jumper/1 1
-jumping 1
-jumpsuit/1 1
-jumpy/50 1
-jun
-Jun
-junco/1 1
-junction/1 1
-juncture/1 1
-June/1 1
-Juneau/2 1
-Jung/2 1
-Jungfrau
-Jungian 1
-jungle/1 1
-junior/1 1
-Junior/1 1
-juniority 1
-junior 1
-juniper/1 1
-junk/23 1
-junker/1 1
-Junker/1 1
-junket/23 1
-junketeer/18 1
-junketer/1 1
-junketing 1
-junkie/41 1
-junky/42 1
-junkyard/1 1
-Juno/2 1
-junta/1 1
-Jupiter/2 1
-Jurassic/2 1
-juridic
-juridical/8 1
-jurisdiction/1 1
-jurisdictional 1
-jurisprudence/2 1
-jurisprudential 1
-jurist/1 1
-juristic 1
-juror/1 1
-Jurua/3
-jury/167 1
-juryman/2 780
-jurymen 781
-jury 1
-jurywoman/2 782
-jurywomen 783
-jussive 1
-just/21 1
-juster 1
-justice/1 1
-Justice/2 1
-justifiability 1
-justifiable/19 1
-justification/1 1
-justificatory
-justified 1
-justify/31 1
-Justin/3
-Justine/3
-Justinian/3
-just 1
-jut/109 1
-jute/2 1
-Jutland/2 1
-jutting 1
-Juvenal
-juvenile/1 1
-juxtapose/6 1
-juxtaposition/1 1
-JV
-K/1 1
-k/10 1
-Kaaba
-kabob/1 1
-kaboom
-kabuki/2 1
-Kabul/2 1
-kaddish/4 1
-kaffeeklatch/4 1
-kaffeeklatsch/4 1
-Kafka/2 1
-Kafkaesque
-kaftan/1 1
-Kagoshima
-Kahlua/2 1
-kahuna/10 1
-Kaifeng
-kaiser/1 1
-Kaiser/1 1
-Kaitlin/3
-Kalahari/2 1
-Kalamazoo
-Kalashnikov
-Kalb/3
-kale/2 1
-kaleidoscope/1 1
-kaleidoscopic
-kaleidoscopically
-Kalevala
-Kalgoorlie
-Kali/2 1
-Kalmyk 1
-Kama/2 1
-Kamchatka
-Kamehameha/3
-kamikaze/1 1
-Kampala/2 1
-Kampuchea/2 1
-Kan
-Kanchenjunga/2 1
-Kandahar
-Kandinsky
-Kane/3
-kangaroo/18 1
-Kannada/2 1
-Kano
-Kanpur
-Kans
-Kansan/1 1
-Kansas
-Kant/2 1
-Kantian 1
-Kaohsiung
-kaolin/2 1
-kapok/2 1
-Kaposi/3
-kappa/1 1
-kaput 1
-Kara/3
-Karachi/2 1
-Karaganda
-Karakorum
-karakul/2 1
-Karamazov/3
-karaoke/1 1
-karat/1 1
-karate/2 1
-Kareem/3
-Karen/2 1
-Karenina/3
-Kari/3
-Karin/3
-Karina/3
-Karl/3
-Karla/3
-Karloff/3
-karma/2 1
-karmic 1
-Karo/3
-Karol/3
-Karroo/2 1
-kart/1 1
-Karyn/3
-Kasai/3
-Kasey/3
-Kashmir/1 1
-Kasparov/3
-Kate/3
-Katelyn/3
-Katharine/3
-Katherine/3
-Katheryn/3
-Kathiawar
-Kathie/3
-Kathleen/3
-Kathmandu/2 1
-Kathrine/3
-Kathryn/3
-Kathy/3
-Katie/3
-Katina/3
-Katmai
-Katmandu/2 1
-Katowice
-Katrina/3
-Katy/3
-katydid/1 1
-Kauai/2 1
-Kaufman/3
-Kaunas/2 1
-Kaunda/3
-Kawabata/3
-Kawasaki
-Kay
-kayak/23 1
-kayaking/2 1
-Kaye/3
-Kayla/3
-kayo/23 1
-Kazakh/1 1
-Kazakhstan/2 1
-Kazan/2 1
-Kazantzakis
-kazoo/1 1
-Kb/2 1
-KB/2 1
-KC
-kc 1
-KDE
-Keaton/3
-Keats
-kebab/1 1
-kebob/1 1
-Keck/3
-kedgeree 1
-keel/23 1
-keelhaul/11 1
-keeling 1
-keen/52 1
-Keenan/3
-keener 1
-keep/86 784
-keeper/1 1
-keeping/2 1
-keepsake/1 1
-Keewatin
-keg/18 1
-Keillor/3
-Keisha/3
-Keith/3
-Keller
-Kelley/3
-Kelli/3
-Kellie/3
-Kellogg
-kelp/2 1
-kelpers
-kelp 1
-Kelsey/3
-Kelt/1 1
-Kelvin
-kelvin/1 1
-Kelly
-Kemerovo
-Kemp/3
-Kempis
-Ken
-ken/133 1
-Kendall/3
-Kendra/3
-Kendrick/3
-Kenmore/3
-Kennan/3
-Kennedy/2 1
-kennel/23 1
-Kenneth/3
-kenning 1
-Kennith/3
-keno/2 1
-Kent/2 1
-Kenton/3
-Kentuckian/1 1
-Kentucky/2 1
-Kenya/2 1
-Kenyan/1 1
-Kenyatta
-Kenny/3
-Kenyon/3
-Keogh/3
-Keokuk/3
-kepi/1 1
-Kepler/2 1
-kept 785
-keratin/2 1
-kerbside
-kerchief/18 1
-Kerensky/3
-kerfuffle/58 1
-Keri/3
-Kermit/3
-Kern
-kerned
-kernel/18 1
-kerning 1
-kerosene/2 1
-kerosine/2 1
-Kerouac
-Kerr
-Kerri/3
-Kerry 1
-kestrel/1 1
-ketch/4 1
-ketchup/2 1
-Kettering
-kettle/1 1
-kettledrum/1 1
-kettleful 1
-Keven/3
-Kevin/3
-Kevlar 1
-Kevorkian/3
-Kewpie 1
-Key
-key/23 1
-keyboard/23 1
-keyboarder/1 1
-keyboardist/1 1
-keyhole/1 1
-Keynes/2 1
-Keynesian 1
-keynote/28 1
-keynoter/1 1
-keypad/1 1
-keypunch/22 1
-keypuncher/1 1
-keyring
-keystone/1 1
-keystroke/18 1
-key 1
-keyword/1 1
-KFC/3
-KGB
-kg 1
-Khabarovsk
-Khachaturian
-khaki/1 1
-Khalid/3
-khalif/10 1
-Khan/3
-khan/1 1
-Kharkov/2 1
-Khartoum/2 1
-Khayyam/3
-Khazar/3
-Khmer/2 1
-Khoikhoi/2 1
-Khoisan/2 1
-Khomeini/3
-Khorana/3
-Khrushchev
-Khufu
-Khulna/3
-Khwarizmi/3
-Khyber/3
-kHz 1
-KIA
-kibble/28 1
-kibbutz/367 1
-kibbutzes
-kibitz/7 1
-kibitzer/1 1
-kibosh/2 1
-kick/23 1
-Kickapoo 1
-kickback/1 1
-kickball/2 1
-kickboxing 1
-kicker/1 1
-kickoff/1 1
-kickstand/1 1
-kicky/34 1
-kid/113 1
-Kidd/2 1
-kidder/1 1
-kiddie/18 1
-kiddish 1
-kiddo/1 1
-kiddy/167 1
-kidnap/105 1
-kidnaper/1 1
-kidnapper/1 1
-kidnapping/1 1
-kidney/1 1
-kidskin/2 1
-Kiel
-kielbasa/368 1
-Kierkegaard
-Kieth/3
-Kiev/2 1
-Kigali/2 1
-kike/10 1
-Kikuyu 1
-Kilauea
-Kilimanjaro/2 1
-kill/23 1
-killdeer/1 1
-killer/1 1
-killing/1 1
-killjoy/1 1
-kiln/23 1
-kilo/1 1
-kilobits
-kilobyte/1 1
-kilocycle/1 1
-kilogram/1 1
-kilohertz/2 1
-kilojoules
-kiloliter/1 1
-kilometer/1 1
-kiloton/1 1
-kilowatt/1 1
-Kilroy/3
-kilt/62 1
-kilter/2 1
-Kim/3
-Kimberley
-Kimberly/3
-kimono/1 1
-kin/1 1
-kind/369 1
-kinda 1
-kindergarten/1 1
-kindergartener/1 1
-kindergartner/1 1
-kindhearted/16 1
-kindle/6 1
-kindling/2 1
-kindly/140 1
-kindred/2 1
-kine/10 1
-kinematic/32 1
-kine 786
-kines 1
-kinetic/35 1
-kinfolk/130 1
-king/1 1
-King/1 1
-king/58 1
-kingdom/1 1
-kingfisher/1 1
-kingly/34 1
-kingmaker/10 1
-kingpin/1 1
-kingship/2 1
-Kingston/2 1
-Kingstown/2 1
-king 1
-kink/23 1
-Kinko's
-kinky/50 1
-Kinney/3
-Kinsey
-kinsfolk/2 1
-Kinshasa/2 1
-kinship/2 1
-kinsman/2 787
-kinsmen 788
-kinswoman/2 789
-kinswomen 790
-kin 1
-kiosk/1 1
-Kiowa/1 1
-Kip/3
-kip/47 1
-Kipling/2 1
-kipper/23 1
-Kirby/3
-Kirchhoff
-Kirchner/3
-Kirghistan/3
-Kirghiz/2 1
-Kirghizia/2 1
-Kiribati/2 1
-Kirinyaga/3
-Kirk
-kirk/18 1
-Kirkland/3
-Kirkpatrick/3
-Kirov
-kirsch/4 1
-Kirsten/3
-Kisangani
-Kishinev/2 1
-Kislev/2 1
-kismet/2 1
-kiss/22 1
-kissable 1
-kissagram/10 1
-kisser/1 1
-Kissinger
-kissoff/1 1
-kissogram/10 1
-Kit/3
-kit/109 1
-Kitakyushu/2 1
-kitbag/1 1
-kitchen/18 1
-Kitchener
-kitchenette/1 1
-kitchenware/2 1
-kite/28 1
-kith/2 1
-kitsch/2 1
-kitschy 1
-kitten/18 1
-kittenish 1
-kittiwakes
-Kitty/3
-kitty/15 1
-Kiwanis
-kiwi/1 1
-kiwifruit/1 1
-KKK/2 1
-kl
-Klan/2 1
-Klansman/2 1
-Klaus/3
-klaxon/10 1
-Klee
-Kleenex/4 1
-Klein/3
-kleptomania/2 1
-kleptomaniac/1 1
-Klimt
-Kline
-Klingon/3
-Klondike/18 1
-kludge/6 1
-kluge/6 1
-klutz/4 1
-klutziness/3
-klutzy/34 1
-Kmart/3
-km 1
-kn
-knack/18 1
-knacker/5 1
-knackwurst/1 1
-Knapp/3
-knapsack/1 1
-knave/1 1
-knavery/2 1
-knavish/8 1
-knead/11 1
-kneader/1 1
-knee/63 1
-kneecap/47 1
-kneecapping 1
-kneel/141 791
-kneeling 1
-knell/23 1
-knelt 792
-Knesset/2 1
-knew 793
-Kngwarreye/3
-knicker/32 1
-knickerbockers
-knickerbockers's
-Knickerbocker 1
-knickknack/1 1
-Knievel/3
-knife/360 794
-knight/23 1
-knighthood/1 1
-knightly/140 1
-Knight 1
-knish/4 1
-knit/109 1
-knitter/1 1
-knitting/2 1
-knitwear/2 1
-knives 795
-knob/1 1
-knobbly 1
-knobby/34 1
-knock/23 1
-knockabout 1
-knockdown/1 1
-knocker/1 1
-knocking/10 1
-knockoff/1 1
-knockout/1 1
-knockwurst/1 1
-knoll/18 1
-Knopf/3
-Knossos
-knot/109 1
-knothole/1 1
-knotting 1
-knotty/34 1
-know/370 796
-knowable 1
-knowing/371 1
-knowledge/2 1
-knowledgeable/19 1
-Knowles
-known 1
-Knox
-Knoxville
-knuckle/28 1
-knuckleduster/10 1
-knucklehead/1 1
-Knudsen/3
-knurl/23 1
-knurling 1
-Knuth/1 1
-KO/2 1
-koala/1 1
-koan/10 1
-Kobe
-Koch
-Kochab/3
-Kodachrome/3
-Kodak
-Kodaly/3
-Kodiak/2 1
-Koestler
-Kohinoor
-Kohl
-kohlrabi/4 1
-kohlrabies 1
-kohl 1
-Koizumi/3
-Kojak/3
-kola/1 1
-Koln/2 1
-Kolyma
-Kommunizma/3
-Kong/3
-Kongo/2 1
-Konrad/3
-kook/18 1
-kookaburra/1 1
-kookie/150 1
-kookiness/3
-kooky/34 1
-Koontz/3
-kopeck/1 1
-kopek/1 1
-Koppel/3
-Koran/1 1
-Koranic
-Korea/2 1
-Korean/1 1
-korma 1
-Kornberg/3
-Kory/3
-Korzybski
-Kosciusko
-kosher/5 1
-Kossuth
-Kosygin
-Koufax/3
-Kowloon
-kowtow/23 1
-KP
-kph 1
-Kr/2 1
-kraal/18 1
-Kraft/3
-Krakatau/2 1
-Krakatoa/2 1
-Krakow/2 1
-Kramer/3
-Krasnodar
-Krasnoyarsk
-kraut/80 1
-Krebs
-Kremlin
-Kremlinologist 1
-Kremlinology 1
-Kresge/3
-kriegspiel 1
-krill/2 1
-Kringle/3
-Kris/3
-Krishna/2 1
-Krishnamurti/3
-Krista/3
-Kristen/3
-Kristi/3
-Kristie/3
-Kristin/3
-Kristina/3
-Kristine/3
-Kristopher/3
-Kristy/3
-Kroc/3
-Kroger/3
-krona/372 1
-krone/373 1
-Kronecker/3
-Kropotkin
-Kruger
-Krugerrand 1
-Krupp
-krypton/2 1
-Krystal/3
-KS
-Kshatriya/2 1
-kt
-k 1
-Kublai/3
-Kubrick
-kuchen/1 1
-kudos
-kudos's
-kudzu/1 1
-Kuhn/3
-Kuibyshev
-kulaks
-Kulthumm/3
-kumquat/1 1
-Kunming
-Kuomintang 1
-Kurdish/2 1
-Kurdistan 1
-Kurd 1
-Kurile
-Kurosawa
-Kurt/3
-Kurtis/3
-Kusch/3
-Kutuzov
-Kuwait/2 1
-Kuwaiti/1 1
-Kuznets/3
-Kuznetsk/3
-kvetch/22 1
-kw
-Kwakiutl/2 1
-Kwan/3
-Kwangchow/2 1
-Kwangju
-Kwanza/1 1
-Kwanzaa/1 1
-kWh
-kW 1
-Ky
-KY
-Kyle/3
-kyle/10 1
-Kyoto/2 1
-Kyrgyzstan
-Kyushu/2 1
-l/374 1
-L/2 1
-l/10 1
-LA
-la/2 1
-La/2 1
-lab/1 1
-Laban
-label/23 1
-labellings
-labial/1 1
-labia 797
-labile 1
-labium/2 798
-labor/23 1
-laboratory/15 1
-labored 1
-laborer/1 1
-laboring 1
-laborious/16 1
-laborsaving
-Labrador/1 1
-Labradorean 1
-Labradorian 1
-Lab 1
-laburnum/1 1
-labyrinth/1 1
-labyrinthine
-lac/375 1
-lace/28 1
-lacerate/6 1
-laceration/1 1
-lacewing/1 1
-lacework/2 1
-Lacey/3
-Lachesis/2 1
-lachrymal 1
-lachrymose 1
-lacier 799
-laciest 799
-lacing 1
-lack/23 1
-lackadaisical/8 1
-lackey/18 1
-lackluster 1
-laconic
-laconically
-lacquer/23 1
-lacquering 1
-lacrimal 1
-lacrosse/2 1
-lactate/43 1
-lactation/2 1
-lacteal 1
-lactic 1
-lactose/2 1
-lacuna/53 1
-Lacy/3
-lacy/34 1
-lad/18 1
-ladder/23 1
-laddie/1 1
-laddish
-laddishness
-lade/376 1
-laden 1
-lading/1 1
-ladle/28 1
-ladling 1
-Ladoga
-Ladonna/3
-lady/15 1
-ladybird/1 1
-ladybug/1 1
-ladyfinger/1 1
-ladylike 1
-ladylove/1 1
-ladyship/1 1
-Ladyship/1 1
-Lady 1
-laetrile/2 1
-Lafayette
-Lafitte/3
-lag/92 1
-lager/18 1
-laggard/30 1
-lagging/2 1
-lagnappe/1 1
-lagniappe/1 1
-lagoon/1 1
-Lagos/2 1
-Lagrange
-Lagrangian 1
-Lahore
-lain 800
-lair/18 1
-laird/1 1
-laity/2 1
-Laius
-Lajos/3
-lake/18 1
-lakefront/10 1
-Lakeisha/3
-lakeside 1
-Lakewood
-Lakisha/3
-Lakota 1
-Lakshmi/2 1
-lallygag/117 1
-lam/160 1
-lama/1 1
-Lamaism/1 1
-Lamar/3
-Lamarck/2 1
-lamasery/15 1
-Lamaze 1
-Lamb
-lamb/23 1
-lambada/1 1
-lambast/11 1
-lambaste/6 1
-lambda/1 1
-lambency/2 1
-lambent/8 1
-Lambert
-lambkin/1 1
-Lamborghini/3
-Lambrusco 1
-lambskin/1 1
-lambswool
-lame/107 1
-lamebrain/1 1
-lamed 1
-lament/23 1
-lamentable/19 1
-lamentation/1 1
-Lamentations
-lamented 1
-lamenting 1
-lamer/10 1
-lamina/53 1
-laminar
-laminate/28 1
-lamination/2 1
-lamming 1
-Lamont/3
-L'Amour
-lamp/18 1
-lampblack/2 1
-lamplight/2 1
-lamplighter/1 1
-lampoon/23 1
-lampoonery 1
-lamppost/1 1
-lamprey/1 1
-lampshade/1 1
-lam 1
-LAN/2 1
-Lana/3
-lanai/1 1
-Lanai/2 1
-Lancashire 1
-Lancaster/2 1
-Lance/3
-lance/28 1
-Lancelot/2 1
-lancer/1 1
-lancet/1 1
-Land
-land/78 1
-landau/1 1
-lander 1
-landfall/1 1
-landfill/18 1
-landforms
-landholder/1 1
-landholding/1 1
-landing/1 1
-landlady/15 1
-landless/2 1
-landlines
-landlocked
-landlord/1 1
-landlubber/1 1
-landmark/18 1
-landmass/4 1
-landmine/10 1
-Landon/3
-landowner/1 1
-landownership 1
-landowning/1 1
-Landry/3
-Landsat 1
-landscape/28 1
-landscaper/1 1
-landslide/377 1
-landslid 1
-landslip/10 1
-landsman/2 801
-landsmen 802
-Landsteiner/3
-landward/10 1
-Lane/3
-lane/1 1
-Lang
-Langerhans/3
-Langland
-Langley
-Langmuir
-language/1 1
-languid/16 1
-languish/7 1
-languishing 1
-languor/1 1
-languorous/8 1
-lank/21 1
-lanky/49 1
-lanolin/2 1
-Lansing/2 1
-lantern/18 1
-lanthanum/2 1
-Lanzhou/2 1
-lanyard/1 1
-Lanny/3
-Lao/1 1
-Laocoon/2 1
-Laotian/1 1
-Lao 1
-lap/47 1
-lapboard/1 1
-lapdog/1 1
-lapel/1 1
-lapidary/15 1
-lapin/1 1
-Laplace
-Lapland/2 1
-Laplander 1
-Lapp/1 1
-lappet/1 1
-lapping 1
-laps/7 1
-lapse/28 1
-laptop/1 1
-lapwing/1 1
-Lara/3
-Laramie/3
-larboard/1 1
-larcenist/1 1
-larcenous 1
-larceny/15 1
-larch/4 1
-lard/23 1
-larder/1 1
-Lardner/3
-lardy/34 1
-Laredo
-large/25 1
-largehearted
-largess/2 1
-largesse/2 1
-larges 1
-largish 1
-largo/1 1
-lariat/18 1
-lark/23 1
-larkspur/1 1
-Larousse
-Larry/3
-Lars
-Larsen/3
-Larson/3
-larva/53 1
-larval 1
-laryngeal 1
-laryngitis/2 1
-larynx/201 1
-lasagna/1 1
-lasagne/1 1
-Lascaux/3
-lascivious/16 1
-lase/6 1
-laser/1 1
-lash/22 1
-lashing/1 1
-lass/4 1
-Lassa/2 1
-Lassen/3
-Lassie/3
-lassie/1 1
-lassitude/2 1
-lasso/23 1
-la's 803
-last/210 1
-lasting/8 1
-la 804
-Lat
-lat/378 1
-Latasha/3
-latch/22 1
-latchkey/1 1
-late/27 1
-latecomer/1 1
-latency/15 1
-latent 1
-lateral/210 1
-lateralization 1
-Lateran/3
-latest/2 1
-latex/2 805
-lath/23 1
-lathe/28 1
-lather/23 1
-lathery 1
-lathes 806
-lathing 1
-latices 807
-Latin/129 1
-Latina 1
-Latino/1 1
-Latisha/3
-latish 1
-latitude/1 1
-latitudinal 1
-latitudinarian/1 1
-Latonya/3
-Latoya/3
-latrine/1 1
-Latrobe/3
-latte/1 1
-latter/8 1
-latter's
-lattice/77 1
-latticework/1 1
-Latvia/2 1
-Latvian/1 1
-Laud
-laud/23 1
-laudable/19 1
-laudanum/2 1
-laudatory 1
-Lauder
-Laue
-laugh/23 1
-laughable/19 1
-laughing/37 1
-laughingstock/1 1
-laughter/2 1
-launch/22 1
-launcher/1 1
-launchpad/1 1
-launder/5 1
-launderer/1 1
-launderette/1 1
-laundress/4 1
-laundrette/1 1
-laundromat/1 1
-Laundromat 1
-laundry/15 1
-laundryman/2 808
-laundrymen 809
-laundrywoman/2 810
-laundrywomen 811
-Laura/3
-Laurasia/2 1
-laureate/18 1
-laureateship/2 1
-laureate 1
-Laurel/3
-laurel/18 1
-Lauren/3
-Laurence/3
-Laurent/3
-Laurie/3
-Lauri's 812
-Lauri 813
-lav/70 1
-lava/1 1
-lavage/2 1
-Laval
-lavalier/1 1
-lavaliere/1 1
-lavatorial
-lavatory/15 1
-lave/6 1
-lavender/18 1
-Lavern/3
-Laverne/3
-lavish/379 1
-lavisher 1
-Lavoisier
-Lavonne/3
-law/18 1
-Lawanda/3
-lawbreaker/1 1
-lawbreaking/2 1
-lawful/16 1
-lawgiver/1 1
-lawless/16 1
-lawmaker/1 1
-lawmaking/2 1
-lawman/2 814
-lawmen 815
-lawn/1 1
-lawnmower/1 1
-Lawrence
-lawrencium/2 1
-Lawson 1
-lawsuit/1 1
-law 1
-lawyer/18 1
-lax/380 1
-laxative/1 1
-laxity/2 1
-lay/381 1
-layabout/10 1
-Layamon
-layaway/2 1
-layer/23 1
-layering/2 1
-layette/1 1
-laying 1
-Layla/3
-layman/2 816
-laymen 817
-layoff/1 1
-layout/1 1
-layover/1 1
-laypeople 818
-layperson/1 819
-lay 800
-layup/1 1
-laywoman/2 820
-laywomen 821
-Lazaro/3
-Lazarus/2 1
-laze/28 1
-lazuli 1
-lazy/143 1
-lazybones/2 1
-lb/10 1
-LBJ/3
-lbw
-LC
-LCD/2 1
-LCM
-LDC
-Le/3
-Lea/3
-lea/1 1
-Leach/3
-leach/156 1
-leaching 1
-lead/23 822
-Leadbelly
-leaded 1
-leaden 1
-leader/1 1
-leaderless 1
-leadership/1 1
-leading/2 1
-leaf/115 1
-leafage/2 1
-leafless 1
-leaflet/23 1
-leafstalk/1 1
-leafy/259 1
-league/28 1
-Leah
-leak/23 1
-leakage/1 1
-Leakey/2 1
-leaky/49 1
-Lean/3
-lean/165 1
-Leander
-leaner 1
-leaning/1 1
-Leann/3
-Leanna/3
-Leanne/3
-leap/23 1
-leaper/1 1
-leapfrog/92 1
-Lear/2 1
-Learjet/3
-learn/11 1
-learned/8 1
-learner/1 1
-learning/2 1
-Leary/3
-leas/7 1
-lease/28 1
-leaseback/1 1
-leasehold/1 1
-leaseholder/1 1
-leaser/1 1
-leash/22 1
-leasing 1
-least/2 823
-leastways 1
-leastwise 1
-leather/18 1
-leatherette/2 1
-leatherneck/1 1
-leather 1
-leathery 1
-leave/28 824
-leaved 1
-leaven/23 1
-leavening/2 1
-Leavenworth
-leaver/1 1
-leaving/32 1
-Lebanese/2 1
-Lebanon/2 1
-lebensraum 1
-Lebesgue/3
-Leblanc/3
-lech/7 1
-lecher/18 1
-lecherous/16 1
-lechery/2 1
-lech's
-lecithin/2 1
-lectern/1 1
-lecture/28 1
-lecturer/1 1
-lectureship/1 1
-LED/2 1
-Leda 825
-Lederberg/3
-ledge/18 1
-ledger/18 1
-led 826
-lee/48 1
-Lee/2 1
-leech/22 1
-Leeds/2 1
-leek/1 1
-leer/23 1
-leering/8 1
-leery/49 1
-lees 827
-Leeuwenhoek
-Leeward/3
-leeward/1 1
-leeway/2 1
-left/188 1
-leftie/1 1
-leftism/2 1
-leftist/1 1
-leftmost 1
-leftover/1 1
-left 828
-Left 1
-leftward/10 1
-lefty/15 1
-leg/92 1
-legacy/15 1
-legal/30 1
-legalese/1 1
-legalism/1 1
-legalistic/39 1
-legality/15 1
-legalization/2 1
-legalize/6 1
-legate/18 1
-legatee/1 1
-legation/1 1
-legato/1 1
-legend/1 1
-legendary/211 1
-Legendre
-Leger/3
-legerdemain/2 1
-leggin/1 1
-legging/1 1
-leghorn/1 1
-Leghorn 1
-legibility/2 1
-legible/19 1
-legion/1 1
-legionary/15 1
-legionnaire/1 1
-legion 1
-legislate/6 1
-legislation/2 1
-legislative/8 1
-legislator/1 1
-legislature/1 1
-legitimacy/2 1
-legitimate/68 1
-legitimation 1
-legitimatize/6 1
-legitimization/2 1
-legitimize/6 1
-legit 1
-legless 1
-legman/2 829
-legmen 830
-Lego/3
-Legree/3
-legroom/1 1
-legstraps
-legume/1 1
-leguminous
-legwarmer/10 1
-legwork/2 1
-leggy/49 1
-Lehman/3
-lei/1 1
-Leibniz/2 1
-Leicester/1 1
-Leiden/2 1
-Leif/3
-Leigh
-Leila/3
-Leipzig/2 1
-leis 831
-leisure/37 1
-leisured
-leisurely/140 1
-leisurewear/2 1
-leitmotif/1 1
-leitmotiv/1 1
-Lela/3
-Leland/3
-Lelia/3
-Lemaitre/3
-lemma/10 1
-lemme
-lemming/1 1
-lemon/18 1
-lemonade/1 1
-lemongrass 1
-lemony 1
-Lemuel/3
-lemur/1 1
-Lemuria/3
-Len/3
-Lena/2 1
-Lenard/3
-lend/382 1
-lender/1 1
-lending 1
-L'Enfant
-length/1 1
-lengthen/11 1
-lengthways 1
-lengthwise 1
-lengthy/50 1
-lenience/2 1
-leniency/2 1
-lenient/8 1
-Lenin/2 1
-Leningrad/2 1
-Leninism/2 1
-Leninist 1
-lenitive 1
-Lennon/3
-Leno/3
-Lenoir/3
-Lenora/3
-Lenore/3
-lens/182 1
-Lent/1 1
-Lenten
-lenten 1
-lentil/1 1
-lento 1
-Lenny/3
-Leo/1 1
-Leola/3
-Leon
-Leona/3
-Leonard/3
-Leonardo/2 1
-Leoncavallo
-Leonel/3
-Leonidas/2 1
-Leonid 1
-leonine 1
-Leonor/3
-leopard/1 1
-leopardess/4 1
-leopardskin
-Leopold/3
-Leopoldo/3
-leotard/1 1
-leper/1 1
-Lepidus
-Lepke/3
-leprechaun/1 1
-leprosy/2 1
-leprous 1
-lepta 832
-lepton/1 833
-Lepus/2 1
-Lerner
-Leroy/3
-Les
-Lesa/3
-lesbian/1 1
-lesbianism/2 1
-lesbian 1
-lesion/18 1
-Lesley/3
-Leslie/3
-Lesotho/2 1
-less/161 834
-lessee/1 1
-lessen/11 1
-Lesseps
-lesser 835
-Lessie/3
-lesson/18 1
-lessor/1 1
-less 835
-Lester/3
-Lestrade/3
-let/128 1
-Leta/3
-letch/205 1
-letdown/1 1
-Letha/3
-lethal/8 1
-lethality 1
-lethal 1
-lethargic/39 1
-lethargy/2 1
-Lethe/2 1
-Leticia/3
-Letitia/3
-letter/23 1
-letterbomb/10 1
-letterbox/205 1
-letterer/1 1
-letterhead/1 1
-lettering/2 1
-Letterman/3
-letterpress/2 1
-letting/10 1
-lettuce/1 1
-letup/1 1
-leucotomy/60 1
-leukemia/2 1
-leukemic/1 1
-leukocyte/1 1
-Levant/2 1
-levee/18 1
-level/383 1
-leveler/1 1
-levelest
-levelheaded
-levelheadedness/3
-leveling 1
-lever/23 1
-leverage/28 1
-Levesque/3
-Levi/1 1
-leviathan/1 1
-Leviathan 1
-levier/1 1
-Levine/3
-levitate/6 1
-levitation/2 1
-Leviticus/2 1
-Levitt/3
-levity/2 1
-Levy/3
-levy/56 1
-Lew/3
-lewd/21 1
-Lewinsky/3
-Lewis
-lexeme/10 1
-lexer
-lexers
-lexical/8 1
-lexicographer/1 1
-lexicographic
-lexicographical/8 1
-lexicography/2 1
-lexicon/1 1
-Lexington/2 1
-lexis 1
-Lexus/3
-lg
-LG
-Lhasa/1 1
-Lhotse/2 1
-Li/2 1
-liability/15 1
-liable 1
-liaise/6 1
-liaison/1 1
-liar/1 1
-lib/2 1
-libation/1 1
-libber/1 1
-Libby
-libel/23 1
-libeler/1 1
-libelous 1
-Liberace/3
-liberal/36 1
-liberalism/2 1
-liberality/2 1
-liberalization/1 1
-liberalize/6 1
-liberate/6 1
-liberation/2 1
-liberationists
-liberator/1 1
-Liberia/2 1
-Liberian/1 1
-libero 1
-libertarian/1 1
-libertarianism 1
-libertine/1 1
-liberty/15 1
-libidinal 1
-libidinous 1
-libido/1 1
-Libra/1 1
-librarian/1 1
-librarianship 1
-library/15 1
-librettist/1 1
-libretto/1 1
-Libreville/2 1
-Librium/2 1
-lib 1
-Libya/2 1
-Libyan/1 1
-license/28 1
-licensee/1 1
-licentiate/1 1
-licentious/16 1
-lice 836
-lichee/1 1
-lichen/62 1
-Lichtenstein
-licit/8 1
-lick/23 1
-lickerish 1
-licking/1 1
-licorice/1 1
-lid/329 1
-Lidia/3
-lidless 1
-lido/1 1
-Lie
-lie/77 837
-Lieberman/3
-Liebfraumilch 1
-Liechtenstein/2 1
-Liechtensteiner/1 1
-lied/384 1
-lief/166 1
-Liege/3
-liege/1 1
-lien/1 1
-lieu/2 1
-Lieut
-lieutenancy/2 1
-lieutenant/1 1
-life/2 838
-lifebelt/10 1
-lifeblood/2 1
-lifeboat/1 1
-lifeboatmen 839
-lifebuoy/1 1
-lifeforms
-lifeguard/18 1
-lifeless/16 1
-lifelike 1
-lifeline/1 1
-lifelong
-lifer/1 1
-lifesaver/1 1
-lifesaving/2 1
-lifespan/10 1
-lifestyle/1 1
-lifetaking
-lifetime/1 1
-lifework/1 1
-LIFO
-lift/23 1
-lifter/1 1
-liftoff/1 1
-ligament/1 1
-ligand/10 1
-ligate/6 1
-ligation/2 1
-ligature/28 1
-light/52 840
-lighten/11 1
-lightener/1 1
-lightening 1
-lighter/18 1
-lightface/2 1
-lightfaced
-lightface 1
-lightheaded
-lighthearted/16 1
-lighthouse/1 1
-lighting/2 1
-lightning/62 1
-lightproof 1
-lightship/1 1
-lightweight/1 1
-ligneous 1
-lignite/2 1
-lii
-likability/2 1
-likable/33 1
-like/385 1
-likeability
-likeable 1
-likelihood/1 1
-likely/140 1
-liken/11 1
-liker 1
-likewise
-liking/1 1
-Lila/3
-lilac/1 1
-Lilian/3
-Liliana/3
-Lilia's 841
-Lilia 842
-lilies
-Lilith/2 1
-Liliuokalani
-Lille
-Lillian/3
-Lillie/3
-Lilliput/2 1
-Lilliputian/1 1
-lilliputian 1
-lilo
-Lilongwe/2 1
-lilos
-lilt/23 1
-lily/3
-Lily/3
-Lilly/3
-Lima/2 1
-limb/18 1
-Limbaugh/3
-limber/386 1
-limbless 1
-Limbo
-limbo/18 1
-Limburger 1
-lime/28 1
-limeade/1 1
-limekiln 1
-limelight/2 1
-limerick/1 1
-limescale
-limestone/2 1
-lime 1
-limey/10 843
-limier 844
-limiest 844
-liming 1
-limit/23 1
-limitation/1 1
-limited 1
-limiter/1 1
-limiting/10 1
-limitless/33 1
-limn/11 1
-limo/1 1
-Limoges
-Limousin/2 1
-limousine/1 1
-limp/52 1
-limper 1
-limpet/1 1
-limpid/16 1
-limpidity/2 1
-limping 1
-Limpopo/2 1
-limy/34 1
-Lin/3
-Lina/3
-linage/2 1
-linchpin/1 1
-Lincoln/1 1
-linctus 1
-Lind
-Linda/3
-Lindbergh
-linden/1 1
-Lindsay
-Lindsey
-Lindy 1
-line/28 1
-lineage/1 1
-lineal/8 1
-lineament/1 1
-linear/8 1
-linearity/2 1
-linearized
-linebacker/1 1
-linefeed 1
-lineman/2 845
-linemen 846
-linen/130 1
-liner/1 1
-linesman/2 847
-linesmen 848
-lineup/1 1
-ling/1 1
-linger/11 1
-lingerer/1 1
-lingerie/2 1
-lingering/191 1
-lingo/4 1
-lingual 1
-linguine/2 1
-linguini's
-linguist/1 1
-linguistic/32 1
-linguistically
-liniment/1 1
-lining/1 1
-link/23 1
-linkable
-linkage/1 1
-linker/10 1
-linkman 849
-linkmen 850
-linkup/1 1
-Linnaeus/2 1
-linnet/1 1
-linoleum/2 1
-lino 1
-Linotype 1
-linseed/2 1
-lint/23 1
-lintel/1 1
-Linton/3
-linty/34 1
-Linus/3
-Linux/89 1
-Linwood/3
-lion/1 1
-Lionel/3
-lioness/3
-lionesses
-lionhearted 1
-lionization/2 1
-lionize/6 1
-lip/387 1
-lipase 1
-lipid/1 1
-Lipizzaner 1
-liposuction/2 1
-Lippi
-Lippmann
-lippy/34 1
-lipread/121 1
-lipreader/2 1
-lipreading/2 1
-Lipscomb/3
-lipstick/23 1
-Lipton/3
-lip 1
-liq
-liquefaction/2 1
-liquefy/31 1
-liqueur/18 1
-liquid/1 1
-liquidate/6 1
-liquidation/1 1
-liquidator/1 1
-liquidity/2 1
-liquidize/6 1
-liquidizer/1 1
-liquid 1
-liquify/31 1
-liquor/23 1
-liquorice/1 1
-liquorish
-lira/388 1
-Lisa/3
-Lisbon/2 1
-lisle/2 1
-lisp/23 1
-lisper/1 1
-lisping 1
-Lissajous/3
-lissom/153 1
-lissome/153 1
-list/23 1
-listen/11 1
-listenable
-listener/1 1
-listen's
-Lister/2 1
-listeria 1
-Listerine/3
-listing/1 1
-listless/16 1
-Liston/3
-Liszt
-lit/389 1
-litany/15 1
-litchi/1 1
-lite/336 1
-liter/1 1
-literacy/2 1
-literal/36 1
-literalism 1
-literalistic 1
-literary/140 1
-literate/30 1
-literati's 851
-literati 852
-literature/2 1
-lite 1
-lithe/27 1
-lithesome
-lithium/2 1
-lithograph/23 1
-lithographer/1 1
-lithographic
-lithographically
-lithography/2 1
-lithological 1
-lithology 1
-lithosphere/1 1
-Lithuania/2 1
-Lithuanian/1 1
-litigant/1 1
-litigate/6 1
-litigation/2 1
-litigator/1 1
-litigious/33 1
-litmus/2 1
-litotes
-litotes's
-lit 853
-litter/23 1
-litterateur/1 1
-litterbug/1 1
-litterer/1 1
-Little/3
-little/162 854
-Litton/3
-littoral/1 1
-lit 1
-liturgical/8 1
-liturgist/1 1
-liturgy/15 1
-livability/2 1
-livable 1
-live/390 1
-liveable 1
-livelihood/1 1
-livelong/10 1
-lively/140 1
-liven/11 1
-liver/18 1
-liveried
-liverish 1
-Liverpool/2 1
-Liverpudlian/1 1
-liverwort/1 1
-liverwurst/2 1
-livery/15 1
-liveryman/2 855
-liverymen 856
-livery 1
-lives 857
-livestock/2 1
-liveware/10 1
-Livia/3
-livid/8 1
-living/1 1
-Livingston
-Livingstone
-living 1
-Livonia/2 1
-Livy
-lix
-Liz/3
-Liza/3
-lizard/1 1
-Lizzie/3
-Lizzy/3
-Ljubljana/2 1
-ll
-LL
-llama/1 1
-llano/1 1
-LLB/2 1
-LLD/2 1
-Llewellyn
-Lloyd
-Ln
-LNG
-lo
-load/23 1
-loadable
-loader/1 1
-loading/1 1
-loadstar/1 1
-loadstone/1 1
-loaf/115 1
-loafer/1 1
-Loafer/1 1
-loafing 1
-loam/18 1
-loamy/34 1
-loan/23 1
-loanable
-loaner/1 1
-loaning 1
-loansharking/2 1
-loanword/1 1
-loath/44 1
-loathe/253 1
-loather/1 1
-loathing/1 1
-loathsome/16 1
-lob/136 1
-Lobachevsky
-lobar 1
-lobber/1 1
-lobby/56 1
-lobbying 1
-lobbyist/1 1
-lobe/77 1
-lobotomist
-lobotomize/6 1
-lobotomy/15 1
-lobster/18 1
-local/164 1
-locale/18 1
-locality/15 1
-localization/1 1
-localize/6 1
-locatable
-locate/6 1
-location/1 1
-locational
-locative 1
-locator/1 1
-loch/1 1
-Lochinvar
-loci 858
-lock/23 1
-lockable
-Locke/2 1
-Lockean
-locker/1 1
-locket/1 1
-Lockheed/3
-lockjaw/2 1
-lockout/1 1
-locksmith/1 1
-lockstep/2 1
-lockup/1 1
-Lockwood/3
-loco/391 1
-locomotion/2 1
-locomotive/1 1
-loco 1
-locoweed/1 1
-locum/10 1
-locus/2 859
-locust/1 1
-locution/1 1
-lode/1 1
-lodestar/1 1
-lodestone/1 1
-Lodge
-lodge/28 1
-lodgement 1
-lodger/1 1
-lodging/130 1
-Lodz/2 1
-Loewe
-Loewi
-Loews/3
-loft/23 1
-lofty/50 1
-log/152 1
-Logan/2 1
-loganberry/15 1
-logarithm/1 1
-logarithmic/39 1
-logbook/1 1
-loge/1 1
-logger/1 1
-loggerhead/1 1
-loggia/1 1
-logging/2 1
-logic/2 1
-logical/8 1
-logicality/2 1
-logician/1 1
-logistic/32 1
-logistical/8 1
-logjam/1 1
-LOGO
-logo/1 1
-logotype/1 1
-logrolling/2 1
-logy/34 1
-Lohengrin
-loin/1 1
-loincloth/1 1
-Loire/2 1
-Lois/3
-loiter/11 1
-loiterer/1 1
-loitering/2 1
-Loki/2 1
-Lola/3
-Lolita 1
-loll/5 1
-Lollard 1
-lollies
-lolling 1
-lollipop/1 1
-Lollobrigida/3
-lollop/11 1
-lolly
-lollygag/117 1
-lollypop/1 1
-Lombard/2 1
-Lombardi/3
-Lombardy/2 1
-Lome/2 1
-Lon/3
-London/2 1
-Londoner/1 1
-lone/392 1
-lonely/140 1
-loner/1 1
-lonesome/16 1
-Long
-long/179 1
-longboat/1 1
-longbow/1 1
-longer 1
-longevity/2 1
-Longfellow/2 1
-longhair/1 1
-longhand/2 1
-longhorn/1 1
-longhouse/10 1
-longing/30 1
-longish 1
-longitude/1 1
-longitudinal/8 1
-longshoreman/2 860
-longshoremen 861
-longsighted 1
-longstanding
-Longstreet/3
-longsword
-longtime 1
-Longueuil
-longueur/1 1
-longways 1
-longwise 1
-Lonnie/3
-loo/70 1
-loofah/1 1
-look/23 1
-lookalike/1 1
-looker/1 1
-looking 1
-lookout/1 1
-loom/23 1
-loon/1 1
-looney/2 862
-loonier 863
-loonies 864
-looniest 863
-loony/42 1
-loop/23 1
-loophole/18 1
-looping 1
-loopy/34 1
-loos/393 1
-loose/104 1
-loosen/11 1
-loot/23 1
-looter/1 1
-looting/2 1
-lop/394 1
-lope/28 1
-Lopez/3
-lopper/58 1
-lopping 1
-lopsided/16 1
-loquacious/16 1
-loquacity/2 1
-Lora/3
-Loraine/3
-lord/1 1
-Lord/1 1
-lord/11 1
-lording 1
-lordly/49 1
-lordship/1 1
-Lordship/1 1
-lore/2 1
-L'Oreal
-Lorelei/2 1
-Loren
-Lorena/3
-Lorene/3
-Lorentz
-Lorenz
-Lorenzo/3
-Loretta/3
-lorgnette/1 1
-Lori/3
-Lorie/3
-loris/4 1
-Lorna/3
-lorn 1
-Lorraine/2 1
-Lorre/3
-Lorrie/3
-lorry/15 1
-lorryload
-lorryloads
-losable 1
-lose/395 1
-loser/1 1
-losing/1 1
-loss/4 1
-lot/1 1
-Lot/2 1
-lot/58 1
-Lothario/1 1
-loth 1
-lotion/1 1
-Lott/3
-lottery/15 1
-Lottie/3
-lotto/2 1
-lot 1
-lotus/4 1
-Lou/3
-louche 1
-loud/396 1
-loudhailer/1 1
-loudmouth/1 1
-loudmouthed
-loudspeaker/1 1
-Louella/3
-lough/10 1
-Louie/3
-Louis
-Louisa/3
-Louise/3
-Louisiana/2 1
-Louisianan/1 1
-Louisianian/1 1
-Louisville/2 1
-lounge/28 1
-lounger/1 1
-lounging 1
-lour/11 1
-Lourdes
-louring 1
-louse/28 865
-lousy/50 1
-lout/18 1
-loutish/83 1
-louver/62 1
-L'Ouverture
-Louvre/2 1
-lovable/29 1
-Love/3
-love/28 1
-loveable 1
-lovebird/1 1
-lovechild/2 1
-Lovecraft/3
-Lovelace
-loveless 1
-lovelies
-lovelorn 1
-lovely/49 1
-lovely's
-lovemaking/2 1
-lover/1 1
-loveseat/1 1
-lovesick 1
-lovestruck
-lovey/10 1
-loving/8 1
-low/397 1
-lowborn 1
-lowboy/1 1
-lowbrow/1 1
-lowdown/2 1
-Lowe/3
-Lowell
-Lowenbrau/3
-lower/5 1
-lowercase/2 1
-lowering 1
-lowermost
-Lowery/3
-lowing 1
-lowish
-lowland/129 1
-lowlander/1 1
-Lowlands
-lowlife/1 1
-lowly/140 1
-lows 1
-lox/2 1
-loyal/75 1
-loyalism/2 1
-loyalist/1 1
-loyalty/15 1
-Loyang/2 1
-Loyd/3
-Loyola
-lozenge/1 1
-LP/2 1
-LPG
-LPN/1 1
-Lr
-LSAT
-LSD/2 1
-Lt
-ltd
-Ltd
-Lu/2 1
-Luanda/2 1
-Luann/3
-luau/1 1
-Lubavitcher 1
-lubber/1 1
-lubberly 1
-lubber 1
-Lubbock
-lube/28 1
-lubricant/1 1
-lubricate/6 1
-lubrication/2 1
-lubricator/1 1
-lubricious/8 1
-lubricity/2 1
-Lubumbashi
-Lucas
-Luce/3
-Lucia/3
-Lucian
-Luciano/3
-lucid/16 1
-lucidity/2 1
-Lucien/3
-Lucifer/2 1
-Lucile/3
-Lucille/3
-Lucinda/3
-Lucio/3
-Lucite/1 1
-Lucius/3
-luck/23 1
-luckless 1
-Lucknow/2 1
-lucky/50 1
-lucrative/16 1
-lucre/2 1
-Lucretia
-Lucretius
-lucubrate/6 1
-lucubration/2 1
-Lucy/2 1
-Luddite/1 1
-Ludhiana
-ludicrous/16 1
-ludo 1
-Ludwig/3
-Luella/3
-luff/5 1
-Lufthansa/3
-Luftwaffe
-lug/92 1
-luge/70 1
-Luger/2 1
-luggage/2 1
-lugger/1 1
-lughole/10 1
-Lugosi/3
-lugsail/1 1
-lugubrious/16 1
-Luigi/3
-Luis/3
-Luisa/3
-Luke/2 1
-lukewarm/16 1
-Lula/3
-lull/23 1
-lullaby/167 1
-lulling 1
-Lulu/3
-lulu/10 1
-Lully
-lumbago/2 1
-lumbar 1
-lumber/23 1
-lumberer/1 1
-lumbering/2 1
-lumberjack/1 1
-lumberman/2 866
-lumbermen 867
-lumberyard/1 1
-lumen 1
-Lumiere/3
-luminance 1
-luminary/15 1
-luminescence/2 1
-luminescent
-luminosity/15 1
-luminous/8 1
-lummox/4 1
-lump/23 1
-lumpectomy/60 1
-lumpen 1
-lumpish 1
-lumpy/49 1
-Luna/2 1
-lunacy/15 1
-lunar 1
-lunatic/1 1
-lunch/22 1
-lunchbox/89 1
-luncheon/18 1
-luncheonette/1 1
-lunchpack
-lunchroom/1 1
-lunchtime/1 1
-lune 1
-lung/23 1
-lunge/28 1
-lunges 868
-lungfish/4 1
-lungful/10 1
-lunkhead/1 1
-Lupe/3
-Lupercalia 1
-lupine/1 1
-lupus/2 1
-Lupus/2 1
-lurch/22 1
-lurching 1
-lure/28 1
-lurex 1
-lurgy
-Luria/3
-lurid/16 1
-lurk/5 1
-lurker/10 1
-lurking 1
-Lusaka/2 1
-luscious/16 1
-lush/398 1
-lusher 1
-Lusitania/2 1
-lust/23 1
-luster/2 1
-lusterless 1
-luster 1
-lustful/8 1
-lustrous/8 1
-lusty/50 1
-lutanist/1 1
-lute/18 1
-lutenist/1 1
-lutetium/2 1
-Luther/2 1
-Lutheran/1 1
-Lutheranism/1 1
-luv/10 1
-Luvs/3
-luvvie/10 1
-Luxembourg/2 1
-Luxembourger/1 1
-Luxembourgian
-Luxemburg/2 1
-luxuriance/2 1
-luxuriant/8 1
-luxuriate/6 1
-luxuriation/2 1
-luxurious/16 1
-luxury/15 1
-Luz/3
-Luzon/2 1
-lvi
-lvii
-LVN
-Lvov
-lxi
-lxii
-lxiv
-lxix
-lxvi
-lxvii
-Lyallpur
-lyceum/1 1
-lychee/1 1
-lychgate/10 1
-Lycra 1
-Lycurgus
-Lydia
-Lydian/1 1
-lye/2 1
-Lyell
-lying/2 869
-Lyle/3
-Lyly
-Lyman/3
-Lyme/3
-lymph/2 1
-lymphatic/1 1
-lymphocyte/1 1
-lymphoid 1
-lymphoma/1 1
-Lynch
-lynch/7 1
-lyncher/1 1
-lynching/1 1
-lynchpin/1 1
-Lynda/3
-Lyndon/3
-Lynette/3
-Lynn
-Lynne/3
-Lynnette/3
-lynx/4 1
-Lyon/1 1
-Lyra/2 1
-lyre/1 1
-lyrebird/1 1
-lyric/18 1
-lyrical/8 1
-lyricism/2 1
-lyricist/1 1
-lyric 1
-Lysenko
-lysine 1
-Lysistrata/3
-Lysol/2 1
-LyX/3
-M/1 1
-m/10 1
-ma/1 1
-MA/2 1
-Maalox/2 1
-ma'am
-Mabel/3
-Mable/3
-mac/23 1
-macabre 1
-macadam/2 1
-macadamia/1 1
-macadamize/6 1
-Macao/2 1
-macaque/1 1
-macaroni/1 1
-macaroon/1 1
-MacArthur
-Macaulay
-macaw/1 1
-Macbeth
-MacBride/3
-Maccabees
-Maccabeus/3
-MacDonald
-mace/28 1
-Macedon/2 1
-Macedonia/2 1
-Macedonian/1 1
-macerate/6 1
-maceration/2 1
-Mace 1
-mach/2 1
-machete/1 1
-Machiavelli/2 1
-Machiavellian 1
-machinable
-machinate/6 1
-machination/1 1
-machine/28 1
-machinery/2 1
-machinist/1 1
-machismo/2 1
-macho/2 1
-Mach 1
-Macias/3
-Macintosh/3
-Mack/3
-mack/10 1
-Mackenzie/2 1
-mackerel/1 1
-Mackinac/3
-mackinaw/1 1
-Mackinaw 1
-mackintosh/4 1
-MacLeish/3
-Macmillan
-Macon 1
-macrame/2 1
-macro/1 1
-macrobiotic/32 1
-macrocosm/1 1
-macroeconomic/32 1
-macrology/60 1
-macromolecular
-macromolecules
-macron/1 1
-macrophage/10 1
-macroscopic
-macroscopically
-macro 1
-Mac 1
-Macumba/3
-Macy/3
-mad/399 1
-Madagascan/1 1
-Madagascar/2 1
-madam/1 870
-madame/2 870
-madcap/1 1
-Madden/3
-madden/11 1
-maddeningly
-maddening 1
-madder/1 1
-Maddox/3
-Madeira/1 1
-Madeleine/3
-Madeline/3
-Madelyn/3
-mademoiselle/1 871
-made 872
-Madge/3
-madhouse/1 1
-Madison/2 1
-madman/2 873
-madmen 874
-Madonna/1 1
-Madras/2 1
-madras/4 1
-Madrid/2 1
-madrigal/18 1
-mad's
-Madurai/3
-madwoman/2 875
-madwomen 876
-Mae/3
-maelstrom/1 1
-maestro/1 1
-Maeterlinck/3
-mafia/1 1
-Mafia/1 1
-mafioso/323 1
-Mafioso 1
-mag/18 1
-magazine/1 1
-Magdalena
-Magdalene/3
-Magellan/2 1
-Magellanic
-magenta/2 1
-Maggie/3
-maggot/1 1
-maggoty/34 1
-Maghreb/3
-magic/64 1
-magical/8 1
-magician/1 1
-magic 1
-Maginot/3
-magi's 877
-magisterial/8 1
-magi 878
-Magi 879
-magistracy/2 1
-magistrate/1 1
-magma/1 1
-magmatic
-magnanimity/2 1
-magnanimosity
-magnanimous/8 1
-magnate/1 1
-magnesia/2 1
-magnesia's 880
-magnesia 881
-magnesium/2 882
-magnet/1 1
-magnetic/39 1
-magnetism/2 1
-magnetite/2 1
-magnetizable
-magnetization/2 1
-magnetize/6 1
-magneto/1 1
-magnetodynamics
-magnetohydrodynamical
-magnetohydrodynamics
-magnetometer/1 1
-magnetosphere 1
-magnetron 1
-magnification/1 1
-magnificence/2 1
-magnificent/8 1
-magnifier/1 1
-magnify/31 1
-magniloquence/2 1
-magniloquent 1
-Magnitogorsk
-magnitude/1 1
-magnolia/1 1
-magnum/1 1
-Magog
-Magoo/3
-magpie/1 1
-Magritte
-Magsaysay/3
-Magus 883
-Magyar/1 1
-Mahabharata/2 1
-Mahabharata's 884
-Mahabharata 885
-maharaja/1 1
-maharajah/1 1
-maharanee/1 1
-maharani/1 1
-Maharashtra/2 1
-maharishi/1 1
-mahatma/1 1
-Mahavira/3
-Mahayana/2 1
-Mahayanist/2 1
-Mahdi 1
-Mahfouz/3
-Mahican/1 1
-mahjong/2 1
-Mahler
-mahogany/15 1
-Mahomet/2 1
-mahout/1 1
-maid/1 1
-maiden/30 1
-Maidenform/3
-maidenhair/2 1
-maidenhead/1 1
-maidenhood/2 1
-maidenly 1
-maidservant/1 1
-Maigret/3
-mail/23 1
-mailable
-mailbag/1 1
-mailbomb/11 1
-mailbox/4 1
-Mailer
-mailer/1 1
-mailing/1 1
-Maillol
-maillot/1 1
-mailman/2 886
-mailmen 887
-mailshot/10 1
-maim/5 1
-Maiman/3
-maimed 1
-maiming 1
-Maimonides
-main/164 1
-mainbrace 1
-Maine/2 1
-Mainer/1 1
-mainframe/1 1
-mainland/1 1
-mainline/6 1
-mainline's
-mainline 1
-mainmast/1 1
-mainsail/1 1
-mainspring/1 1
-mainstay/1 1
-mainstream/23 1
-mainstreaming 1
-mainstream 1
-maintain/11 1
-maintainability 1
-maintainable
-maintainer/10 1
-maintenance/2 1
-maintop/1 1
-maiolica/2 1
-Maisie/3
-maisonette/1 1
-Maitreya/2 1
-maize/1 1
-Maj
-majestic/39 1
-majesty/15 1
-Majesty 1
-majolica/2 1
-Major
-major/23 1
-Majorca/2 1
-majordomo/1 1
-majorette/1 1
-majority/15 1
-majorly
-major 1
-Majuro
-Makarios/3
-make/73 888
-makeover/1 1
-Maker
-maker/1 1
-makeshift/1 1
-makeup/1 1
-makeweight/10 1
-making/130 1
-Malabar/3
-Malabo/2 1
-Malacca
-Malachi
-malachite/2 1
-maladaptive
-maladjusted
-maladjustment/2 1
-maladministration 1
-maladroit/16 1
-malady/15 1
-Malagasy 1
-malaise/2 1
-Malamud
-malamute/1 1
-Malaprop/3
-malapropism/1 1
-malaria/2 1
-malarial
-malarkey/2 1
-malathion/2 1
-Malawi/2 1
-Malawian/1 1
-Malay/1 1
-Malaya/2 1
-Malayalam/2 1
-Malayan/1 1
-Malaysia/2 1
-Malaysian/1 1
-Malay 1
-Malcolm
-malcontent/1 1
-Maldive/3
-Maldives/2 1
-Maldivian/1 1
-Maldonado/3
-male/20 1
-Male/2 1
-malediction/1 1
-malefaction/1 1
-malefactor/1 1
-malefic
-maleficence/2 1
-maleficent
-males 889
-malevolence/2 1
-malevolent/8 1
-malfeasance/2 1
-malformation/1 1
-malformed
-malfunction/23 1
-malfunctioning 1
-Malian/1 1
-Malibu/3
-malice/2 1
-malicious/16 1
-malign/11 1
-malignancy/15 1
-malignant/8 1
-maligners
-malignity/2 1
-malign 1
-Malinda/3
-malinger/11 1
-malingerer/1 1
-Malinowski
-Mali 890
-mall/18 1
-mallard/1 1
-Mallarme
-malleability/2 1
-malleable 1
-mallet/1 1
-Mallomars/3
-Mallory/3
-mallow/1 1
-malnourished
-malnourishment 1
-malnutrition/2 1
-malocclusion/2 1
-malodorous 1
-Malone/3
-Malory/3
-Malplaquet/3
-malpractice/1 1
-Malraux
-malt/23 1
-Malta/2 1
-malted/1 1
-Maltese/2 1
-Malthus/2 1
-Malthusian/1 1
-malting 1
-maltose/2 1
-maltreat/11 1
-maltreatment/2 1
-malty/34 1
-mam/10 1
-mama/1 1
-mamba/1 1
-mambo/23 1
-Mameluke 1
-Mamet
-Mamie/3
-mamma/57 1
-mammal/1 1
-mammalian/1 1
-mammary 1
-mamma's 891
-mamma 892
-mammogram/1 1
-mammography/2 1
-Mammon/1 1
-mammon/2 893
-mammoth/1 1
-mammy/15 1
-Mamore/3
-Man/2 1
-man/400 894
-manacle/28 1
-manage/6 1
-manageability/2 1
-manageable 1
-management/1 1
-manager/1 1
-manageress/89 1
-managerial/8 1
-managership 1
-Managua/2 1
-Manama/2 1
-manana/1 1
-Manasseh
-manatee/1 1
-Manaus
-Manchester/2 1
-Manchu/1 1
-Manchuria/2 1
-Manchurian 1
-Mancini/3
-manciple 1
-Mancunian/1 1
-mandala/1 1
-Mandalay/2 1
-mandamus/40 1
-mandarin/1 1
-Mandarin/2 1
-mandate/28 1
-mandatory 1
-Mandela
-Mandelbrot
-mandible/1 1
-mandibular
-Mandingo 1
-mandolin/1 1
-mandrake/1 1
-mandrel/1 1
-Mandrell/3
-mandril/1 1
-mandrill/1 1
-Mandy/3
-mane/1 1
-maned 1
-manege/2 1
-Manet
-maneuver/23 1
-maneuverability/2 1
-maneuverable
-maneuverings
-Manfred/3
-manful/8 1
-manganese/2 1
-mange/149 1
-manged/10 1
-manger/1 1
-mangetout/10 1
-mangier 895
-mangiest 895
-mangle/28 1
-mangler/10 1
-mangling 1
-mango/4 1
-mangrove/1 1
-mangy/49 1
-manhandle/6 1
-Manhattan/1 1
-manhole/1 1
-manhood/2 1
-manhunt/1 1
-Mani
-mania/1 1
-maniac/1 1
-maniacal/8 1
-maniac 1
-manic/1 1
-manically
-Manichean 1
-manic 1
-manicure/28 1
-manicurist/1 1
-manifest/210 1
-manifestation/1 1
-manifesto/18 1
-manifold/23 1
-manikin/1 1
-Manila/1 1
-manila/2 1
-manilla/2 1
-manioc/1 1
-manipulable
-manipulate/6 1
-manipulation/1 1
-manipulative
-manipulatively
-manipulator/1 1
-Manitoba/2 1
-Manitoulin/3
-mankind/2 1
-manky 1
-Manley/3
-manlike 1
-manly/140 1
-Mann
-manna/2 1
-mannequin/1 1
-manner/1 1
-mannered
-mannerism/1 1
-mannerist 1
-mannerly/222 1
-Mannheim/2 1
-mannikin/1 1
-Manning
-mannish/16 1
-manoeuvrings
-manometer/1 1
-manor/1 1
-manorial
-manpower/2 1
-manque 1
-mans/89 1
-mansard/1 1
-manse/1 1
-manservant/2 896
-Mansfield
-mansion/1 1
-manslaughter/2 1
-Manson/3
-manta/1 1
-Mantegna
-mantel/1 1
-mantelpiece/1 1
-mantelshelf/338 1
-mantes 897
-mantilla/1 1
-mantis/4 898
-mantissa/1 1
-Mantle/3
-mantle/28 1
-mantlepiece/10 1
-mantling 1
-mantra/1 1
-mantrap/10 1
-manual/30 1
-Manuel/3
-Manuela/3
-manufacture/28 1
-manufacturer/1 1
-manufacturing/2 1
-manumission/1 1
-manumit/12 1
-manure/28 1
-manuscript/1 1
-Manx/2 1
-many/2 899
-Mao/401 1
-Maoism/1 1
-Maoist/1 1
-Maori/1 1
-map/47 1
-maple/1 1
-mapmaker/1 1
-mappable
-mapper/1 1
-mapping/10 1
-Mapplethorpe/3
-Maputo/2 1
-mar/13 1
-Mar/130 1
-Mara/2 1
-marabou/1 1
-marabout/1 1
-maraca/1 1
-Maracaibo
-maraschino/1 1
-Marat
-Maratha/2 1
-Maratha's 900
-Maratha 901
-Marathi/2 1
-marathon/1 1
-Marathon/2 902
-marathoner/1 1
-maraud/5 1
-marauder/1 1
-marble/28 1
-marbleize/6 1
-marble 1
-marbling/2 1
-Marc
-Marceau
-Marcel/3
-Marcelino/3
-Marcella/3
-Marcelo/3
-march/4 1
-March/4 1
-march/7 1
-marcher/1 1
-marches 1
-marchioness/3
-marchionesses
-Marci/3
-Marcia/3
-Marciano
-Marcie/3
-Marco/3
-Marconi
-Marcos
-Marcus/3
-Marcuse
-Marcy/3
-Marduk/2 1
-mare/1 1
-Margaret
-margarine/2 1
-Margarita
-margarita/1 1
-Margarito/3
-Marge/3
-Margery/3
-marge 1
-Margie/3
-margin/18 1
-marginal/191 1
-marginalia/2 1
-marginality 1
-marginalization/2 1
-marginalize/6 1
-Margo/3
-Margret/3
-Margrethe/3
-Marguerite/3
-Mari/1 1
-maria/2 1
-mariachi/1 1
-Mariana/1 1
-Marianne
-Mariano/3
-Marian 1
-Maria's 903
-Maria 904
-Maribel/3
-Maricela/3
-Marie/3
-Marietta/3
-marigold/1 1
-marihuana/2 1
-marijuana/2 1
-Marilyn/3
-marimba/1 1
-Marin
-Marina/3
-marina/1 1
-marinade/28 1
-marinara/2 1
-marinate/6 1
-marination/2 1
-marine/48 1
-Marine/1 1
-mariner/1 1
-Mario/3
-Marion/2 905
-marionette/1 1
-Marisa/3
-Marisol/3
-Marissa/3
-Maritain
-marital/8 1
-maritime
-Maritza/3
-Mariupol
-Marius
-marjoram/2 1
-Marjorie/3
-Marjory/3
-mark/1 1
-Mark/1 1
-mark/11 1
-Markab/3
-markdown/1 1
-marked/8 1
-marker/1 1
-market/23 1
-marketability/2 1
-marketable 1
-marketeer/1 1
-marketer/1 1
-marketing/2 1
-marketplace/1 1
-Markham
-marking/1 1
-markka/402 1
-Markov
-marksman/2 906
-marksmanship/2 1
-marksmen 907
-markup/1 1
-marl/18 1
-Marla/3
-Marlboro/3
-Marlborough
-Marlene/3
-Marley/3
-Marlin
-marlin/1 1
-marlinespike/1 1
-marlinspike/1 1
-Marlon/3
-Marlowe
-marmalade/2 1
-Marmara/2 1
-marmoreal
-marmoset/1 1
-marmot/1 1
-Marne
-Maronite 1
-maroon/23 1
-marooning 1
-maroon 1
-Marple/3
-marque/1 1
-marquee/1 1
-Marquesas/3
-marquess/4 1
-marquetry/2 1
-Marquette
-Marquez/3
-Marquis
-marquis/4 1
-marquise/1 1
-marquisette/2 1
-Marquita/3
-Marrakesh/3
-marriage/1 1
-marriageability/2 1
-marriageable 1
-married/1 1
-Marriott/3
-marrow/18 1
-marry/31 1
-Mars/4 1
-Marsala/2 1
-Marseillaise/1 1
-Marseille/10 1
-Marsh/3
-marsh/4 1
-Marsha/3
-marshal/23 1
-Marshall/2 1
-marshaller 1
-marshland/1 1
-marshmallow/1 1
-marshy/259 1
-mars 1
-marsupial/1 1
-mart/18 1
-Marta/3
-Martel
-marten/1 1
-Martha
-Martial
-martial/8 1
-Martian/1 1
-martian/10 1
-Martian 1
-Martin
-martin/1 1
-Martina/3
-martinet/1 1
-Martinez/3
-martingale/1 1
-martini/1 1
-Martinique/2 1
-Marty/3
-martyr/23 1
-martyrdom/2 1
-Marva/3
-marvel/23 1
-Marvell/3
-marvelous/8 1
-Marvin
-Marx/2 1
-Marxian 1
-Marxism/1 1
-Marxist/1 1
-Mary/2 1
-Maryann/3
-Maryanne/3
-Maryellen/3
-Maryland/2 1
-Marylander 1
-Marylou/3
-marzipan/2 1
-mas/79 1
-Masada/3
-Masai/2 1
-Masaryk
-masc
-Mascagni
-mascara/23 1
-mascara's 908
-mascara 909
-mascot/1 1
-masculine/1 1
-masculinity/2 1
-Masefield
-maser/1 1
-Maserati/3
-Maseru/2 1
-MASH
-mash/22 1
-masher/1 1
-Mashhad/2 1
-mashing 1
-mask/23 1
-masker/1 1
-masking 1
-masochism/2 1
-masochist/1 1
-masochistic/39 1
-mason/1 1
-Mason/1 1
-mason/58 1
-Masonic
-masonic 1
-Masonite/2 1
-masonry/2 1
-masque/1 1
-masquerade/28 1
-masquerader/1 1
-mass/4 1
-Mass/4 1
-mass/7 1
-Massachusetts
-massacre/28 1
-massage/28 1
-Massasoit
-massed 1
-Massenet
-masseur/1 1
-masseuse/1 1
-Massey
-massif/1 1
-massive/16 1
-ma's 910
-mass 1
-mast/62 1
-mastectomy/15 1
-master/30 1
-Master/10 1
-master/11 1
-MasterCard/3
-masterclass
-masterclasses
-masterful/8 1
-mastering 1
-masterly 1
-mastermind/23 1
-masterpiece/1 1
-mastership 1
-masterstroke/1 1
-masterwork/1 1
-mastery/2 1
-masthead/18 1
-mastic/2 1
-masticate/6 1
-mastication/2 1
-mastiff/1 1
-mastitis 1
-ma 911
-mastodon/1 1
-mastoid/1 1
-masturbate/6 1
-masturbation/2 1
-masturbatory
-mat/403 1
-matador/1 1
-match/22 1
-matchable
-matchbook/1 1
-matchbox/4 1
-matcher 1
-matchless 1
-matchlock/1 1
-matchmaker/1 1
-matchmaking/2 1
-matchplay
-matchstick/1 1
-matchwood/2 1
-mate/28 1
-mater/10 1
-material/30 1
-materialism/2 1
-materialist/1 1
-materialistic/39 1
-materiality 1
-materialization/2 1
-materialize/6 1
-materiel/2 1
-maternal/8 1
-maternity/2 1
-matey/10 1
-math/1 1
-mathematical/8 1
-mathematician/1 1
-mathematics
-mathematics's
-Mather
-Mathew/3
-Mathews
-Mathewson/3
-Mathias
-Mathis
-Matilda 1
-matinee/1 1
-mating/1 1
-matins
-matins's
-Matisse
-matriarch/1 1
-matriarchal
-matriarchy/15 1
-matricidal
-matricide/1 1
-matriculate/43 1
-matriculation/2 1
-matrimonial/8 1
-matrimony/2 1
-matrix/184 1
-matron/1 1
-matronly 1
-Matt
-matte/139 1
-Mattel/3
-matter/23 1
-Matterhorn/2 1
-Matthew/1 1
-Matthias
-Mattie/3
-matting/2 1
-mattins
-mattins's
-mattock/1 1
-mattress/4 1
-maturate/6 1
-maturation/2 1
-mature/404 1
-maturer 1
-maturity/15 1
-matzo/405 1
-matzoh/1 1
-Maud/3
-Maude/3
-maudlin 1
-Maugham
-Maui/2 1
-maul/23 1
-mauler/1 1
-maunder/11 1
-maundering 1
-Maupassant
-Maura/3
-Maureen/3
-Mauriac
-Maurice
-Mauricio/3
-Maurine/3
-Mauritania/2 1
-Mauritanian/1 1
-Mauritian/1 1
-Mauritius/2 1
-Mauro/3
-Maurois
-Mauryan/3
-Mauser
-mausoleum/1 1
-mauve/2 1
-maven/1 1
-maverick/18 1
-mavin/1 1
-Mavis/3
-maw/18 1
-mawkish/16 1
-Max/3
-max/287 1
-maxes 912
-maxi/1 1
-maxilla/53 1
-maxillary 1
-maxim/1 1
-maximal/8 1
-maximality
-maximal 1
-Maximilian
-maximization/2 1
-maximize/6 1
-maximizer 1
-maximum/1 1
-Maxine/3
-maxis 913
-maxi 1
-Maxwell
-May/1 1
-may/406 914
-Maya/1 1
-Mayan/1 1
-maybe/1 1
-mayday/1 1
-Mayer
-Mayfair
-mayflies
-mayflower/1 1
-Mayflower/2 1
-mayfly/3
-mayhem/2 1
-Maynard/3
-mayn't
-Mayo
-mayo/2 1
-mayonnaise/2 1
-mayor/1 1
-mayoral
-mayoralty/2 1
-mayoress/4 1
-maypole/1 1
-Maypole 1
-Mayra/3
-Maytag/3
-Mazama/2 1
-Mazarin
-Mazatlan/3
-Mazda
-maze/18 1
-Mazola/3
-mazourka/1 1
-mazurka/1 1
-Mazzini/3
-Mb/2 1
-MB/2 1
-MBA/2 1
-Mbabane/2 1
-Mbini/3
-MC
-McAdam/3
-McBride/3
-McCain/3
-McCall/3
-McCarthy
-McCarthyism/2 1
-McCartney/3
-McCarty/3
-McClain/3
-McClellan
-McClure/3
-McConnell/3
-McCormick
-McCoy 1
-McCray/3
-McCullough/3
-McDaniel/3
-McDonald/3
-McDonnell/3
-McDowell/3
-McEnroe/3
-McFadden/3
-McFarland/3
-McGee/3
-McGovern/3
-McGowan/3
-McGuffey/3
-McGuire/3
-MCI/3
-McIntosh/2 1
-McIntyre/3
-McKay/3
-McKee/3
-McKenzie/3
-McKinley/2 1
-McKinney/3
-McKnight/3
-McLaughlin/3
-McLean/3
-McLeod/3
-McLuhan/3
-McMahon/3
-McMillan/3
-McNamara/3
-McNaughton/3
-McNeil/3
-McPherson/3
-McQueen/3
-McVeigh/3
-Md/2 1
-MD/2 1
-mdse
-MDT
-Me
-ME
-me/10 1
-Mead
-mead/2 1
-Meade
-meadow/1 1
-meadowland 1
-meadowlark/1 1
-Meadows
-Meagan/3
-meager/16 1
-meagreness
-meal/18 1
-mealtime/1 1
-mealy/49 1
-mealybug/1 1
-mealymouthed 1
-mean/407 1
-meander/23 1
-meandering/32 1
-meaner 1
-meanie/1 1
-meaning/1 1
-meaningful/16 1
-meaningless/16 1
-meaning 1
-meantime/2 1
-meanwhile/2 1
-Meany/3
-meany/15 1
-meas
-measles
-measles's
-measly/34 1
-measurable/19 1
-measure/28 1
-measured 1
-measureless 1
-measurement/1 1
-measuring 1
-meat/1 1
-meataxe
-meatball/1 1
-meatless 1
-meatloaf/120 1
-meatpacking/2 1
-meaty/49 1
-mecca/1 1
-Mecca/1 1
-mechanic/130 1
-mechanical/8 1
-mechanism/1 1
-mechanistic/39 1
-mechanist 1
-mechanizable
-mechanization/2 1
-mechanize/6 1
-med
-medal/18 1
-medalist/1 1
-medallion/1 1
-Medan
-meddle/6 1
-meddler/1 1
-meddlesome 1
-meddling 1
-Medea/2 1
-Medellin
-Media
-media/1 1
-medial/8 1
-median/1 1
-media's 915
-media 916
-mediate/6 1
-mediation/2 1
-mediator/1 1
-media 1
-medic/1 1
-Medicaid/1 1
-medicaid/2 1
-medical/30 1
-medicament/2 1
-Medicare/1 1
-medicare/2 1
-medicate/6 1
-medication/1 1
-Medici
-medicinal/8 1
-medicine/18 1
-medico/1 1
-medievalist/1 1
-medieval 1
-Medina
-mediocre 1
-mediocrity/15 1
-meditate/6 1
-meditation/1 1
-meditative/8 1
-Mediterranean/1 1
-medium/1 917
-medley/1 1
-medulla/1 1
-Medusa/2 1
-meed/2 1
-meek/21 1
-meerschaum/1 1
-meet/408 918
-meeter 1
-meeting/1 1
-meetinghouse/1 1
-Meg/3
-meg/10 1
-megabit/1 1
-megabucks
-megabucks's
-megabyte/1 1
-megacycle/1 1
-megadeath/1 1
-megahertz/2 1
-megajoules
-megalith/1 1
-megalithic
-megalomania/2 1
-megalomaniac/1 1
-megalopolis/4 1
-Megan/3
-megaparsec 1
-megaphone/28 1
-megapixel
-megapixels
-megastar/10 1
-megaton/1 1
-mega 1
-megawatt/1 1
-Meghan/3
-MEGO/10 1
-Meier/3
-Meighen/3
-Meiji/3
-meiosis/2 1
-meiotic 1
-Meir
-Mejia/3
-Mekong/2 1
-Mel/3
-melamine/2 1
-melancholia/2 1
-melancholic/10 1
-melancholies
-melancholy's
-melancholy 1
-Melanesia/2 1
-Melanesian 1
-melange/1 1
-Melanie/3
-melanin/2 1
-melanoma/1 1
-melatonin 1
-Melba
-Melbourne/2 1
-Melchior
-Melchizedek
-meld/23 1
-melee/1 1
-Melendez/3
-Melinda/3
-meliorate/6 1
-melioration/2 1
-meliorative
-Melisa/3
-Melisande/3
-Melissa/2 1
-mellifluous/16 1
-Mellon
-mellow/98 1
-mellowing 1
-melodic/39 1
-melodious/16 1
-melodrama/1 1
-melodramatic/35 1
-Melody/3
-melody/15 1
-melon/1 1
-Melpomene/2 1
-melt/23 919
-meltdown/1 1
-melter 1
-melting 1
-Melton/3
-Melva/3
-Melville/2 1
-Melvin/3
-member/1 1
-membership/1 1
-membrane/1 1
-membranous
-meme/10 1
-memento/1 1
-Memling
-memo/1 1
-memoir/1 1
-memorabilia/2 1
-memorability/2 1
-memorable/19 1
-memorandum/1 1
-memorial/1 1
-memorialize/6 1
-memorial 1
-memorization/2 1
-memorize/6 1
-memory/15 1
-Memphis/2 1
-memsahib/10 1
-menace/28 1
-menacing/8 1
-menage/1 1
-menagerie/1 1
-Menander
-menarche 1
-Mencius
-Mencken
-mend/23 1
-mendacious/8 1
-mendacity/2 1
-Mendel/2 1
-Mendeleev/2 1
-mendelevium/2 1
-Mendelian 1
-Mendelssohn
-mender/1 1
-Mendez/3
-mendicancy/2 1
-mendicant/1 1
-mending/2 1
-Mendocino/3
-Mendoza
-Menelaus/3
-Menelik/3
-Menes
-menfolk/130 1
-Mengzi
-menhaden/2 1
-menial/30 1
-meningeal
-meningitis/2 1
-meninx/201 1
-menisci 920
-meniscus/2 921
-Menkalinan/3
-Menkar/3
-Menkent/3
-Mennen/3
-Mennonite/1 1
-Menominee/2 1
-menopausal
-menopause/2 1
-menorah/1 1
-Menotti
-Mensa
-mensch/4 1
-menservants 922
-menses
-menses's
-men 923
-menstrual 1
-menstruate/6 1
-menstruation/2 1
-mensurable
-mensuration/2 1
-menswear/2 1
-mental/8 1
-mentalist/1 1
-mentality/15 1
-menthol/2 1
-mentholated
-Mentholatum/3
-menthol 1
-mention/23 1
-mentionable
-mentor/23 1
-menu/1 1
-Menuhin/3
-Menzies
-meow/23 1
-Mephistopheles
-Merak/3
-Mercado/3
-mercantile
-mercantilism/2 1
-Mercator
-Mercedes
-mercenary/15 1
-Mercer/3
-mercer/1 1
-mercerize/6 1
-merchandise/28 1
-merchandiser/1 1
-merchandising/2 1
-merchandize/6 1
-merchandizing 1
-merchant/18 1
-merchantability 1
-merchantable 1
-merchantman/2 924
-merchantmen 925
-merchant 1
-Mercia
-merciful/8 1
-merciless/16 1
-Merck/3
-mercurial/8 1
-mercuric
-Mercurochrome/2 1
-Mercury/15 1
-mercury/2 1
-mercy/15 1
-mere/409 1
-Meredith
-meres 926
-meretricious/16 1
-merganser/1 1
-merge/6 1
-merger/1 1
-merging 1
-meridian/1 1
-meridional 1
-meringue/18 1
-Merino
-merino/1 1
-merit/23 1
-merited 1
-meritocracy/15 1
-meritocratic
-meritocrats
-meritorious/16 1
-Merle/3
-Merlin/2 1
-Merlot 1
-mermaid/1 1
-merman/2 927
-mermen 928
-meromorphic
-Merovingian 1
-Merriam/3
-Merrick/3
-Merrill/3
-Merrimack/3
-merriment/2 1
-Merritt/3
-merry/50 1
-merrymaker/1 1
-merrymaking/2 1
-Merthiolate/2 1
-Merton
-Mervin/3
-mes/79 1
-Mesa
-mesa/1 1
-Mesabi/3
-mesa's 929
-mesa 930
-mescal/1 1
-mescalin
-mescaline/2 1
-mesdames 931
-mesdemoiselles 932
-mesh/22 1
-Meshed/2 1
-meshing 1
-Mesmer/3
-mesmeric
-mesmerism/2 1
-mesmerize/6 1
-mesmerizer/1 1
-Mesolithic
-mesomorph/1 1
-meson/1 933
-Mesopotamia/2 1
-Mesopotamian 1
-mesosphere/1 1
-mesozoic
-Mesozoic/2 1
-mesquit/1 1
-mesquite/1 1
-mess/22 1
-message/28 1
-messeigneurs 934
-messenger/18 1
-Messerschmidt/3
-Messiaen
-messiah/1 1
-Messiah/1 1
-messianic
-Messianic
-messieurs 935
-messmate/1 1
-Messrs
-messy/50 1
-mestizo/1 1
-meta
-metabolic/39 1
-metabolism/1 1
-metabolite/1 1
-metabolize/6 1
-metacarpal/1 1
-metacarpi 936
-metacarpus/2 937
-metal/62 1
-metalanguage/1 1
-metalinguistic 1
-metalized
-Metallica/3
-metallic 1
-metallurgic
-metallurgical
-metallurgist/1 1
-metallurgy/2 1
-metal 1
-metalwork/2 1
-metalworker/1 1
-metalworking/2 1
-metamorphic
-metamorphism/2 1
-metamorphose/6 1
-metamorphoses 938
-metamorphosis/2 939
-Metamucil/3
-metaphor/1 1
-metaphoric
-metaphorical/8 1
-metaphysical/8 1
-metaphysics
-metaphysics's
-metastability 1
-metastable
-metastases 940
-metastasis/2 941
-metastasize/6 1
-metastatic
-metatarsal/1 1
-metatarsi 942
-metatarsus/2 943
-metatheses 944
-metathesis/2 945
-metathesizes
-mete/28 1
-metempsychoses 946
-metempsychosis/2 947
-meteor/1 1
-meteoric/39 1
-meteorite/1 1
-meteoroid/1 1
-meteorologic
-meteorological 1
-meteorologist/1 1
-meteorology/2 1
-meter/23 1
-metes 948
-methadon/2 1
-methadone/2 1
-methamphetamine/2 1
-methane/2 1
-methanol/2 1
-methinks 949
-methionine 1
-method/1 1
-methodical/16 1
-Methodism/1 1
-Methodist/1 1
-methodological/8 1
-methodology/15 1
-methought 950
-meths
-Methuselah 1
-methyl/2 1
-methylated
-methylene 1
-methyl 1
-meticulous/16 1
-metier/1 1
-metonymy 1
-metric/10 1
-metrical/8 1
-metricate/6 1
-metrication/2 1
-metricize/6 1
-metric 1
-metro/1 1
-metronome/1 1
-metronomic
-metropolis/4 1
-metropolitan 1
-met 951
-Metternich
-mettle/2 1
-mettlesome 1
-Meuse/2 1
-mew/185 1
-mewl/11 1
-mewling 1
-mews/2 1
-Mex
-Mexicali
-Mexican/1 1
-Mexico/2 1
-Meyer/3
-Meyerbeer
-Meyers
-mezzanine/1 1
-mezzo/1 1
-MFA/2 1
-mfg
-mfr
-mfrs
-Mfume/3
-Mg/2 1
-MGM/3
-mgr
-Mgr
-mg 1
-MHz 1
-mi/2 1
-MI/2 1
-MIA
-Mia/3
-Miami/1 1
-Miaplacidus/3
-miasma/1 1
-mic/10 1
-mica/2 1
-Micah
-Micawber 1
-micelles
-mice 952
-Mich
-Michael
-Michaelmas/4 1
-Micheal/3
-Michel/3
-Michelangelo/2 1
-Michele/3
-Michelin/3
-Michelle/3
-Michelob/3
-Michelson
-Michigan/2 1
-Michigander/1 1
-Michiganite 1
-Mick/2 1
-mick/10 1
-mickey/1 1
-Mickey/2 1
-Mickie/3
-Micky/3
-Micmac/1 1
-micro/1 1
-microanalyses 953
-microbe/1 1
-microbial
-microbiological 1
-microbiologist/1 1
-microbiology/2 1
-microbrewery/15 1
-microchip/1 1
-microcircuit/1 1
-microcode 1
-microcomputer/1 1
-microcosm/1 1
-microcosmic
-microdensitometer 1
-microdot/1 1
-microeconomics
-microeconomics's
-microelectronic/32 1
-microfarad 1
-microfiber/1 1
-microfiche/2 1
-microfilm/23 1
-microfloppies/89 1
-micrograms
-micrograph 1
-microgravity 1
-microgroove/1 1
-microhydrodynamics
-microlight/1 1
-micromanage/6 1
-micromanagement/2 1
-micrometeorite/1 1
-micrometer/1 1
-micron/1 1
-Micronesia/2 1
-Micronesian 1
-microorganism/1 1
-microphone/1 1
-microprocessor/1 1
-microprogram 1
-microscope/1 1
-microscopic
-microscopical/8 1
-microscopist 1
-microscopy/2 1
-microsecond/1 1
-Microsoft/3
-microsurgery/2 1
-micro 1
-microwavable
-microwave/28 1
-microwaveable
-midair/2 1
-Midas/2 1
-midday/2 1
-midden/1 1
-middle/73 1
-middlebrow/1 1
-middleman/2 954
-middlemen 955
-middlemost
-Middleton 1
-middle 1
-middleweight/1 1
-middling 1
-middy/15 1
-Mideast
-Mideastern
-midfielder/10 1
-midfield 1
-midge/1 1
-midget/1 1
-midi/1 1
-MIDI/2 1
-midi 1
-Midland
-midland/1 1
-Midlands
-midland 1
-midlife/2 1
-midmost 1
-midnight/1 1
-midpoint/1 1
-midrib/1 1
-midriff/1 1
-midsection/1 1
-midshipman/2 956
-midshipmen 957
-midships
-midsize
-midsized
-midst/2 1
-midstream/2 1
-midsummer/2 1
-midterm/1 1
-midtown/2 1
-mid 1
-midway/1 1
-Midway/2 1
-midway 1
-midweek/1 1
-Midwest/2 1
-Midwestern
-Midwesterner 1
-midwicket
-midwife/360 958
-midwifery/15 1
-midwinter/2 1
-midwives 959
-midyear/1 1
-mien/1 1
-miff/5 1
-MiG
-might/1 1
-mightn't
-might 960
-mighty/50 1
-mignonette/1 1
-migraine/1 1
-migrant/1 1
-migrate/6 1
-migration/1 1
-migratory
-Miguel/3
-mikado/1 1
-Mike/3
-mike/28 1
-Mikhail/3
-Mikoyan/3
-mil/213 1
-milady/15 1
-Milagros/3
-Milan/2 1
-Milanese
-milch 1
-mild/410 1
-mildew/23 1
-mildewy
-Mildred/3
-mile/1 1
-mileage/1 1
-mileometer/10 1
-milepost/1 1
-miler/1 1
-Miles
-milestone/1 1
-Milford/3
-milieu/1 1
-militancy/2 1
-militant/30 1
-militarism/2 1
-militarist/1 1
-militaristic
-militarization/2 1
-militarize/6 1
-military/411 1
-militate/6 1
-militia/1 1
-militiaman/2 961
-militiamen 962
-milk/78 1
-Milken/3
-milker/1 1
-milking 1
-milkmaid/1 1
-milkman/2 963
-milkmen 964
-milkshake/1 1
-milksop/1 1
-milkweed/1 1
-milky/49 1
-Mill
-mill/23 1
-millage/2 1
-Millard/3
-Millay
-millenarian 1
-millennial 1
-millennium/1 1
-millepede/1 1
-Miller
-miller/1 1
-Millet
-millet/2 1
-milliard/1 1
-millibar/1 1
-Millicent/3
-Millie/3
-milligram/1 1
-Millikan
-milliliter/1 1
-millimeter/1 1
-milliner/1 1
-millinery/2 1
-milling/1 1
-million/1 1
-millionaire/1 1
-millionaires/9 1
-millionairess/89 1
-millionnaire/2 1
-millionth/1 1
-million 1
-millipede/1 1
-millisecond/1 1
-millpond/1 1
-millrace/1 1
-Mills
-millstone/1 1
-millstream/1 1
-millwright/1 1
-Milne
-Milo/3
-milometer/10 1
-Milosevic/3
-milquetoast/1 1
-Milquetoast/2 1
-milt/23 1
-Miltiades
-Milton
-Miltonic
-Miltown/2 1
-Milwaukee/2 1
-mime/28 1
-mimeograph/23 1
-mimes 1
-mimetic
-mimic/64 1
-mimicker/1 1
-mimicry/15 1
-mimic 1
-Mimi's 965
-Mimi 966
-Mimosa/3
-mimosa/1 1
-Min/2 1
-Minamoto/3
-minaret/1 1
-minatory
-mince/28 1
-mincemeat/2 1
-mincer/1 1
-mincing 1
-mind/23 1
-Mindanao
-mindbogglingly
-mindedness
-minder/10 1
-mindful/16 1
-mindless/16 1
-Mindoro/2 1
-mindset/1 1
-Mindy/3
-mine/28 1
-minefield/1 1
-miner/1 1
-mineral/1 1
-mineralization 1
-mineralogical 1
-mineralogist/1 1
-mineralogy/2 1
-Minerva/2 1
-mineshaft 1
-mines 967
-minestrone/2 1
-minesweeper/1 1
-mineworkers
-Ming
-mingle/6 1
-mingling 1
-Mingus/3
-mingy 1
-mini/1 1
-miniature/18 1
-miniaturist/1 1
-miniaturization/2 1
-miniaturize/6 1
-minibar/10 1
-minibike/1 1
-minibus/4 1
-minicab/10 1
-minicam/1 1
-minicomputer/1 1
-minifloppies/89 1
-minim/1 1
-minimal/8 1
-minimalism/2 1
-minimalist/1 1
-minimalistic
-minimality 1
-minimal 1
-minimization 1
-minimize/6 1
-minimizer 1
-minim 1
-minimum/1 1
-mining/2 1
-minion/1 1
-miniscule/1 1
-miniseries/2 1
-miniskirt/1 1
-mini's 968
-minister/23 1
-ministerial/8 1
-mini 969
-ministrant/1 1
-ministration/1 1
-ministry/15 1
-minis 970
-mini 1
-minivan/1 1
-mink/1 1
-minke 1
-Minn
-Minneapolis/2 1
-Minnelli/3
-minnesinger/1 1
-Minnesota/2 1
-Minnesotan/1 1
-Minnie/3
-minnow/1 1
-Minoan/1 1
-Minolta/3
-minor/23 1
-minority/15 1
-minor 1
-Minos/2 1
-Minot/3
-minotaur
-Minotaur/2 1
-minotaurs
-minoxidil/2 1
-Minsk/2 1
-Minsky/3
-minster/1 1
-minstrel/18 1
-minstrelsy/2 1
-mint/78 1
-mintage/2 1
-Mintaka/3
-minter/1 1
-min 1
-minty/34 1
-minuend/1 1
-minuet/1 1
-Minuit
-minus/4 971
-minuscule/1 1
-minus 1
-minute/107 1
-Minuteman/2 1
-minuteman/2 972
-minutemen 973
-minutia/53 1
-minx/4 1
-Miocene/2 1
-MIPS/89 1
-Mir/3
-Mira/3
-Mirabeau
-Mirach/3
-miracle/1 1
-miraculous/83 1
-mirage/1 1
-Miranda
-mire/28 1
-Mirfak/3
-Miriam/3
-Miro 1
-mirror/23 1
-mirth/2 1
-mirthful/16 1
-mirthless/8 1
-MIRV 1
-miry/34 1
-Mirzam/3
-misaddress/7 1
-misadventure/1 1
-misaligned
-misalignment/2 1
-misalliance/1 1
-misanalysed
-misanthrope/1 1
-misanthropic
-misanthropically
-misanthropist/1 1
-misanthropy/2 1
-misapplication/1 1
-misapply/31 1
-misapprehend/11 1
-misapprehension/1 1
-misappropriate/6 1
-misappropriation/1 1
-misbegotten
-misbehave/6 1
-misbehavior/2 1
-misc
-miscalculate/6 1
-miscalculation/1 1
-miscall/11 1
-miscarriage/1 1
-miscarry/31 1
-miscast/121 1
-miscegenation/2 1
-miscellanea 1
-miscellaneous
-miscellaneously
-miscellany/15 1
-mischance/18 1
-mischief/2 1
-mischievous/16 1
-miscibility/2 1
-miscible 1
-misclassified
-miscomprehended
-misconceive/6 1
-misconception/1 1
-misconduct/23 1
-misconfiguration
-misconstruction/1 1
-misconstrue/6 1
-miscopying
-miscount/23 1
-miscreant/1 1
-miscue/28 1
-misdeal/412 1
-misdeed/1 1
-misdemeanor/1 1
-misdiagnose/6 1
-misdiagnoses 974
-misdiagnosis/2 975
-misdirect/11 1
-misdirection/1 1
-misdo/413 1
-misdoing/1 1
-miser/1 1
-miserable/29 1
-miserly/140 1
-misery/15 1
-misfeasance/2 1
-misfeature/58 1
-misfield 1
-misfile/6 1
-misfire/28 1
-misfit/109 1
-misfortune/1 1
-misgiving/1 1
-misgovern/11 1
-misgovernment/2 1
-misguidance/2 1
-misguide/6 1
-misguided/8 1
-mishandle/6 1
-mishap/18 1
-mishear/46 1
-mishit/88 1
-mishmash/4 1
-misidentify/31 1
-misinform/11 1
-misinformation/2 1
-misinterpret/11 1
-misinterpretation/1 1
-misjudge/6 1
-misjudgment/1 1
-Miskito 1
-mislabel/11 1
-mislay/312 1
-mislead/121 976
-misleading/8 1
-misled 977
-mismanage/6 1
-mismanagement/2 1
-mismatch/22 1
-misname/6 1
-misnomer/18 1
-misogamist/1 1
-misogamy/2 1
-misogynist/1 1
-misogynistic
-misogynous
-misogyny/2 1
-misplace/6 1
-misplacement/2 1
-misplay/23 1
-mispositioned
-misprint/23 1
-misprision/2 1
-mispronounce/6 1
-mispronunciation/1 1
-misquotation/1 1
-misquote/6 1
-misquote's
-misread/121 1
-misreading/1 1
-misremember/241 1
-misreport/23 1
-misrepresent/11 1
-misrepresentation/1 1
-misrule/28 1
-miss/22 1
-missal/1 1
-misses 978
-misshape/376 1
-misshapen 1
-missile/1 1
-missilery/2 1
-missilry/2 1
-missing 1
-mission/18 1
-missionary/15 1
-missioner/1 1
-missis/4 979
-Mississauga
-Mississippi/2 1
-Mississippian/1 1
-missive/1 1
-Missouri/2 1
-Missourian/1 1
-misspeak/121 980
-misspell/11 1
-misspelling/1 1
-misspend/382 1
-misspoken 981
-misspoke 981
-misstate/6 1
-misstatement/1 1
-misstep/18 1
-Miss 1
-missus/4 1
-Missy/3
-mist/23 1
-mistakable 1
-mistake/263 982
-mistaken/8 1
-Mistassini
-mister/18 1
-Mister 1
-mistime/6 1
-misting 1
-mistletoe/2 1
-mistook 983
-mistral/1 1
-mistranslated
-mistranslates
-mistranslating
-mistranslation/10 1
-mistreat/11 1
-mistreatment/2 1
-mistress/4 1
-Mistress 1
-mistrial/1 1
-mistrust/23 1
-mistrustful/8 1
-Misty/3
-misty/50 1
-mistype/6 1
-mistypings
-misunderstand/121 984
-misunderstanding/1 1
-misunderstood 985
-misuse/28 1
-misuser 1
-MIT/3
-Mitch/3
-Mitchel/3
-Mitchell
-mite/1 1
-miter/23 1
-mites 986
-Mitford/3
-Mithra/2 1
-Mithridates/2 1
-mitigate/6 1
-mitigated 1
-mitigation/2 1
-mitigatory
-mitochondrial
-mitochondria 987
-mitoses 988
-mitosis/2 989
-mitotic 1
-Mitsubishi/3
-mitt/1 1
-mitten/1 1
-Mitterrand/3
-Mitzi/3
-Mitty/3
-mix/22 1
-mixable 1
-mixed 1
-mixer/1 1
-Mixtec 1
-mixture/1 1
-Mizar
-mizzen/1 1
-mizzenmast/1 1
-mizzen 1
-Mk
-mks
-Mlle
-ml 1
-MM
-Mme
-Mmes
-mm 1
-MN
-Mn/2 1
-mnemonic/51 1
-Mnemosyne/2 1
-mo
-MO
-Mo/2 1
-moan/23 1
-moaner/1 1
-moaning 1
-moat/62 1
-mob/136 1
-Mobil/3
-mobile/1 1
-Mobile/2 1
-mobile 1
-mobility/15 1
-mobilizable
-mobilization/1 1
-mobilize/6 1
-mobilizer/1 1
-mobster/1 1
-mob 1
-Mob 1
-Mobutu/3
-moccasin/1 1
-mocha/2 1
-mock/414 1
-mocker/1 1
-mockery/15 1
-mocking/8 1
-mockingbird/1 1
-mocking 1
-mockup/1 1
-mod/415 1
-modal/1 1
-modality/60 1
-modal 1
-mode/299 1
-model/78 1
-modeler/1 1
-modeling/1 1
-modem/18 1
-moderate/207 1
-moderation/2 1
-moderator/1 1
-modern/38 1
-modernism/2 1
-modernist/1 1
-modernistic
-modernity/2 1
-modernization/1 1
-modernize/6 1
-modernizer/1 1
-modest/75 1
-Modesto
-modesty/2 1
-modicum/1 1
-modifiable 1
-modification/1 1
-modifier/1 1
-modify/31 1
-Modigliani
-modish/16 1
-modularity 1
-modularization
-modularize/251 1
-modular 1
-modulate/6 1
-modulation/1 1
-modulator/1 1
-module/1 1
-moduli 990
-modulo/416 1
-modulus 991
-Moe/3
-Moet/3
-Mogadishu
-moggie/10 1
-mogul/1 1
-Mogul/1 1
-moggy/60 1
-Mohacs/3
-mohair/2 1
-Mohamed/3
-Mohammad/3
-Mohammed/2 1
-Mohammedan/1 1
-Mohammedanism/1 1
-Mohave/1 1
-Mohawk/1 1
-Mohegan 1
-Mohican/1 1
-Moho/3
-Mohorovicic/3
-moiety/15 1
-moil/23 1
-moiling 1
-Moira 1
-moire/1 1
-Moises
-Moiseyev/3
-moist/21 1
-moisten/11 1
-moistener/1 1
-moisture/2 1
-moisturize/6 1
-moisturizer/1 1
-Mojave/1 1
-molar/1 1
-molarity/60 1
-molar 1
-molasses/2 1
-mold/23 1
-Moldavia/2 1
-Moldavian 1
-moldboard/1 1
-molder/23 1
-molding/1 1
-Moldova/2 1
-Moldovan
-moldy/49 1
-mole/1 1
-molecularity/2 1
-molecular 1
-molecule/1 1
-molehill/1 1
-moleskin/2 1
-molest/11 1
-molestation/1 1
-molester/1 1
-Moliere/2 1
-Molina
-Moll/3
-moll/1 1
-Mollie/3
-mollies
-mollification/2 1
-mollify/31 1
-mollusc/1 1
-molluscan/1 1
-mollusk/1 1
-molluskan/1 1
-Molnar/3
-Moloch/2 1
-Molokai/2 1
-Molotov/2 1
-molt/23 1
-molten 992
-molter/1 1
-Moluccas
-molybdenum/2 1
-molly/3
-Molly/3
-mollycoddle/28 1
-mom/1 1
-Mombasa/2 1
-moment/1 1
-momentary/72 1
-momenta 993
-momentous/16 1
-momentum/2 994
-momma/1 1
-mommie/1 1
-mommy/15 1
-Mon/1 1
-Mona/3
-Monacan 1
-Monaco/2 1
-monadic
-monarch/1 1
-monarchic
-monarchical 1
-monarchism/2 1
-monarchist/1 1
-monarchistic
-monarchy/15 1
-monastery/15 1
-monastic/1 1
-monastical/8 1
-monasticism/2 1
-monaural 1
-Mondale/3
-Monday/1 1
-Mondrian
-Monegasque/1 1
-Monera/2 1
-Monet
-monetarism/2 1
-monetarist/1 1
-monetary/211 1
-monetize/6 1
-money/1 995
-moneybag/1 1
-moneybox
-moneyboxes
-moneychangers
-moneyed
-moneygrubber/1 1
-moneygrubbing/2 1
-moneylender/1 1
-moneyless 1
-moneymaker/1 1
-moneymaking/2 1
-monger/23 1
-mongering 1
-Mongol/1 1
-mongol/10 1
-Mongolia/2 1
-Mongolian/1 1
-Mongolic/2 1
-mongolism/2 1
-mongoloid/1 1
-Mongoloid 1
-Mongol 1
-mongoose/1 1
-mongrel/1 1
-Monica/3
-monicker/1 1
-monied 1
-monies 996
-moniker/1 1
-Monique/3
-monism/2 1
-monist/1 1
-monition/1 1
-monitor/23 1
-monitory 1
-Monk/3
-monk/1 1
-monkey/23 1
-monkeyshine/1 1
-monkish 1
-monkshood/1 1
-Monmouth
-mono/2 1
-monochromatic 1
-monochrome/1 1
-monocle/1 1
-monocled
-monoclonal 1
-monocotyledon/1 1
-monocotyledonous
-monocular 1
-monoculture 1
-monodic
-monodist/1 1
-monody/15 1
-monogamist/1 1
-monogamously
-monogamous 1
-monogamy/2 1
-monogram/160 1
-monograph/18 1
-monolayers
-monolingual/1 1
-monolith/1 1
-monolithic 1
-monolog/18 1
-monologist/1 1
-monologue/18 1
-monologuist/1 1
-monomania/2 1
-monomaniac/1 1
-monomaniacal
-monomer/1 1
-monomeric
-monomial/10 1
-monomolecular 1
-Monongahela
-mononucleosis/2 1
-monophonic
-monophthongs
-monoplane/1 1
-monopole/10 1
-monopolies
-monopolist/1 1
-monopolistic 1
-monopolization/2 1
-monopolize/6 1
-monopolizer/1 1
-monopoly/3
-monorail/1 1
-monostable
-monosyllabic 1
-monosyllable/1 1
-monotheism/2 1
-monotheist/1 1
-monotheistic
-monotone/18 1
-monotonic/39 1
-monotonicity 1
-monotonous/16 1
-monotony/2 1
-mono 1
-monounsaturated
-monoxide/1 1
-Monroe/2 1
-Monrovia/2 1
-Monsanto/3
-monseigneur/2 997
-monsieur/2 998
-monsignor/1 1
-Monsignor/1 1
-monsoon/1 1
-monsoonal
-monster/1 1
-monstrance/1 1
-monstrosity/15 1
-monstrous/8 1
-Mont
-montage/18 1
-Montague
-Montaigne
-Montana/2 1
-Montanan/1 1
-Montcalm
-Monte/3
-Montenegrin 1
-Montenegro/2 1
-Monterrey
-Montesquieu
-Montessori
-Monteverdi
-Montevideo/2 1
-Montezuma/2 1
-Montgolfier
-Montgomery/2 1
-month/1 1
-monthlies
-monthly's
-monthly 1
-Monticello
-Montoya/3
-Montpelier/2 1
-Montrachet 1
-Montreal/2 1
-Montserrat/2 1
-Monty/3
-monument/18 1
-monumental/8 1
-moo/417 1
-mooch/22 1
-moocher/1 1
-mood/1 1
-Moody
-moody/50 1
-Moog 1
-Moon/3
-moon/23 1
-moonbeam/1 1
-Mooney/3
-moonless 1
-moonlight/23 999
-moonlighter/1 1
-moonlighting/2 1
-moonlit 1000
-moonrise 1
-moonscape/1 1
-moonshine/18 1
-moonshiner/1 1
-moonshot/1 1
-moonstone/1 1
-moonstruck 1
-moonwalk/18 1
-moor/1 1
-Moor/1 1
-moor/11 1
-Moore
-moorhen/10 1
-mooring/1 1
-Moorish/2 1
-moorland/1 1
-moose/2 1
-moot/414 1
-mooter 1
-mooting 1
-mop/47 1
-mope/28 1
-moped/1 1
-moper/1 1
-mopey 1001
-mopier 1002
-mopiest 1002
-mopish 1
-moppet/1 1
-mopy/34 1
-moraine/1 1
-moral/164 1
-morale/2 1
-Morales/3
-moralist/1 1
-moralistic/39 1
-morality/15 1
-moralization/2 1
-moralize/6 1
-moralizer/1 1
-Moran/3
-morass/4 1
-moratorium/1 1
-Moravia
-Moravian 1
-moray/1 1
-morbid/16 1
-morbidity/2 1
-mordancy/2 1
-mordant/164 1
-Mordred
-More
-more/130 1
-moreish
-morel/1 1
-Moreno/3
-moreover
-more 1003
-Morgan/1 1
-morgue/1 1
-Moriarty/3
-moribund/8 1
-moribundity 1
-Morin/3
-Morison/3
-Morita/3
-Morley
-Mormon/1 1
-Mormonism/1 1
-Mormon 1
-morn/86 1
-morning/1 1
-Moroccan/1 1
-morocco/2 1
-Morocco/2 1
-moron/1 1
-Moroni
-moronic/39 1
-morose/16 1
-Moro 1
-morph/5 1
-morpheme/18 1
-morphemic 1
-Morpheus/2 1
-morphia/2 1
-morphine/2 1
-morphing/2 1
-morphism
-morphisms
-morphogenesis 1
-morphological/8 1
-morphology/15 1
-Morphy/3
-Morris
-Morrison
-Morrow/3
-morrow/1 1
-Morse/2 1
-morsel/18 1
-Mort/3
-mortal/30 1
-mortality/2 1
-mortar/23 1
-mortarboard/1 1
-mortgage/28 1
-mortgageable
-mortgagee/1 1
-mortgager/1 1
-mortgagor/1 1
-mortice/28 1
-mortician/1 1
-mortification/2 1
-mortified 1
-mortify/31 1
-mortifying 1
-Mortimer
-mortise/28 1
-Morton/2 1
-mortuary/15 1
-mos/157 1
-mosaic/1 1
-Mosaic/2 1
-mosaic/58 1
-Mosaic 1
-Moscow/2 1
-Moseley
-Moselle/2 1
-Moses/2 1
-mosey/11 1
-mosh/7 1
-moshing 1
-Mosley/3
-mosque/1 1
-mosquito/4 1
-Moss/3
-moss/40 1
-mossback/1 1
-mossy/34 1
-most/37 1004
-Mosul
-mot/1 1
-mote/1 1
-motel/1 1
-motet/1 1
-moth/1 1
-mothball/23 1
-mother/23 1
-motherboard/1 1
-motherfucker/80 1
-motherfucking/309
-motherhood/2 1
-mothering 1
-motherland/1 1
-motherless 1
-motherly/140 1
-motif/123 1
-motile/10 1
-motility/2 1
-motion/23 1
-motionless/16 1
-motivate/6 1
-motivation/1 1
-motivational
-motivator/1 1
-motive/18 1
-motiveless 1
-motive 1
-motley/18 1005
-motlier 1006
-motliest 1006
-motocross/4 1
-motor/23 1
-motorbike/28 1
-motorboat/1 1
-motorcade/18 1
-motorcar/1 1
-motorcycle/28 1
-motorcyclist/1 1
-motoring 1
-motorist/1 1
-motorization/2 1
-motorize/6 1
-motorman/2 1007
-motormen 1008
-motormouth/1 1
-Motorola/3
-motor 1
-motorway/1 1
-Motown/2 1
-Motrin/2 1
-Mott
-mottle/43 1
-mottling 1
-motto/4 1
-moue/18 1
-moulder/5 1
-moult/23 1
-moulting 1
-mound/23 1
-Mount
-mount/23 1
-mountable 1
-mountain/1 1
-mountaineer/23 1
-mountaineering/2 1
-mountainous 1
-mountainside/1 1
-mountaintop/1 1
-mountain 1
-Mountbatten
-mountebank/18 1
-mounter/1 1
-Mountie/1 1
-mounties
-mounting/1 1
-mourn/11 1
-mourner/1 1
-mournful/85 1
-mourning/2 1
-mouse/360 1009
-mouser/1 1
-mousetrap/47 1
-mousey 1010
-mousier 1011
-mousiest 1011
-mousing 1
-moussaka/10 1
-mousse/28 1
-Moussorgsky
-moustachioed
-mousy/49 1
-mouth/23 1
-Mouthe/3
-mouthful/1 1
-mouthing 1
-mouthorgan
-mouthpiece/1 1
-mouthwash/4 1
-mouthwatering
-mouthy/49 1
-Mouton/3
-mouton/2 1
-movable/1 1
-move/28 1
-moveable/1 1
-movement/1 1
-mover/1 1
-movie/1 1
-moviegoer/1 1
-moving/8 1
-mow/23 1
-mower/1 1
-Mowgli/3
-mowing 1
-moxie/2 1
-Mozambican/1 1
-Mozambique/2 1
-Mozart/2 1
-Mozilla/3
-mozzarella/2 1
-mp
-MP/2 1
-mpg
-mph 1
-Mr/1 1
-MRI/2 1
-MS/2 1
-Mses
-MSG/2 1
-Msgr
-MST/2 1
-MSW
-mt
-Mt
-MT/2 1
-mtg
-mtge
-m 1
-MTV
-mu/1 1
-Muawiya/3
-Mubarak/3
-much/418 899
-mucilage/2 1
-mucilaginous 1
-muck/23 1
-muckrake/6 1
-muckraker/1 1
-mucky/34 1
-mucosa 1
-mucous 1
-mucus/2 1
-mud/2 1
-muddle/28 1
-muddled 1
-muddleheaded
-muddy/143 1
-muddying 1
-mudflap/10 1
-mudflat/1 1
-mudflow/10 1
-mudguard/1 1
-mudlarks
-mudpack/10 1
-mudroom/1 1
-mudslide/1 1
-mudslinger/1 1
-mudslinging/2 1
-mud 1
-Mueller/3
-Muenster/1 1
-muenster/2 1
-muesli 1
-muezzin/1 1
-muff/23 1
-muffin/1 1
-muffle/43 1
-muffler/1 1
-muffling 1
-mufti/1 1
-mug/92 1
-Mugabe/3
-mugful/1 1
-mugger/18 1
-mugging/1 1
-muggins 1
-mugshot/1 1
-mugwump/1 1
-muggy/49 1
-Muhammad/2 1
-Muhammadan/1 1
-Muhammadanism/1 1
-Muir
-mujaheddin
-mujahedin/2 1
-Mujib/3
-mukluk/1 1
-mulatto/4 1
-mulberry/15 1
-mulch/22 1
-mulct/23 1
-Mulder/3
-mule/18 1
-muleskinner/1 1
-muleteer/1 1
-mulish/16 1
-mull/5 1
-mullah/1 1
-mullein/2 1
-Mullen/3
-Muller/3
-mullet/1 1
-Mulligan/3
-mulligan/1 1
-mulligatawny/2 1
-Mullikan/3
-Mullins
-mullion/62 1
-Mulroney/3
-Multan
-multichannel 1
-multicolored
-multicolor 1
-multicultural
-multiculturalism/2 1
-Multics/89 1
-multidimensional
-multidisciplinary
-multifaceted
-multifamily
-multifarious/16 1
-multiform
-multifunction
-multifunctional
-multilateral/8 1
-multilayer
-multilevel
-multilingual
-multilingualism/2 1
-multimedia/2 1
-multimeter 1
-multimillionaire/1 1
-multimillion 1
-multinational/1 1
-multiparty
-multiphase
-multiple/419 1
-multiplex/22 1
-multiplexer/1 1
-multiplexor/1 1
-multiplicand/1 1
-multiplication/1 1
-multiplicative 1
-multiplicity/15 1
-multiplier/1 1
-multiply/31 1
-multiprocessing 1
-multiprocessor/1 1
-multiprogramming 1
-multipurpose
-multiracial
-multistage 1
-multistory 1
-multitask/121 1
-multitasking/2 1
-multitude/1 1
-multitudinous 1
-multivalued
-multivariate
-multivitamin/1 1
-mum/420 1012
-Mumbai/3
-mumble/28 1
-mumbler/1 1
-mumbletypeg/2 1
-mumbling/10 1
-Mumford
-mummer/1 1
-mummery/2 1
-mummification/2 1
-mummify/31 1
-mummy/167 1
-mumps
-mumps's
-Munch
-munch/7 1
-muncher/10 1
-Munchhausen/2 1
-munchies/2 1
-munchkin/1 1
-mundane/191 1
-mung/5 1
-Munich/2 1
-municipal/30 1
-municipality/15 1
-munificence/2 1
-munificent/8 1
-munition/23 1
-Munoz/3
-Munro 1
-Munster 1
-mun 1
-muons
-Muppet/3
-mural/1 1
-muralist/1 1
-mural 1
-Murasaki/3
-Murat
-Murchison/3
-Murcia
-murder/23 1
-murderer/1 1
-murderess/4 1
-murderous/8 1
-Murdoch
-Muriel/3
-Murillo
-Murine/3
-murk/18 1
-murky/50 1
-Murmansk
-murmur/23 1
-murmurer/1 1
-murmuring/1 1
-murmurous 1
-Murphy 1
-murrain/2 1
-Murray/2 1
-Murrow/3
-Murrumbidgee
-mus/421 1
-muscat/1 1
-Muscat/2 1
-muscatel/1 1
-muscle/28 1
-musclebound
-muscleman 1013
-musclemen 1014
-muscling 1
-muscly
-Muscovite/2 1
-Muscovy/2 1
-muscular/8 1
-muscularity/2 1
-musculature/2 1
-muse/1 1
-Muse/2 1
-muse/6 1
-musette/1 1
-museum/1 1
-mush/22 1
-Musharraf/3
-musher/10 1
-mushroom/23 1
-mushy/49 1
-Musial/3
-music/18 1
-musical/30 1
-musicale/1 1
-musicality/2 1
-musician/1 1
-musicianly
-musicianship/2 1
-musicological 1
-musicologist/1 1
-musicology/2 1
-musing/30 1
-musk/2 1
-muskeg/1 1
-muskellunge/1 1
-musket/1 1
-musketeer/1 1
-musketry/2 1
-muskie/41 1
-muskmelon/1 1
-Muskogee/2 1
-muskox/422 1
-muskrat/1 1
-musk 1
-musky/423 1
-Muslim/1 1
-muslin/2 1
-muss/22 1
-mussel/1 1
-Mussolini/2 1
-Mussorgsky
-mussy/34 1
-must/91 1
-mustache/1 1
-mustached
-mustachio/1 1
-mustachioed
-mustang/1 1
-mustard/2 1
-muster/23 1
-mustn't
-musty/50 1
-mutability/2 1
-mutable/19 1
-mutagen/1 1
-mutant/1 1
-mutate/6 1
-mutation/1 1
-mutational 1
-mutative
-mute/107 1
-muted 1
-mutilate/6 1
-mutilation/1 1
-mutilator/1 1
-mutineer/18 1
-mutinous/8 1
-mutiny/56 1
-Mutsuhito/3
-mutt/1 1
-mutter/23 1
-mutterer/1 1
-muttering/1 1
-mutton/2 1
-muttonchops
-muttonchops's
-mutual/8 1
-mutuality/2 1
-mutual 1
-muumuu/1 1
-muzak
-Muzak 1
-muzzle/28 1
-muzzy/243 1
-MVP/2 1
-MW
-my/10 1
-Myanmar/2 1
-Mycenae/2 1
-Mycenaean 1
-mycologist/1 1
-mycology/2 1
-myelitis/2 1
-Myers
-Mylar/1 1
-Myles/3
-myna/1 1
-mynah/1 1
-myocardial
-myopia/2 1
-myopically
-myopic 1
-Myra/3
-Myrdal/3
-myriad/1 1
-myrmidon/1 1
-Myrna/3
-Myron
-myrrh/2 1
-Myrtle/3
-myrtle/1 1
-myself 1
-Mysore
-MySpace/3
-Myst/3
-mysterious/16 1
-mystery/167 1
-mystic/1 1
-mystical/8 1
-mysticism/2 1
-mystic 1
-mystification/2 1
-mystified 1
-mystify/31 1
-mystifying 1
-mystique/2 1
-myth/1 1
-mythical 1
-mythic 1
-mythological 1
-mythologist/1 1
-mythologize/6 1
-mythology/15 1
-myxomatosis 1
-n
-N/2 1
-Na/2 1
-NAACP
-naan/10 1
-nab/145 1
-Nabisco/3
-nabob/1 1
-Nabokov
-nabs 1
-nacelle/1 1
-nacho/1 1
-nacre/2 1
-nacreous 1
-Nader
-Nadia/3
-Nadine/3
-nadir/1 1
-nae 1
-naffer
-naffest
-naff 1
-NAFTA
-nag/92 1
-Nagasaki/2 1
-nagger/1 1
-nagging 1
-Nagoya
-Nagpur
-nagware
-nagwares
-Nagy
-nah
-Nahuatl/1 1
-Nahum
-naiad/1 1
-naif/1 1
-nail/23 1
-nailbrush/4 1
-nailing 1
-Naipaul/3
-Nair/3
-Nairobi/2 1
-Naismith/3
-naive/45 1
-naivete/2 1
-naive 1
-naivety/2 1
-naked/21 1
-Nam/3
-Namath/3
-name/28 1
-nameable 1
-namedrop/424 1
-namedropping/2 1
-namelessly
-nameless 1
-namely 1
-nameplate/1 1
-namesake/1 1
-Namibia/2 1
-Namibian/1 1
-naming/10 1
-Nan/3
-nan/10 1
-Nanak
-Nanchang
-Nancy
-Nanette/3
-Nanjing/2 1
-Nanking/1 1
-Nannie/3
-nanobot/10 1
-nanometer/10 1
-Nanook/3
-nanosecond/1 1
-nanotechnology/60 1
-Nansen
-Nantes/3
-Nantucket/2 1
-nanny/167 1
-Naomi/2 1
-nap/47 1
-napalm/23 1
-nape/1 1
-Naphtali/3
-naphtha/2 1
-naphthalene/2 1
-Napier/2 1
-napkin/1 1
-Naples/2 1
-napless 1
-napoleon/1 1
-Napoleon/1 1
-Napoleonic 1
-napper/1 1
-nappy/42 1
-Napster/3
-narc/18 1
-narcissism/2 1
-narcissist/1 1
-narcissistic
-narcissus/2 1
-Narcissus/2 1
-narcolepsy/2 1
-narcoleptic 1
-narcoses 1015
-narcosis/2 1016
-narcotic/1 1
-narcotization/2 1
-narcotize/6 1
-nark/23 1
-narky 1
-Narmada/3
-Narnia/3
-Narraganset 1
-Narragansett 1
-narrate/6 1
-narration/1 1
-narrative/1 1
-narratology 1
-narrator/1 1
-narrow/52 1
-narrowing 1
-narwhal/1 1
-nary 1
-NASA/2 1
-nasal/30 1
-nasality/2 1
-nasalization/2 1
-nasalize/6 1
-NASCAR/3
-nascence/2 1
-nascent 1
-NASDAQ/2 1
-Nash
-Nashua
-Nashville/2 1
-Nassau/2 1
-Nasser/2 1
-nasturtium/1 1
-nasty/50 1
-Nat/3
-Natalia/3
-Natalie/3
-natal 1
-Natasha/3
-Natchez
-natch 1
-Nate/3
-Nathan
-Nathaniel/3
-Nathans
-nation/1 1
-national/30 1
-nationalism/2 1
-nationalist/1 1
-nationalistic/39 1
-nationality/15 1
-nationalization/1 1
-nationalize/6 1
-nationhood/2 1
-Nation 1
-nationwide
-Nationwide/3
-native/1 1
-nativity/15 1
-Nativity/2 1
-natl
-NATO/2 1
-natter/23 1
-natural/36 1
-naturalism/2 1
-naturalist/1 1
-naturalistic 1
-naturalization/2 1
-naturalize/6 1
-Nature
-nature/18 1
-naturism 1
-naturist/10 1
-natty/50 1
-Naugahyde 1
-naught/1 1
-naughty/50 1
-Nauru/2 1
-nausea/2 1
-nauseate/6 1
-nauseating/8 1
-nauseous/16 1
-nautical/8 1
-nautilus/4 1
-Nautilus 1
-Navaho/2 1
-Navajo/71 1
-naval 1
-Navarre
-Navarro/3
-nave/1 1
-navel/1 1
-navigability/2 1
-navigable 1
-navigate/6 1
-navigation/2 1
-navigational
-navigator/1 1
-Navratilova/3
-navvy/425 1
-navy/15 1
-Navy 1
-nay/1 1
-naysayer/1 1
-nay 1
-Nazarene 1
-Nazareth
-Nazca
-Nazi/1 1
-Naziism/1 1
-Nazism/1 1
-Nazi 1
-NB
-Nb/2 1
-NBA
-NBC
-NBS
-NC
-NCAA
-NCO
-ND
-Nd/2 1
-N'Djamena
-Ndjamena/2 1
-Ne/2 1
-NE/2 1
-Neal/3
-neanderthal/1 1
-Neanderthal/1 1
-neap/18 1
-Neapolitan 1
-neap 1
-near/426 1
-nearby 1
-nearside 1
-nearsighted/33 1
-nearsightedly
-neat/21 1
-neaten/11 1
-neath
-neat 1
-Neb
-Nebr
-Nebraska/2 1
-Nebraskan/1 1
-Nebuchadnezzar 1
-nebula/53 1
-nebular
-nebulosity 1
-nebulous/16 1
-necessary/206 1
-necessitate/6 1
-necessitous 1
-necessity/15 1
-neck/23 1
-neckband/10 1
-neckerchief/1 1
-necking/2 1
-necklace/28 1
-necklacings
-neckline/1 1
-necktie/1 1
-necrology/2 1
-necromancer/1 1
-necromancy/2 1
-necromantic
-necrophiliac/10 1
-necrophilia 1
-necropolis/4 1
-necropsy 1
-necroses 1017
-necrosis/2 1018
-necrotic
-nectar/2 1
-nectarine/1 1
-Ned/3
-need/23 1
-needful/8 1
-needle/28 1
-needlecraft 1
-needlepoint/2 1
-needless/8 1
-needlessness/3
-needless 1
-needlewoman/2 1019
-needlewomen 1020
-needlework/2 1
-needling 1
-needn't
-needy/49 1
-ne'er
-nee 1
-nefarious/16 1
-Nefertiti
-negate/6 1
-negation/1 1
-negative/207 1
-negativism/2 1
-negativity/2 1
-Negev/2 1
-neglect/23 1
-neglected 1
-neglectful/16 1
-neglige/1 1
-negligee/1 1
-negligence/2 1
-negligent/8 1
-negligibility 1
-negligible/19 1
-negotiability/2 1
-negotiable 1
-negotiate/6 1
-negotiation/1 1
-negotiator/1 1
-Negress/4 1
-negritude/2 1
-Negritude 1
-Negro/4 1
-Negroid/1 1
-negroid 1
-Negros
-negro 1
-neg 1
-NEH
-Nehemiah
-Nehru/2 1
-neigh/23 1
-neighbor/210 1
-neighborhood/1 1
-neighborly/140 1
-Neil/3
-neither 1
-Nelda/3
-Nell/3
-Nellie/3
-Nelsen/3
-Nelson
-nelson/1 1
-Nelly/3
-nematode/1 1
-Nembutal/2 1
-nemeses 1021
-Nemesis/2 1
-nemesis/2 1022
-neoclassic
-neoclassical
-neoclassicism/2 1
-neocolonialism/2 1
-neocolonialist/1 1
-neoconservative/1 1
-neodymium/2 1
-Neogene
-neolithic
-Neolithic
-neologism/1 1
-neon/2 1
-neonatal 1
-neonate/1 1
-neophilia/10 1
-neophyte/1 1
-neoplasm/1 1
-neoplastic
-neoprene/2 1
-Nepal/2 1
-Nepalese/2 1
-Nepali/1 1
-nepenthe/2 1
-nephew/1 1
-nephrite/2 1
-nephritic
-nephritis/2 1
-nepotism/2 1
-nepotist/1 1
-nepotistic
-Neptune/2 1
-neptunium/2 1
-nerd/1 1
-nerdy/34 1
-Nereid/2 1
-Nerf
-Nero
-Neruda
-nerve/28 1
-nerveless/16 1
-nerving 1
-nervous/16 1
-nervy/49 1
-Nescafe/3
-Nesselrode 1
-nest/23 1
-nestable
-Nestle/3
-nestle/43 1
-nestling/1 1
-Nestor/2 1
-Nestorius
-net/403 1
-netball 1
-Netherlander/1 1
-Netherlands
-nethermost
-nether 1
-netherworld/2 1
-netiquette/10 1
-Netscape/2 1
-nett/427 1
-netter/10 1
-Nettie/3
-netting/2 1
-nettle/28 1
-nettlesome
-nettling 1
-nett 1
-network/23 1
-networking/2 1
-Netzahualcoyotl/3
-neuralgia/2 1
-neuralgic
-neural 1
-neurally 1
-neurasthenia/2 1
-neurasthenic/1 1
-neuritic/1 1
-neuritis/2 1
-neurobiology 1
-neurological
-neurologically
-neurologist/1 1
-neurology/2 1
-neuron/1 1
-neuronal
-neurone/10 1
-neurophysiology 1
-neuroscience 1
-neuroses 1023
-neurosis/2 1024
-neurosurgeon/1 1
-neurosurgery/2 1
-neurotic/51 1
-neurotransmitter/1 1
-neut
-neuter/23 1
-neutral/30 1
-neutralism/2 1
-neutralist/1 1
-neutrality/2 1
-neutralization/2 1
-neutralize/6 1
-neutralizer/1 1
-neutrino/1 1
-neutron/1 1
-Nev
-Neva
-Nevada/2 1
-Nevadan/1 1
-Nevadian 1
-nevermore
-nevertheless
-never 1
-Nevis/2 1
-nevi 1025
-Nevsky/3
-nevus/2 1026
-new/428 1
-Newark/2 1
-newbie/1 1
-newborn/1 1
-Newcastle/2 1
-newcomer/1 1
-newel/1 1
-newfangled 1
-Newfoundland/1 1
-Newfoundlander 1
-newish
-newline/10 1
-newlywed/1 1
-Newman
-Newport/2 1
-new's
-news/2 1
-NeWS/89 1
-newsagent/10 1
-newsboy/1 1
-newscast/18 1
-newscaster/1 1
-newsdealer/1 1
-newsflash/89 1
-newsgirl/1 1
-newsgroup/1 1
-newshound/10 1
-newsletter/1 1
-newsman/2 1027
-newsmen 1028
-newspaper/18 1
-newspaperman/2 1029
-newspapermen 1030
-newspaperwoman/2 1031
-newspaperwomen 1032
-newsprint/2 1
-newsreader/10 1
-newsreel/1 1
-newsroom/1 1
-newsstand/1 1
-news 1
-Newsweek/3
-newsweeklies
-newsweekly/3
-newswoman/2 1033
-newswomen 1034
-newsworthy/49 1
-newsy/34 1
-newt/1 1
-newton/1 1
-Newton/2 1
-Newtonian/2 1
-Nexis
-next's
-next 1
-nexus/4 1
-NF
-NFC
-NFL
-Ngaliema/3
-Nguyen/3
-NH
-NHL
-niacin/2 1
-Niagara/2 1
-Niamey/2 1
-nib/18 1
-nibble/28 1
-nibbler/1 1
-nibbling 1
-Nibelung 1
-Nicaea
-Nicaragua/2 1
-Nicaraguan/1 1
-Niccolo/3
-nice/27 1
-Nice/2 1
-Nicene
-nicety/15 1
-niche/18 1
-Nichiren/3
-Nicholas
-Nichole/3
-Nichols
-Nicholson
-Nick/3
-nick/23 1
-nickel/18 1
-Nickelodeon/3
-nickelodeon/1 1
-nickel 1
-nicker/23 1
-Nicklaus
-nickle/58 1
-nicknack/1 1
-nickname/28 1
-Nickolas
-Nicobar/3
-Nicodemus
-Nicola/1 1
-Nicole/3
-Nicosia/2 1
-nicotine/2 1
-Niebuhr/3
-niece/1 1
-Nielsen
-Nietzsche
-Nieves/3
-niff 1
-niffy 1
-niftily
-nifty/34 1
-Nigel/3
-Niger/2 1
-Nigeria/2 1
-Nigerian/1 1
-Nigerien/2 1
-niggard/164 1
-niggardly/140 1
-nigger/429 1
-niggle/6 1
-niggler/1 1
-niggle's
-niggling 1
-nigh/166 1
-night/1 1
-nightcap/1 1
-nightclothes/2 1
-nightclub/136 1
-nightdress/4 1
-nightfall/2 1
-nightgown/1 1
-nighthawk/1 1
-nightie/1 1
-nightingale/1 1
-Nightingale/2 1
-nightlife/2 1
-nightlight/10 1
-nightlong 1
-nightly 1
-nightmare/1 1
-nightmarish 1
-nightshade/1 1
-nightshirt/1 1
-nightspot/1 1
-nightstand/1 1
-nightstick/1 1
-nigh 1
-nighttime/2 1
-night 1
-nightwatchman
-nightwatchmen
-nightwear/2 1
-nighty/15 1
-NIH
-nihilism/2 1
-nihilist/1 1
-nihilistic
-Nijinsky
-Nike/2 1
-Nikita/3
-Nikkei
-Nikki/3
-Nikolai/3
-Nikolayev
-Nikon/3
-nil/2 1
-Nile/2 1
-nil 1
-nimbi 1035
-nimble/289 1
-nimbus/2 1036
-NIMBY
-nimby 1
-Nimitz
-nimrod/1 1
-Nimrod 1
-Nina/2 1
-nincompoop/1 1
-nine/1 1
-ninepence 1
-ninepin/130 1
-nineteen/1 1
-nineteenth/1 1
-ninetieth/1 1
-nine 1
-ninety/15 1
-Nineveh/2 1
-ninja/1 1
-Nintendo
-ninth/1 1
-ninny/15 1
-Niobe
-niobium/2 1
-nip/47 1
-nipper/18 1
-nippiness/3
-nipping 1
-nipple/18 1
-Nippon/2 1
-Nipponese/2 1
-nippy/34 1
-Nirenberg/3
-nirvana/2 1
-Nirvana 1
-Nisan/2 1
-nisei/2 1
-Nisei 1
-Nissan/2 1
-Ni 1037
-nit/1 1
-Nita/3
-nite/1 1
-niter/2 1
-nitpick/11 1
-nitpicker/1 1
-nitpicking/2 1
-nitrate/28 1
-nitration/2 1
-nitric 1
-nitride/58 1
-nitrification/2 1
-nitrite/1 1
-nitrocellulose/2 1
-nitrogen/2 1
-nitrogenous
-nitroglycerin/2 1
-nitroglycerine/2 1
-nitrous 1
-nitwit/1 1
-Nivea/3
-nix/22 1
-Nixon/2 1
-nix 1
-NJ
-Nkrumah
-NLRB
-NM
-No/2 1038
-no/71 1
-Noah/2 1
-nob/10 1
-nobble/6 1
-Nobel
-Nobelist/1 1
-nobelium/2 1
-nobility/2 1
-Noble/3
-noble/430 1
-nobleman/2 1039
-noblemen 1040
-nobles 1
-noblewoman/2 1041
-noblewomen 1042
-nobody/15 1
-nocturnal/8 1
-nocturne/1 1
-nod/113 1
-nodal 1
-nodding 1
-noddle/18 1
-noddy 1
-node/1 1
-NoDoz/3
-nodular
-nodule/1 1
-Noe/3
-noel/1 1
-Noel/1 1
-Noelle/3
-Noemi/2 1
-noes 1
-noggin/1 1
-Noh
-nohow 1
-noise/28 1
-noiseless/16 1
-noisemaker/1 1
-noisome 1
-noisy/50 1
-Nokia/3
-Nola/3
-Nolan/3
-nomad/1 1
-nomadic 1
-Nome
-nomenclature/1 1
-nominal/8 1
-nominate/6 1
-nomination/1 1
-nominative/1 1
-nominator/1 1
-nominee/1 1
-Nona/2 1
-nonabrasive 1
-nonabsorbent/1 1
-nonacademic 1
-nonacceptance/2 1
-nonacid 1
-nonactive/1 1
-nonaddictive
-nonadhesive 1
-nonadjacent 1
-nonadjustable 1
-nonadministrative 1
-nonage/1 1
-nonagenarian/1 1
-nonaggression/2 1
-nonalcoholic 1
-nonaligned
-nonalignment/2 1
-nonallergic
-nonappearance/1 1
-nonassignable 1
-nonathletic 1
-nonattendance/2 1
-nonautomotive
-nonavailability/2 1
-nonbasic
-nonbeliever/1 1
-nonbelligerent/1 1
-nonbinding 1
-nonbreakable
-nonburnable
-noncaloric
-noncancerous
-nonce/2 1
-nonchalance/2 1
-nonchalant/8 1
-nonchargeable
-nonclerical/1 1
-nonclinical 1
-noncollectable
-noncom/1 1
-noncombat
-noncombatant/1 1
-noncombustible 1
-noncommercial/1 1
-noncommittal
-noncommittally
-noncommunicable
-noncompeting
-noncompetitive 1
-noncompliance/2 1
-noncomplying 1
-noncomprehending 1
-nonconducting
-nonconductor/1 1
-nonconforming
-nonconformism 1
-nonconformist/1 1
-nonconformity/2 1
-nonconsecutive 1
-nonconstructive 1
-noncontagious 1
-noncontinuous 1
-noncontributing
-noncontributory 1
-noncontroversial 1
-nonconvertible 1
-noncooperation/2 1
-noncorroding 1
-noncorrosive 1
-noncredit
-noncriminal/1 1
-noncritical 1
-noncrystalline
-noncumulative 1
-noncustodial
-nondairy 1
-nondeductible/2 1
-nondelivery/15 1
-nondemocratic
-nondenominational 1
-nondepartmental 1
-nondepreciating
-nondescriptly
-nondescript 1
-nondestructive 1
-nondetachable
-nondisciplinary
-nondisclosure/2 1
-nondiscrimination/2 1
-nondiscriminatory
-nondramatic 1
-nondrinker/1 1
-nondrying 1
-noneducational 1
-noneffective 1
-nonelastic 1
-nonelectrical 1
-nonelectric 1
-nonempty
-nonenforceable
-nonentity/15 1
-nonequivalent/1 1
-nonessential 1
-nonesuch/4 1
-nonetheless
-none 1
-nonevent/1 1
-nonexchangeable
-nonexclusive
-nonexempt/2 1
-nonexistence/2 1
-nonexistent
-nonexplosive/1 1
-nonfactual 1
-nonfading
-nonfatal 1
-nonfattening
-nonfat 1
-nonferrous
-nonfiction/2 1
-nonfictional
-nonflammable
-nonflowering
-nonfluctuating
-nonflying 1
-nonfood/2 1
-nonfreezing
-nonfunctional 1
-nongovernmental
-nongranular
-nonhazardous 1
-nonhereditary 1
-nonhuman
-nonidentical
-noninclusive 1
-nonindependent 1
-nonindustrial 1
-noninfectious 1
-noninflammatory
-noninflationary
-noninflected
-nonintellectual/1 1
-noninterchangeable 1
-noninterference/2 1
-nonintervention/2 1
-nonintoxicating 1
-noninvasive
-nonirritating
-nonjudgmental
-nonjudicial 1
-nonlegal
-nonlethal 1
-nonlinear
-nonliterary 1
-nonliving/2 1
-nonmagnetic
-nonmalignant 1
-nonmember/1 1
-nonmetal/1 1
-nonmetallic
-nonmigratory
-nonmilitant 1
-nonmilitary 1
-nonnarcotic/1 1
-nonnative/1 1
-nonnegotiable
-nonnuclear
-nonnumerical 1
-nonobjective
-nonobligatory 1
-nonobservance/2 1
-nonobservant 1
-nonoccupational
-nonoccurrence/2 1
-nonofficial 1
-nonoperational
-nonoperative
-nonparallel/1 1
-nonparametric
-nonpareil/1 1
-nonparticipant/1 1
-nonparticipating
-nonpartisan/1 1
-nonpaying
-nonpayment/1 1
-nonperformance/2 1
-nonperforming
-nonperishable 1
-nonperson/1 1
-nonphysical/8 1
-nonplus/431 1
-nonpoisonous 1
-nonpolitical 1
-nonpolluting
-nonporous
-nonpracticing
-nonprejudicial 1
-nonprescription
-nonproductive 1
-nonprofessional/1 1
-nonprofit/1 1
-nonprofitable 1
-nonproliferation/2 1
-nonpublic
-nonpunishable
-nonracial 1
-nonradioactive
-nonrandom 1
-nonreactive
-nonreciprocal/1 1
-nonreciprocating
-nonrecognition/2 1
-nonrecoverable
-nonrecurring
-nonredeemable
-nonrefillable
-nonrefundable
-nonreligious 1
-nonrenewable
-nonrepresentational
-nonresident/1 1
-nonresidential
-nonresidual/2 1
-nonresistance/2 1
-nonresistant 1
-nonrestrictive
-nonreturnable/1 1
-nonrhythmic 1
-nonrigid
-nonsalaried
-nonscheduled
-nonscientific 1
-nonscoring
-nonseasonal 1
-nonsectarian
-nonsecular
-nonsegregated
-nonsense/1 1
-nonsensical/8 1
-nonsensitive 1
-nonsexist
-nonsexual 1
-nonskid 1
-nonslip 1
-nonsmoker/1 1
-nonsmoking
-nonsocial 1
-nonspeaking
-nonspecialist/1 1
-nonspecializing
-nonspecific 1
-nonspiritual/1 1
-nonstaining
-nonstandard
-nonstarter/1 1
-nonstick 1
-nonstop 1
-nonstrategic
-nonstriking
-nonstructural 1
-nonsuccessive 1
-nonsupport/2 1
-nonsupporting
-nonsurgical 1
-nonsustaining
-nonsympathizer/2 1
-nontarnishable
-nontaxable 1
-nontechnical 1
-nontenured
-nontheatrical 1
-nonthinking 1
-nonthreatening 1
-nontoxic 1
-nontraditional 1
-nontransferable
-nontransparent 1
-nontrivial
-nontropical 1
-non 1
-nonuniform
-nonunion 1
-nonuser/1 1
-nonvenomous 1
-nonverbal 1
-nonviable 1
-nonviolence/2 1
-nonviolent/8 1
-nonvirulent 1
-nonvocal 1
-nonvocational 1
-nonvolatile
-nonvoter/1 1
-nonvoting
-nonwhite/1 1
-nonworking
-nonzero
-nonyielding
-noodle/28 1
-nook/1 1
-nookie 1
-nooky 1
-noon/18 1
-noonday/2 1
-noontide/2 1
-noontime/2 1
-noon 1
-noose/18 1
-Nootka/2 1
-nope 1
-nor
-Nora/3
-NORAD/3
-noradrenaline 1
-noradrenalin 1
-Norbert/3
-Norberto/3
-Nordic/1 1
-nor'easter
-Noreen/3
-Norfolk/2 1
-Noriega/3
-norm/62 1
-Norma
-normal/30 1
-normalcy/2 1
-normality/2 1
-normalizable
-normalization/1 1
-normalize/6 1
-normalizer/10 1
-Norman/1 1
-Normand/3
-Normandy/2 1
-Norman 1
-normative 1
-Norplant 1
-Norris
-Norse/2 1
-Norseman/2 1043
-Norsemen 1044
-Norse 1
-north/44 1
-North/1 1
-north/2 1
-Northampton
-northbound 1
-northeast/44 1
-Northeast/1 1
-northeast/2 1
-northeaster/1 1
-northeasterly
-northeastern
-northeastward/10 1
-norther/1 1
-northerlies
-northerly's
-northerly 1
-northern/44 1
-Northern/2 1
-northerner/1 1
-Northerner/2 1
-northernmost
-northern 1
-northmen
-Northrop/3
-Northrup/3
-North 1
-northward/10 1
-northwest/44 1
-Northwest/1 1
-northwest/2 1
-northwester/1 1
-northwesterly
-northwestern
-northwestward/10 1
-Norton/3
-Norw
-Norway/2 1
-Norwegian/1 1
-Norwich
-nos/205 1
-nose/28 1
-nosebag/10 1
-nosebleed/1 1
-nosecone/1 1
-nosedive/6 1
-nosedive's
-nosegay/1 1
-Nosferatu/3
-nosh/22 1
-nosher/1 1
-nosier 1045
-nosiest 1045
-nosing 1
-nostalgia/2 1
-nostalgic/39 1
-Nostradamus
-nostril/1 1
-nostrum/1 1
-nosy/50 1
-notability/15 1
-notable/82 1
-notarial 1
-notarization/2 1
-notarize/6 1
-notary/15 1
-notate/6 1
-notation/1 1
-notational
-notationally
-notch/22 1
-notching 1
-note/28 1
-notebook/1 1
-noted 1
-notelet/10 1
-notepad/10 1
-notepaper/2 1
-noteworthy/140 1
-nothing/1 1
-nothingness/3
-nothing 1
-notice/28 1
-noticeable/19 1
-noticeboard
-noticeboards
-notifiable
-notification/1 1
-notifier/1 1
-notify/31 1
-notion/1 1
-notional/8 1
-notoriety/2 1
-notorious/8 1
-no 1
-Nottingham
-not 1
-notwithstanding
-notwork/10 1
-Nouakchott/2 1
-nougat/1 1
-Noumea/3
-noun/1 1
-nounal
-nourish/7 1
-nourishing 1
-nourishment/2 1
-nous 1
-Nov/2 1
-Nova
-nova/57 1
-Novartis/3
-nova's 1046
-nova 1047
-novel/1 1
-novelette/1 1
-novelist/1 1
-novelistic 1
-novelization/1 1
-novelize/6 1
-novella/1 1
-novel 1
-novelty/15 1
-November/1 1
-novena/1 1
-novene
-Novgorod
-novice/1 1
-novitiate/1 1
-Novocain/1 1
-Novocaine
-Novokuznetsk
-Novosibirsk/2 1
-NOW
-now/2 1
-nowadays/2 1
-noway/10 1
-nowhere/2 1
-nowise 1
-now 1
-nowt 1
-noxious/83 1
-Noxzema/3
-Noyce/3
-Noyes/3
-nozzle/1 1
-NP
-Np/2 1
-NPR
-NR
-NRA
-NRC
-NS
-NSC
-NSF
-NT
-nth 1
-nu/1 1
-nuance/1 1
-nuanced 1
-nub/1 1
-nubbin/1 1
-nubby/34 1
-Nubia
-Nubian 1
-nubile 1
-nuclear 1
-nuclease 1
-nucleate/6 1
-nucleation/2 1
-nucleic
-nuclei 1048
-nucleoli 1049
-nucleolus/2 1050
-nucleon/1 1
-nucleotide/10 1
-nucleus/2 1051
-nude/41 1
-nudge/28 1
-nudism/2 1
-nudist/1 1
-nudity/2 1
-nugatory
-nugget/1 1
-nuisance/1 1
-nuke/28 1
-Nukualofa
-null/58 1
-nullification/2 1
-nullify/31 1
-nullity/2 1
-null 1
-numb/98 1
-number/23 1
-numberings
-numberless 1
-numberplate 1
-Numbers/2 1
-numbers/89 1
-numbing/8 1
-numbskull/1 1
-numerable
-numeracy/2 1
-numeral/1 1
-numerate/6 1
-numeration/1 1
-numerator/1 1
-numerical/8 1
-numeric 1
-numerological
-numerologist/1 1
-numerology/2 1
-numerous/8 1
-numinous 1
-numismatic/32 1
-numismatist/1 1
-numskull/1 1
-nun/1 1
-Nunavut/3
-nuncio/1 1
-Nunez/3
-Nunki/3
-nunnery/15 1
-nuptial/1 1
-Nuremberg
-Nureyev
-nurse/28 1
-nurseling/1 1
-nursemaid/18 1
-nurser/1 1
-nursery/15 1
-nurseryman/2 1052
-nurserymen 1053
-nursing/2 1
-nursling/1 1
-nurture/28 1
-nurturer/1 1
-nut/109 1
-nutation 1
-nutcase/10 1
-nutcracker/1 1
-nuthatch/4 1
-nuthouse/10 1
-nutmeat/1 1
-nutmeg/18 1
-nutpick/1 1
-NutraSweet/3
-nutria/1 1
-nutrient/1 1
-nutriment/1 1
-nutrition/2 1
-nutritional/8 1
-nutritionist/1 1
-nutritious/16 1
-nutritive 1
-nutshell/1 1
-nutter/10 1
-nutting 1
-nutty/49 1
-nuzzle/6 1
-nuzzler/1 1
-nuzzle's
-NV
-NW/2 1
-NWT
-NZ
-NY
-Nyasa/3
-nybble/43 1
-NYC
-Nyerere/3
-nyetwork/10 1
-nylon/130 1
-nymph/1 1
-nymphet/1 1
-nympho/10 1
-nympholepsy 1
-nymphomania/2 1
-nymphomaniac/1 1
-NyQuil/3
-NYSE
-o
-O/1 1
-oaf/1 1
-oafish/8 1
-oafishness/3
-Oahu/2 1
-oak/1 1
-oaken 1
-Oakland/2 1
-Oakley
-oak 1
-oakum/2 1
-oar/23 1
-oarlock/1 1
-oarsman/2 1054
-oarsmen 1055
-oarswoman/2 1056
-oarswomen 1057
-OAS/2 1
-oases 1058
-oasis/2 1059
-oat/130 1
-oatcake/1 1
-oaten 1
-Oates
-oath/1 1
-oatmeal/2 1
-Oaxaca/2 1
-ob
-OB
-Ob/2 1
-Obadiah
-Obama/3
-obbligato/1 1
-obduracy/2 1
-obdurate/8 1
-obdurateness/3
-obdurate 1
-obedience/2 1
-obedient/8 1
-obeisance/1 1
-obeisant 1
-obelisk/1 1
-Oberlin/3
-Oberon
-obese 1
-obesity/2 1
-obey/11 1
-obfuscate/6 1
-obfuscation/1 1
-obfuscatory
-obi/18 1
-obis 1
-obit/1 1
-obituary/15 1
-obj
-object/23 1
-objectification 1
-objectify/31 1
-objection/1 1
-objectionable/55 1
-objective/36 1
-objectivity/2 1
-objectless 1
-objector/1 1
-objurgate/6 1
-objurgation/1 1
-oblate 1
-oblation/1 1
-obligate/6 1
-obligation/1 1
-obligatory/211 1
-oblige/6 1
-obliged 1
-obliging/8 1
-oblique/432 1
-obliquity/2 1
-obliterate/6 1
-obliteration/2 1
-oblivion/2 1
-oblivious/16 1
-oblong/1 1
-obloquy/2 1
-obnoxious/16 1
-oboe/1 1
-oboist/1 1
-O'Brien
-obs
-obscene/45 1
-obscenity/15 1
-obscurantism/2 1
-obscurantist/1 1
-obscuration 1
-obscure/433 1
-obscurement 1
-obscurer 1
-obscurity/15 1
-obsequious/16 1
-obsequy/15 1
-observability 1
-observable/268 1
-observance/1 1
-observant/8 1
-observation/1 1
-observational
-observationally
-observatory/15 1
-observe/6 1
-observed 1
-observer/1 1
-observing 1
-obsess/7 1
-obsession/1 1
-obsessional/8 1
-obsessive/36 1
-obsidian/2 1
-obsolesce/6 1
-obsolescence/2 1
-obsolescent 1
-obsolete/6 1
-obstacle/1 1
-obstetric/32 1
-obstetrical 1
-obstetrician/1 1
-obstinacy/2 1
-obstinate/8 1
-obstreperous/16 1
-obstruct/11 1
-obstructed 1
-obstruction/1 1
-obstructionism/2 1
-obstructionist/1 1
-obstructive/16 1
-obtain/11 1
-obtainable
-obtainment/2 1
-obtrude/6 1
-obtruding 1
-obtrusion/2 1
-obtrusive/16 1
-obtuse/27 1
-obverse/1 1
-obviate/6 1
-obviation/2 1
-obvious/16 1
-ocarina/1 1
-O'Casey
-Occam
-occasion/23 1
-occasional/8 1
-occidental/1 1
-Occidental/1 1
-occidental 1
-Occident 1
-occipital 1
-occlude/6 1
-occlusion/1 1
-occlusive 1
-occult/18 1
-occultism/2 1
-occultist/1 1
-occult 1
-occupancy/15 1
-occupant/1 1
-occupation/1 1
-occupational/8 1
-occupier/1 1
-occupy/31 1
-occur/13 1
-occurrence/1 1
-ocean/1 1
-oceanfront/1 1
-oceangoing
-Oceania/2 1
-oceanic/2 1
-oceanographer/1 1
-oceanographic
-oceanography/2 1
-oceanology/2 1
-Oceanside
-Oceanus/2 1
-ocelot/1 1
-ocher/18 1
-Ochoa/3
-och 1
-ocker/10 1
-o'clock
-O'Connell
-O'Connor
-OCR
-Oct/2 1
-octagon/1 1
-octagonal 1
-octahedral
-octahedron 1
-octal 1
-octane/1 1
-octant 1
-octave/1 1
-Octavia
-Octavian/2 1
-Octavio/3
-octavo/1 1
-octet/1 1
-octette/1 1
-October/1 1
-octogenarian/1 1
-octopus/4 1
-ocular/1 1
-oculist/1 1
-OD/1 1
-odalisque/1 1
-odd/434 1
-oddball/1 1
-oddity/15 1
-oddment/1 1
-ode/1 1
-Odell/3
-Oder/2 1
-Odessa/2 1
-Odets
-Odin/2 1
-odious/16 1
-Odis/3
-odium/2 1
-Odom/3
-odometer/1 1
-O'Donnell
-odor/1 1
-odored
-odoriferous 1
-odorless 1
-odorous
-Odysseus/2 1
-odyssey/1 1
-Odyssey/2 1
-OE
-OED
-oedipal
-Oedipal
-Oedipus/2 1
-oenology/2 1
-oenophile/1 1
-o'er
-Oersted/3
-oeuvre/1 1
-of
-Ofelia/3
-off/414 1
-offal/2 1
-offbeat/1 1
-offcuts
-Offenbach
-offend/11 1
-offended 1
-offender/1 1
-offense/1 1
-offensive/36 1
-offer/23 1
-offering/1 1
-offertory/15 1
-offhanded/8 1
-offhandedness/3
-offhand 1
-office/1 1
-officeholder/1 1
-OfficeMax/3
-officer/18 1
-officership
-officerships
-official/30 1
-officialdom/2 1
-officialese 1
-officialism/2 1
-officialness
-officiant/1 1
-officiate/6 1
-officiator/1 1
-officious/16 1
-offing/1 1
-offish 1
-offline 1
-offload/11 1
-offprint/18 1
-offset/128 1
-offshoot/1 1
-offshore 1
-offside 1
-offspring/2 1
-offstage/10 1
-offtrack 1
-oft/166 1
-often/166 1
-oftentimes
-ofttimes
-Ogbomosho
-Ogden/3
-Ogilvy/3
-ogle/28 1
-ogler/1 1
-Oglethorpe
-ogling 1
-ogre/1 1
-ogreish 1
-ogres/9 1
-ogress/4 1
-ogrish
-OH
-oh/1 1
-O'Hara
-O'Higgins
-Ohio/2 1
-Ohioan/1 1
-ohm/1 1
-ohmic 1
-ohmmeter/1 1
-oho 1
-OHSA/3
-oik/10 1
-oil/23 1
-oilcan/10 1
-oilcloth/1 1
-oilfield/10 1
-oiling 1
-oilman 1060
-oilmen 1061
-oilseed 1
-oilskin/130 1
-oily/49 1
-oink/23 1
-ointment/1 1
-Oise/3
-oi 1062
-OJ
-Ojibwa/1 1
-Ojibway/1 1
-OK/1 1
-okapi/1 1
-okay/86 1
-Okayama
-okay 1
-Okeechobee
-O'Keeffe
-Okefenokee
-Okhotsk
-Okinawa/2 1
-Okinawan 1
-Okla
-Oklahoma/2 1
-Oklahoman 1
-okra/1 1
-Oktoberfest 1
-OK 1
-Ola/3
-Olaf/3
-Olajuwon/3
-Olav/3
-old/187 1063
-olde
-Oldenburg
-olden 1
-Oldfield/3
-oldie/1 1
-oldish 1
-Oldsmobile/3
-oldster/1 1
-Olduvai/3
-ole/1 1
-oleaginous 1
-oleander/1 1
-olefin 1
-Olen/3
-Olenek/3
-oleo/2 1
-oleomargarin/2 1
-oleomargarine/2 1
-olfactory/15 1
-Olga/3
-oligarch/1 1
-oligarchic
-oligarchical 1
-oligarchy/15 1
-Oligocene/2 1
-oligopolies
-oligopoly/3
-Olin/3
-Olive/3
-olive/1 1
-Oliver
-olive 1
-Olivetti/3
-Olivia/3
-Olivier
-olivine 1
-Ollie/3
-Olmec 1
-Olmsted/3
-Olsen/3
-Olson/3
-Olympia/1 1
-Olympiad/1 1
-Olympian/1 1
-Olympic/10 1
-Olympus/2 1
-om/1 1
-Omaha/1 1
-Oman/2 1
-Omani/1 1
-Omar/3
-Omayyad 1
-OMB/2 1
-ombudsman/2 1064
-ombudsmen 1065
-Omdurman/2 1
-omega/1 1
-omelet/1 1
-omen/18 1
-omicron/1 1
-ominous/16 1
-omission/1 1
-omit/12 1
-omnibus/4 1
-omnidirectional
-omnipotence/2 1
-Omnipotent
-omnipotent 1
-omnipresence/2 1
-omnipresent
-omniscience/2 1
-omniscient 1
-omnivore/1 1
-omnivorous/16 1
-Omsk/2 1
-ON
-on/435 1
-Onassis
-once/2 1
-oncogene/1 1
-oncogenes 1
-oncologist/1 1
-oncology/2 1
-oncoming 1
-one/20 1
-Oneal/3
-Onega
-Onegin/3
-Oneida/1 1
-O'Neil
-O'Neill
-onerous/16 1
-oneself 1
-onetime
-ongoing 1
-Onion/3
-onion/18 1
-onionskin/2 1
-online 1
-onlooker/1 1
-onlooking
-Ono/3
-onomatopoeia/2 1
-onomatopoeic
-onomatopoetic 1
-Onondaga/1 1
-onrush/4 1
-onrushing
-Onsager/3
-onscreen
-onset/18 1
-onshore 1
-onside 1
-onslaught/1 1
-onstage 1
-Ont
-Ontarian 1
-Ontario/2 1
-onto
-ontogeny/2 1
-ontological
-ontologically
-ontology/2 1
-on 1066
-onus/4 1
-onward/10 1
-onyx/4 1
-oodles/2 1
-ooh/11 1
-oolitic
-oomph 1
-oops 1
-Oort/3
-ooze/28 1
-oozy/34 1
-op/1 1
-opacity/2 1
-Opal/3
-opal/1 1
-opalescence/2 1
-opalescent
-opaque/436 1
-ope/6 1
-OPEC/2 1
-Opel/3
-open/52 1
-opencast
-opener/1 1
-openhanded/33 1
-openhearted
-opening/1 1
-openwork/2 1
-opera/1 1
-operable 1
-operand/10 1
-opera's 1067
-opera 1068
-operate/6 1
-operatically
-operatic 1
-operation/1 1
-operational/8 1
-operative/1 1
-operator/1 1
-operetta/1 1
-ope 1
-Ophelia/3
-Ophiuchus
-ophthalmic
-ophthalmics
-ophthalmologist/1 1
-ophthalmology/2 1
-opiate/18 1
-opine/6 1
-opinion/1 1
-opinionated 1
-opioid 1
-opium/2 1
-opossum/1 1
-opp
-Oppenheimer/2 1
-opponent/1 1
-opportune/8 1
-opportunism/2 1
-opportunist/1 1
-opportunistic/39 1
-opportunity/15 1
-oppose/6 1
-opposing 1
-opposite/30 1
-opposition/1 1
-oppositional
-oppress/7 1
-oppression/1 1
-oppressive/16 1
-oppressor/1 1
-opprobrious/8 1
-opprobrium/2 1
-Oprah/3
-opt/11 1
-optic/130 1
-optical/8 1
-optician/1 1
-optic 1
-optimal/8 1
-optimality 1
-optima 1069
-optimism/1 1
-optimist/1 1
-optimistic/39 1
-optimization/1 1
-optimize/6 1
-optimizer/10 1
-optimum/1 1070
-option/23 1
-optional/8 1
-optionality 1
-optional 1
-optoelectronic 1
-optometrist/1 1
-optometry/2 1
-opulence/2 1
-opulent/8 1
-opus/4 1071
-OR
-Ora/3
-Oracle/3
-oracle/18 1
-oracular 1
-oral/30 1
-Oran/2 1
-Orange
-orange/437 1
-orangeade/1 1
-orangery/15 1
-orangutan/1 1
-orangutang/1 1
-Oranjestad/3
-orate/6 1
-oration/1 1
-orator/1 1
-oratorical/8 1
-oratorio/1 1
-oratory/15 1
-orb/18 1
-orbicular 1
-Orbison/3
-orbit/23 1
-orbital/1 1
-orbiter/1 1
-orchard/1 1
-orchestra/1 1
-orchestral 1
-orchestrate/6 1
-orchestration/1 1
-orchestrator 1
-orchid/1 1
-ordain/11 1
-ordainment/2 1
-ordeal/1 1
-order/23 1
-ordering/10 1
-orderless 1
-orderlies
-orderly/140 1
-orderly's
-ordinal/1 1
-ordinance/1 1
-ordinands
-ordinary/221 1
-ordinate/18 1
-ordination/1 1
-ordnance/2 1
-Ordovician/2 1
-ordure/2 1
-Ore
-ore/1 1
-Oreg
-oregano/2 1
-Oregon/2 1
-Oregonian/1 1
-Oreo 1
-Orestes
-org
-organ/1 1
-organdie/2 1
-organdy/2 1
-organelle/1 1
-organic/51 1
-organism/1 1
-organismic 1
-organist/1 1
-organizable
-organization/1 1
-organizational/8 1
-organize/6 1
-organizer/1 1
-organza/2 1
-orgasm/18 1
-orgasmic
-orgiastic
-orgy/15 1
-oriel/1 1
-orient/23 1
-orientable
-oriental/1 1
-Oriental/1 1
-orientalist/10 1
-oriental 1
-orientate/6 1
-orientation/1 1
-orienteering 1
-orient 1
-Orient 1
-orifice/1 1
-orig
-origami/2 1
-origin/1 1
-original/30 1
-originality/2 1
-originate/6 1
-origination/2 1
-originator/1 1
-Orin/3
-Orinoco/2 1
-oriole/1 1
-Orion/2 1
-orison/1 1
-Oriya/2 1
-Orizaba/2 1
-Orkney/2 1
-Orlando/2 1
-Orleans/2 1
-Orlon/1 1
-Orly/2 1
-ormolu/2 1
-ornament/23 1
-ornamental 1
-ornamentation/2 1
-ornate/16 1
-ornery/49 1
-ornithological 1
-ornithologist/1 1
-ornithology/2 1
-orotund
-orotundity/15 1
-O'Rourke
-orphan/23 1
-orphanage/1 1
-orphan 1
-Orpheus/2 1
-Orphic 1
-Orr/3
-orris/4 1
-Ortega/3
-orthodontia/2 1
-orthodontic/32 1
-orthodontist/1 1
-orthodox 1
-Orthodox 1
-orthodoxy/15 1
-orthogonal/8 1
-orthogonality 1
-orthographic/39 1
-orthographical
-orthography/15 1
-orthonormal
-orthopedic/32 1
-orthopedist/1 1
-orthorhombic
-Ortiz/3
-or 1
-Orval/3
-Orville/3
-Orwell
-Orwellian
-orzo/2 1
-OS/4 1
-Osage/1 1
-Osaka/2 1
-Osbert/3
-Osborn/3
-Osborne
-Oscar/1 1
-Osceola
-oscillate/6 1
-oscillation/1 1
-oscillator/1 1
-oscillatory
-oscilloscope/1 1
-osculate/6 1
-osculation/1 1
-Osgood/3
-OSHA/2 1
-Oshawa
-Oshkosh/3
-osier/1 1
-Osiris/2 1
-Oslo/2 1
-Osman/3
-osmium/2 1
-osmosis/2 1
-osmotic 1
-osprey/1 1
-ossification/2 1
-ossify/31 1
-ostensible/19 1
-ostentation/2 1
-ostentatious/8 1
-osteoarthritis/2 1
-osteopath/1 1
-osteopathic 1
-osteopathy/2 1
-osteoporosis/2 1
-ostler/10 1
-ostracism/2 1
-ostracize/6 1
-ostrich/4 1
-Ostrogoth/2 1
-Ostwald
-Osvaldo/3
-Oswald
-OT
-OTB
-OTC
-Othello/3
-other/438 1
-otherwise
-otherworldly 1
-otiose 1
-Otis/2 1
-OTOH
-O'Toole
-Ottawa/1 1
-otter/18 1
-Otto
-ottoman/1 1
-Ottoman 1
-Ouagadougou
-oubliette/1 1
-ouch 1
-oughtn't
-ought 1
-Ouija/1 1
-ounce/1 1
-our/10 1
-ourselves
-our 1
-oust/11 1
-ouster/1 1
-out/78 1
-outage/1 1
-outargue/6 1
-outback/1 1
-outbalance/6 1
-outbid/439 1
-outboard/1 1
-outboast/11 1
-outbound 1
-outbox/205 1
-outbox's
-outbreak/18 1
-outbuilding/1 1
-outburst/18 1
-outcast/18 1
-outclass/7 1
-outcome/1 1
-outcrop/47 1
-outcropping/1 1
-outcry/167 1
-outdated
-outdistance/6 1
-outdo/413 1
-outdoor/32 1
-outdoorsy 1
-outdoor 1
-outdraw/301 1072
-outdrew 1073
-outermost
-outer 1
-outerwear/2 1
-outface/6 1
-outfall/10 1
-outfield/1 1
-outfielder/1 1
-outfight/121 1074
-outfit/109 1
-outfitter/1 1
-outflank/11 1
-outflow/18 1
-outfought 1075
-outfox/7 1
-outgo/182 1
-outgoing/10 1
-outgrew 1076
-outgrow/301 1077
-outgrowth/1 1
-outguess/7 1
-outgun/192 1
-outhit/88 1
-outhouse/1 1
-outing/1 1
-outlandish/16 1
-outlast/11 1
-outlaw/23 1
-outlawry 1
-outlaw 1
-outlay/353 1
-outlet/1 1
-outlier/10 1
-outline/28 1
-outlive/6 1
-outlook/18 1
-outlying 1078
-outmaneuver/11 1
-outmatch/7 1
-outmoded
-outnumber/11 1
-outpace/6 1
-outpatient/1 1
-outperform/11 1
-outplacement/2 1
-outplace 1
-outplay/11 1
-outpoint/11 1
-outpost/1 1
-outpouring/1 1
-outproduce/6 1
-output/109 1
-outrace/6 1
-outrage/28 1
-outrageous/8 1
-outrank/11 1
-outran 1079
-outreach/22 1
-outre 1
-outrider/1 1
-outrigger/1 1
-outright 1
-outrun/119 1080
-outscore/6 1
-outsell/121 1081
-outset/18 1
-outshine/14 1082
-outshone 1083
-outshout/11 1
-outside/48 1
-outsider/1 1
-outsize/1 1
-outsized
-outsize 1
-outskirt/1 1
-outsmart/11 1
-outsold 1084
-outsource/6 1
-outsourcing/2 1
-outspend/382 1
-outspoken/16 1085
-outspread/141 1
-outstanding/8 1
-outstation/1 1
-outstay/11 1
-outstretch/7 1
-outstrip/105 1
-outta
-outtake/1 1
-outvote/6 1
-outward/191 1
-outwear/121 1086
-outweigh/11 1
-outwit/12 1
-outwith
-outwore 1087
-outwork/23 1
-outworker/10 1
-outworn 1087
-ouzo/1 1
-oval/1 1
-ovarian
-ovary/15 1
-ova 1088
-ovate 1
-ovation/1 1
-oven/1 1
-ovenbird/1 1
-ovenproof
-ovenware 1
-over/164 1
-overabundance/2 1
-overabundant 1
-overachieve/6 1
-overachiever/1 1
-overact/11 1
-overactive
-overage/1 1
-overaggressive 1
-overall/130 1
-overallocation
-overambitious 1
-overanxious 1
-overarching
-overarm/11 1
-overate 1089
-overattentive 1
-overawe/6 1
-overbalance/28 1
-overbear/121 1090
-overbearing/8 1
-overbid/440 1
-overbite/1 1
-overblown
-overboard
-overbold
-overbook/11 1
-overbore 1091
-overborne 1091
-overbought 1092
-overbuild/382 1
-overburden/5 1
-overbuy/121 1093
-overcame 1094
-overcapacity/2 1
-overcapitalize/6 1
-overcareful 1
-overcast/86 1
-overcasting 1
-overcautious 1
-overcharge/28 1
-overclock
-overclocked
-overclocking
-overclocks
-overcloud/11 1
-overcoat/18 1
-overcome/14 1095
-overcommitment/10 1
-overcompensate/6 1
-overcompensation/2 1
-overcomplexity
-overcomplicated
-overconfidence/2 1
-overconfident 1
-overconscientious 1
-overcook/11 1
-overcritical 1
-overcrowd/11 1
-overcrowding/2 1
-overdecorate/6 1
-overdependent
-overdetermined
-overdevelop/11 1
-overdo/413 1
-overdose/28 1
-overdraft/1 1
-overdraw/301 1096
-overdress/22 1
-overdrew 1097
-overdrive/18 1
-overdub/136 1
-overdue
-overeager 1
-overeat/116 1098
-overemotional 1
-overemphasis/2 1
-overemphasize/6 1
-overenthusiastic 1
-overestimate/28 1
-overestimation/2 1
-overexcite/6 1
-overexercise/6 1
-overexert/11 1
-overexertion/2 1
-overexpose/6 1
-overexposure/2 1
-overextend/11 1
-overfed 1099
-overfeed/121 1100
-overfill/11 1
-overfishing
-overflight/1 1
-overflow/23 1
-overflowing 1
-overfly/441 1
-overfond 1
-overfull
-overgeneralize/6 1
-overgenerous 1
-overgraze/6 1
-overgrew 1101
-overground
-overgrow/301 1102
-overgrowth/2 1
-overhand/62 1
-overhang/86 1103
-overhasty 1
-overhaul/23 1
-overhead/1 1
-overhear/46 1
-overheat/5 1
-overhung 1104
-overincredulous
-overindulge/6 1
-overindulgence/2 1
-overindulgent 1
-overinflated
-overjoy/11 1
-overkill/2 1
-overladen
-overlain 1105
-overland 1
-overlap/47 1
-overlarge
-overlay/353 1
-overlaying 1
-overlay 1105
-overleaf
-overlie/58 1106
-overload/23 1
-overlong
-overlook/23 1
-overlord/18 1
-overlying 1105
-overmanned
-overmanning
-overmaster/11 1
-overmatching
-overmodest 1
-overmuch/89 1
-overnice
-overnight/18 1
-overoptimism/2 1
-overoptimistic 1
-overparticular 1
-overpass/40 1
-overpay/312 1
-overpayment 1
-overplay/11 1
-overpopulate/6 1
-overpopulation/2 1
-overpopulous 1
-overpower/11 1
-overpowering/8 1
-overpraise/43 1
-overprecise 1
-overpressure 1
-overprice/6 1
-overprint/23 1
-overproduce/6 1
-overproduction/2 1
-overprotect/11 1
-overprotective
-overqualified
-overran 1107
-overrate/6 1
-overreach/7 1
-overreact/11 1
-overreaction/1 1
-overrefined
-overrepresented
-override/366 1108
-overripe/2 1
-overrode 1109
-overrule/6 1
-overrun/442 1110
-oversampled
-oversampling
-oversaw 1111
-oversea/10 1
-oversee/301 1112
-overseer/1 1
-oversell/121 1113
-oversensitive/33 1
-oversensitivity 1
-oversexed
-overshadow/11 1
-overshoe/1 1
-overshoot/141 1114
-overshot 1115
-oversight/1 1
-oversimple 1
-oversimplification/1 1
-oversimplify/31 1
-oversize/214 1
-oversleep/121 1116
-overslept 1117
-oversold 1118
-overspecialization/2 1
-overspecialize/6 1
-overspend/382 1
-overspill/86 1
-overspread/121 1
-overstaffed
-overstate/6 1
-overstatement/1 1
-overstay/11 1
-overstep/105 1
-overstimulate/6 1
-overstock/5 1
-overstress/195 1
-overstretch/7 1
-overstrict
-overstrung
-overstuffed
-oversubscribe/6 1
-oversubtle 1
-oversupply/31 1
-oversuspicious 1
-overt/8 1
-overtake/76 1119
-overtaker
-overtakers
-overtax/7 1
-overthrew 1120
-overthrow/144 1121
-overtightened
-overtime/18 1
-overtire/6 1
-overtness
-overtone/1 1
-overtook 1122
-overture/18 1
-overturn/5 1
-overuse/28 1
-overvaluation/10 1
-overvalue/6 1
-overview/1 1
-overweening/8 1
-overweight/2 1
-overwhelm/11 1
-overwhelming/8 1
-overwinter/11 1
-overwork/23 1123
-overwrite/317 1124
-overwrote 1125
-overwrought 1126
-overzealous 1
-Ovid
-oviduct/1 1
-oviparous 1
-ovoid/1 1
-ovular
-ovulate/6 1
-ovulation/2 1
-ovule/1 1
-ovum/2 1127
-ow
-owe/6 1
-Owen/10 1
-owl/18 1
-owlet/1 1
-owlish/8 1
-own/233 1
-owner/1 1
-ownership/1 1
-ox/443 1
-oxalate 1
-oxalic
-oxblood/2 1
-oxbow/1 1
-oxcart/1 1
-oxen 1
-oxford/1 1
-Oxford/1 1
-oxidant/1 1
-oxidation/2 1
-oxide/1 1
-oxidization/2 1
-oxidize/6 1
-oxidizer/1 1
-Oxnard
-Oxonian/2 1
-oxtail/10 1
-Oxus
-oxyacetylene/2 1
-Oxycontin/3
-oxygen/2 1
-oxygenate/6 1
-oxygenation/2 1
-oxymora 1128
-oxymoron/2 1129
-oyster/18 1
-oz
-Oz
-Ozark/3
-Ozarks/2 1
-ozone/2 1
-Ozymandias/3
-Ozzie/2 1
-p
-P/2 1
-pa/1 1
-Pa/2 1
-PA/2 1
-Paar/3
-Pablo/3
-pablum/2 1
-Pablum/2 1
-Pabst/3
-pabulum/2 1
-PAC/2 1
-Pace/3
-pace/28 1
-pacemaker/1 1
-pacemen
-pacer/1 1
-pacesetter/1 1
-pacey 1130
-Pacheco/3
-pachyderm/1 1
-pachysandra/1 1
-pacier 1131
-paciest 1131
-pacific
-Pacific/2 1
-pacifically
-pacification/2 1
-pacifier/1 1
-pacifism/2 1
-pacifist/1 1
-pacifistic 1
-pacify/31 1
-Pacino/3
-pack/23 1
-packable
-package/139 1
-packager/1 1
-packaging/2 1
-Packard/3
-packer/1 1
-packet/18 1
-packhorse 1
-packing/2 1
-packinghouse/1 1
-packsaddle/1 1
-pact/1 1
-pacy/34 1
-pad/113 1
-Padang
-padding/2 1
-paddle/28 1
-paddler/1 1
-paddling 1
-paddock/23 1
-paddy/15 1
-Paderewski
-Padilla/3
-padlock/23 1
-padre/1 1
-paean/1 1
-paederast/10 1
-paediatricians
-paediatrician's
-paediatrics
-paediatrics's
-paella/1 1
-paeony 1
-pagan/1 1
-Paganini
-paganism/2 1
-pagan 1
-Page
-page/28 1
-pageant/1 1
-pageantry/2 1
-pageboy/1 1
-pageful 1
-pager/1 1
-paginate/6 1
-pagination/2 1
-paging 1
-Paglia/3
-pagoda/1 1
-Pahlavi
-pah 1
-Paige/3
-pail/1 1
-pailful/1 1
-pain/23 1
-Paine
-painful/85 1
-painkiller/1 1
-painkilling
-painless/8 1
-painlessness/3
-painless 1
-painstaking/37 1
-paint/23 1
-paintball
-paintbox/4 1
-paintbrush/4 1
-painter/1 1
-painterly 1
-painting/1 1
-paintwork 1
-pair/23 1
-pairing/10 1
-pairwise
-paisley/1 1
-Paiute/1 1
-pajama/32 1
-Pakistan/2 1
-Pakistani/1 1
-pal/213 1
-palace/1 1
-paladin/1 1
-palaeolithic
-palaeontologist/10 1
-palaeontology 1
-palanquin/1 1
-palatable 1
-palatal/1 1
-palatalization/2 1
-palatalize/6 1
-palate/1 1
-palatial/8 1
-palatinate/1 1
-palatine/1 1
-Palau
-palaver/23 1
-pale/107 1
-paleface/1 1
-Palembang
-Paleocene/2 1
-Paleogene
-paleographer/1 1
-paleographic
-paleography/2 1
-paleolithic
-Paleolithic
-paleontological
-paleontologist/1 1
-paleontology/2 1
-Paleozoic/2 1
-Palermo/2 1
-Palestine/2 1
-Palestinian/1 1
-Palestrina
-palette/1 1
-Paley
-palfrey/1 1
-Palikir/3
-palimony/2 1
-palimpsest/1 1
-palindrome/1 1
-palindromic
-paling/1 1
-palisade/18 1
-Palisades/3
-palish 1
-pall/23 1
-Palladio
-palladium/2 1
-pallbearer/1 1
-pallet/18 1
-palliate/6 1
-palliation/2 1
-palliative/1 1
-pallid/16 1
-palling 1
-pallor/2 1
-palm/23 1
-palmate 1
-Palmer
-Palmerston
-palmetto/1 1
-palmist/1 1
-palmistry/2 1
-Palmolive/3
-palmtop/1 1
-palmy/34 1
-Palmyra/3
-Palomar/3
-palomino/1 1
-palpable/19 1
-palpate/6 1
-palpation/2 1
-palpitate/6 1
-palpitating 1
-palpitation/1 1
-palsy/56 1
-paltry/49 1
-pal 1
-paludal
-pally 1
-Pam/3
-Pamela/3
-Pamirs
-pampas
-pampas's
-pamper/11 1
-pampered 1
-Pampers
-pamphlet/18 1
-pamphleteer/18 1
-pan/1 1
-Pan/2 1
-pan/192 1
-panacea/1 1
-panache/2 1
-panama/1 1
-Panama/1 1
-Panamanian/1 1
-Panasonic/3
-panatella/10 1
-pancake/28 1
-panchromatic
-pancreas/4 1
-pancreatic
-panda/1 1
-pandemic/1 1
-pandemonium/2 1
-pander/23 1
-panderer/1 1
-Pandora/2 1
-pane/1 1
-paned
-panegyric/1 1
-panel/23 1
-paneling/1 1
-panelist/1 1
-pang/18 1
-Pangaea/2 1
-pangolin 1
-panhandle/28 1
-panhandler/1 1
-panic/64 1
-panicking 1
-panicky/34 1
-panier/1 1
-panjandrum 1
-Pankhurst
-Panmunjom/3
-pannier/1 1
-panning 1
-panoplies
-panoply/3
-panorama/1 1
-panoramic 1
-panpipes
-panpipes's
-Pansy/3
-pansy/15 1
-pant/23 1
-Pantagruel
-Pantaloon/2 1
-pantaloons
-pantaloons's
-pantechnicon/10 1
-pantheism/2 1
-pantheist/1 1
-pantheistic
-pantheist 1
-pantheon/1 1
-Pantheon 1
-panther/1 1
-pantie/1 1
-pantiled
-pantiles
-panting 1
-panto/10 1
-pantograph/10 1
-pantomime/28 1
-pantomimic
-pantomimist/1 1
-pantry/15 1
-pantsuit/1 1
-panty/15 1
-pantyhose/2 1
-pantyliner/2 1
-pantywaist/1 1
-Panza/3
-panzer 1
-pap/18 1
-papa/1 1
-papacy/15 1
-papal 1
-paparazzo/444 1
-papaw/1 1
-papaya/1 1
-paper/78 1
-paperback/18 1
-paperbark
-paperbarks
-paperboard/2 1
-paperboy/1 1
-paperclip/10 1
-paperer/1 1
-papergirl/1 1
-paperhanger/1 1
-paperhanging/2 1
-papering 1
-paperless 1
-paperweight/1 1
-paperwork/2 1
-papery 1
-papilla/53 1
-papillary
-papilla's 1132
-papilla 1133
-papist/1 1
-papoose/1 1
-pappy/15 1
-paprika/2 1
-papyri 1134
-papyrus/2 1135
-par/445 1
-para/1 1
-parable/18 1
-parabola/1 1
-parabolic
-paraboloid/10 1
-Paracelsus
-paracetamol
-paracetamols
-parachute/28 1
-parachutist/1 1
-Paraclete
-parade/28 1
-parader/1 1
-paradigm/1 1
-paradigmatic
-paradisaical
-Paradise
-paradise/1 1
-paradox/4 1
-paradoxical/8 1
-paraffin/2 1
-paragliding
-paragon/18 1
-paragraph/23 1
-Paraguay/2 1
-Paraguayan/1 1
-parakeet/1 1
-paralegal/1 1
-paralinguistic 1
-parallax/4 1
-parallel/23 1
-parallelepiped 1
-parallelism/1 1
-parallelogram/1 1
-parallel 1
-paralysis/2 1
-paralytic/1 1
-paralytically
-paralyze/6 1
-paralyzingly
-paramagnetic
-paramagnetism 1
-Paramaribo/2 1
-paramecia 1136
-paramecium/2 1137
-paramedic/1 1
-paramedical/1 1
-parameter/1 1
-parametric
-parametrically
-parametrization 1
-parametrize/122 1
-paramilitary/15 1
-Paramount/3
-paramountcy 1
-paramount 1
-paramour/1 1
-Parana/2 1
-paranoia/2 1
-paranoiac/1 1
-paranoid/1 1
-paranormal 1
-parapet/1 1
-paraphernalia/2 1
-paraphrase/28 1
-paraphrases 1138
-paraplegia/2 1
-paraplegic/1 1
-paraprofessional/1 1
-parapsychologist/1 1
-parapsychology/2 1
-paraquat/2 1
-parascending
-parasite/1 1
-parasitic
-parasitical/8 1
-parasitism/2 1
-parasitologist 1
-parasitology 1
-parasol/1 1
-parasympathetic/10 1
-parathion/2 1
-parathyroid/1 1
-paratroop/32 1
-paratrooper/1 1
-paratyphoid/2 1
-parboil/11 1
-PARC/10 1
-parcel/23 1
-parch/7 1
-parched 1
-Parcheesi/2 1
-parchment/1 1
-pardner/10 1
-pardon/23 1
-pardonable/19 1
-pardoner/1 1
-pardoning 1
-pare/6 1
-paregoric/2 1
-parent/23 1
-parentage/2 1
-parental 1
-parenteral 1
-parentheses 1139
-parenthesis/2 1140
-parenthesize/6 1
-parenthetic
-parenthetical/8 1
-parenthood/2 1
-parenting/2 1
-parer/1 1
-pares/89 1
-pareses 1141
-paresis/2 1142
-pares 1143
-Pareto
-parfait/1 1
-pariah/1 1
-parietal 1
-parimutuel/1 1
-paring/1 1
-Paris/2 1
-parish/4 1
-parishioner/1 1
-Parisian/1 1
-parity/15 1
-Park
-park/23 1
-parka/1 1
-Parker
-parking/2 1
-Parkinson/2 1
-parkland 1
-Parkman
-Parks
-parkway/1 1
-parky 1
-parlance/2 1
-parlay/23 1
-parley/23 1
-parliament/1 1
-parliamentarian/1 1
-parliamentary 1
-Parliament 1
-parlor/1 1
-parlormaid 1
-parlous 1
-Parmesan/1 1
-parmigiana
-parmigiano
-Parnassus/4 1
-Parnell
-parochial/8 1
-parochialism/2 1
-parochiality
-parodist/1 1
-parody/56 1
-parole/28 1
-parolee/1 1
-paroxysm/1 1
-paroxysmal 1
-parquet/23 1
-parquetry/2 1
-Parr
-parrakeet/1 1
-parricidal
-parricide/1 1
-Parrish
-parrot/23 1
-parry/56 1
-pars/7 1
-parse/6 1
-parsec/1 1
-Parsee/1 1
-parser/10 1
-Parsi/1 1
-Parsifal/3
-parsimonious/8 1
-parsimony/2 1
-parsing/10 1
-parsley/2 1
-parsnip/1 1
-parson/1 1
-parsonage/1 1
-Parsons
-part/210 1
-partake/76 1144
-partaker/1 1
-partaking 1
-parterre/1 1
-parthenogenesis/2 1
-Parthenon/2 1
-Parthia/2 1
-partial/30 1
-partiality/2 1
-participant/1 1
-participate/6 1
-participation/2 1
-participative
-participator/1 1
-participatory
-participial/2 1
-participle/1 1
-particle/1 1
-particleboard/2 1
-particular/30 1
-particularism 1
-particularity/15 1
-particularization/2 1
-particularize/6 1
-particulate/1 1
-parting/1 1
-partisan/1 1
-partisanship/2 1
-partition/23 1
-partitive/1 1
-partizan/1 1
-partner/23 1
-partnership/1 1
-partook 1145
-partridge/1 1
-parturition/2 1
-partway 1
-party/56 1
-parvenu/1 1
-pas/79 1
-Pasadena/2 1
-PASCAL
-pascal/1 1
-Pascal/1 1
-paschal 1
-pasha/1 1
-Pasquale/3
-pass/147 1
-passable/19 1
-passage/18 1
-passageway/1 1
-passbook/1 1
-passe/446 1
-passel/1 1
-passenger/1 1
-passer/1 1
-passerby/2 1146
-passersby 1147
-passim 1
-passing/37 1
-passion/1 1
-Passion/1 1
-passion/58 1
-passionate/83 1
-passionflower/1 1
-passionless 1
-passivated
-passive/36 1
-passivisation
-passivise
-passivised
-passivises
-passivising
-passivity/2 1
-passivization
-passivize
-passivized
-passivizes
-passivizing
-passkey/1 1
-passmark
-Passover/1 1
-passover 1
-passport/1 1
-password/1 1
-past/23 1
-pasta/1 1
-paste/28 1
-pasteboard/2 1
-pastel/1 1
-pastern/1 1
-Pasternak
-pastes 1148
-Pasteur/2 1
-pasteurization/2 1
-pasteurize/6 1
-pasteurizer/1 1
-pastiche/1 1
-pastie/447 1
-pastille/1 1
-pastime/1 1
-pasting 1
-pastis 1149
-pastor/18 1
-pastoral/1 1
-pastoralism 1
-pastoral 1
-pastorate/1 1
-pastrami/2 1
-pastry/15 1
-past 1
-pasturage/2 1
-pasture/28 1
-pastureland/2 1
-pasty/286 1
-Pat
-pat/403 1
-Patagonia/2 1
-Patagonian 1
-patch/22 1
-patchable
-patching 1
-patchouli 1
-patchwork/1 1
-patchy/50 1
-Pate/3
-pate/1 1
-Patel/3
-patella/57 1
-patent/210 1
-patentable 1
-pater/10 1
-paterfamilias/4 1150
-paternal/8 1
-paternalism/2 1
-paternalist/10 1
-paternalistic
-paternity/2 1
-paternoster/1 1
-Paterson
-path/1 1
-pathetic/39 1
-pathfinder/1 1
-pathless 1
-pathogen/1 1
-pathogenesis 1
-pathogenic 1
-pathological/8 1
-pathologist/1 1
-pathology/15 1
-pathos/2 1
-pathway/1 1
-patience/2 1
-patient/183 1
-patina/1 1
-patine 1
-patio/1 1
-patisserie/10 1
-Patna
-patois/2 1
-patresfamilias 1151
-patriarch/1 1
-patriarchal 1
-patriarchate/1 1
-patriarchy/15 1
-Patrica/3
-Patrice/3
-Patricia/3
-patrician/1 1
-patricide/1 1
-Patrick/2 1
-patrimonial 1
-patrimony/15 1
-patriot/1 1
-patriotic/39 1
-patriotism/2 1
-patrol/213 1
-patrolling 1
-patrolman/2 1152
-patrolmen 1153
-patrolwoman/2 1154
-patrolwomen 1155
-patron/1 1
-patronage/18 1
-patroness/3
-patronesses
-patronization 1
-patronize/6 1
-patronizer/1 1
-patronizing/8 1
-patronymic/51 1
-patroon/1 1
-Patsy/3
-patsy/15 1
-patten/10 1
-patter/23 1
-pattern/23 1
-patterning 1
-patternless 1
-Patterson/3
-Patti
-Patton
-Patty/3
-patty/15 1
-paucity/2 1
-Paul/2 1
-Paula/3
-Paulette/3
-Pauli
-Pauline
-Pauling
-paunch/40 1
-paunchy/34 1
-pauper/18 1
-pauperism/2 1
-pauperize/6 1
-pause/28 1
-pausing 1
-Pavarotti
-pave/6 1
-pavement/18 1
-paves 1156
-pavilion/18 1
-paving/1 1
-Pavlov/2 1
-pavlova/10 1
-Pavlova 1
-Pavlovian
-paw/23 1
-pawl/1 1
-pawn/23 1
-pawnbroker/1 1
-pawnbroking/2 1
-Pawnee/1 1
-pawnshop/1 1
-pawpaw/1 1
-pay/448 1
-payable 1
-payback/1 1
-paycheck/1 1
-payday/1 1
-payee/1 1
-payer/1 1
-paying 1
-payload/1 1
-paymaster/1 1
-payment/1 1
-Payne/3
-payoff/1 1
-payola/2 1
-payout/1 1
-Paypal/3
-PayPal/3
-payphone/10 1
-payroll/1 1
-payslip/1 1
-payware/10 1
-Pb/2 1
-PBS/2 1
-PBX
-PC/1 1
-PCB
-PCP/2 1
-pct 1
-pd
-PD
-Pd/2 1
-PDQ
-PDT
-PE
-pea/1 1
-Peabody/3
-Peace/3
-peace/18 1
-peaceable/19 1
-peaceful/85 1
-peacekeeper/1 1
-peacekeeping/2 1
-peacemaker/1 1
-peacemaking/2 1
-peacetime/2 1
-peach/40 1
-peachy/34 1
-peacock/18 1
-peafowl/1 1
-peahen/1 1
-peak/23 1
-peaky/222 1
-peal/23 1
-Peale
-pealing 1
-peanut/1 1
-pear/1 1
-Pearl/3
-pearl/23 1
-Pearlie/3
-pearling 1
-pearl 1
-pearly/34 1
-Pearson/3
-peartrees
-Peary
-peasant/1 1
-peasantry/2 1
-peasant 1
-peashooter/1 1
-pea's 1157
-pea 1158
-peas 1
-peat/2 1
-pea 1
-peaty/34 1
-pebble/28 1
-pebbling 1
-pebbly/34 1
-pecan/1 1
-peccadillo/4 1
-peccary/15 1
-Pechora
-Peck/3
-peck/23 1
-pecker/10 1
-pecking 1
-Peckinpah/3
-peckish 1
-Pecos/2 1
-pectic 1
-pectin/2 1
-pectoral/1 1
-peculate/6 1
-peculation/1 1
-peculator/2 1
-peculiar/8 1
-peculiarity/15 1
-peculiar 1
-pecuniary 1
-pecs
-pedagog/1 1
-pedagogical/8 1
-pedagogic 1
-pedagogue/18 1
-pedagogy/2 1
-pedal/23 1
-pedalo/10 1
-pedal 1
-pedant/1 1
-pedantic
-pedantically
-pedantry/2 1
-peddle/6 1
-peddler/1 1
-peddling 1
-pederast/1 1
-pederasty/2 1
-pedestal/18 1
-pedestrian/1 1
-pedestrianization 1
-pedestrianize/6 1
-pediatric/32 1
-pediatrician/1 1
-pedicab/1 1
-pedicure/28 1
-pedicurist/1 1
-pedigree/1 1
-pedigreed
-pediment/1 1
-pedlar/1 1
-pedology 1
-pedometer/1 1
-pedophile/10 1
-pedophilia 1
-Pedro/3
-peduncle/1 1
-pee/63 1
-peek/23 1
-peekaboo/2 1
-Peel/3
-peel/23 1
-peeler/1 1
-peeling/1 1
-peen/18 1
-peep/23 1
-peepbo
-peeper/1 1
-peephole/1 1
-peepshow/1 1
-peer/23 1
-peerage/1 1
-peeress/4 1
-peerless 1
-peeve/28 1
-peeved 1
-peevish/16 1
-peewee/1 1
-peewit/10 1
-Peg/3
-peg/92 1
-Pegasus/4 1
-pegboard/1 1
-pegging 1
-Peggy/3
-Pei
-peignoir/1 1
-Peiping/2 1
-pejoration/2 1
-pejorative/30 1
-peke/1 1
-Pekinese/1 1
-pekinese/2 1
-pekineses
-Peking/1 1
-Pekingese/1 1
-pekingese/2 1
-pekingeses
-pekoe/2 1
-pelagic
-Pele/3
-Pelee/3
-pelf/2 1
-pelican/1 1
-pellagra/2 1
-pellet/23 1
-pellmell 1
-pellucid 1
-pelmet/10 1
-Peloponnese/2 1
-pelt/23 1
-pelting 1
-pelvic 1
-pelvis/4 1
-Pembroke/2 1
-pemmican/2 1
-Pen
-pen/449 1
-Pena/3
-penalization/2 1
-penalize/6 1
-penal 1
-penalty/15 1
-penance/18 1
-pence 1159
-penchant/1 1
-pencil/23 1
-penciling/10 1
-pend/11 1
-pendant/1 1
-pendent/1 1
-Penderecki/3
-pendulous
-pendulum/1 1
-Penelope/2 1
-penetrability/2 1
-penetrable 1
-penetrate/6 1
-penetrating/8 1
-penetration/1 1
-penetrative 1
-penfriend
-penfriends
-penguin/1 1
-penicillin/2 1
-penile 1
-peninsula/1 1
-peninsular
-penis/4 1
-penitence/2 1
-penitent/30 1
-penitential 1
-penitentiary/15 1
-penknife/2 1160
-penknives 1161
-penlight/1 1
-penlite/1 1
-penman/2 1162
-penmanship/2 1
-penmen 1163
-Penn
-Penna
-pennant/1 1
-penned 1
-Penney/3
-pennies
-penniless 1
-Pennington/3
-pennon/1 1
-Pennsylvania/2 1
-Pennsylvanian/1 1
-Pennzoil/3
-penologist/1 1
-penology/2 1
-Pensacola/3
-pension/23 1
-pensionable 1
-pensioner/1 1
-pensive/16 1
-pentacle/1 1
-pentagon/1 1
-Pentagon/2 1
-pentagonal 1
-pentagram/1 1
-pentameter/1 1
-pentasyllabic
-Pentateuch/2 1
-pentathlete/1 1
-pentathlon/1 1
-pentatonic
-Pentax/3
-Pentecost/1 1
-pentecostal
-Pentecostal/1 1
-Pentecostalism 1
-penthouse/18 1
-Pentium/1 1
-pent 1
-penuche/2 1
-penultimate/1 1
-penultimately
-penumbra/57 1
-penurious/16 1
-penury/2 1
-Penny/3
-penny/2 1164
-pennyweight/1 1
-pennyworth 1
-peon/1 1165
-peonage/2 1
-peony/15 1
-people/28 1
-people's 1166
-people 1167
-Peoria
-pep/47 1
-peperoni 1
-Pepin/3
-pepper/23 1
-peppercorn/1 1
-peppering 1
-peppermint/1 1
-pepperoni/1 1
-peppery 1
-peppy/49 1
-Pepsi/2 1
-pepsin/2 1
-peptic/1 1
-peptide/10 1
-Pepys
-Pequot 1
-peradventure/2 1
-perambulate/6 1
-perambulation/1 1
-perambulator/1 1
-percale/1 1
-perceivable
-perceive/6 1
-perceived 1
-perceiving 1
-percent/1 1
-percentage/1 1
-percentile/1 1
-percent 1
-perceptibility 1
-perceptible/19 1
-perception/1 1
-perceptional
-perceptive/16 1
-percepts
-perceptual/8 1
-perch/22 1
-perchance 1
-Percheron 1
-perchlorate 1
-percipience/2 1
-percipient 1
-Percival
-percolate/43 1
-percolation/2 1
-percolator/1 1
-percuss/7 1
-percussion/2 1
-percussionist/1 1
-percussive/8 1
-Percy
-perdition/2 1
-perdurable 1
-peregrinate/6 1
-peregrination/1 1
-peregrine/1 1
-Perelman/3
-peremptoriness
-peremptory/211 1
-perennial/30 1
-perestroika/2 1
-Perez/3
-perfect/52 1
-perfecta/1 1
-perfecter 1
-perfectibility/2 1
-perfectible
-perfection/1 1
-perfectionism/2 1
-perfectionist/1 1
-perfidious/8 1
-perfidy/15 1
-perforate/6 1
-perforation/1 1
-perforce 1
-perform/11 1
-performable
-performance/1 1
-performer/1 1
-performing 1
-perfume/28 1
-perfumer/1 1
-perfumery/15 1
-perfunctory/211 1
-perfused
-perfusion 1
-pergola/1 1
-perhaps 1
-periastron
-pericardia 1168
-pericardium/2 1169
-Periclean
-Pericles
-perigee/1 1
-periglacial
-perihelia 1170
-perihelion/2 1171
-peril/23 1
-periling 1
-perilous/8 1
-perimeter/1 1
-perinatal
-perinea 1172
-perineum/2 1173
-period/1 1
-periodic
-periodical/30 1
-periodicity/2 1
-periodontal
-periodontics
-periodontics's
-periodontist/1 1
-period 1
-peripatetic/1 1
-peripheral/30 1
-periphery/15 1
-periphrases 1174
-periphrasis/2 1175
-periphrastic
-periscope/18 1
-perish/7 1
-perishable/1 1
-perisher/10 1
-peristalses 1176
-peristalsis/2 1177
-peristaltic 1
-peristyle/1 1
-peritoneal
-peritoneum/1 1
-peritonitis/2 1
-periwig/18 1
-periwinkle/1 1
-perjure/6 1
-perjured 1
-perjurer/1 1
-perjury/15 1
-perk/23 1
-Perkins
-perk 1
-perky/50 1
-Perl/1 1
-perm/1 1
-Perm/2 1
-perm/11 1
-permafrost/2 1
-Permalloy/2 1
-permanence/2 1
-permanency/2 1
-permanent/30 1
-permanganate 1
-permeability/2 1
-permeable 1
-permeate/6 1
-permeation/2 1
-Permian/2 1
-permissibility 1
-permissible/19 1
-permission/1 1
-permissive/16 1
-permit/109 1
-permitted 1
-permittivity 1
-permutation/1 1
-permute/6 1
-pernicious/16 1
-pernickety 1
-Pernod/2 1
-Peron
-peroration/1 1
-Perot/3
-peroxidase 1
-peroxide/28 1
-perpendicular/30 1
-perpendicularity/2 1
-perpetrate/6 1
-perpetration/2 1
-perpetrator/1 1
-perpetual/30 1
-perpetuate/6 1
-perpetuation/2 1
-perpetuity/2 1
-perplex/7 1
-perplexed/8 1
-perplexing 1
-perplexity/15 1
-perquisite/1 1
-Perrier 1
-Perry
-perry 1
-persecute/6 1
-persecution/1 1
-persecutor/1 1
-Perseid 1
-Persephone/2 1
-Persepolis/2 1
-Perseus/2 1
-perseverance/2 1
-persevere/6 1
-persevering/8 1
-Pershing
-Persia/2 1
-Persian/1 1
-persiflage/2 1
-persimmon/1 1
-persist/11 1
-persistence/2 1
-persistent/8 1
-persnickety
-person/1 1178
-persona/53 1
-personable 1
-personage/1 1
-personal/30 1
-personality/15 1
-personalization 1
-personalize/6 1
-personalty/2 1
-personification/1 1
-personify/31 1
-personnel/2 1
-perspective/1 1
-perspex 1
-perspicacious/8 1
-perspicacity/2 1
-perspicuity/2 1
-perspicuous/8 1
-perspiration/2 1
-perspire/6 1
-perspiring 1
-persuadable 1
-persuade/6 1
-persuader/1 1
-persuasion/1 1
-persuasive/16 1
-pert/21 1
-pertain/11 1
-Perth/2 1
-pertinacious/8 1
-pertinacity/2 1
-pertinence/2 1
-pertinent/8 1
-per 1
-pert 1
-perturb/11 1
-perturbation/1 1
-perturbed 1
-perturbing 1
-pertussis/2 1
-Peru/2 1
-peruke/1 1
-perusal/1 1
-peruse/6 1
-Peruvian/1 1
-perv/10 1
-pervade/6 1
-pervasive/16 1
-perverse/16 1
-perversion/1 1
-perversity/2 1
-pervert/23 1
-peseta/1 1
-Peshawar
-peskiness/3
-pesky/59 1
-peso/1 1
-pessary/60 1
-pessimal/11 1
-pessimaling 1
-pessimally
-pessimism/2 1
-pessimist/1 1
-pessimistic/39 1
-pest/1 1
-pester/11 1
-pestering 1
-pesticide/1 1
-pestiferous 1
-pestilence/1 1
-pestilent
-pestilential 1
-pestle/28 1
-pestling 1
-pesto/2 1
-pet/1 1
-PET/2 1
-pet/12 1
-Petain/3
-petal/1 1
-petaled
-petard/1 1
-petcock/1 1
-Pete/3
-peter/1 1
-Peter/1 1
-peter/11 1
-Petersen/3
-Peterson/3
-pethidine
-petiole/1 1
-petite/1 1
-petition/23 1
-petitioner/1 1
-Petra
-Petrarch/2 1
-petrel/1 1
-petrifaction/2 1
-petrification 1
-petrify/31 1
-petrochemical/1 1
-petrodollar/1 1
-petrographic
-petrographical 1
-petrol/2 1
-petrolatum/2 1
-petroleum/2 1
-petrological 1
-petrologist/1 1
-petrology/2 1
-petrol 1
-petticoat/1 1
-pettifog/117 1
-pettifogger/1 1
-pettifoggery/2 1
-pettifogging 1
-petting/2 1
-pettish/83 1
-pet 1
-petulance/2 1
-petulant/8 1
-petunia/1 1
-Petty/3
-petty/50 1
-Peugeot/3
-pew/1 1
-pewee/1 1
-pewit/1 1
-pewter/1 1
-peyote/2 1
-pf
-Pfc
-PFC
-pfennig/1 1
-Pfizer/3
-pg
-PG
-Phaedra
-Phaethon/2 1
-phaeton/1 1
-phage/10 1
-phagocyte/1 1
-phalanger/1 1
-phalanx/450 1
-phallic 1
-phalli 1179
-phallus/2 1180
-Phanerozoic
-phantasm/1 1
-phantasmagoria/1 1
-phantasmagorical 1
-phantasmal
-phantasy/56 1
-phantom/1 1
-pharaoh/1 1
-Pharaoh/1 1
-pharisaic
-Pharisaical
-Pharisaic 1
-pharisee/1 1
-Pharisee/1 1
-pharmaceutic/130 1
-pharmaceutical/1 1
-pharmacist/1 1
-pharmacological 1
-pharmacologist/1 1
-pharmacology/2 1
-pharmacopeia/1 1
-pharmacopoeia/1 1
-pharmacy/15 1
-pharyngeal 1
-pharyngitis/2 1
-pharynx/201 1
-phase/28 1
-phaseout/1 1
-phases 1181
-phat
-PhD/2 1
-pheasant/1 1
-Phekda/3
-Phelps/3
-phenacetin/2 1
-phenobarbital/2 1
-phenol/1 1
-phenolic 1
-phenolphthalein 1
-phenom/1 1
-phenomenal/8 1
-phenomena 1182
-phenomenological
-phenomenologically
-phenomenology 1
-phenomenon/1 1183
-phenotype/10 1
-phenylalanine 1
-pheromone/1 1
-phew 1
-phi/1 1
-phial/18 1
-Phidias
-Phil
-Philadelphia/2 1
-philander/11 1
-philanderer/1 1
-philandering's
-philanthropic/39 1
-philanthropist/1 1
-philanthropy/15 1
-philatelic
-philatelist/1 1
-philately/3
-Philby/3
-Philemon
-philharmonic/1 1
-Philip
-Philippe/3
-Philippians
-philippic/1 1
-Philippine/1 1
-Philips
-philistine/1 1
-Philistine 1
-philistinism/2 1
-Phillip/10 1
-Phillipa/3
-philodendron/1 1
-philological 1
-philologist/1 1
-philology/2 1
-philosopher/1 1
-philosophic
-philosophical/8 1
-philosophize/6 1
-philosophizer/1 1
-philosophy/15 1
-philter/18 1
-philtre/18 1
-Philly/3
-Phipps/3
-phish
-phished
-phisher/3
-phishers
-phishing
-phlebitis/2 1
-phlebotomy 1
-phlegm/2 1
-phlegmatically
-phlegmatic 1
-phloem/2 1
-phlogiston 1
-phlox/2 1
-phobia/1 1
-phobic/1 1
-Phobos
-phoebe/1 1
-Phoebe/2 1
-Phoenicia/2 1
-Phoenician/1 1
-Phoenix/2 1
-phoenix/4 1
-phone/28 1
-phonecard/10 1
-phoneme/1 1
-phonemically
-phonemic 1
-phonetic/35 1
-phonetician/1 1
-phoneticist 1
-phoney/23 1184
-phonic/32 1
-phonically
-phonic 1
-phonier 1185
-phoniest 1185
-phonograph/1 1
-phonographic
-phonological/8 1
-phonologist/1 1
-phonology/2 1
-phonon 1
-phony/282 1
-phooey 1
-phosphatase 1
-phosphate/1 1
-phosphor/1 1
-phosphorescence/2 1
-phosphorescent/8 1
-phosphoric
-phosphorous
-phosphorus/2 1
-photo/23 1
-photocell/1 1
-photochemical/8 1
-photochemistry 1
-photocopier/1 1
-photocopy/56 1
-photoelectric
-photoelectrically
-photoengrave/6 1
-photoengraver/1 1
-photoengraving/1 1
-photofinishing/2 1
-photogenic/39 1
-photograph/23 1
-photographer/1 1
-photographic/39 1
-photography/2 1
-photojournalism/2 1
-photojournalist/1 1
-photolysis 1
-photolytic
-photometer/1 1
-photometric
-photometrically
-photometry 1
-photomultiplier 1
-photon/1 1
-photoreceptor 1
-photosensitive
-photosphere 1
-photostat/1 1
-Photostat/1 1
-photostat/12 1
-Photostat/12 1
-photostatic 1
-photosynthesis/2 1
-photosynthesize/6 1
-photosynthetic/39 1
-phototypesetter 1
-phototypesetting 1
-photovoltaic 1
-phrasal 1
-phrase/28 1
-phrasebook
-phrasebooks
-phraseology/2 1
-phrasing/1 1
-phreaking/10 1
-phrenetic 1
-phrenological/8 1
-phrenologist/1 1
-phrenology/2 1
-Phrygia/2 1
-pH 1
-phylactery/15 1
-phyla 1186
-Phyllis/3
-phylogenetic 1
-phylogeny/2 1
-phylum/2 1187
-phys
-physic/451 1
-physical/30 1
-physicality 1
-physician/1 1
-physicist/1 1
-physio/10 1
-physiognomy/15 1
-physiography/2 1
-physiologic
-physiological/8 1
-physiologist/1 1
-physiology/2 1
-physiotherapist/1 1
-physiotherapy/2 1
-physique/1 1
-phytoplankton 1
-pi/452 1
-Piaf/3
-Piaget/2 1
-pianissimo/1 1
-pianist/1 1
-pianistic
-piano/1 1
-pianoforte/1 1
-pianola
-Pianola/2 1
-pianolas
-piano 1
-piaster/1 1
-piazza/1 1
-pibroch/1 1
-pic/332 1
-pica/2 1
-picador/1 1
-picaresque 1
-Picasso/2 1
-picayune 1
-Piccadilly
-piccalilli/2 1
-piccolo/1 1
-pick/23 1
-pickaback 1
-pickax/22 1
-pickaxe/28 1
-picker/1 1
-pickerel/1 1
-Pickering/3
-picket/23 1
-picketer/10 1
-Pickett
-Pickford/3
-picking/32 1
-pickle/28 1
-pickling 1
-pickpocket/1 1
-pickpocketing
-pickup/1 1
-Pickwick/3
-picky/34 1
-picnic/64 1
-picnicker/1 1
-picoseconds
-picot/18 1
-pic's
-pictogram 1
-pictograph/1 1
-pictographic
-pictorial/30 1
-Pict 1
-picture/28 1
-picturesque/16 1
-piddle/28 1
-piddly 1
-pidgin/1 1
-pie/63 1
-piebald/1 1
-piece/28 1
-piecemeal
-piecewise
-piecework/2 1
-pieceworker/1 1
-piecing 1
-Piedmont/2 1
-pier/1 1
-Pierce/2 1
-pierce/6 1
-piercer/10 1
-piercing/30 1
-Pierre/2 1
-Pierrot/2 1
-piety/2 1
-piezoelectric
-piffle/453 1
-pig/92 1
-pigeon/18 1
-pigeonhole/28 1
-piggery/60 1
-piggish/16 1
-pigheaded/33 1
-pigheadedly
-piglet/1 1
-pigment/62 1
-pigmentation/2 1
-pigmy/15 1
-Pigmy/15 1
-pigpen/1 1
-pigskin/1 1
-pigsty/15 1
-pigswill 1
-pigtail/1 1
-pigtailed
-piggy/42 1
-piggyback/23 1
-Pike/3
-pike/28 1
-piker/1 1
-pikes 1188
-pikestaff/1 1
-pilaf/1 1
-pilaff/1 1
-pilaster/1 1
-Pilate
-Pilates
-pilau/1 1
-pilchard/1 1
-Pilcomayo
-pile/28 1
-piles 1189
-pileup/1 1
-pilfer/11 1
-pilferage/2 1
-pilferer/1 1
-pilfering 1
-pilgrim/1 1
-Pilgrim/10 1
-pilgrimage/18 1
-piling/1 1
-pill/18 1
-pillage/28 1
-pillager/1 1
-pillar/62 1
-pillbox/4 1
-pillion/18 1
-pillock/10 1
-pillory/56 1
-pillow/23 1
-pillowcase/1 1
-pillowslip/1 1
-Pillsbury/3
-pilot/23 1
-pilothouse/1 1
-piloting 1
-pilot 1
-pimento/1 1
-pimiento/1 1
-pimp/23 1
-pimpernel/1 1
-pimple/1 1
-pimpled 1
-pimply/34 1
-PIN
-pin/133 1
-pinafore/1 1
-pinata/1 1
-Pinatubo/3
-pinball/2 1
-pincer/62 1
-pinch/22 1
-pincher 1
-pinching 1
-Pincus/3
-pincushion/1 1
-Pindar/2 1
-pine/28 1
-pineal 1
-pineapple/1 1
-pinewood/10 1
-piney 1190
-pinfeather/1 1
-ping/23 1
-pinhead/1 1
-pinhole/1 1
-pinier 1191
-piniest 1191
-pinion/23 1
-pink/179 1
-Pinkerton
-pinker 1
-pinkeye/2 1
-pinkie/1 1
-pinking 1
-pinkish 1
-pinkness/3
-pinko/1 1
-pinky/15 1
-pinnacle/77 1
-pinnate 1
-pinning 1
-Pinocchio/3
-Pinochet/3
-pinochle/2 1
-pinocle/2 1
-pinon/1 1
-pinpoint/23 1
-pinprick/18 1
-pinsetter/1 1
-pinstripe/1 1
-pinstriped
-pinstripe 1
-pint/1 1
-Pinter
-pinto/1 1
-pinup/1 1
-pinwheel/23 1
-piny/34 1
-Pinyin
-pinyin/2 1
-pinny/60 1
-pinyon/1 1
-pioneer/23 1
-pious/16 1
-pip/47 1
-pipe/28 1
-pipeline/18 1
-piper/1 1
-pipes 1192
-pipette/18 1
-pipework 1
-piping/2 1
-pipit/1 1
-pippin/1 1
-Pippin/2 1
-pipsqueak/1 1
-piquancy/2 1
-piquant/8 1
-pique/28 1
-piracy/2 1
-Piraeus
-Pirandello
-piranha/1 1
-pirate/28 1
-piratical/8 1
-pirogi/2 1
-piroshki/2 1
-pirouette/28 1
-pis/79 1
-Pisa 1193
-piscatorial
-Pisces/2 1
-Pisistratus
-pismire/1 1
-piss/22 1
-Pissaro/3
-pisser/10 1
-pissoir/10 1
-pi's 1194
-pistachio/1 1
-piste/10 1
-pistil/1 1
-pistillate
-pistol/18 1
-piston/1 1
-pi 1195
-pit/109 1
-pita/1 1
-pitapat/18 1
-pita's 1196
-pita 1197
-Pitcairn/3
-pitch/22 1
-pitchblende/2 1
-pitcher/1 1
-pitchfork/23 1
-pitching 1
-pitchman/2 1198
-pitchmen 1199
-piteous/16 1
-pitfall/1 1
-pith/18 1
-pithead/10 1
-pithy/50 1
-pitiable/19 1
-pitiful/454 1
-pitiless/16 1
-piton/1 1200
-Pitt
-pitta/10 1
-pittance/1 1
-pitting 1
-Pittman/3
-Pitts
-Pittsburgh/2 1
-pituitary/15 1
-pity/56 1
-pitying/8 1
-Pius/3
-pivot/23 1
-pivotal 1
-pix/2 1
-pixel/1 1
-pixie/1 1
-pix 1
-pixy/15 1
-Pizarro
-pizazz/2 1
-pizza/1 1
-pizzazz/2 1
-pizzeria/1 1
-pizzicato/323 1
-pj's
-PJ's
-pk
-pkg
-pkt
-pkwy
-Pkwy
-pl
-Pl
-placard/23 1
-placate/6 1
-placating 1
-placation/2 1
-placatory
-Place
-place/28 1
-placebo/1 1
-placeholder/1 1
-placekick/23 1
-placekicker/1 1
-placemen 1201
-placement/1 1
-placenta/1 1
-placental/10 1
-placer/1 1
-placid/8 1
-placidity/2 1
-placing/10 1
-placket/1 1
-plagiarism/1 1
-plagiarist/1 1
-plagiarize/6 1
-plagiarizer/1 1
-plagiary/2 1
-plague/28 1
-plaice 1
-plaid/18 1
-plain/455 1
-plainchant 1
-plainclothes
-plainclothesman/2 1202
-plainclothesmen 1203
-plainsman/2 1204
-plainsmen 1205
-plainsong/2 1
-plainspoken
-plaint/1 1
-plaintiff/1 1
-plaintive/8 1
-plait/23 1
-plaiting 1
-plan/133 1
-planar 1
-Planck
-plane/139 1
-planeload/1 1
-planer/1 1
-planet/1 1
-planetarium/1 1
-planetary 1
-planetesimals
-planetoids
-plangency/2 1
-plangent 1
-plank/23 1
-planking/2 1
-plankton/2 1
-planner/1 1
-planning/10 1
-Plano
-plant/23 1
-Plantagenet/2 1
-plantain/1 1
-plantar 1
-plantation/1 1
-planter/1 1
-planting/1 1
-plantlike 1
-plaque/1 1
-plash/22 1
-plashing 1
-plasma/1 1
-plasma's 1206
-plasma 1207
-plasmid/10 1
-plaster/23 1
-plasterboard/2 1
-plasterer/1 1
-plastering 1
-plasterwork 1
-plastic/1 1
-Plasticine/2 1
-plasticine 1
-plasticity/2 1
-plasticize/6 1
-plasticizers
-plastic 1
-plat/109 1
-Plataea/2 1
-plate/28 1
-plateau/23 1
-plateful/1 1
-platelet/1 1
-platen/1 1
-platform/23 1
-Plath
-plating/2 1
-platinum/2 1
-platitude/1 1
-platitudinous 1
-Plato/2 1
-platonic
-Platonic 1
-Platonism/2 1
-Platonist/2 1
-platoon/23 1
-Platte/2 1
-platter/1 1
-platting 1
-platy/2 1
-platypus/4 1
-platy 1
-plaudit/1 1
-plausibility/2 1
-plausible/19 1
-Plautus/2 1
-play/78 1
-playability 1
-playable 1
-playact/11 1
-playacting/2 1
-playback/1 1
-playbill/1 1
-playbook/1 1
-Playboy/3
-playboy/1 1
-player/1 1
-playfellow/1 1
-playful/16 1
-playgirl/1 1
-playgoer/1 1
-playground/1 1
-playgroup/10 1
-playhouse/1 1
-playing/10 1
-playmate/1 1
-playoff/1 1
-playpen/1 1
-playroom/1 1
-playschool/10 1
-PlayStation/3
-Playtex/3
-plaything/1 1
-playtime/2 1
-playwright/1 1
-plaza/1 1
-plea/1 1
-plead/11 1
-pleader/1 1
-pleading/30 1
-pleas/7 1
-pleasant/21 1
-pleasantry/15 1
-please/6 1
-pleased 1
-please 1
-pleasing/191 1
-plea's 1208
-plea 1209
-pleasurable/19 1
-pleasure/28 1
-pleasureful
-pleat/23 1
-pleb/10 1
-plebby 1
-plebe/1 1
-plebeian/1 1
-plebiscite/1 1
-plectra 1210
-plectrum/1 1211
-pledge/28 1
-Pleiades's
-Pleistocene/2 1
-plenary/15 1
-plenipotentiary/15 1
-plenitude/1 1
-plenteous/8 1
-plentiful/8 1
-plenty/2 1
-plenum/10 1
-pleonasm/1 1
-plethora/2 1
-pleura/53 1
-pleural 1
-pleura's 1212
-pleura 1213
-pleurisy/2 1
-Plexiglas/4 1
-plexiglass/2 1
-plexus/4 1
-pliability/2 1
-pliable 1
-pliancy/2 1
-pliant/8 1
-pliers
-pliers's
-plight/23 1
-plimsoll/10 1
-plinth/1 1
-Pliny
-Pliocene/1 1
-PLO
-plod/311 1
-plodder/1 1
-plodding/10 1
-plonk/5 1
-plonker/10 1
-plop/47 1
-plosive/10 1
-plot/109 1
-plotter/18 1
-plover/1 1
-plow/23 1
-plowers
-plowman/2 1214
-plowmen 1215
-plowshare/1 1
-ploy/18 1
-pluck/23 1
-plucker 1
-plucky/50 1
-plug/92 1
-plugging 1
-plughole/10 1
-plum/18 1
-plumage/2 1
-plumb/78 1
-plumbago 1
-plumber/1 1
-plumbing/1 1
-plume/28 1
-plummet/23 1
-plummy 1
-plump/165 1
-plumper 1
-plumply 1
-plum 1
-plumy/34 1
-plunder/23 1
-plunderer/1 1
-plunge/28 1
-plunger/1 1
-plunging 1
-plunk/23 1
-pluperfect/1 1
-plural/1 1
-pluralism/2 1
-pluralist/1 1
-pluralistic
-plurality/15 1
-pluralization/2 1
-pluralize/6 1
-plural 1
-plus/40 1
-plush/187 1
-plushly 1
-plushy/34 1
-plus 1
-Plutarch/2 1
-Pluto/2 1
-plutocracy/15 1
-plutocrat/1 1
-plutocratic
-plutonium/2 1
-pluvial 1
-ply/31 1
-plying 1216
-Plymouth/2 1
-ply's
-plywood/2 1
-PM/1 1
-Pm/2 1
-PMed
-PMing
-PMS/2 1
-pm 1
-pneumatic/276 1
-pneumonia/2 1
-PO
-Po/2 1
-poach/7 1
-poacher/1 1
-poaching/2 1
-Pocahontas/2 1
-pock/23 1
-pocket/23 1
-pocketbook/1 1
-pocketful/1 1
-pocketknife/2 1217
-pocketknives 1218
-pocket 1
-pockmark/23 1
-Pocono/3
-Poconos
-pod/113 1
-podcast
-Podgorica
-podgy 1
-Podhoretz/3
-podiatrist/1 1
-podiatry/2 1
-podium/1 1
-Podunk 1
-Poe
-poem/1 1
-poesy/2 1
-poet/1 1
-poetaster/1 1
-poetess/4 1
-poetic/10 1
-poetical/8 1
-poetic 1
-poetry/2 1
-Pogo/3
-pogo 1
-pogrom/18 1
-poi/2 1
-poignancy/2 1
-poignant/8 1
-poikilothermic
-Poincare/3
-poinciana/1 1
-poinsettia/1 1
-point/23 1
-pointblank 1
-pointed/83 1
-pointer/1 1
-pointillism/2 1
-pointillist/1 1
-pointing 1
-pointless/16 1
-pointy/34 1
-Poiret/3
-Poirot/3
-poise/28 1
-poison/78 1
-poisoner/1 1
-poisoning/1 1
-poisonous/8 1
-Poisson/3
-Poitier/2 1
-poke/28 1
-Pokemon/3
-poker/1 1
-pokey/1 1219
-pokier 1220
-pokiest 1220
-poky/34 1
-Pol
-pol/213 1
-Poland/2 1
-Polanski/3
-Polaris/2 1
-polarity/15 1
-polarization/1 1
-polarize/6 1
-Polaroid/1 1
-polar 1
-pole/1 1
-Pole/1 1
-pole/6 1
-poleaxe/43 1
-polecat/1 1
-polemic/130 1
-polemical/8 1
-polemicist/1 1
-poles 1221
-polestar/1 1
-poleward
-polewards
-police/360 1
-policeman/2 1222
-policemen 1223
-policewoman/2 1224
-policewomen 1225
-policy/15 1
-policyholder/1 1
-policymaker/10 1
-poling 1
-polio/1 1
-poliomyelitis/2 1
-Polish/2 1
-polish/22 1
-polisher/1 1
-polishing/10 1
-Polish 1
-politburo/1 1
-Politburo 1
-polite/27 1
-politesse/2 1
-politic/456 1
-political/8 1
-politician/1 1
-politicization/2 1
-politicize/6 1
-politicking/2 1
-politico/1 1
-politic 1
-politics's
-polity/15 1
-Polk/2 1
-polka/23 1
-poll/23 1
-pollack/1 1
-Pollard/3
-pollard/70 1
-pollen/18 1
-pollinate/6 1
-pollination/2 1
-pollinator/1 1
-polling/2 1
-polliwog/1 1
-pollock/1 1
-Pollock 1
-pollster/1 1
-pollutant/1 1
-pollute/6 1
-polluted 1
-polluter/1 1
-pollution/1 1
-Pollux/2 1
-polo/2 1
-Polo/2 1
-polonaise/1 1
-polonium/2 1
-Poltava/3
-poltergeist/1 1
-poltroon/1 1
-polyandrous
-polyandry/2 1
-polyatomic
-polycarbonate 1
-polychromatic
-polychrome 1
-polyclinic/1 1
-polycrystalline
-polycyclic
-polyester/1 1
-polyethylene/2 1
-polygamist/1 1
-polygamous 1
-polygamy/2 1
-polyglot/1 1
-polygon/1 1
-polygonal 1
-polygraph/23 1
-polyhedral
-polyhedron/1 1
-Polyhymnia/2 1
-Polly/3
-Pollyanna 1
-pollywog/1 1
-polymath/1 1
-polymer/1 1
-polymerase/10 1
-polymeric
-polymerization/2 1
-polymerize/6 1
-polymorphic
-polymorphism/10 1
-polymorphous
-Polynesia/2 1
-Polynesian/1 1
-polynomial/1 1
-polynomially
-polyp/1 1
-polypeptide/10 1
-Polyphemus
-polyphonic 1
-polyphony/2 1
-polypropylene/2 1
-polysaccharides
-polysemous
-polystyrene/2 1
-polysyllabic 1
-polysyllable/1 1
-polytechnic/1 1
-polytheism/2 1
-polytheist/1 1
-polytheistic
-polytheist 1
-polythene 1
-polytopes
-poly 1
-polyunsaturate/10 1
-polyunsaturated
-polyurethane/1 1
-polyvinyl 1
-pom/10 1
-pomade/28 1
-pomander/1 1
-pomegranate/1 1
-Pomerania
-Pomeranian/2 1
-pommel/23 1
-pommy/60 1
-Pomona
-pomp/2 1
-Pompadour
-pompadour/62 1
-pompano/1 1
-Pompeian 1
-Pompeii/2 1
-Pompey/2 1
-pompom/1 1
-pompon/1 1
-pomposity/2 1
-pompous/16 1
-Ponce
-ponce/43 1
-poncey
-poncho/1 1
-poncy
-pond/18 1
-ponder/11 1
-ponderer/1 1
-ponderous/16 1
-pone/1 1
-pong/11 1
-pongee/2 1
-poniard/18 1
-Pontchartrain
-Pontiac/2 1
-Pontianak
-pontiff/1 1
-pontifical/8 1
-pontificate/28 1
-pontification/10 1
-pontoon/18 1
-pony/56 1
-ponytail/1 1
-poo/444 1
-pooch/22 1
-poodle/1 1
-pooed
-poof/1 1
-poofter/10 1
-Pooh/3
-pooh/23 1
-pooing
-pool/23 1
-Poole/3
-pooling 1
-poolroom/1 1
-poolside/10 1
-Poona
-poop/23 1
-poor/21 1
-poorboy/2 1
-poorhouse/1 1
-poos
-pop/296 1
-popcorn/2 1
-pope/1 1
-Pope 1
-Popeye/3
-popgun/1 1
-popinjay/1 1
-poplar/1 1
-poplin/2 1
-Popocatepetl
-popover/1 1
-poppa/1 1
-poppadom/10 1
-poppadum/10 1
-Popper/3
-popper/1 1
-poppet/10 1
-Poppins/3
-poppy/15 1
-poppycock/2 1
-Popsicle 1
-populace/1 1
-popular/8 1
-popularity/2 1
-popularization/1 1
-popularize/6 1
-popular 1
-populate/6 1
-population/1 1
-populism/2 1
-populist/1 1
-populous/33 1
-porcelain/1 1
-porch/4 1
-porcine 1
-porcupine/1 1
-pore/28 1
-Porfirio/3
-porgy/15 1
-pork/2 1
-porker/1 1
-porky/42 1
-porn/2 1
-porno/2 1
-pornographer/1 1
-pornographic
-pornographically
-pornography/2 1
-porosity/2 1
-porous/33 1
-porphyritic
-porphyry/2 1
-porpoise/28 1
-porridge/2 1
-Porrima/3
-porringer/1 1
-Porsche/3
-Port
-port/216 1
-portability/2 1
-portable/1 1
-portage/28 1
-portal/1 1
-portcullis/4 1
-portend/11 1
-portent/1 1
-portentous/83 1
-Porter
-porter/18 1
-porterage 1
-porterhouse/1 1
-portfolio/1 1
-porthole/1 1
-Portia/3
-portico/4 1
-portiere/1 1
-portion/23 1
-Portland/2 1
-portly/140 1
-portmanteau/1 1
-Porto/3
-portrait/1 1
-portraitist/1 1
-portraiture/2 1
-portray/11 1
-portrayal/1 1
-Portsmouth
-Portugal/2 1
-Portuguese/2 1
-portulaca/2 1
-pose/28 1
-Poseidon/2 1
-poser/1 1
-poseur/1 1
-posh/166 1
-posing 1
-posit/5 1
-position/23 1
-positionable
-positional
-positionally
-positive/25 1
-positivism 1
-positivist/10 1
-positivity 1
-positron/1 1
-poss/89 1
-posse/1 1
-posses/79 1
-possess/7 1
-possession/1 1
-possessive/36 1
-possessor/1 1
-possibility/15 1
-possible/457 1
-possum/1 1
-Post/3
-post/78 1
-postage/2 1
-postal 1
-postbag/10 1
-postbox/89 1
-postcard/18 1
-postcode/10 1
-postconsonantal
-postdate/6 1
-postdoctoral
-postdoc 1
-poster/1 1
-posterior/1 1
-posterity/2 1
-postfixes
-postgraduate/1 1
-posthaste 1
-posthumous/8 1
-posthypnotic 1
-postie/10 1
-postilion/1 1
-postillion/1 1
-postindustrial
-posting/1 1
-postlude/1 1
-postman/2 1226
-postmark/23 1
-postmaster/1 1
-postmenopausal
-postmen 1227
-postmeridian
-postmistress/4 1
-postmodern
-postmodernism/2 1
-postmodernist/1 1
-postmortem/1 1
-postnasal
-postnatal
-postoperative 1
-postpaid 1
-postpartum
-postpone/6 1
-postponement/1 1
-postprandial 1
-postscript/1 1
-postseason/1 1
-postulate/28 1
-postulation/1 1
-postural
-posture/28 1
-posturing/1 1
-postwar 1
-postwoman 1228
-postwomen 1229
-posy/15 1
-pot/109 1
-potability/2 1
-potable/1 1
-potash/2 1
-potassium/2 1
-potato/4 1
-potbellied
-potbellies
-potbelly/3
-potboiler/1 1
-Potemkin
-potency/2 1
-potent/8 1
-potentate/1 1
-potential/30 1
-potentiality/15 1
-potentiometer/10 1
-potent 1
-potful/1 1
-pothead/1 1
-pother/23 1
-potherb/1 1
-potholder/1 1
-pothole/28 1
-potholer/10 1
-pothook/1 1
-potion/1 1
-potluck/1 1
-Potomac/2 1
-potpie/1 1
-potpourri/1 1
-Potsdam
-potsherd/1 1
-potshot/1 1
-pottage/2 1
-Pottawatomie/3
-Potter
-potter/23 1
-pottering 1
-pottery/15 1
-pottiness
-Potts/3
-potty/42 1
-pouch/22 1
-pouf/10 1
-pouffe/10 1
-poulterer/1 1
-poultice/28 1
-poultry/2 1
-pounce/28 1
-Pound
-pound/23 1
-poundage/2 1
-pounding/1 1
-pour/5 1
-pourable
-pouring/10 1
-Poussin
-pout/23 1
-pouter/1 1
-pouting 1
-poverty/2 1
-POW/2 1
-powder/23 1
-powdery 1
-Powell/3
-power/23 1
-powerboat/1 1
-powerful/83 1
-powerhouse/1 1
-powerless/16 1
-PowerPoint/3
-Powers
-power 1
-Powhatan/2 1
-pow 1
-powwow/23 1
-pox/40 1
-poxy
-Poznan/3
-pp
-PP
-ppm
-ppr
-PPS
-pr
-PR
-Pr/4 1
-practicability/15 1
-practicable/19 1
-practical/30 1
-practicality/15 1
-practice/28 1
-practicum/1 1
-practise's
-practitioner/1 1
-Prada/3
-Prado/3
-praesidium/10 1
-praetor/1 1
-praetorian 1
-Praetorian 1
-pragmatic/1 1
-pragmatical/8 1
-pragmatism/2 1
-pragmatist/1 1
-Prague/2 1
-Praia/2 1
-prairie/1 1
-praise/28 1
-praiseworthy/140 1
-praising 1
-Prakrit
-praline/1 1
-pram/1 1
-prance/28 1
-prancer/1 1
-prancingly 1
-prancing 1
-prang/11 1
-prank/18 1
-prankster/1 1
-praseodymium/2 1
-prat/70 1
-Pratchett/3
-prate/28 1
-prater/1 1
-pratfall/1 1
-prating 1
-Pratt/3
-prattle/28 1
-prattler/1 1
-prattling 1
-Pravda/3
-prawn/23 1
-Praxiteles
-pray/11 1
-prayer/1 1
-prayerbook
-prayerful/8 1
-praying 1
-PRC/2 1
-preach/7 1
-preacher/1 1
-preaching/10 1
-preachment/2 1
-preachy/34 1
-preadolescence/1 1
-Preakness/3
-preallocate
-preamble/28 1
-preamplifier 1
-preamp 1
-prearrange/6 1
-prearrangement/2 1
-preassigned
-preauthorize
-prebendary 1
-Precambrian/2 1
-precancel/23 1
-precancerous
-precarious/16 1
-precast 1
-precaution/18 1
-precautionary
-precede/6 1
-precedence/1 1
-precedent/1 1
-precept/1 1
-preceptor/1 1
-precess/241 1
-precession 1
-precinct/1 1
-preciosity/2 1
-precious/16 1
-precipice/1 1
-precipitant/1 1
-precipitate/54 1
-precipitation/1 1
-precipitous/8 1
-precis/22 1
-precise/104 1
-precision/1 1
-precis 1
-preclinical
-preclude/6 1
-preclusion/2 1
-precocious/16 1
-precocity/2 1
-precognition/1 1
-precognitive
-precolonial
-precomputed
-preconceive/6 1
-preconception/1 1
-precondition/23 1
-precook/11 1
-precursor/1 1
-precursory
-predate/6 1
-predation/10 1
-predator/1 1
-predatory
-predawn 1
-predecease/43 1
-predecessor/1 1
-predeclared
-predefine/251 1
-predesignate/6 1
-predestination/2 1
-predestine/6 1
-predetermination/2 1
-predetermine/6 1
-predeterminer/1 1
-predicable 1
-predicament/1 1
-predicate/28 1
-predication/2 1
-predicative/8 1
-predict/11 1
-predictability/2 1
-predictable/19 1
-prediction/1 1
-predictive 1
-predictor/1 1
-predigest/11 1
-predilection/1 1
-predispose/6 1
-predisposed 1
-predisposition/1 1
-predominance/2 1
-predominant/8 1
-predominate/68 1
-preemie/1 1
-preeminence/2 1
-preeminent/8 1
-preempt/5 1
-preemption/2 1
-preemptively
-preemptive 1
-preen/5 1
-preexist/11 1
-preexistence/2 1
-pref
-prefab/136 1
-prefabricate/6 1
-prefabrication/2 1
-prefab 1
-preface/28 1
-prefatory
-prefect/1 1
-prefecture/1 1
-prefer/13 1
-preferable/19 1
-preference/1 1
-preferential/8 1
-preferment/2 1
-preferred 1
-prefigure/6 1
-prefix/22 1
-preform/5 1
-pregame/3
-pregames
-pregnancy/15 1
-pregnant 1
-preheat/11 1
-prehensile
-prehistoric
-prehistorical/8 1
-prehistory/2 1
-prejudge/6 1
-prejudgment/1 1
-prejudice/28 1
-prejudiced 1
-prejudicial
-prekindergarten/1 1
-prelacy/2 1
-prelate/1 1
-prelates 1
-prelim/1 1
-preliminary/206 1
-preliterate 1
-preloaded
-prelude/18 1
-premarital
-premature/83 1
-prematurity 1
-premed/1 1
-premedical
-premeditate/6 1
-premeditated 1
-premeditation/2 1
-premed 1
-premenstrual
-premier/23 1
-premiere/28 1
-premiership/1 1
-premier 1
-Preminger/3
-premise/28 1
-premiss/40 1
-premium/1 1
-premix/156 1
-premolar/1 1
-premonition/1 1
-premonitory
-Premyslid/3
-prenatal/8 1
-Prensa/3
-Prentice/3
-prenuptial
-preoccupation/1 1
-preoccupied 1
-preoccupy/31 1
-preoperative
-preordain/11 1
-prep/47 1
-prepackage/6 1
-prepacked
-preparation/1 1
-preparative 1
-preparatory 1
-prepare/6 1
-prepared/33 1
-preparer/10 1
-prepay/312 1
-prepayment/1 1
-preplanned
-preponderance/1 1
-preponderant/8 1
-preponderate/6 1
-preposition/18 1
-prepositional/8 1
-prepossess/7 1
-prepossessing 1
-prepossession/1 1
-preposterous/8 1
-preppie/41 1
-preppy/42 1
-preprocessed
-prep 1
-prepubescence/2 1
-prepubescent/1 1
-prepuce/1 1
-prequel/1 1
-prerecord/11 1
-preregister/11 1
-preregistration/2 1
-prerequisite/1 1
-prerogative/1 1
-pres/79 1
-presage/28 1
-presbyopia/2 1
-presbyter/1 1
-Presbyterian/1 1
-Presbyterianism/1 1
-presbytery/15 1
-preschool/129 1
-preschooler/1 1
-prescience/2 1
-prescient/8 1
-Prescott/3
-prescribe/6 1
-prescript/1 1
-prescription/1 1
-prescriptive/8 1
-prescriptivism
-prescriptivist 1
-prescript 1
-preseason/1 1
-preselect/458 1
-presence/1 1
-present/459 1
-presentable/19 1
-presentation/1 1
-presentational
-presenter/1 1
-presentiment/1 1
-presentment/1 1
-preservable
-preservation/2 1
-preservationist/1 1
-preservative/1 1
-preserve/28 1
-preserver/1 1
-preset/88 1
-preshrank 1230
-preshrink/121 1231
-preshrunk 1230
-preside/6 1
-presidency/15 1
-president/1 1
-President/1 1
-presidential 1
-presidia 1232
-presidium/2 1233
-Presley
-presort/11 1
-press/22 1
-presser/1 1
-pressie/10 1
-pressing/30 1
-pressman/2 1234
-pressmen 1235
-pressure/28 1
-pressurization/2 1
-pressurize/6 1
-pressurizer/1 1
-prestidigitation/2 1
-prestidigitatorial
-prestidigitator 1
-prestige/2 1
-prestigious 1
-presto/1 1
-Preston
-presto 1
-presumable/19 1
-presume/6 1
-presumed 1
-presumption/1 1
-presumptive/8 1
-presumptuous/16 1
-presuppose/6 1
-presupposition/1 1
-pretax 1
-preteen/1 1
-pretend/233 1
-pretended 1
-pretender/1 1
-pretense/1 1
-pretension/18 1
-pretentious/16 1
-preterit/1 1
-preterite/1 1
-preterit 1
-preterm 1
-preternatural/8 1
-pretest/11 1
-pretext/18 1
-Pretoria/2 1
-pretreated
-pretreatment/10 1
-pretrial/10 1
-prettify/31 1
-pretzel/1 1
-pretty/275 1
-prevail/11 1
-prevailing 1
-prevalence/2 1
-prevalent/8 1
-prevaricate/6 1
-prevarication/1 1
-prevaricator/1 1
-prevent/11 1
-preventable
-preventative/1 1
-preventible
-prevention/1 1
-preventive/1 1
-preview/23 1
-previewer/10 1
-previous/8 1
-prevision/18 1
-prevue/18 1
-prewar 1
-prey/23 1236
-prezzie/10 1
-Priam/2 1
-priapic 1
-Pribilof/3
-Price
-price/28 1
-priceless 1
-prices 1237
-pricey 1238
-pricier 1239
-priciest 1239
-prick/23 1
-pricker/1 1
-pricking 1
-prickle/28 1
-prickliness/3
-prickling 1
-prickly/34 1
-pricy/34 1
-pride/28 1
-prideful/8 1
-prier/1 1240
-priest/18 1
-priestess/4 1
-priesthood/1 1
-Priestley
-priestly/49 1
-priest 1241
-prig/18 1
-priggish/16 1
-prim/324 1
-primacy/2 1
-primaeval
-primal 1
-primary/206 1
-primate/1 1
-prime/460 1
-primer/1 1
-primeval 1
-priming/2 1
-primitive/36 1
-primogenitor/1 1
-primogeniture/2 1
-primordial/8 1
-primp/11 1
-primrose/18 1
-prim 1
-primula/10 1
-Prince/3
-prince/1 1
-princedom/1 1
-princely/49 1
-princes/9 1
-princess/4 1
-Princeton/2 1
-Principal
-principal/30 1
-principality/15 1
-Principe/2 1
-principle/77 1
-print/78 1
-printable 1
-printer/1 1
-printing/1 1
-printmaking 1
-printout/1 1
-prion/10 1
-prior/1 1
-prioress/4 1
-prioritization 1
-prioritize/6 1
-priority/15 1
-prior 1
-priory/15 1
-Priscilla/3
-prism/1 1
-prismatic 1
-prison/18 1
-prisoner/1 1
-prissy/50 1
-pristine 1
-prithee 1
-Prius/3
-privacy/2 1
-Private
-private/255 1
-privateer/18 1
-privation/1 1
-privatization/1 1
-privatize/6 1
-privet/1 1
-privilege/28 1
-privy/461 1
-prize/28 1
-prizefight/86 1
-prizefighter/1 1
-prizefighting/2 1
-prize 1
-prizewinner/1 1
-prizewinning
-PRO
-pro/1 1
-proactively
-proactive 1
-prob
-probabilistic/39 1
-probabilist 1
-probability/15 1
-probable/82 1
-probate/28 1
-probation/2 1
-probational
-probationary 1
-probationer/1 1
-probative 1
-probe/28 1
-probings
-probity/2 1
-problem/1 1
-problematical/8 1
-problematic 1
-problem 1
-probosces
-proboscis/4 1
-procaine/2 1
-procedural 1
-procedurally
-procedure/1 1
-proceed/11 1
-proceeding/1 1
-proceeds's
-process/22 1
-processable
-procession/23 1
-processional/1 1
-processioning 1
-processor/1 1
-proclaim/11 1
-proclaimers
-proclamation/1 1
-proclivity/15 1
-proconsul/1 1
-proconsular 1
-procrastinate/6 1
-procrastination/1 1
-procrastinator/1 1
-procreate/6 1
-procreation/2 1
-procreational
-procreative 1
-procreatory
-Procrustean
-Procrustes/2 1
-Procter/3
-proctor/23 1
-proctorial
-procurable
-procurator/1 1
-procure/6 1
-procurement/1 1
-procurer/1 1
-procures 1
-Procyon/2 1
-prod/113 1
-prodigal/30 1
-prodigality/2 1
-prodigious/8 1
-prodigy/15 1
-produce/28 1
-producer/1 1
-producible
-product/1 1
-production/1 1
-productive/16 1
-productivity/2 1
-Prof
-prof/123 1
-profanation/1 1
-profane/67 1
-profanity/15 1
-profess/7 1
-professed/8 1
-profession/1 1
-professional/30 1
-professionalism/2 1
-professionalization 1
-professionalize/6 1
-professor/1 1
-professorial/8 1
-professorship/1 1
-proffer/23 1
-proficiency/15 1
-proficient/30 1
-profile/28 1
-profit/23 1
-profitability/2 1
-profitable/19 1
-profiteer/23 1
-profiteering/2 1
-profiterole/1 1
-profiting 1
-profitless 1
-profligacy/2 1
-profligate/30 1
-proforma
-proformas
-profound/21 1
-profundity/15 1
-profuse/16 1
-profusion/1 1
-progenitor/1 1
-progeny/2 1
-progesterone/2 1
-prognathous
-prognoses 1242
-prognosis/2 1243
-prognostic/1 1
-prognosticate/6 1
-prognostication/1 1
-prognosticator/1 1
-prognostic 1
-program/462 1
-programer/1 1
-programing 1
-programmable/1 1
-programmatic
-programmer/1 1
-programming/1 1
-progress/22 1
-progression/1 1
-progressive/36 1
-prohibit/11 1
-prohibition/1 1
-prohibitionist/1 1
-Prohibition 1
-prohibitive/8 1
-prohibitory 1
-project/23 1
-projectile/1 1
-projecting 1
-projection/1 1
-projectionist/1 1
-projective/8 1
-projector/1 1
-Prokofiev
-prolapse/28 1
-prole/10 1
-proletarian/1 1
-proletariat/2 1
-proliferate/6 1
-proliferation/2 1
-prolific
-prolifically
-prolix/8 1
-prolixity/2 1
-prolog/18 1
-prologize 1
-prologue/18 1
-prologuize 1
-prolong/11 1
-prolongation/1 1
-prom/1 1
-promenade/28 1
-promenader/10 1
-Promethean 1
-Prometheus/2 1
-promethium/2 1
-prominence/1 1
-prominent/8 1
-promiscuity/2 1
-promiscuous/8 1
-promise/28 1
-promising/8 1
-promissory 1
-promo/1 1
-promontory/15 1
-promotable
-promote/6 1
-promoter/1 1
-promotion/1 1
-promotional
-prompt/52 1
-prompter/1 1
-prompting/1 1
-promptitude/2 1
-promulgate/6 1
-promulgation/1 1
-promulgator/1 1
-pron
-prone/33 1
-prong/62 1
-pronghorn/1 1
-pronominal/2 1
-pronoun/1 1
-pronounce/6 1
-pronounceable 1
-pronounced/8 1
-pronouncement/1 1
-pronto 1
-pronuclear
-pronunciation/1 1
-proof/23 1
-proofing 1
-proofread/121 1
-proofreader/1 1
-proof 1
-prop/47 1
-propaganda/2 1
-propagandist/1 1
-propagandize/6 1
-propagate/6 1
-propagation/2 1
-propagator/1 1
-propane/2 1
-propel/61 1
-propellant/1 1
-propellent/1 1
-propeller/1 1
-propelling 1
-propensity/15 1
-proper/225 1
-propertied
-property/15 1
-prophecy/15 1
-prophesier/1 1
-prophesy/31 1
-prophesy's
-prophet/1 1
-prophetess/4 1
-prophetic
-prophetical/8 1
-Prophets
-prophylactic/1 1
-prophylaxes 1244
-prophylaxis/2 1245
-propinquity/2 1
-propitiate/6 1
-propitiation/2 1
-propitiatory 1
-propitious/8 1
-proponent/1 1
-proportion/23 1
-proportional/191 1
-proportionality 1
-proportionate/8 1
-proportioning 1
-proposal/1 1
-propose/6 1
-proposer/1 1
-proposition/23 1
-propositional 1
-propound/11 1
-proprietary/15 1
-proprietor/1 1
-proprietorial/8 1
-proprietorship/2 1
-proprietress/4 1
-propriety/344 1
-proprioceptive
-propulsion/2 1
-propulsive
-propylene 1
-prorate/6 1
-prorogation/2 1
-prorogue/6 1
-pros/205 1
-prosaic/39 1
-proscenium/1 1
-prosciutto/2 1
-proscribe/6 1
-proscription/1 1
-proscriptive
-prose/18 1
-prosecutable
-prosecute/6 1
-prosecution/1 1
-prosecutor/1 1
-proselyte/28 1
-proselytism/2 1
-proselytize/6 1
-proselytizer/1 1
-Proserpina/2 1
-Proserpine/2 1
-prose 1
-prosodic
-prosody/15 1
-prospect/23 1
-prospectively
-prospective 1
-prospector/1 1
-prospectus/4 1
-prosper/11 1
-prosperity/2 1
-prosperous/8 1
-prostate/1 1
-prostheses 1246
-prosthesis/2 1247
-prosthetic 1
-prostitute/28 1
-prostitution/2 1
-prostrate/6 1
-prostration/1 1
-prosy/34 1
-protactinium/2 1
-protagonist/1 1
-Protagoras
-protean 1
-protease 1
-protect/11 1
-protecting 1
-protection/1 1
-protectionism/2 1
-protectionist/1 1
-protective/16 1
-protector/1 1
-protectorate/1 1
-protege/1 1
-protegee/10 1
-protein/1 1
-Proterozoic/2 1
-protest/23 1
-Protestant/1 1
-protestant/10 1
-protestantism
-Protestantism/1 1
-protestation/1 1
-protester/1 1
-protesting 1
-protestor/1 1
-Proteus/2 1
-protists
-protocol/18 1
-proton/1 1
-protoplasm/2 1
-protoplasmic
-prototype/28 1
-prototypical 1
-protozoan/463 1
-protozoa 1248
-protozoic
-protozoon/2 1249
-protract/11 1
-protracted 1
-protraction/2 1
-protractor/1 1
-protrude/6 1
-protrusile
-protrusion/1 1
-protrusive
-pro 1
-protuberance/1 1
-protuberant 1
-proud/75 1
-Proudhon
-Proust/2 1
-prov
-provability/2 1
-provable/19 1
-prove/376 1
-provenance/1 1
-Provencal/1 1
-Provence/2 1
-provender/2 1
-provenience/2 1
-proven 1
-prover/10 1
-proverb/18 1
-proverbial/8 1
-Proverbs
-providable
-provide/6 1
-Providence/1 1
-providence/2 1
-provident/8 1
-providential/8 1
-provider/1 1
-province/1 1
-provincial/30 1
-provincialism/2 1
-provision/23 1
-provisional/8 1
-proviso/1 1
-provocateur/10 1
-provocation/1 1
-provocative/16 1
-provoke/6 1
-provoker/1 1
-provoking/8 1
-provolone/2 1
-provost/1 1
-Provo 1
-prow/1 1
-prowess/2 1
-prowl/23 1
-prowler/1 1
-prowling 1
-prow 1
-proximal 1
-proximate/8 1
-proximity/2 1
-proxy/15 1
-Prozac/1 1
-prude/1 1
-Prudence/3
-prudence/2 1
-prudent/8 1
-Prudential/3
-prudential 1
-prudentially
-prudery/2 1
-prudish/16 1
-Pruitt/3
-prune/28 1
-pruner/1 1
-pruning 1
-prurience/2 1
-prurient/8 1
-Prussia/2 1
-Prussian/1 1
-prussic
-Prut
-pry/87 1
-pryer/1 1
-prying 1
-Pryor/3
-PS/2 1
-psalm/18 1
-psalmist/1 1
-Psalms
-Psalter/1 1
-psalter 1
-psaltery/15 1
-psephologist/10 1
-psephology 1
-pseud/10 1
-pseudo/10 1
-pseudonym/1 1
-pseudonymous 1
-pseudopodia 1250
-pseudopod 1
-pseudoscience/1 1
-pseudo 1
-pseudy
-pshaw/18 1
-psi/1 1
-psittacosis/2 1
-psoriasis/2 1
-psst 1
-PST/2 1
-psych/464 1
-psyche/1 1
-Psyche/2 1
-psyche/6 1
-psychedelia 1
-psychedelic/1 1
-psychedelically
-psychiatric 1
-psychiatrist/1 1
-psychiatry/2 1
-psychic/1 1
-psychical/8 1
-psychic 1
-psycho/1 1
-psychoactive 1
-psychoanalysis/2 1
-psychoanalyst/1 1
-psychoanalytic
-psychoanalytical/8 1
-psychoanalyze/6 1
-psychobabble/2 1
-psychodrama/1 1
-psychogenic
-psychokinesis 1
-psychokinetic
-psycholinguistic/10 1
-psycholinguists
-psychological/8 1
-psychologist/1 1
-psychology/15 1
-psychometric 1
-psychoneuroses 1251
-psychoneurosis/2 1252
-psychopath/1 1
-psychopathic 1
-psychopathology 1
-psychopathy/2 1
-psychos/89 1
-psychoses 1253
-psychosis/2 1254
-psychosocial
-psychosomatic 1
-psychotherapist/1 1
-psychotherapy/15 1
-psychotic/1 1
-psychotically
-psychotic 1
-psychotropic/1 1
-psycho 1
-psych's
-pt
-PT
-Pt/2 1
-PTA
-Ptah/2 1
-ptarmigan/1 1
-pterodactyl/1 1
-pterosaurs
-PTO
-Ptolemaic
-Ptolemy/15 1
-ptomaine/1 1
-Pu/2 1
-pub/18 1
-pubertal
-puberty/2 1
-pubes/2 1
-pubescence/2 1
-pubescent
-pubes's 1255
-pubes 1256
-pubic 1
-pubis/2 1257
-public/37 1
-publican/1 1
-publication/1 1
-publicist/1 1
-publicity/2 1
-publicize/6 1
-publish/7 1
-publishable
-publisher/1 1
-publishing/2 1
-Puccini
-puce/2 1
-Puck
-puck/18 1
-pucker/23 1
-Puckett/3
-puckish/16 1
-pud/10 1
-pudding/1 1
-puddle/28 1
-puddling/2 1
-pudenda 1258
-pudendum/2 1259
-pudgy/49 1
-Puebla
-pueblo/1 1
-Pueblo 1
-puerile 1
-puerility/2 1
-puerperal
-puff/78 1
-puffball/1 1
-puffer/1 1
-puffin/1 1
-puffing 1
-puffy/49 1
-pug/18 1
-Puget/3
-Pugh/3
-pugilism/2 1
-pugilist/1 1
-pugilistic
-pugnacious/16 1
-pugnacity/2 1
-puissant 1
-puke/28 1
-pukka 1
-Pulaski 1
-pulchritude/2 1
-pulchritudinous
-pule/6 1
-pules 1260
-puling 1
-Pulitzer 1
-pull/23 1
-pullback/1 1
-puller/1 1
-pullet/1 1
-pulley/1 1
-pulling 1
-Pullman/1 1
-pullout/1 1
-pullover/1 1
-pullup/1 1
-pulmonary
-pulp/23 1
-pulpiness/3
-pulpit/1 1
-pulp 1
-pulpwood/2 1
-pulpy/34 1
-pulsar/1 1
-pulsate/6 1
-pulsation/1 1
-pulse/28 1
-pulverization/2 1
-pulverize/6 1
-puma/1 1
-pumice/18 1
-pummel/11 1
-pump/23 1
-pumper/1 1
-pumpernickel/2 1
-pumpkin/1 1
-pun/133 1
-Punch
-punch/22 1
-punchable
-punchbag/10 1
-punchbowl
-puncheon/1 1
-puncher/1 1
-punchline
-punchlines
-punchy/34 1
-punctilio/2 1
-punctilious/16 1
-punctual/8 1
-punctuality/2 1
-punctuate/6 1
-punctuation/1 1
-punctuational
-puncture/28 1
-pundit/1 1
-punditry/2 1
-pungency/2 1
-pungent/8 1
-Punic/2 1
-punish/7 1
-punishable
-punishing/8 1
-punishment/1 1
-punitive/8 1
-Punjab/2 1
-Punjabi/2 1
-punk/188 1
-punker 1
-punkin/1 1
-punnet/10 1
-punning 1
-punster/1 1
-punt/23 1
-punter/1 1
-puny/49 1
-pup/47 1
-pupa/53 1
-pupal 1
-pupate/6 1
-pupil/1 1
-pupillage 1
-puppet/1 1
-puppeteer/1 1
-puppetry/2 1
-puppet 1
-puppy/167 1
-Purana 1
-purblind 1
-Purcell
-purchasable
-purchase/28 1
-purchaser/1 1
-purdah/2 1
-Purdue/3
-pure/465 1
-purebred/1 1
-puree/63 1
-purgative/1 1
-purgatorial
-Purgatory
-purgatory/15 1
-purge/28 1
-purger/1 1
-purging 1
-purification/2 1
-purifier/1 1
-purify/31 1
-Purim/1 1
-Purina/3
-purine/1 1
-purism/2 1
-purist/1 1
-puristic
-puritan/1 1
-puritanical/8 1
-Puritanism/1 1
-puritanism/2 1
-Puritan 1
-purity/15 1
-purl/23 1
-purlieu/1 1
-purling 1
-purloin/11 1
-purple/466 1
-purplish 1
-purport/23 1
-purported/8 1
-purpose/28 1
-purposeful/16 1
-purposeless/83 1
-purposely
-purposive 1
-purr/23 1
-purring 1
-purse/28 1
-purser/1 1
-pursuance/2 1
-pursuant 1
-pursue/6 1
-pursuer/1 1
-pursuing 1
-pursuit/1 1
-purulence/2 1
-purulent 1
-Purus/2 1
-purvey/11 1
-purveyance/2 1
-purveyor/1 1
-purview/2 1
-pus/228 1261
-Pusan/2 1
-Pusey
-push/22 1
-pushable
-pushbike
-pushbikes
-pushcart/1 1
-pushchair/10 1
-pusher/1 1
-pushily 1
-pushing 1
-Pushkin
-pushover/1 1
-pushpin/10 1
-Pushtu/3
-pushup/1 1
-pushy/49 1
-pusillanimity/2 1
-pusillanimous/8 1
-puss/4 1
-pussy/42 1
-pussycat/1 1
-pussyfoot/5 1
-pustular
-pustule/1 1
-put/128 1
-putative/8 1
-putdown/1 1
-Putin/3
-Putnam
-putout/1 1
-putrefaction/2 1
-putrefactive
-putrefy/31 1
-putrescence/2 1
-putrescent
-putridity 1
-putrid 1
-putsch/4 1
-putt/23 1
-puttee/1 1
-putter/23 1
-putterer/1 1
-putting 1
-putz/205 1
-putty/56 1
-puttying 1262
-Puzo/3
-puzzle/28 1
-puzzled 1
-puzzlement/2 1
-puzzler/1 1
-puzzling/8 1
-PVC/2 1
-pvt
-Pvt
-PW
-PX
-Pygmalion/2 1
-pygmy/15 1
-Pygmy/15 1
-pygmy 1
-Pyle/3
-pylon/1 1
-pyloric 1
-pylori 1263
-pylorus/2 1264
-Pym
-Pynchon/3
-Pyongyang/2 1
-pyorrhea/2 1
-Pyotr/3
-pyramid/23 1
-pyramidal 1
-pyre/1 1
-Pyrenees/2 1
-Pyrex/4 1
-pyridine 1
-pyrimidine/1 1
-pyrite/130 1
-pyrolysis 1
-pyrolyze 1
-pyromania/2 1
-pyromaniac/1 1
-pyrotechnic/32 1
-pyrotechnical 1
-pyroxene/10 1
-Pyrrhic
-Pythagoras/2 1
-Pythagorean 1
-Pythias
-python/1 1
-Python/2 1
-pyx/40 1
-pyxes 1265
-pzazz
-q
-Q
-Qaddafi/3
-Qantas/3
-Qatar/2 1
-Qatari/1 1
-QB
-QC
-QED
-Qingdao
-Qiqihar/3
-QM
-Qom/3
-qr
-qt
-qty
-Quaalude/2 1
-quack/23 1
-quackery/2 1
-quackish
-quack 1
-quad/18 1
-quadrangle/1 1
-quadrangular
-quadrant/1 1
-quadraphonic 1
-quadratic/51 1
-quadrature/10 1
-quadrennial 1
-quadrennium/1 1
-quadriceps/4 1
-quadrilateral/1 1
-quadrille/18 1
-quadrillion/1 1
-quadripartite 1
-quadriplegia/2 1
-quadriplegic/1 1
-quadrivium/2 1
-quadrophonic 1
-quadruped/1 1
-quadrupedal
-quadruple/467 1
-quadruplet/1 1
-quadruplicate/28 1
-quadruplication/2 1
-quadrupole 1
-quad 1
-quaff/23 1
-quagmire/18 1
-quahaug/1 1
-quahog/1 1
-quail/23 1
-quailing 1
-quaint/21 1
-quake/28 1
-Quaker/1 1
-Quakerism/1 1
-Quaker 1
-quaking 1
-quaky/34 1
-qualification/1 1
-qualified 1
-qualifier/1 1
-qualify/31 1
-qualifying 1
-qualitative/8 1
-quality/15 1
-qualm/1 1
-qualmish 1
-quandary/15 1
-quango/10 1
-quanta 1266
-quantifiable
-quantification/2 1
-quantifier/1 1
-quantify/31 1
-quantitative/8 1
-quantity/15 1
-quantization 1
-quantize/214 1
-quantum/2 1267
-Quaoar/3
-quarantine/28 1
-quark/1 1
-quarrel/23 1
-quarreler/1 1
-quarrelsome/33 1
-quarry/56 1
-quarrying 1
-quarrymen 1268
-quart/1 1
-quarter/210 1
-quarterback/23 1
-quarterdeck/1 1
-quarterfinal/1 1
-quartering 1
-quarterlies
-quarterly's
-quartermaster/1 1
-quarterstaff/2 1269
-quarterstaves 1270
-quartet/1 1
-quartette/1 1
-quartic/10 1
-quartile/10 1
-quarto/1 1
-quartz/2 1
-quartzite 1
-quasar/1 1
-quash/7 1
-quasilinear
-Quasimodo 1
-quasi 1
-Quaternary/2 1
-quaternary 1
-quaternion/10 1
-quatrain/1 1
-qua 1
-quaver/23 1
-quavering 1
-quavery 1
-quay/1 1
-Quayle/3
-quayside/10 1
-Que
-queasy/50 1
-Quebec/2 1
-Quebecker 1
-Quebecois
-Quechua/2 1
-Queen
-queen/23 1
-queening 1
-queenly/34 1
-Queens/2 1
-Queensland/2 1
-queer/52 1
-quell/11 1
-quench/7 1
-quenchable 1
-quencher/1 1
-quenching 1
-quenchless 1
-Quentin/3
-quern 1
-querulous/16 1
-query/56 1
-querying 1
-ques/89 1
-quest/23 1
-questing 1
-question/23 1
-questionable/19 1
-questioner/1 1
-questioning/30 1
-questionnaire/1 1
-Quetzalcoatl/2 1
-queue/28 1
-queuing 1
-Quezon/3
-quibble/28 1
-quibbler/1 1
-quibbling 1
-quiche/1 1
-quick/410 1
-quicken/11 1
-quickening 1
-quickfire
-quickie/1 1
-quicklime/2 1
-quicksand/1 1
-quicksilver/2 1
-quickstep/18 1
-quid/1 1
-quiesce/214 1
-quiescence/2 1
-quiescent/8 1
-quiet/52 1
-quieten/11 1
-quietening 1
-quieter 1
-quieting 1
-quietism 1
-quietude/2 1
-quietus/4 1
-quiff/10 1
-quill/18 1
-quilt/23 1
-quilter/1 1
-quilting/2 1
-quin/10 1
-quince/1 1
-quincentenary 1
-Quincy/3
-quine/10 1
-quinine/2 1
-Quinn
-quinquennial 1
-quinsy/2 1
-quint/1 1
-quintessence/1 1
-quintessential/8 1
-quintet/1 1
-quintette/1 1
-quintic 1
-Quintilian/3
-quintillion 1
-Quinton/3
-quintuple/28 1
-quintuplet/1 1
-quintuple 1
-quip/47 1
-quipper 1
-quipster/1 1
-quire/18 1
-Quirinal 1
-quirk/23 1
-quirky/49 1
-quirt/18 1
-Quisling/3
-quisling/1 1
-quit/88 1
-quitclaim/18 1
-quite 1
-Quito/2 1
-quittance/2 1
-quitter/1 1
-quiver/23 1
-quivering/8 1
-quivery 1
-Quixote 1
-quixotic/39 1
-Quixotism/3
-quiz/306 1
-quizzer/1 1
-quizzical/8 1
-quizzing 1
-Qumran
-quoin/18 1
-quoit/23 1
-quondam 1
-Quonset 1
-quorate
-quorum/1 1
-quot
-quota/1 1
-quotability/2 1
-quotable 1
-quota's 1271
-quota 1272
-quotation/1 1
-quote/28 1
-quoter 1
-quoth 1
-quotidian 1
-quotient/1 1
-Qur'an
-QWERTY
-qwerty 1
-R/2 1
-r/10 1
-Ra/468 1
-Rabat/2 1
-rabbet/23 1
-rabbi/1 1
-rabbinate/2 1
-rabbinic
-rabbinical
-rabbit/23 1
-rabble/18 1
-Rabelais/2 1
-Rabelaisian
-rabid/16 1
-rabies/2 1
-Rabin/3
-raccoon/1 1
-race/139 1
-racecourse/1 1
-racegoer/10 1
-racehorse/1 1
-raceme/1 1
-racer/1 1
-racetrack/1 1
-raceway/1 1
-Rachael/3
-Rachel/3
-Rachelle/3
-Rachmaninoff
-racial/8 1
-racialism/2 1
-racialist/1 1
-Racine/2 1
-racing/2 1
-racism/2 1
-racist/1 1
-rack/23 1
-racket/23 1
-racketeer/23 1
-racketeering/2 1
-racking 1
-raconteur/1 1
-racoons
-racoon's
-racquet/18 1
-racquetball/1 1
-racy/50 1
-rad/469 1
-radar/1 1
-radarscope/1 1
-Radcliffe/3
-raddled
-radial/30 1
-radian/10 1
-radiance/2 1
-radiant/8 1
-radiate/6 1
-radiation/1 1
-radiative
-radiatively
-radiator/1 1
-radical/30 1
-radicalism/2 1
-radicalization/2 1
-radicalize/6 1
-radicchio/2 1
-radii 1273
-radio/417 1
-radioactive/8 1
-radioactivity/2 1
-radioastronomical
-radiocarbon/2 1
-radiogalaxies
-radiogalaxy
-radiogram/1 1
-radiographer/1 1
-radiography/2 1
-radioisotope/1 1
-radiological 1
-radiologist/1 1
-radiology/2 1
-radioman/2 1274
-radiomen 1275
-radiometer/1 1
-radiometric
-radiometry/2 1
-radionuclide 1
-radiophone/1 1
-radioscopy/2 1
-radiosonde/1 1
-radiotelegraph/18 1
-radiotelegraphy/2 1
-radiotelephone/18 1
-radiotherapist/1 1
-radiotherapy/2 1
-radio 1
-radish/4 1
-radium/2 1
-radius/2 1276
-radix 1
-radon/2 1
-RAF/2 1
-Rafael/3
-raffia/2 1
-raffish/16 1
-raffle/28 1
-Raffles/3
-raffling 1
-raft/23 1
-rafter/18 1
-rafting/2 1
-rag/92 1
-raga/1 1
-ragamuffin/1 1
-ragbag/2 1
-rage/28 1
-rages 1277
-ragga
-ragged/21 1
-raggedy/34 1
-ragging 1
-ragingly 1
-raglan/1 1
-Ragnarok/2 1
-ragout/18 1
-ragtag/10 1
-ragtime/2 1
-ragweed/2 1
-ragwort 1
-rah 1
-raid/23 1
-raider/1 1
-rail/23 1
-railcard/10 1
-railing/1 1
-raillery/15 1
-railroad/23 1
-railroader/1 1
-railroading/2 1
-railway/1 1
-railwayman 1278
-railwaymen 1279
-raiment/2 1
-rain/23 1
-rainbow/1 1
-raincloud
-rainclouds
-raincoat/1 1
-raindrop/1 1
-rainfall/1 1
-rainforest/10 1
-Rainier
-rainless 1
-rainmaker/1 1
-rainmaking/2 1
-rainproof 1
-rainstorm/1 1
-rainswept
-rainwater/2 1
-rainy/34 1
-raise/28 1
-raiser/1 1
-raisin/1 1
-raising 1
-raja/1 1
-rajah/1 1
-raj 1
-rake/28 1
-rakes 1280
-raking 1
-rakish/16 1
-Raleigh/2 1
-Ralph/3
-rally/56 1
-rallying 1
-ram/1 1
-RAM/1 1
-ram/114 1
-Rama/2 1
-Ramada/3
-Ramadan/1 1
-Ramakrishna
-Ramanujan/3
-Ramayana 1
-ramble/28 1
-rambler/1 1
-rambling/10 1
-Rambo/3
-rambunctious
-rambunctiously
-rambunctiousness/3
-ramekin/1 1
-ramequin/1 1
-ramie/2 1
-ramification/1 1
-ramify/31 1
-Ramirez/3
-Ramiro/3
-ramjet/1 1
-Ramon/3
-Ramona/3
-Ramos
-ramp/62 1
-rampage/28 1
-rampancy/2 1
-rampant/8 1
-rampart/18 1
-ramrod/113 1
-Ramsay
-Ramses
-Ramsey/3
-ramshackle 1
-ranch/22 1
-rancher/1 1
-ranching/2 1
-rancid/33 1
-rancidity/2 1
-rancor/2 1
-rancorous/8 1
-Rand
-rand/18 1
-Randal/3
-Randall/3
-Randell/3
-Randi/3
-randiness/3
-Randolph/3
-random/470 1
-randomization/2 1
-randomize/6 1
-Randy/3
-randy/34 1
-ranee/1 1
-range/28 1
-rangefinder/10 1
-ranger/1 1
-ranginess/3
-Rangoon/2 1
-rang 1281
-rangy/34 1
-rani/1 1
-rank/52 1
-ranker 1
-Rankin
-Rankine/2 1
-ranking/1 1
-rankle/6 1
-rankling 1
-ransack/11 1
-ransom/23 1
-ransomer/1 1
-ran 1282
-rant/23 1
-ranter/1 1
-ranting/10 1
-Raoul/3
-rap/47 1
-rapacious/16 1
-rapacity/2 1
-rape/28 1
-raper/1 1
-rapeseed/2 1
-Raphael
-rapid/183 1
-rapidity/2 1
-rapidness/3
-rapier/1 1
-rapine/2 1
-rapist/1 1
-rappel/213 1
-rappelling 1
-rapper/1 1
-rapport/1 1
-rapporteur/10 1
-rapprochement/1 1
-rapscallion/1 1
-raptly 1
-raptness/3
-raptor/10 1
-rapt 1
-rapture/18 1
-rapturous/8 1
-Rapunzel/3
-Raquel/3
-rare/104 1
-rarebit/1 1
-rarefaction/1 1
-rarefy/31 1
-rarity/15 1
-Rasalgethi/3
-Rasalhague/3
-rascal/30 1
-rash/471 1
-rasher/1 1
-Rasmussen/3
-rasp/23 1
-raspberry/15 1
-rasper 1
-rasping 1
-Rasputin
-raspy/34 1
-Ra's 1283
-Rastaban/3
-Rastafarian/2 1
-raster 1
-Ra 1284
-rat/109 1
-ratable 1
-ratatouille/2 1
-ratbag/10 1
-ratchet/23 1
-rate/28 1
-rateable 1
-ratepayer/10 1
-rater/1 1
-rather
-Rather/3
-rathskeller/1 1
-ratification/1 1
-ratifier/1 1
-ratify/31 1
-rating/1 1
-ratio/1 1
-ratiocinate/6 1
-ratiocination/2 1
-ration/23 1
-rational/30 1
-rationale/1 1
-rationalism/2 1
-rationalist/1 1
-rationalistic
-rationality/15 1
-rationalization/1 1
-rationalize/6 1
-Ratliff/3
-ratlike 1
-ratlin/1 1
-ratline/1 1
-rattan/1 1
-ratter/1 1
-rattle/28 1
-rattlebrain/1 1
-rattlebrained
-rattler/1 1
-rattlesnake/1 1
-rattletrap/1 1
-rattling/10 1
-rattly/34 1
-rattrap/1 1
-ratty/34 1
-raucous/16 1
-Raul/3
-raunchily 1
-raunchiness/3
-raunchy/34 1
-ravage/232 1
-ravager/1 1
-rave/139 1
-Ravel
-ravel/23 1
-raveling/10 1
-raven/23 1
-ravening 1
-ravenous/8 1
-raven 1
-raver/10 1
-ravine/18 1
-raving/30 1
-ravioli/1 1
-ravish/7 1
-ravisher/1 1
-ravishing/8 1
-ravishment/2 1
-raw/187 1
-Rawalpindi
-rawboned
-rawhide/2 1
-Ray
-ray/18 1
-RayBan/3
-Rayburn/3
-Rayleigh
-Raymond/3
-Raymundo/3
-rayon/2 1
-raze/6 1
-razor/86 1
-razorback/1 1
-razorbills
-razorblades
-razz/22 1
-razzamatazz 1
-razzmatazz/2 1
-Rb/2 1
-RBI 1
-RC
-RCA/3
-RCMP
-rcpt
-rd
-Rd
-RD
-RDA
-re/1 1
-Re/2 1
-reabsorb/11 1
-reaccessed
-reach/22 1
-reachable 1
-reachieved
-reacquaint/11 1
-reacquire/6 1
-reacquisition 1
-react/11 1
-reactant/1 1
-reaction/1 1
-reactionary/15 1
-reactivate/6 1
-reactivation/2 1
-reactive 1
-reactivity/60 1
-reactor/1 1
-read/86 1
-readability/15 1
-readable 1
-readdress/7 1
-reader/1 1
-readership/1 1
-reading/1 1
-Reading/2 1
-readjust/11 1
-readjustment/1 1
-readmission/2 1
-readmit/12 1
-readopt/11 1
-readout/1 1
-ready/472 1
-reaffirm/11 1
-reaffirmation/1 1
-reafforestation 1
-Reagan/2 1
-Reaganomics/3
-reagent/1 1
-real/38 1
-realign/11 1
-realignment/1 1
-realism/2 1
-realist/1 1
-realistic/39 1
-realist 1
-reality/15 1
-realizable 1
-realization/1 1
-realize/6 1
-reallocate/6 1
-reallocation/2 1
-realm/1 1
-realpolitik/2 1
-realtor/1 1
-Realtor 1
-realty/2 1
-really 1
-ream/23 1
-reamer/1 1
-reanalysis/2 1
-reanalyze/6 1
-reanimate/6 1
-reanimation/2 1
-reap/11 1
-reaper/1 1
-reappear/11 1
-reappearance/1 1
-reapplication/1 1
-reapply/31 1
-reappoint/11 1
-reappointment/2 1
-reapportion/11 1
-reapportionment/2 1
-reappraisal/1 1
-reappraise/6 1
-rear/473 1
-rearguard/1 1
-rearm/11 1
-rearmament/2 1
-rearmost 1
-rearrange/6 1
-rearrangement/1 1
-rearrest/23 1
-rearward/10 1
-reascend/11 1
-reason/23 1
-reasonable/29 1
-reasoned 1
-Reasoner/3
-reasoner/1 1
-reasoning/2 1
-reasonless 1
-reassemble/6 1
-reassembly/3
-reassert/11 1
-reassertion/2 1
-reassess/7 1
-reassessment/1 1
-reassign/11 1
-reassignment/1 1
-reassuming
-reassurance/1 1
-reassure/6 1
-reassured 1
-reassuring/8 1
-reattach/7 1
-reattachment/2 1
-reattain/11 1
-reattempt/11 1
-reauthorize/6 1
-reawaken/11 1
-reawakening 1
-Reba/3
-rebalanced
-rebate/28 1
-Rebecca
-Rebekah
-rebel/213 1
-rebelling 1
-rebellion/1 1
-rebellious/16 1
-rebel 1
-rebid/474 1
-rebind/121 1285
-rebirth/1 1
-reboil/11 1
-rebook 1
-reboot/11 1
-reborn 1
-rebound/23 1286
-rebroadcast/86 1
-rebuff/23 1
-rebuild/382 1
-rebuke/28 1
-rebukingly
-reburial/1 1
-rebury/31 1
-rebus/4 1
-rebut/12 1
-rebuttal/1 1
-rec/2 1
-recalcitrance/2 1
-recalcitrant 1
-recalculate/6 1
-recalculation/1 1
-recalibrate/475 1
-recalibration 1
-recall/23 1
-recant/11 1
-recantation/1 1
-recap/47 1
-recapitalization 1
-recapitalize/6 1
-recapitulate/6 1
-recapitulation/1 1
-recapture/28 1
-recast/86 1
-recasting/2 1
-recce/70 1
-recd
-rec'd
-recede/6 1
-receipt/23 1
-receivable/32 1
-receive/6 1
-receiver/1 1
-receivership/2 1
-recension 1
-recent/21 1
-receptacle/1 1
-reception/1 1
-receptionist/1 1
-receptive/16 1
-receptivity/2 1
-receptor/1 1
-recess/22 1
-recession/1 1
-recessional/1 1
-recessionary
-recessive/1 1
-recharge/6 1
-rechargeable
-recharger 1
-recharge's
-recharter/11 1
-recheck/23 1
-recherche 1
-rechristen/11 1
-recidivism/2 1
-recidivist/1 1
-Recife/2 1
-recipe/1 1
-recipient/1 1
-reciprocal/30 1
-reciprocate/6 1
-reciprocation/2 1
-reciprocity/2 1
-recirculate/6 1
-recirculation 1
-recital/1 1
-recitalist/1 1
-recitation/1 1
-recitative/1 1
-recite/6 1
-reciter/1 1
-reckless/16 1
-reckon/11 1
-reckoner 1
-reckoning/1 1
-reclaim/5 1
-reclaimable
-reclaimer 1
-reclamation/1 1
-reclassification/2 1
-reclassify/31 1
-recline/6 1
-recliner/1 1
-recluse/1 1
-reclusive 1
-recode/6 1
-recognition/1 1
-recognizable/19 1
-recognizance/1 1
-recognize/6 1
-recognizer/10 1
-recoil/23 1
-recollect/11 1
-recollected 1
-recollection/1 1
-recolonization/2 1
-recolonize/6 1
-recolor/11 1
-recombinant 1
-recombination 1
-recombine/6 1
-recommence/6 1
-recommencement/2 1
-recommend/11 1
-recommendable
-recommendation/1 1
-recommission/5 1
-recommit/12 1
-recompense/28 1
-recompilation/10 1
-recompile/251 1
-recompose/6 1
-recomputable
-recompute/6 1
-recon/58 1
-reconcilable 1
-reconcile/6 1
-reconcilement 1
-reconciliation/1 1
-recondite 1
-recondition/11 1
-reconfigurable
-reconfiguration/10 1
-reconfigure/6 1
-reconfirm/11 1
-reconfirmation/1 1
-reconnaissance/1 1
-reconnect/11 1
-reconnection 1
-reconnoiter/11 1
-reconquer/11 1
-reconquest/2 1
-reconsecrate/6 1
-reconsecration/2 1
-reconsider/11 1
-reconsideration/2 1
-reconsign/11 1
-reconstitute/6 1
-reconstitution/2 1
-reconstruct/11 1
-reconstruction/1 1
-Reconstruction/2 1
-reconstructive 1
-reconsult
-reconsulted
-reconsulting
-recontact/5 1
-recontaminate/6 1
-recontribute
-reconvene/6 1
-reconversion 1
-reconvert/11 1
-recook/11 1
-recopy/31 1
-record/78 1
-recordable
-recorder/1 1
-recording/1 1
-recordists
-recount/23 1
-recoup/5 1
-recouple 1
-recourse/2 1
-recover/11 1
-recoverable 1
-recovery/15 1
-recreant/1 1
-recreate/6 1
-recreation/1 1
-recreational
-recriminate/6 1
-recrimination/1 1
-recriminatory
-recross/7 1
-recrudesce/6 1
-recrudescence/2 1
-recrudescent
-recruit/23 1
-recruiter/1 1
-recruitment/2 1
-recrystallization 1
-recrystallize/6 1
-rectal 1
-rectally 1
-rectangle/1 1
-rectangular 1
-rectifiable
-rectification/1 1
-rectifier/1 1
-rectify/31 1
-rectilinear
-rectitude/2 1
-recto/1 1
-rector/1 1
-rectory/15 1
-rec 1
-rectum/1 1
-recumbent
-recuperate/6 1
-recuperation/2 1
-recuperative 1
-recur/13 1
-recurrence/1 1
-recurrent/8 1
-recursion/10 1
-recursive
-recursively
-recyclable/1 1
-recycle/28 1
-recyclers
-recycling/2 1
-red/1 1
-Red/1 1
-red/476 1
-redact/11 1
-redaction/2 1
-redactor/1 1
-redbird/1 1
-redbreast/1 1
-redbrick 1
-redcap/1 1
-redcoat/1 1
-redcurrant/10 1
-redden/11 1
-redder 1
-reddish 1
-redeclaration
-redecorate/6 1
-redecoration/2 1
-rededicate/6 1
-redeem/11 1
-redeemable 1
-redeemer/1 1
-Redeemer/2 1
-redefine/6 1
-redefiner
-redefinition/1 1
-redeliver/11 1
-redelivery 1
-redemption/2 1
-redemptive
-redeploy/11 1
-redeployment/2 1
-redeposit/23 1
-redeposition 1
-redesign/11 1
-redetermine/6 1
-redevelop/11 1
-redevelopment/1 1
-Redford/3
-Redgrave/3
-redhead/1 1
-redheaded
-redial/23 1
-redialing 1
-redirect/11 1
-redirection 1
-rediscover/11 1
-rediscovery/15 1
-rediscussed
-redisplay/195 1
-redissolve/6 1
-redistributable
-redistribute/6 1
-redistribution/2 1
-redistributive
-redistrict/11 1
-redivide/6 1
-redlining/2 1
-Redmond
-redneck/1 1
-redo/413 1
-redolence/2 1
-redolent 1
-redouble/43 1
-redoubt/18 1
-redoubtable/19 1
-redound/11 1
-redounding 1
-redraft/5 1
-redraw/301 1287
-redress/22 1
-redrew 1288
-redshift/10 1
-redskin/1 1
-reduce/6 1
-reducer/1 1
-reducibility 1
-reducible 1
-reduction/1 1
-reductionism 1
-reductionist/10 1
-reductive 1
-redundancy/15 1
-redundant/8 1
-reduplicate/6 1
-reduplication/2 1
-redwood/1 1
-redye/46 1
-Reebok/3
-reecho/7 1
-reed/1 1
-Reed/2 1
-reed/58 1
-reedit/11 1
-reeducate/6 1
-reeducation/2 1
-reedy/49 1
-reef/115 1
-reefer/1 1
-reefing 1
-reek/23 1
-reeking 1
-reel/23 1
-reelect/11 1
-reelection/1 1
-reeling 1
-reembark/11 1
-reembody/31 1
-reemerge/6 1
-reemergence/2 1
-reemphasize/6 1
-reemploy/11 1
-reemployment/2 1
-reenact/11 1
-reenactment/1 1
-reenforce/6 1
-reengage/6 1
-reenlist/11 1
-reenlistment/2 1
-reenter/11 1
-reentry/15 1
-reequip/105 1
-Reese/3
-reestablish/7 1
-reestablishment/2 1
-reevaluate/6 1
-reevaluation/1 1
-reeve/73 1289
-Reeves
-reexamination/1 1
-reexamine/6 1
-reexplain/11 1
-reexport/11 1
-ref/203 1
-reface/6 1
-refashion/11 1
-refasten/11 1
-refection/2 1
-refectory/15 1
-refer/13 1
-referable
-referee/63 1
-reference/28 1
-referencer
-referendum/1 1
-referent/1 1
-referential
-referentially
-referral/1 1
-referrer/1 1
-refile/6 1
-refill/23 1
-refillable
-refillings
-refinance/6 1
-refine/6 1
-refined 1
-refinement/1 1
-refiner/1 1
-refinery/15 1
-refining 1
-refinish/7 1
-refit/109 1
-refitting 1
-reflate/6 1
-reflation/10 1
-reflationary
-reflect/11 1
-reflectance 1
-reflecting 1
-reflection/1 1
-reflectional
-reflective/83 1
-reflectivity 1
-reflector/1 1
-reflex/40 1
-reflexion/1 1
-reflexive/209 1
-reflexivity 1
-reflexology 1
-reflex 1
-reflooring
-reflux/241 1
-refocus/7 1
-refold/11 1
-reforest/11 1
-reforestation/2 1
-reforge/6 1
-reform/23 1
-reformable 1
-reformat/477 1
-reformation/1 1
-Reformation/1 1
-reformative 1
-reformatory/15 1
-reformed 1
-reformer/1 1
-reformist/10 1
-reformulate/6 1
-reformulation/1 1
-refortify/31 1
-refract/11 1
-refraction/1 1
-refractive 1
-refractors
-refractory/15 1
-refrain/23 1
-refreeze/14 1290
-refresh/7 1
-refreshable
-refresher/1 1
-refreshing/8 1
-refreshment/130 1
-refrigerant/1 1
-refrigerate/6 1
-refrigeration/2 1
-refrigerator/1 1
-refrozen 1291
-refroze 1291
-refuel/11 1
-refuge/18 1
-refugee/1 1
-Refugio/3
-refulgence/2 1
-refulgent 1
-refund/23 1
-refundable
-refurbish/7 1
-refurbishment/1 1
-refurnish/7 1
-refusal/1 1
-refuse/28 1
-refuseniks
-refuse 1
-refutable 1
-refutation/1 1
-refute/6 1
-refuter/1 1
-regain/11 1
-regal/8 1
-regale/43 1
-regalement/2 1
-regalia/2 1
-regal 1
-regard/185 1
-regardless 1
-regather/11 1
-regatta/1 1
-regency/15 1
-regeneracy/2 1
-regenerate/6 1
-regeneration/1 1
-regenerative 1
-regent/1 1
-regexp
-regexps
-reggae/2 1
-Reggie/3
-regicide/1 1
-regime/1 1
-regimen/1 1
-regiment/23 1
-regimental 1
-regimentation/2 1
-Regina/53 1
-Reginald/3
-region/1 1
-regional/8 1
-regionalism/1 1
-regional 1
-register/23 1
-registrable
-registrant/1 1
-registrar/1 1
-registration/1 1
-registry/15 1
-regnant 1
-Regor/3
-regrade/6 1
-regress/22 1
-regression/1 1
-regressive 1
-regret/109 1
-regretful/8 1
-regrettable/19 1
-regrew 1292
-regrind/121 1293
-reground 1294
-regroup/11 1
-regrow/301 1295
-regrowth/2 1
-reg 1
-regular/30 1
-regularity/15 1
-regularization/2 1
-regularize/6 1
-regulate/6 1
-regulation/1 1
-regulative 1
-regulator/1 1
-regulatory
-Regulus/2 1
-regurgitate/6 1
-regurgitation/2 1
-rehab/136 1
-rehabilitate/6 1
-rehabilitation/2 1
-rehabilitative
-rehang/11 1296
-rehash/22 1
-rehear/46 1
-rehearing/1 1
-rehears/7 1
-rehearsal/1 1
-rehearse/6 1
-rehearsing 1
-reheat/11 1
-rehi
-rehire/6 1
-Rehnquist
-rehouse/6 1
-rehousing 1
-rehung 1297
-rehydrate 1
-Reich/2 1
-Reid
-reign/23 1
-reignite/6 1
-Reilly/3
-reimbursable
-reimburse/6 1
-reimbursement/1 1
-reimplementation
-reimplemented
-reimplementing
-reimporting
-reimpose/6 1
-rein/23 1
-Reinaldo/3
-reincarnate/6 1
-reincarnation/1 1
-reincorporate/6 1
-reincorporation/2 1
-reindeer/2 1
-reinfect/11 1
-reinfection/1 1
-reinforce/6 1
-reinforcement/1 1
-Reinhardt
-Reinhold/3
-reinitialization
-reinitialize
-reinitialized
-reinitializing
-reinoculate/6 1
-reinsert/11 1
-reinsertion/2 1
-reinspect/11 1
-reinstall/241 1
-reinstate/6 1
-reinstatement/2 1
-reinsurance 1
-reintegrate/6 1
-reintegration/2 1
-reinterpret/11 1
-reinterpretation/1 1
-reintroduce/6 1
-reintroduction/1 1
-reinvent/11 1
-reinvention/1 1
-reinvest/11 1
-reinvestigation 1
-reinvestment/2 1
-reinvigorate/6 1
-reissue/28 1
-REIT
-reiterate/6 1
-reiteration/1 1
-reiterative 1
-reject/23 1
-rejection/1 1
-rejig/117 1
-rejigger/11 1
-rejoice/6 1
-rejoicing/1 1
-rejoin/11 1
-rejoinder/1 1
-rejudge/6 1
-rejustified
-rejuvenate/6 1
-rejuvenation/1 1
-rejuvenatory
-rekindle/6 1
-rel
-relabel/11 1
-relabellings
-relapse/28 1
-relate/6 1
-related/33 1
-relater/1 1
-relation/1 1
-relational
-relationally
-relationship/1 1
-relative/30 1
-relativism/2 1
-relativist/10 1
-relativistic/39 1
-relativity/2 1
-relator 1
-relaunch/7 1
-relaunch's
-relax/7 1
-relaxant/1 1
-relaxation/1 1
-relaxed 1
-relaxer/1 1
-relaxingly
-relay/478 1
-relearn/11 1
-releasable
-release/28 1
-relegate/6 1
-relegation/2 1
-relent/11 1
-relenting 1
-relentless/16 1
-relevance/2 1
-relevancy/2 1
-relevant/8 1
-reliability/15 1
-reliable/19 1
-reliance/2 1
-reliant 1
-relic/1 1
-relict 1
-relief/123 1
-relieve/6 1
-relieved 1
-reliever/1 1
-relight/11 1
-religion/1 1
-religiosity 1
-religious/239 1
-reline/6 1
-relink/241 1
-relinquish/7 1
-relinquishment/2 1
-reliquary/15 1
-relish/22 1
-relivable
-relive/6 1
-reload/5 1
-relocatable
-relocate/6 1
-relocation/2 1
-relocked
-reluctance/2 1
-reluctant/8 1
-rely/31 1
-rem/1 1
-REM/1 1
-remade 1298
-remain/11 1
-remainder/23 1
-remake/73 1299
-remand/5 1
-remap/105 1
-remark/23 1
-remarkable/19 1
-remarkableness/3
-Remarque
-remarriage/1 1
-remarry/31 1
-remaster/11 1
-rematch/182 1
-rematerialized
-Rembrandt/2 1
-remeasure/6 1
-remediable 1
-remedial
-remedially
-remediation/2 1
-remedy/56 1
-remelt/11 1
-remember/11 1
-remembrance/1 1
-remigrate/6 1
-remind/11 1
-reminder/1 1
-Remington
-reminisce/6 1
-reminiscence/1 1
-reminiscent/8 1
-remiss/16 1
-remission/1 1
-remit/479 1
-remittance/1 1
-remix/156 1
-remnant/1 1
-remodel/11 1
-remold/11 1
-remonstrance/1 1
-remonstrant/1 1
-remonstrate/6 1
-remonstration/10 1
-remorse/2 1
-remorseful/8 1
-remorseless/16 1
-remortgage/6 1
-remote/25 1
-remould/11 1
-remount/23 1
-removable 1
-removal/1 1
-remove/28 1
-removed 1
-remover/1 1
-remunerate/6 1
-remuneration/1 1
-remunerative 1
-Remus/2 1
-Rena/3
-renaissance/1 1
-Renaissance/1 1
-renal 1
-rename/6 1
-renascence/1 1
-Renascence 1
-renascent
-renationalisation
-renationalized
-Renault/3
-rend/382 1
-render/23 1
-rendering/1 1
-rendezvous/22 1
-rendition/18 1
-Rene/3
-Renee/3
-renegade/28 1
-renege/43 1
-reneger/1 1
-renegotiable
-renegotiate/6 1
-renegotiation/2 1
-renew/11 1
-renewable 1
-renewal/1 1
-rennet/2 1
-rennin/2 1
-Reno/2 1
-Renoir
-renominate/6 1
-renomination/2 1
-renormalization 1
-renounce/43 1
-renouncement/2 1
-renovate/6 1
-renovation/1 1
-renovator/1 1
-renown/173 1
-renowned 1
-rent/23 1
-rental/1 1
-renter/1 1
-renucleated
-renumber/11 1
-renunciation/1 1
-reoccupation/2 1
-reoccupy/31 1
-reoccur/13 1
-reopen/11 1
-reopening 1
-reorder/23 1
-reorganization/1 1
-reorganize/6 1
-reorient/11 1
-reorientated
-reorientates
-reorientation/2 1
-reorient 1
-Rep
-rep/1 1
-repack/11 1
-repackage/6 1
-repaint/5 1
-repainting 1
-repair/23 1
-repairable 1
-repairer/1 1
-repairman/2 1300
-repairmen 1301
-repaper 1
-reparable 1
-reparation/130 1
-repartee/2 1
-repartition/241 1
-repast/18 1
-repatriate/28 1
-repatriation/1 1
-repave/6 1
-repay/312 1
-repayable
-repayment/1 1
-repeal/23 1
-repeat/23 1
-repeatability 1
-repeatable
-repeatably
-repeated/8 1
-repeater/1 1
-repeating/2 1
-repel/61 1
-repellant/1 1
-repellent/1 1
-repellingly
-repelling 1
-repent/11 1
-repentance/2 1
-repentant/8 1
-repent 1
-repercussion/1 1
-repertoire/1 1
-repertory/15 1
-repetition/1 1
-repetitious/33 1
-repetitiously
-repetitive/16 1
-rephotograph/5 1
-rephrase/6 1
-repine/6 1
-repining 1
-replace/6 1
-replaceable
-replacement/1 1
-replant/11 1
-replay/23 1
-replenish/7 1
-replenishment/2 1
-replete/480 1
-repletion/2 1
-replica/1 1
-replicable
-replica's 1302
-replica 1303
-replicas 1
-replicate/6 1
-replication/1 1
-replicator/10 1
-replier/10 1
-replotted
-replug
-replugged
-replugging
-reply/31 1
-reply's
-repopulate/6 1
-report/23 1
-reportable
-reportage/2 1
-reported/8 1
-reporter/1 1
-reporting 1
-reportorial 1
-repose/28 1
-reposeful 1
-reposition/5 1
-repository/15 1
-repossess/7 1
-repossession/1 1
-reprehend/11 1
-reprehensibility/2 1
-reprehensible/19 1
-reprehension/2 1
-represent/11 1
-representable
-representation/1 1
-representational
-representative/437 1
-Representative 1
-repress/7 1
-repression/1 1
-repressive/83 1
-reprice/6 1
-reprieve/28 1
-reprimand/23 1
-reprint/23 1
-reprisal/1 1
-reprise/73 1
-reprized
-reproach/22 1
-reproachable 1
-reproachful/83 1
-reprobate/18 1
-reprocess/7 1
-reproduce/6 1
-reproducer/1 1
-reproducibility 1
-reproducible/19 1
-reproduction/1 1
-reproductive/8 1
-reprogram/114 1
-reprogrammable
-reprojected
-reproof/23 1
-reprove/6 1
-reproving/8 1
-reps 1
-reptile/1 1
-reptilian/1 1
-republic/1 1
-republican/1 1
-Republican/1 1
-republicanism/2 1
-Republicanism 1
-republication/1 1
-republish/7 1
-repudiate/6 1
-repudiation/1 1
-repudiator/1 1
-repugnance/2 1
-repugnant
-repulse/28 1
-repulsion/1 1
-repulsive/16 1
-repurchase/43 1
-reputability/2 1
-reputable/19 1
-reputation/1 1
-repute/28 1
-reputed/8 1
-request/23 1
-requester 1
-requiem/1 1
-Requiem/1 1
-require/6 1
-requirement/1 1
-requiring 1
-requisite/1 1
-requisition/23 1
-requital/2 1
-requite/6 1
-requiter/1 1
-reran 1304
-reread/121 1
-rereading 1
-rerecord/11 1
-reredos 1
-reregistration 1
-rerolled
-reroute/6 1
-rerouteing
-rerun/442 1305
-resalable
-resale/1 1
-resat 1306
-rescale/6 1
-rescan
-rescanned
-rescanning
-rescans
-reschedule/6 1
-rescind/11 1
-rescission/2 1
-rescue/28 1
-rescuer/1 1
-reseal/11 1
-resealable
-research/22 1
-researcher/1 1
-reseated
-resection/1 1
-reseed/11 1
-reselect/195 1
-reselection 1
-resell/121 1307
-reseller/10 1
-resemblance/1 1
-resemble/6 1
-resend/481 1
-resent/11 1
-resentful/16 1
-resentment/1 1
-reserpine/2 1
-reservation/1 1
-reserve/28 1
-reserved/16 1
-reserve 1
-reservist/1 1
-reservoir/1 1
-reset/128 1
-resettable
-resettle/6 1
-resettlement/2 1
-resew/11 1
-reshape/6 1
-resharpen/11 1
-reship/105 1
-reshipment/2 1
-reshow/142 1
-reshuffle/28 1
-reside/6 1
-residence/1 1
-residency/15 1
-resident/1 1
-residential 1
-residual/1 1
-residuary
-residua 1308
-residue/1 1
-residuum/2 1309
-resign/11 1
-resignal
-resignation/1 1
-resigned/8 1
-resilience/2 1
-resiliency/2 1
-resilient/8 1
-resin/18 1
-resinous 1
-resiny 1
-resist/23 1
-resistance/1 1
-Resistance 1
-resistant 1
-resister/1 1
-resistible 1
-resistive/8 1
-resistivity 1
-resistless 1
-resistor/1 1
-resit/88 1310
-resiting
-resitting 1
-resizing
-resold 1311
-resole/6 1
-resolute/27 1
-resolution/1 1
-resolvability 1
-resolvable 1
-resolve/28 1
-resolved 1
-resolvent 1
-resolver/10 1
-resonance/1 1
-resonant/8 1
-resonate/6 1
-resonator/1 1
-resorption/2 1
-resort/23 1
-resound/11 1
-resounding/8 1
-resource/1 1
-resourced
-resourceful/16 1
-resourcing
-resow/126 1
-resp
-respecified
-respecify
-respect/23 1
-respectability/2 1
-respectable/19 1
-respecter/1 1
-respectful/16 1
-respective/8 1
-respell/11 1
-respelling 1
-respiration/2 1
-respirator/1 1
-respiratory
-respire/6 1
-respite/18 1
-resplendence/2 1
-resplendent/8 1
-respond/5 1
-respondent/1 1
-responder/10 1
-response/1 1
-responsibility/15 1
-responsible/19 1
-responsive/16 1
-respray/11 1
-rest/23 1
-restaff/11 1
-restart/23 1
-restartable
-restate/6 1
-restatement/1 1
-restaurant/1 1
-restauranteur/1 1
-restaurateur/1 1
-restful/85 1
-resting 1
-restitch/7 1
-restitution/2 1
-restive/16 1
-restless/16 1
-restock/11 1
-restoration/1 1
-Restoration/2 1
-restorative/1 1
-restore/6 1
-restorer/1 1
-restrain/11 1
-restrained 1
-restrainer/1 1
-restraint/1 1
-restrengthen/11 1
-restrict/11 1
-restricted 1
-restriction/1 1
-restrictive/16 1
-restring/121 1312
-restroom/1 1
-restructure/6 1
-restructuring/1 1
-restrung 1313
-restudy/362 1
-restyle/6 1
-restyling 1
-resubmission/10 1
-resubmit/12 1
-resubscribe/6 1
-resubstitute
-result/23 1
-resultant/1 1
-resulting 1
-resume/28 1
-resumption/1 1
-resupply/31 1
-resurface/6 1
-resurgence/1 1
-resurgent
-resurrect/11 1
-resurrection/1 1
-Resurrection 1
-resurvey/5 1
-resuscitate/6 1
-resuscitation/2 1
-resuscitator/1 1
-resynchronization
-resynchronize/6 1
-retail/78 1
-retailer/1 1
-retailing 1
-retain/11 1
-retainer/1 1
-retake/263 1314
-retaking 1
-retaliate/6 1
-retaliation/1 1
-retaliative
-retaliatory
-retard/23 1
-retardant/1 1
-retardation/2 1
-retarder/1 1
-retaught 1315
-retch/156 1
-reteach/125 1316
-retell/121 1317
-retelling 1
-retention/1 1
-retentive/16 1
-retentivity 1
-retest/23 1
-rethink/86 1318
-rethought 1319
-reticence/2 1
-reticent/8 1
-reticular 1
-reticulated
-reticulation/1 1
-reticule/10 1
-reticulum 1
-retie/122 1320
-retina/1 1
-retinal 1
-retinitis 1
-retinue/1 1
-retire/6 1
-retired 1
-retiree/1 1
-retirement/1 1
-retiring 1
-retitled
-retitling
-retold 1321
-retook 1322
-retool/11 1
-retort/23 1
-retouch/22 1
-retrace/6 1
-retract/11 1
-retractable
-retractile
-retraction/1 1
-retrain/11 1
-retransmission/10 1
-retransmit/12 1
-retread/23 1323
-retreat/23 1
-retreating 1
-retrench/7 1
-retrenchment/1 1
-retrial/1 1
-retribution/1 1
-retributive 1
-retrievable
-retrieval/1 1
-retrieve/28 1
-retriever/1 1
-retrieving 1
-retro/1 1
-retroactive/8 1
-retrodden 1324
-retrod 1324
-retrofire/6 1
-retrofit/12 1
-retrofit's
-retrofitting 1
-retrograde/6 1
-retrogress/7 1
-retrogression/2 1
-retrogressive
-retrorocket/1 1
-retrospect/23 1
-retrospection/2 1
-retrospective/30 1
-retro 1
-retrovirus/4 1
-retry/31 1
-retsina/2 1
-retuning
-return/78 1
-returnable/1 1
-returnee/1 1
-returner/1 1
-retying 1325
-retype/6 1
-Reuben 1
-reunification/2 1
-reunify/31 1
-Reunion
-reunion/1 1
-reunite/6 1
-reupholster/11 1
-reusable 1
-reuse/6 1
-reuse's
-Reuters
-Reuther/3
-Rev
-rev/482 1
-Reva/3
-revaluation/1 1
-revalue/6 1
-revamp/23 1
-revamping's
-revanchist 1
-reveal/5 1
-revealable 1
-revealed 1
-revealing/191 1
-reveille/2 1
-revel/23 1
-revelation/1 1
-Revelation/1 1
-revelatory
-reveler/1 1
-revelings
-revelry/15 1
-revenge/28 1
-revengeful/8 1
-revenging 1
-revenue/1 1
-revenuer/1 1
-reverberant 1
-reverberate/6 1
-reverberation/1 1
-Revere
-revere/43 1
-reverence/28 1
-reverend/1 1
-Reverend/2 1
-reverent/8 1
-reverential/8 1
-reverie/1 1
-revers/22 1
-reversal/1 1
-reverse/483 1
-reversed 1
-reverser 1
-reverses 1326
-reversibility 1
-reversible/19 1
-reversing 1
-reversion/1 1
-revert/5 1
-revertible
-revery/15 1
-revetment/1 1
-review/78 1
-reviewable
-reviewer/1 1
-revile/6 1
-revilement/2 1
-reviler/1 1
-reviling 1
-revisable
-revise/28 1
-reviser/1 1
-revision/1 1
-revisionary
-revisionism/2 1
-revisionist/1 1
-revisit/11 1
-revitalization/2 1
-revitalize/6 1
-revival/1 1
-revivalism/2 1
-revivalist/1 1
-revive/6 1
-reviver 1
-revivification/2 1
-revivify/31 1
-reviving 1
-Revlon/3
-revocable 1
-revocation/1 1
-revokable
-revoke/43 1
-revoker/10 1
-revolt/23 1
-revolting/8 1
-revolution/1 1
-revolutionary/15 1
-revolutionist/1 1
-revolutionize/6 1
-revolvable
-revolve/6 1
-revolver/1 1
-revolving 1
-revue/1 1
-revulsion/2 1
-reward/23 1
-rewarm/11 1
-rewash/7 1
-reweave/14 1327
-rewed/274 1
-reweigh/11 1
-rewind/86 1328
-rewindable
-rewire/6 1
-reword/11 1
-rewordings
-rework/11 1
-reworkings
-rewound 1329
-rewoven 1330
-rewove 1330
-rewritable
-rewrite/484 1331
-rewritings
-rewrote 1332
-Rex 1
-Reyes
-Reykjavik/2 1
-Reyna/3
-Reynaldo/3
-Reynolds
-rezone/6 1
-RF
-Rf/2 1
-RFC/10 1
-RFD
-Rh/2 1
-rhapsodical
-rhapsodic 1
-rhapsodize/6 1
-rhapsody/15 1
-rhea/1 1
-rhea's 1333
-rhea 1334
-Rhea 1335
-Rhee
-Rheingau/3
-Rhenish 1
-rhenium/2 1
-rheological
-rheology 1
-rheostat/1 1
-rhesus/4 1
-rhetoric/2 1
-rhetorical/8 1
-rhetorician/1 1
-rheum/2 1336
-rheumatic/51 1
-rheumatism/2 1
-rheumatoid 1
-rheumy/34 1
-Rhiannon/3
-Rhine/2 1
-Rhineland/2 1
-rhinestone/1 1
-rhinitis/2 1
-rhino/1 1
-rhinoceros/4 1
-rhizome/1 1
-rho/1 1
-Rhoda/3
-Rhodes
-Rhodesia/2 1
-Rhodesian 1
-rhodium/2 1
-rhododendron/1 1
-rhomboid/1 1
-rhomboidal 1
-rhomboid 1
-rhombus/4 1
-Rhonda/3
-Rhone/2 1
-rhubarb/1 1
-rhyme/28 1
-rhymer/1 1
-rhymester/1 1
-rhythm/1 1
-rhythmical/8 1
-rhythmic 1
-RI
-rial/1 1
-rib/136 1
-ribaldry/2 1
-ribald 1
-Ribbentrop
-ribber/1 1
-ribbing 1
-ribbon/18 1
-ribcage 1
-riboflavin/2 1
-ribonucleic
-ribosomes
-Ricardo
-Rice
-rice/28 1
-ricer/1 1
-rices 1337
-Rich/3
-rich/471 1
-Richard/10 1
-Richardson
-Richelieu/2 1
-Richie/3
-Richmond/2 1
-Richter
-Richthofen
-Rick/3
-rick/23 1
-Rickenbacker/3
-rickets/2 1
-rickety/34 1
-Rickey/3
-Rickie/3
-Rickover
-rickrack/2 1
-ricksha/1 1
-rickshaw/1 1
-Ricky/3
-Rico/3
-ricochet/23 1
-ricotta/2 1
-rid/439 1
-riddance/2 1
-Riddle/3
-riddle/28 1
-riddling 1
-Ride
-ride/366 1338
-rider/1 1
-riderless 1
-ridership/2 1
-ridge/28 1
-ridgepole/1 1
-ridging 1
-ridgy/34 1
-ridicule/28 1
-ridiculous/16 1
-riding/2 1
-Riefenstahl/3
-Riel/3
-Riemann/2 1
-Riesling/1 1
-RIF
-rife/150 1339
-riff/23 1
-riffle/28 1
-riffling 1
-riffraff/2 1
-rifle/28 1
-rifleman/2 1340
-riflemen 1341
-rifler/1 1
-rifling/2 1
-rift/23 1
-rig/92 1
-Riga/2 1
-rigamarole/1 1
-rigatoni/2 1
-Rigel/2 1
-rigger/1 1
-rigging/2 1
-Riggs/3
-right/52 1
-righteous/16 1
-righter 1
-rightful/16 1
-righting 1
-rightism/2 1
-rightist/1 1
-rightmost 1
-righto 1
-rightsize/6 1
-Right 1
-rightward/10 1
-rigid/16 1
-rigidify/258 1
-rigidity/15 1
-rigmarole/1 1
-Rigoberto/3
-Rigoletto/3
-rigor/1 1
-rigorous/16 1
-rile/6 1
-Riley
-Rilke
-rill/18 1
-rim/160 1
-Rimbaud
-rime/28 1
-rimless 1
-rind/18 1
-ring/23 1342
-ringed 1
-ringer/1 1
-ringgit/1 1
-ringing/191 1
-ringleader/1 1
-ringlet/1 1
-ringlike 1
-Ringling/3
-ringmaster/1 1
-Ringo/3
-ringside/2 1
-ringworm/2 1
-rink/18 1
-rinse/28 1
-rinsing 1
-Rio/1 1
-riot/23 1
-rioter/1 1
-rioting/2 1
-riotous/83 1
-RIP
-rip/296 1
-riparian 1
-ripcord/1 1
-ripe/27 1
-ripen/11 1
-ripening 1
-riper 1
-ripe 1
-Ripley
-ripoff/1 1
-ripost/23 1
-riposte/28 1
-ripper/1 1
-ripping 1
-ripple/485 1
-rippling 1
-ripsaw/18 1
-ripstop 1
-riptide/1 1
-rise/263 1343
-riser/1 1
-risibility/2 1
-risible 1
-rising/1 1
-risk/23 1
-risky/50 1
-Risorgimento
-risotto/1 1
-risque 1
-rissole/10 1
-Rita/3
-Ritalin/2 1
-rite/1 1
-ritual/30 1
-ritualism/2 1
-ritualistic/39 1
-ritualized
-Ritz/2 1
-ritzy/34 1
-riv
-rival/23 1
-rivaling 1
-rivalry/15 1
-rival 1
-Rivas
-rive/376 1
-river/1 1
-Rivera
-riverbank/1 1
-riverbed/1 1
-riverboat/1 1
-riverfront 1
-Rivers
-Riverside
-riverside/1 1
-rives 1344
-rivet/23 1
-riveter/1 1
-rivetingly
-Riviera/1 1
-riviera/10 1
-rivulet/1 1
-Riyadh/2 1
-riyal/1 1
-Rizal
-rm
-Rn/2 1
-RN/2 1
-RNA/2 1
-Roach/3
-roach/22 1
-road/1 1
-roadbed/1 1
-roadblock/23 1
-roadhouse/1 1
-roadie/1 1
-roadkill/2 1
-roadrunner/1 1
-roadshow/1 1
-roadside/1 1
-roadsigns
-roadster/1 1
-roadsweepers
-road 1
-roadway/1 1
-roadwork/1 1
-roadworthy 1
-roam/5 1
-roamer/1 1
-roaming's
-roan/1 1
-Roanoke/2 1
-roan 1
-roar/23 1
-roarer/1 1
-roaring/2 1
-roast/78 1
-roaster/1 1
-roasting/1 1
-Rob/3
-rob/145 1
-robber/1 1
-robbery/15 1
-Robbie/3
-Robbin/3
-Robbins
-Robby/3
-robe/28 1
-Roberson/3
-Robert/1 1
-Roberta/3
-Roberto/3
-Robertson/3
-Robeson
-Robespierre
-Robin/3
-robin/1 1
-robing 1
-Robinson
-Robitussin/3
-Robles/3
-robot/1 1
-robotic/32 1
-robotize/6 1
-Robson
-Robt/3
-robust/21 1
-Robyn/3
-Rocco/3
-Rocha/3
-Rochambeau/3
-Roche/3
-Rochelle/3
-Rochester/2 1
-Rock
-rock/78 1
-rockabilly/3
-rockbound 1
-Rockefeller
-rocker/1 1
-rockery/60 1
-rocket/23 1
-rocketry/2 1
-rockfall/1 1
-Rockford
-rockier 1
-Rockies/2 1
-rocking 1
-Rockne/3
-Rockwell
-Rocky/3
-rocky/49 1
-rococo/2 1
-Rod/3
-rod/18 1
-Roddenberry/3
-rodent/1 1
-rodeo/18 1
-Roderick/3
-rode 1345
-Rodger/3
-Rodgers
-Rodin
-Rodney
-Rodolfo/3
-Rodrick/3
-Rodrigo/3
-Rodriguez/3
-Rodriquez/3
-roe/1 1
-roebuck/1 1
-Roeg/3
-Roentgen
-roentgen/1 1
-ROFL
-Rogelio/3
-Roger/10 1
-roger/11 1
-Roget/3
-rogue/18 1
-roguery/2 1
-rogue 1
-roguish/16 1
-roil/11 1
-roister/11 1
-roisterer/1 1
-Rojas/3
-Rolaids/2 1
-Roland
-Rolando/3
-role/1 1
-Rolex/3
-roll/23 1
-Rolland
-rollback/1 1
-roller/1 1
-Rollerblade 1
-rollerblading
-rollerskating/2 1
-rollick/11 1
-rollicking/2 1
-rolling/10 1
-Rollins
-rollmop/10 1
-rollover/1 1
-Rolodex 1
-Rolvaag/3
-ROM/2 1
-romaine/1 1
-Roman/1 1
-roman/2 1
-romance/28 1
-romancer/1 1
-romancing 1
-Romanesque/1 1
-Romania/2 1
-Romanian/1 1
-Romano 1
-Romanov/2 1
-Romansh
-romantic/51 1
-romanticism/2 1
-Romanticism 1
-romanticist/1 1
-romanticize/6 1
-Romantic 1
-roman 1
-Roman 1
-Romany/15 1
-Rome/1 1
-romeo/1 1
-Romeo 1
-Romero/3
-Rommel/2 1
-Romney 1
-romp/23 1
-romper/1 1
-Rom 1
-Romulus/2 1
-Ron/2 1346
-Ronald/3
-Ronda/3
-rondo/1 1
-Ronnie/3
-Ronstadt/3
-Rontgen
-rontgen/10 1
-Ronny/3
-rood/1 1
-roof/23 1
-roofer/1 1
-roofgarden
-roofing/2 1
-roofless 1
-rooftop/1 1
-rook/23 1
-rookery/15 1
-rookie/1 1
-room/23 1
-roomer/1 1
-roomette/1 1
-roomful/1 1
-roommate/1 1
-roomy/49 1
-Rooney/3
-Roosevelt/2 1
-roost/23 1
-rooster/1 1
-Root/3
-root/78 1
-rooter/1 1
-rooting 1
-rootless/153 1
-rootlet/1 1
-rootstock 1
-rope/28 1
-roper/1 1
-ropey 1347
-ropier 1348
-ropiest 1348
-roping 1
-ropy/34 1
-Roquefort/1 1
-Rorschach 1
-Rory/3
-Rosa/2 1
-Rosales/2 1
-Rosalie/3
-Rosalind/3
-Rosalinda/3
-Rosalyn/3
-Rosanna/3
-Rosanne/3
-Rosario
-rosary/15 1
-Roscoe/3
-Rose/3
-rose/18 1
-Roseann/3
-roseate 1
-Roseau/2 1
-rosebud/1 1
-rosebush/4 1
-Rosecrans/3
-Rosella/3
-Rosemarie/3
-Rosemary/3
-rosemary/2 1
-Rosenberg/3
-Rosendo/3
-Rosenzweig/3
-rose 1349
-Rosetta
-rosette/18 1
-rosewater/2 1
-rosewood/1 1
-Rosicrucian 1
-Rosie/3
-rosier 1
-rosin/23 1
-Roslyn/3
-Ross/2 1
-Rossetti/2 1
-Rossini/2 1
-Rostand
-roster/86 1
-rostering 1
-Rostov/2 1
-Rostropovich/3
-rostrum/1 1
-Roswell/3
-rosy/50 1
-rot/109 1
-rota/10 1
-Rotarian/2 1
-rotary/15 1
-rotatable 1
-rotate/6 1
-rotation/1 1
-rotational/8 1
-rotators
-rotatory
-ROTC/2 1
-rote/2 1
-rotgut/2 1
-Roth/3
-Rothko
-Rothschild
-rotisserie/1 1
-rotogravure/1 1
-rotor/1 1
-rototiller/1 1
-rotten/21 1
-rotter/10 1
-Rotterdam/2 1
-Rottweiler/2 1
-rottweiler/10 1
-rotunda/1 1
-rotundity/2 1
-rotundness/3
-rotund 1
-Rouault
-roue/1 1
-rouge/28 1
-rough/52 1
-roughage/2 1
-roughcast 1
-roughen/11 1
-rougher 1
-roughhouse/28 1
-roughneck/23 1
-roughshod 1
-roulette/2 1
-round/52 1
-roundabout/1 1
-rounded 1
-roundel/10 1
-roundelay/1 1
-rounder/10 1
-roundhouse/1 1
-rounding 1
-roundish 1
-roundtable/1 1
-roundup/1 1
-roundworm/1 1
-Rourke/3
-rouse/6 1
-rousing 1
-Rousseau/2 1
-roust/11 1
-roustabout/1 1
-rout/23 1
-route/28 1
-router/1 1
-routine/30 1
-routing 1
-routinize/6 1
-roux 1
-Rove/3
-rove/43 1
-Rover
-rover/1 1
-rove 1350
-roving 1
-row/23 1
-rowan/10 1
-rowboat/1 1
-rowdy/221 1
-rowdyism/2 1
-Rowe
-rowel/23 1
-Rowena/3
-rower/1 1
-rowing/2 1
-Rowland/3
-Rowling/3
-rowlock/10 1
-Roxanne/3
-Roxie/3
-Roxy/3
-Roy/3
-royal/30 1
-royalist/1 1
-Royal 1
-royalty/344 1
-Royce
-Rozelle/3
-RP
-rpm 1
-rps
-RR
-RSFSR
-RSI
-RSV
-RSVP
-rt
-rte
-Rte
-RTFM/11 1
-Ru/2 1
-rub/136 1
-Rubaiyat/3
-rubato/1 1
-rubber/18 1
-rubberize/6 1
-Rubbermaid/3
-rubberneck/23 1
-rubbernecker/1 1
-rubber 1
-rubbery/34 1
-rubbing/10 1
-rubbish/22 1
-rubbishy 1
-rubble/2 1
-rubdown/1 1
-rube/1 1
-rubella/2 1
-Ruben/3
-Rubens
-Rubicon/1 1
-rubicund
-rubidium/2 1
-Rubik/3
-Rubin/3
-Rubinstein
-ruble/1 1
-rubric/18 1
-Ruby/3
-ruby/486 1
-Ruchbah/3
-ruched
-ruck/5 1
-rucksack/1 1
-ruckus/4 1
-ruction/10 1
-rudder/1 1
-rudderless 1
-ruddy/49 1
-rude/27 1
-rudiment/1 1
-rudimentary 1
-Rudolf
-Rudolph/3
-Rudy/3
-Rudyard/3
-rue/28 1
-rueful/16 1
-ruff/23 1
-ruffian/18 1
-ruffianly 1
-ruffle/28 1
-ruffling 1
-ruffly/34 1
-Rufus/3
-rug/361 1
-rugby/2 1
-Rugby 1
-rugged/21 1
-rugger 1
-Ruhr/2 1
-ruin/23 1
-ruination/1 1
-ruing 1
-ruining 1
-ruinous/8 1
-Ruiz/3
-Rukeyser/3
-rule/28 1
-rulebook
-rulebooks
-ruler/18 1
-ruling/1 1
-rum/487 1
-Rumania/2 1
-Rumanian/1 1
-rumba/23 1
-rumble/28 1
-rumbling/1 1
-rumbustious
-ruminant/1 1
-ruminate/6 1
-rumination/1 1
-ruminative
-ruminatively
-rummage/28 1
-rummer 1
-rummy/2 1
-rumor/23 1
-rumormonger/18 1
-rump/18 1
-Rumpelstiltskin/2 1
-rumple/28 1
-rumpling 1
-rumply/34 1
-rump 1
-rumpus/40 1
-Rumsfeld/3
-run/442 1351
-runabout/1 1
-runaround/1 1
-runaway/1 1
-rundown/1 1
-rune/1 1
-rung/1 1352
-runic 1
-runlet/1 1
-runnable
-runnel/1 1
-runner/1 1
-running/2 1
-runoff/1 1
-runt/1 1
-runty/34 1
-runway/1 1
-runny/34 1
-Runnymede
-Runyon
-rupee/1 1
-Rupert/2 1
-rupiah/1 1
-rupture/28 1
-rural/8 1
-ruse/1 1
-Rush/3
-rush/147 1
-Rushdie/3
-rusher/1 1
-rushing 1
-Rushmore/2 1
-rushy/34 1
-rusk/1 1
-Ruskin
-Russel/3
-Russell/2 1
-russet/18 1
-Russia/2 1
-Russian/1 1
-Russo/3
-Russ 1
-rust/23 1
-Rustbelt/2 1
-rustic/51 1
-rusticate/6 1
-rustication/2 1
-rusticity/2 1
-rusting 1
-rustle/28 1
-rustler/1 1
-rustling/10 1
-rustproof/11 1
-rust 1
-Rusty/3
-rusty/49 1
-rut/109 1
-rutabaga/1 1
-Rutan/3
-Rutgers
-Ruth/2 1
-ruthenium/2 1
-Rutherford
-rutherfordium/2 1
-Ruthie/3
-ruthless/16 1
-Rutledge/3
-rutting 1
-rutty/34 1
-RV/1 1
-Rwanda/1 1
-Rwandan/1 1
-Rwy
-Rx
-Ry
-Ryan/3
-Rydberg/3
-Ryder
-rye/2 1
-Ryukyu/3
-S/2 1
-SA
-Saab/3
-Saar
-Saarinen
-Saatchi/3
-Sabbath/1 1
-sabbath 1
-sabbatical/1 1
-saber/18 1
-Sabik/3
-Sabin
-Sabina/3
-Sabine/2 1
-sable/18 1
-sabot/1 1
-sabotage/28 1
-saboteur/1 1
-sabra/1 1
-Sabre/3
-Sabrina/3
-SAC
-sac/64 1
-Sacajawea
-saccharides
-saccharin/2 1
-saccharine 1
-Sacco/3
-sacerdotal
-sachem/1 1
-sachet/1 1
-Sachs/3
-sack/23 1
-sackcloth/2 1
-sackful/1 1
-sacking/1 1
-sacral 1
-sacrament/18 1
-sacramental 1
-Sacramento/2 1
-sacra 1353
-sacred/16 1
-sacrifice/28 1
-sacrificial
-sacrificially
-sacrilege/1 1
-sacrilegious/8 1
-sacristan/1 1
-sacristy/15 1
-sacroiliac/1 1
-sacrosanct/33 1
-sacrum/2 1354
-sad/488 1
-Sadat
-Saddam/3
-sadden/11 1
-saddening 1
-saddle/28 1
-saddlebag/1 1
-saddler/10 1
-saddlery 1
-Sadducee
-Sade/2 1
-sades 1355
-sadhu/10 1
-Sadie/3
-sadism/2 1
-sadist/1 1
-sadistic/39 1
-sadist 1
-sadomasochism/2 1
-sadomasochist/1 1
-sadomasochistic
-Sadr/3
-safari/23 1
-Safavid
-safe/25 1356
-safeguard/23 1
-safeguarding 1
-safekeeping/1 1
-safety/167 1
-Safeway/3
-safflower/1 1
-saffron/1 1
-sag/92 1
-saga/1 1
-sagacious/8 1
-sagacity/2 1
-Sagan/3
-saga's 1357
-saga 1358
-sage/255 1
-sagebrush/2 1
-sagging 1
-Saginaw/3
-Sagittarius/4 1
-sago/2 1
-sag 1
-saguaro/1 1
-saggy/34 1
-Sahara/2 1
-Saharan/2 1
-Sahel
-sahib/1 1
-said 1
-Saigon/2 1
-sail/23 1
-sailboard/86 1
-sailboarder/1 1
-sailboarding/2 1
-sailboat/1 1
-sailcloth/2 1
-sailfish/4 1
-sailing/1 1
-sailor/1 1
-sailplane/18 1
-saint/62 1
-sainthood/2 1
-saintlike 1
-saintly/49 1
-saint 1
-Saiph/3
-saith 1
-Sakai
-sake/1 1
-sakes 1359
-Sakha/3
-Sakhalin/3
-Sakharov
-Saki/3
-saki/2 1
-Saks
-Sal
-salaam/23 1
-salable 1
-salacious/16 1
-salacity/2 1
-salad/1 1
-Saladin
-Salado
-salamander/1 1
-salami/1 1
-Salamis
-salary/148 1
-Salas/3
-Salazar/3
-sale/1 1
-saleability
-Salem/2 1
-Salerno/2 1
-saleroom/10 1
-salesclerk/1 1
-salesgirl/1 1
-saleslady/15 1
-salesman/2 1360
-salesmanship/2 1
-salesmen 1361
-salespeople's 1362
-salespeople 1363
-salesperson/1 1364
-salesroom/10 1
-saleswoman/2 1365
-saleswomen 1366
-salicylic
-salience/2 1
-salient/30 1
-Salinas
-saline/1 1
-Salinger
-salinity/2 1
-Salisbury/2 1
-Salish/2 1
-saliva/2 1
-salivary
-salivate/6 1
-salivation/1 1
-Salk
-Sallie/3
-sallow/178 1
-Sallust
-salmon/1 1
-salmonella/53 1
-Salome/2 1
-salon/1 1
-Salonika/2 1
-saloon/1 1
-salsa/18 1
-salt/188 1
-SALT/2 1
-salt/11 1
-saltbox/4 1
-saltcellar/1 1
-salter 1
-saltier 1
-saltine/1 1
-saltines 1
-salting 1
-Salton/3
-saltpeter/2 1
-saltshaker/1 1
-saltwater/2 1
-salty/49 1
-salubrious 1
-salubrity 1
-salutary 1
-salutation/1 1
-salutatorian/1 1
-salutatory 1
-salute/28 1
-Salvador/2 1
-Salvadoran/1 1
-Salvadorean/1 1
-Salvadorian/1 1
-salvage/28 1
-salvageable
-salvation/2 1
-Salvatore/3
-salve/28 1
-salver/1 1
-salving 1
-salvo/18 1
-Salween/3
-Sally/3
-sally/31 1
-sally's
-Salyut/2 1
-Sam
-SAM/2 1
-Samantha/3
-Samar/3
-Samara
-Samaritan/1 1
-samarium/2 1
-Samarkand/2 1
-samba/23 1
-same/489 1
-samey
-samizdat/10 1
-Sammie/3
-Sammy/3
-Samoa/2 1
-Samoan/1 1
-samosa/10 1
-Samoset/3
-samovar/1 1
-Samoyed/2 1
-sampan/1 1
-sample/139 1
-sampler/1 1
-sampling/10 1
-Sampson/3
-Samson
-Samsonite/3
-Samsung/3
-Samuel
-Samuelson/3
-samurai/1 1
-San
-San'a
-Sana/2 1
-Sanaa/2 1
-sanatorium/1 1
-Sanchez/3
-Sancho/3
-sanctification/2 1
-sanctify/31 1
-sanctifying 1
-sanctimonious/16 1
-sanctimony/2 1
-sanction/23 1
-sanctity/2 1
-sanctuary/15 1
-sanctum/1 1
-Sand
-sand/23 1
-sandal/18 1
-sandalwood/2 1
-sandbag/92 1
-sandbank/1 1
-sandbar/1 1
-sandblast/23 1
-sandblaster/1 1
-sandbox/4 1
-Sandburg
-sandcastle/1 1
-sander/1 1
-Sanders
-sanders 1
-sandhog/1 1
-sanding 1
-Sandinista 1
-sandlot/490 1
-sandlotter/1 1
-sandman/2 1367
-sandmen 1368
-Sandoval/3
-sandpaper/23 1
-sandpiper/1 1
-sandpit/10 1
-Sandra/3
-sandstone/1 1
-sandstorm/1 1
-sandwich/22 1
-Sandy/3
-sandy/49 1
-sane/27 1
-Sanford/3
-Sanforized
-Sang/3
-sang/10 1
-Sanger
-sangfroid/2 1
-sangria/2 1
-sang 1369
-sanguinary 1
-sanguine/8 1
-Sanhedrin 1
-sanitarian/1 1
-sanitarium/1 1
-sanitary 1
-sanitation/2 1
-sanitize/6 1
-sanitizer/10 1
-sanity/2 1
-Sanka/3
-Sankara/3
-sank 1370
-sans
-sanserif 1
-Sanskrit/2 1
-Santa
-Santana/3
-Santayana
-Santeria 1
-Santiago/2 1
-Santos
-SAP/3
-sap/47 1
-sapience/2 1
-sapient 1
-sapless 1
-sapling/1 1
-sapper/10 1
-sapphire/1 1
-Sappho/2 1
-Sapporo/2 1
-sappy/49 1
-saprophyte/1 1
-saprophytic 1
-sapsucker/1 1
-sapwood/2 1
-Saracen/1 1
-Saragossa/2 1
-Sarah
-Sarajevo/2 1
-Saran/3
-saran/2 1
-sarape/1 1
-Sarasota/3
-Sara's 1371
-Sara 1372
-Saratov/2 1
-Sarawak/2 1
-sarcasm/1 1
-sarcastic/39 1
-sarcoma/1 1
-sarcophagi 1373
-sarcophagus/2 1374
-sardine/18 1
-Sardinia/2 1
-sardonic/39 1
-saree/1 1
-Sargasso/3
-sarge/1 1
-Sargent
-Sargon/3
-sari/1 1
-sari's 1375
-sari 1376
-sarky 1
-sarnie/10 1
-Sarnoff/3
-sarong/1 1
-Saroyan/3
-SARS/3
-sarsaparilla/1 1
-Sarto
-sartorial/8 1
-Sartre
-SASE
-sash/40 1
-Sasha/3
-sashay/23 1
-Sask
-Saskatchewan/2 1
-Saskatoon/2 1
-Sasquatch/4 1
-sass/22 1
-sassafras/4 1
-Sassanian 1
-Sassoon
-sassy/34 1
-SAT
-Sat/2 1
-Satan/2 1
-satanic/39 1
-satanical
-satanism/2 1
-Satanism/2 1
-satanist/1 1
-Satanist/2 1
-satay 1
-satchel/1 1
-sate/6 1
-sateen/2 1
-satellite/28 1
-sates 1377
-satiable 1
-satiate/6 1
-satiation/2 1
-satiety/2 1
-satin/18 1
-satinwood/1 1
-satiny 1
-satire/1 1
-satiric
-satirical/8 1
-satirist/1 1
-satirize/6 1
-satisfaction/1 1
-satisfactory/211 1
-satisfiable
-satisfy/31 1
-satisfying/8 1
-satori/2 1
-satrap/1 1
-sat 1378
-satsuma/10 1
-saturate/6 1
-saturation/2 1
-Saturday/1 1
-Saturn/2 1
-Saturnalia/2 1
-saturnalia 1
-saturnine
-satyr/1 1
-satyriasis/2 1
-satyric 1
-sauce/28 1
-saucepan/1 1
-saucer/1 1
-saucier 1
-saucy/50 1
-Saudi/1 1
-sauerkraut/2 1
-Saul/2 1
-sauna/23 1
-Saunders
-Saundra/3
-saunter/23 1
-sauntering 1
-saurian 1
-sauropod/1 1
-sausage/1 1
-Saussure
-saute/23 1
-sauterne/130 1
-Sauterne/1 1
-saute 1
-savable 1
-Savage
-savage/107 1
-savagery/15 1
-savanna/1 1
-savannah/1 1
-Savannah/2 1
-savant/1 1
-save/28 1
-saveable 1
-saveloy 1
-saver/1 1
-saves 1379
-saving/130 1
-savior/1 1
-Savior/2 1
-Savonarola
-savor/23 1
-savory/286 1
-Savoy
-savoy/1 1
-Savoyard/2 1
-savvy/87 1
-saw/23 1
-sawbones/2 1
-sawbuck/1 1
-sawdust/2 1
-sawflies
-sawfly/3
-sawhorse/1 1
-sawing 1
-sawmill/1 1
-saw 1380
-sawtooth 1
-Sawyer/3
-sawyer/1 1
-sax/4 1
-saxifrage/1 1
-Saxon/1 1
-Saxony/2 1
-saxophone/1 1
-saxophonist/1 1
-say/491 1
-Sayers
-saying/1 1
-say 1
-Sb/2 1
-SBA
-Sc/2 1
-SC/2 1
-scab/136 1
-scabbard/18 1
-scabby/49 1
-scabies/2 1
-scabrous 1
-scad/1 1
-scaffold/86 1
-scaffolding/2 1
-scag/118 1
-scalability
-scalable 1
-scalar/10 1
-scalawag/1 1
-scald/23 1
-scalding 1
-scald 1
-scale/28 1
-scaleless 1
-scalene 1
-scalier 1381
-scaliest 1381
-scaling 1
-scallion/1 1
-scallop/23 1
-scalp/23 1
-scalpel/1 1
-scalper/1 1
-scaly/49 1
-scallywag/10 1
-scam/160 1
-scamp/18 1
-scamper/23 1
-scampi/2 1
-Scan
-scan/133 1
-scandal/18 1
-scandalize/6 1
-scandalmonger/1 1
-scandalous/8 1
-Scandinavia/2 1
-Scandinavian/1 1
-scandium/2 1
-scanner/1 1
-scanning 1
-scansion/2 1
-scant/98 1
-scanty/97 1
-scapegoat/23 1
-scapegoating 1
-scapegrace/1 1
-scape 1
-scapula/53 1
-scapular/1 1
-scar/103 1
-scarab/1 1
-Scaramouch
-Scarborough
-scarce/27 1
-scarcity/15 1
-scare/28 1
-scarecrow/1 1
-scared 1
-scaremonger/1 1
-scaremongering 1
-scarey 1382
-scarf/115 1
-scarfing 1
-scarier 1383
-scariest 1383
-scarification/2 1
-scarify/31 1
-scariness/3
-scarlatina/2 1
-Scarlatti
-scarlet/2 1
-scarp/23 1
-scarper/11 1
-scarping 1
-scarring 1
-scary/59 1
-scat/403 1
-scathe/251 1
-scathing/8 1
-scatological
-scatology/2 1
-scatter/23 1
-scatterbrain/1 1
-scatterbrained
-scattered 1
-scatterer/10 1
-scattering/1 1
-scatty 1
-scavenge/6 1
-scavenger/1 1
-scenario/1 1
-scenarist/1 1
-scene/18 1
-scenery/2 1
-scenic/39 1
-scent/23 1
-scenting 1
-scentless 1
-scepter/62 1
-sceptically
-sch
-schadenfreude 1
-Scheat/3
-Schedar/3
-schedule/28 1
-scheduler/10 1
-Scheherazade/3
-Schelling
-schema/492 1
-schematic/51 1
-schematize/6 1
-scheme/28 1
-schemer/1 1
-scheming 1
-Schenectady/2 1
-scherzo/1 1
-Schiaparelli/3
-Schick/3
-Schiller
-schilling/1 1
-Schindler/3
-schism/1 1
-schismatic/1 1
-schist/2 1
-schizo/1 1
-schizoid/1 1
-schizophrenia/2 1
-schizophrenic/1 1
-schizophrenically
-schizo 1
-schlemiel/1 1
-schlep/47 1
-schlepp/23 1
-Schlesinger/3
-Schliemann
-Schlitz/3
-schlock/2 1
-schlocky/34 1
-schmaltz/2 1
-schmaltzy/34 1
-schmalz/2 1
-Schmidt
-schmo/4 1
-schmoe/1 1
-schmooze/43 1
-schmoozer/10 1
-schmuck/1 1
-Schnabel
-schnapps/2 1
-schnaps's
-Schnauzer/3
-schnauzer/1 1
-Schneider/3
-schnitzel/1 1
-schnook/1 1
-schnoz/4 1
-schnozzle/1 1
-Schoenberg/3
-scholar/1 1
-scholarly 1
-scholarship/1 1
-scholastic/39 1
-scholasticism 1
-scholastic 1
-school/23 1
-schoolbag/1 1
-schoolbook/1 1
-schoolboy/1 1
-schoolchild/155 1
-schooldays
-schoolfellow/1 1
-schoolfriend 1
-schoolgirl/1 1
-schoolhouse/1 1
-schooling/2 1
-schoolkid/10 1
-schoolmarm/1 1
-schoolmarmish
-schoolmaster/18 1
-schoolmate/1 1
-schoolmistress/4 1
-schoolroom/1 1
-schoolteacher/1 1
-school 1
-schoolwork/2 1
-schoolyard/1 1
-schooner/1 1
-Schopenhauer
-Schrieffer/3
-Schrodinger/2 1
-schrod's
-Schroeder/3
-schtick 1
-Schubert
-Schultz/3
-Schulz/3
-Schumann
-Schumpeter/3
-schuss/22 1
-schussboomer/1 1
-Schuyler/3
-Schuylkill/3
-schwa/1 1
-Schwartz/3
-Schwarzenegger/3
-Schwarzkopf/3
-Schweitzer
-Schweppes/3
-Schwinger/3
-Schwinn/3
-sci
-sciatica/2 1
-sciatic 1
-science/1 1
-scientific/39 1
-scientist/1 1
-Scientology/3
-scimitar/1 1
-scintilla/1 1
-scintillate/6 1
-scintillating 1
-scintillation/1 1
-scintillator/10 1
-scion/1 1
-Scipio/2 1
-scissor/11 1
-scleroses 1384
-sclerosis/2 1385
-sclerotic 1
-scoff/23 1
-scoffer/1 1
-scoffing 1
-scofflaw/1 1
-scold/23 1
-scolder 1
-scolding/1 1
-scoliosis/2 1
-scollop/23 1
-sconce/18 1
-scone/1 1
-scoop/23 1
-scooper 1
-scoopful/1 1
-scooping 1
-scoot/5 1
-scooter/1 1
-scope/28 1
-Scopes/3
-scorbutic 1
-scorch/22 1
-scorcher/1 1
-scorching 1
-score/139 1
-scoreboard/1 1
-scorecard/1 1
-scorekeeper/1 1
-scoreless 1
-scoreline/10 1
-scorer/1 1
-scoring 1
-scorn/23 1
-scorner/1 1
-scornful/8 1
-scorning 1
-Scorpio/1 1
-scorpion/1 1
-Scorpius/2 1
-Scorsese/3
-Scot/1 1
-scotch/4 1
-Scotch/4 1
-scotch/7 1
-Scotchman/2 1386
-Scotchmen 1387
-scotchs
-scotch 1
-Scotch 1
-Scotchwoman/2 1388
-Scotchwomen 1389
-Scotland/2 1
-Scotsman/2 1390
-Scotsmen 1391
-Scotswoman/2 1392
-Scotswomen 1393
-Scott
-Scottie/1 1
-Scottish/2 1
-Scottsdale
-Scotty/60 1
-scoundrel/1 1
-scour/5 1
-scourer/1 1
-scourge/28 1
-scouring 1
-scout/23 1
-scouter/10 1
-scouting/2 1
-scoutmaster/1 1
-Scout 1
-scow/18 1
-scowl/23 1
-scowling 1
-scrabble/1 1
-Scrabble/1 1
-scrabble/6 1
-scrabbler/1 1
-scrag/18 1
-scraggly/34 1
-scraggy/34 1
-scram/114 1
-scramble/28 1
-scrambler/1 1
-scrambling 1
-Scranton
-scrap/296 1
-scrapbook/1 1
-scrape/28 1
-scraper/1 1
-scrapheap/1 1
-scrapie 1
-scraping/10 1
-scrapper/1 1
-scrappy/34 1
-scrapyard/1 1
-scratch/22 1
-scratchcard/10 1
-scratchily 1
-scratching/10 1
-scratchpad/10 1
-scratch 1
-scratchy/49 1
-scrawl/23 1
-scrawling 1
-scrawly/34 1
-scrawny/49 1
-scream/23 1
-screamer/1 1
-screaming/8 1
-scree/1 1
-screech/22 1
-screechy/34 1
-screed/70 1
-screen/23 1
-screening/1 1
-screenplay/1 1
-screenwriter/1 1
-screenwriting/2 1
-screw/23 1
-screwball/1 1
-screwdriver/1 1
-screwiness/3
-screwing 1
-screwworm/1 1
-screwy/34 1
-Scriabin
-scribal 1
-scribble/28 1
-scribbler/1 1
-scribbling/10 1
-scribe/28 1
-scribing 1
-Scribner/3
-scrim/1 1
-scrimmage/28 1
-scrimp/11 1
-scrimshaw/23 1
-scrip/1 1
-script/23 1
-scriptorium 1
-scriptural 1
-scripture/1 1
-Scripture/1 1
-scriptwriter/1 1
-scriptwriting 1
-scrivener/1 1
-scrod/2 1
-scrofula/2 1
-scrofulous 1
-scrog/117 1
-scroll/23 1
-scrollable
-scrooge/18 1
-Scrooge 1
-scrotal 1
-scrota 1394
-scrotum/2 1395
-scrounge/6 1
-scrounger/1 1
-scrounging 1
-scroungy/34 1
-scrub/327 1
-scrubber/1 1
-scrubby/34 1
-scruff/1 1
-scruffily 1
-scruffiness/3
-scruffy/34 1
-Scruggs/3
-scrum/217 1
-scrumhalf
-scrumhalves
-scrummage/357 1
-scrump/11 1
-scrumptious/8 1
-scrumpy 1
-scrunch/22 1
-scrunchie/1 1
-scrunchy/15 1
-scruple/28 1
-scrupulosity/2 1
-scrupulous/16 1
-scrutineer/10 1
-scrutinize/6 1
-scrutiny/15 1
-scuba/23 1
-Scud
-scud/113 1
-scuff/23 1
-scuffle/28 1
-scuffling 1
-scull/23 1
-sculler/1 1
-scullery/15 1
-Sculley/3
-sculling 1
-scullion/1 1
-sculpt/11 1
-sculptor/1 1
-sculptress/4 1
-sculptural
-sculpture/28 1
-sculpturing 1
-scum/160 1
-scumbag/1 1
-scumming 1
-scummy/34 1
-scupper/23 1
-scurf/2 1
-scurfy/34 1
-scurrility/2 1
-scurrilous/16 1
-scurry/56 1
-scurryings
-scurvy/493 1
-scutcheon/1 1
-scuttle/28 1
-scuttlebutt/2 1
-scuzzy/34 1
-Scylla/2 1
-scythe/28 1
-Scythia
-Scythian 1
-SCSI/2 1
-SD
-SDI
-Se/2 1
-SE/2 1
-sea/1 1
-seabed/1 1
-seabird/1 1
-seaboard/1 1
-Seaborg
-seaborne 1
-seacoast/1 1
-seafarer/1 1
-seafaring/2 1
-seafloor/1 1
-seafood/2 1
-seafront/1 1
-seagoing 1
-Seagram/3
-seagull/1 1
-seahorse/1 1
-seal/23 1
-sealant/1 1
-sealer/1 1
-sealing 1
-sealskin/2 1
-seam/23 1
-seamail
-seaman/2 1396
-seamanship/2 1
-seamen 1397
-seamless/8 1
-seamstress/4 1
-seamy/34 1
-Sean/3
-seance/1 1
-seaplane/18 1
-seaport/1 1
-sear/23 1
-search/22 1
-searcher/1 1
-searching/8 1
-searchlight/1 1
-searingly
-searing 1
-Sears/3
-sear 1
-seascape/1 1
-seashell/1 1
-seashore/1 1
-seasick/33 1
-seaside/1 1
-season/23 1
-seasonable/19 1
-seasonal/8 1
-seasonality 1
-seasoned 1
-seasoning/1 1
-seat/23 1
-seating/2 1
-seatmate/1 1
-SEATO
-sea 1
-Seattle/2 1
-seawall/1 1
-seaward/1 1
-seawater/2 1
-seaway/1 1
-seaweed/1 1
-seaworthy/49 1
-sebaceous
-Sebastian/3
-seborrhea/2 1
-sebum 1
-Sec
-SEC
-sec/1 1
-secant/1 1
-secateurs
-secede/6 1
-secession/1 1
-secessionist/1 1
-seclude/6 1
-secluded 1
-seclusion/2 1
-seclusive 1
-Seconal/2 1
-second/459 1
-secondary/206 1
-seconder/1 1
-secondhand
-secondment/10 1
-secrecy/2 1
-secret/494 1
-secretarial
-Secretariat/3
-secretariat/1 1
-secretary/15 1
-secretaryship/2 1
-Secretary 1
-secrete/257 1
-secreter 1
-secretion/1 1
-secretive/16 1
-secretory
-sect/1 1
-sectarian/1 1
-sectarianism/2 1
-sectarian 1
-sectary/15 1
-section/23 1
-sectional/1 1
-sectionalism/2 1
-sectional 1
-sector/62 1
-sectoral
-sec 1
-secularism/2 1
-secularist/1 1
-secularization/2 1
-secularize/6 1
-secular 1
-secure/404 1
-securer 1
-security/15 1
-secy
-sec'y
-sedan/1 1
-sedate/104 1
-sedation/2 1
-sedative/1 1
-sedentary 1
-Seder/1 1
-sedge/1 1
-sedgy/34 1
-sediment/18 1
-sedimentary 1
-sedimentation/2 1
-sedition/2 1
-seditious 1
-Sedna/3
-seduce/6 1
-seducer/1 1
-seducing 1
-seduction/1 1
-seductive/16 1
-seductress/4 1
-sedulous/8 1
-see/495 1398
-Seebeck/3
-seed/78 1
-seedbed/1 1
-seedcase/1 1
-seeder/1 1
-seeding 1
-seedless 1
-seedling/1 1
-seedpod/1 1
-seedy/49 1
-seeing/10 1
-seek/141 1399
-seeker/1 1
-seem/11 1
-seeming/8 1
-seemly/49 1
-seep/5 1
-seepage/2 1
-seer/1 1
-seersucker/2 1
-seesaw/23 1
-seethe/43 1400
-seething 1
-Sega/3
-segfault/10 1
-segment/23 1
-segmental 1
-segmentation/2 1
-Segovia/3
-Segre/3
-segregate/6 1
-segregated 1
-segregation/2 1
-segregationist/1 1
-segue/63 1
-Segundo/3
-seigneur/1 1
-seignior/1 1
-seigniorial
-Seiko/3
-seine/1 1
-Seine/2 1
-seine/6 1
-seiner/1 1
-Seinfeld/3
-seining 1
-seismically
-seismic 1
-seismogram 1
-seismograph/1 1
-seismographer/1 1
-seismographic
-seismography/2 1
-seismologic
-seismological 1
-seismologist/1 1
-seismology/2 1
-seismometer/10 1
-seize/6 1
-seizing 1
-seizure/1 1
-Sejong/3
-Selassie/3
-seldom 1
-select/496 1
-selectable
-selection/1 1
-selective/8 1
-selectivity/2 1
-selectman/2 1401
-selectmen 1402
-selector/1 1
-Selectric/3
-Selena/3
-selenium/2 1
-selenographer/1 1
-selenography/2 1
-selenology 1
-Seleucid 1
-Seleucus/2 1
-self/120 1
-selfish/16 1
-selfless/16 1
-selfsame 1
-self 1
-Selim/3
-Seljuk 1
-Selkirk/3
-sell/86 1403
-seller/1 1
-Sellers/3
-selling 1
-sellotape
-sellotaped
-sellotapes
-sellotaping
-sellout/1 1
-Selma/2 1
-seltzer/1 1
-selvage/18 1
-selvedge/18 1
-Selznick/3
-semantic/35 1
-semanticist/1 1
-semaphore/28 1
-Semarang
-semblance/1 1
-semen/2 1
-semester/1 1
-semi/1 1
-semiannual/8 1
-semiarid
-semiautomatic/1 1
-semibreve/10 1
-semicircle/1 1
-semicircular 1
-semicolon/1 1
-semiconducting
-semiconductor/1 1
-semiconscious 1
-semidarkness/3
-semidetached
-semifinal/1 1
-semifinalist/1 1
-semigloss/89 1
-semimonthlies
-semimonthly/3
-seminal
-seminar/1 1
-seminarian/1 1
-seminary/15 1
-Seminole/1 1
-semiofficial 1
-semiotic/32 1
-semioticians
-semipermeable
-semiprecious
-semiprivate
-semipro/10 1
-semiprofessional/1 1
-semiquaver/10 1
-Semiramis
-semiretired
-semiskilled
-semisolid 1
-semis 1
-semisweet
-Semite/1 1
-Semitic/1 1
-semitone/1 1
-semitrailer/1 1
-semitransparent 1
-semitropical 1
-semi 1
-semivowel/1 1
-semiweeklies
-semiweekly/3
-semiyearly
-semolina/2 1
-sempiternal
-sempstress/4 1
-Semtex
-Sen
-sen/10 1
-senate/1 1
-Senate/1 1
-Senator
-senator/1 1
-senatorial 1
-send/497 1
-Sendai
-sender/1 1
-sending 1
-sendoff/1 1
-Seneca/1 1
-Senegal/2 1
-Senegalese/2 1
-senescence/2 1
-senescent
-Senghor
-senile 1
-senility/2 1
-senior/1 1
-seniority/2 1
-senior 1
-Senior 1
-senna/2 1
-Sennacherib
-Sennett/3
-senor/1 1
-senora/1 1
-senorita/1 1
-sens/156 1
-sensation/1 1
-sensational/8 1
-sensationalism/2 1
-sensationalist/1 1
-sensationalistic
-sensationalize/6 1
-sense/28 1
-senseless/16 1
-sensibility/15 1
-sensible/289 1
-sensing 1
-sensitive/36 1
-sensitivity/15 1
-sensitization/2 1
-sensitize/6 1
-sensitizers
-sensor/1 1
-sensory 1
-sensual/8 1
-sensualist/1 1
-sensuality/2 1
-sensuous/16 1
-Sensurround/3
-sentence/28 1
-sentencing 1
-sentential 1
-sententious/8 1
-sentience/2 1
-sentient 1
-sentiment/1 1
-sentimental/8 1
-sentimentalism/2 1
-sentimentalist/1 1
-sentimentality/2 1
-sentimentalization/2 1
-sentimentalize/6 1
-sentinel/18 1
-sentry/15 1
-Seoul/2 1
-sepal/1 1
-separability/2 1
-separable/19 1
-separate/207 1
-separation/1 1
-separatism/2 1
-separatist/1 1
-separative 1
-separator/1 1
-Sephardi
-sepia/2 1
-sepia's 1404
-sepia 1405
-Sepoy/3
-sepsis/2 1
-Sept/2 1
-septa 1406
-September/1 1
-septet/1 1
-septette/1 1
-septicemia/2 1
-septicemic
-septic 1
-septuagenarian/1 1
-Septuagint/1 1
-septum/2 1407
-sepulcher/23 1
-sepulchral 1
-seq
-sequel/1 1
-sequence/28 1
-sequencer/10 1
-sequencing/2 1
-sequential/8 1
-sequent 1
-sequester/11 1
-sequestrate/6 1
-sequestration/1 1
-sequin/62 1
-sequoia/1 1
-Sequoya
-seraglio/1 1
-serape/1 1
-seraph/498 1
-seraphic
-seraphically
-Serb/1 1
-Serbia/2 1
-Serbian/1 1
-sere/150 1
-Serena/3
-serenade/28 1
-serenader 1
-serendipitous
-serendipitously
-serendipity/2 1
-serene/27 1
-Serengeti/3
-serenity/2 1
-sere 1
-serf/123 1
-serfdom/2 1
-serge/2 1
-sergeant/1 1
-Sergei/3
-serge 1
-Sergio/3
-serial/30 1
-serialization/1 1
-serialize/6 1
-series/2 1
-serif/1 1
-serifed
-serigraph/1 1
-serious/16 1
-sermon/18 1
-sermonize/6 1
-serology/2 1
-serotonin 1
-serous 1
-Serpens
-serpent/18 1
-serpentine/2 1
-Serra/3
-Serrano/3
-serrate/214 1
-serration/1 1
-serried 1
-serum/1 1
-servant/18 1
-serve/28 1
-server/1 1
-servery/60 1
-service/28 1
-serviceability/2 1
-serviceable 1
-serviceman/2 1408
-servicemen 1409
-service 1
-servicewoman/2 1410
-servicewomen 1411
-serviette/1 1
-servile/8 1
-servility/2 1
-serving/1 1
-servitor/1 1
-servitude/2 1
-servo/18 1
-servomechanism/1 1
-servomotor/1 1
-servo 1
-sesame/1 1
-sesquicentennial/1 1
-sessile 1
-session/1 1
-set/1 1
-Set/2 1
-set/88 1
-setback/1 1
-Seth/2 1
-Seton
-setscrew/1 1
-setsquare
-setsquares
-sett/141 1
-settable
-settee/1 1
-setter/1 1
-setting/1 1
-settle/28 1
-settled 1
-settlement/1 1
-settler/1 1
-settling 1
-setup/1 1
-Seurat
-Seuss
-Sevastopol/2 1
-seven/1 1
-sevenfold
-sevenpence 1
-seventeen/1 1
-seventeenth/1 1
-seventh/1 1
-seventieth/1 1
-seven 1
-seventy/15 1
-sever/11 1
-several/37 1
-severance/1 1
-severe/27 1
-severity/2 1
-Severn
-sever 1
-Severus
-Seville/2 1
-Sevres
-sew/126 1
-sewage/2 1
-Seward
-sewer/18 1
-sewerage/2 1
-sewing/2 1
-sex/22 1
-sexagenarian/1 1
-sexism/2 1
-sexist/1 1
-sexless 1
-sexologist/1 1
-sexology/2 1
-sexpot/1 1
-Sextans
-sextant/1 1
-sextet/1 1
-sextette/1 1
-Sexton/3
-sexton/1 1
-sextuplet/1 1
-sexual/8 1
-sexuality/15 1
-sexy/50 1
-Seychelles/2 1
-Seyfert 1
-Seymour/2 1
-sf
-SF
-SGML/2 1
-Sgt
-sh
-shabby/50 1
-shack/23 1
-shackle/28 1
-Shackleton
-shackling 1
-shad/18 1
-shade/28 1
-shadeless 1
-shading/1 1
-shadow/23 1
-shadowbox/7 1
-shadowboxing 1
-shadowing 1
-shadowless 1
-shadow 1
-shadowy/34 1
-shady/50 1
-Shaffer/3
-shaft/23 1
-shafting 1
-shag/92 1
-shaggy/49 1
-shah/1 1
-shaikh/10 1
-Shaka/3
-shakable 1
-shake/263 1412
-shakeable 1
-shakedown/1 1
-shakeout/1 1
-shaker/1 1
-Shaker 1
-Shakespeare/2 1
-Shakespearean 1
-shakeup/1 1
-shaking 1
-shaky/50 1
-shale/2 1
-shall/499 1413
-shallot/1 1
-shallow/455 1
-shalom 1
-sham/160 1
-shaman/1 1
-shamanic
-shamanism 1
-shamanistic
-shamble/232 1
-shambling 1
-shambolic
-shame/28 1
-shamefaced/8 1
-shameful/16 1
-shameless/16 1
-shammy/167 1
-shampoo/23 1
-shampooer/1 1
-shamrock/1 1
-sham 1
-Shana/3
-shandy/60 1
-Shane/3
-Shanghai/2 1
-shanghai/11 1
-shank/18 1
-Shankara/3
-Shanna/3
-Shannon
-shan't
-shantung/2 1
-Shantung 1
-shanty/167 1
-shantytown/1 1
-shape/28 1
-shapeless/16 1
-shapely/49 1
-shaping 1
-Shapiro/3
-sharable
-shard/1 1
-share/28 1
-shareable
-sharecrop/105 1
-sharecropper/1 1
-shareholder/1 1
-shareholding/10 1
-sharer/1 1
-shareware/1 1
-Shari
-Shari'a
-sharia/2 1
-shariah
-Sharif/3
-sharing 1
-shark/23 1
-sharking 1
-sharkskin/2 1
-Sharlene/3
-Sharon
-Sharp/3
-sharp/52 1
-Sharpe/3
-sharpen/11 1
-sharpener/1 1
-sharper/1 1
-sharpie/1 1
-sharping 1
-sharpish
-sharpshooter/1 1
-sharpshooting/2 1
-sharpy/15 1
-Sharron/3
-Shasta/2 1
-shat 1414
-shatter/23 1
-shattering/8 1
-shatterproof
-Shaula/3
-Shaun/3
-Shauna/3
-shave/500 1
-shaven 1
-shaver/1 1
-Shavian/2 1
-shaving/1 1
-Shavuot/2 1
-Shaw/2 1
-shawl/18 1
-Shawn/3
-Shawna/3
-Shawnee/1 1
-shay/1 1
-Shcharansky/3
-she/1 1
-Shea/3
-sheaf/120 1
-shear/23 1
-shearer/1 1
-shearing 1
-sheath/23 1
-sheathe/6 1
-sheathing/1 1
-sheave/18 1
-Sheba
-shebang/1 1
-shebeen/70 1
-Shebeli/3
-she'd
-shed/440 1
-shedding 1
-sheen/2 1
-Sheena/3
-sheenier 1415
-sheeniest 1415
-sheen 1
-sheeny/34 1
-sheep/2 1
-sheepdog/1 1
-sheepfold/1 1
-sheepherder/1 1
-sheepish/16 1
-sheepskin/1 1
-sheer/179 1
-sheerness/3
-sheet/23 1
-sheeting/2 1
-sheetlike 1
-Sheetrock/2 1
-Sheffield/2 1
-sheik/1 1
-sheikdom/1 1
-sheikhdom/1 1
-Sheila/3
-sheila/10 1
-shekel/1 1
-Shelby/3
-Sheldon/3
-shelf/120 1
-Shelia/3
-she'll
-Shell/3
-shell/78 1
-shellac/64 1
-shellack/23 1
-shellacking/1 1
-sheller 1
-Shelley
-shellfire/2 1
-shellfish/4 1
-shelling 1
-shelter/23 1
-sheltering 1
-Shelton/3
-shelve/6 1
-shelving/2 1
-Shelly/3
-Shenandoah
-shenanigan/1 1
-Shenyang/2 1
-Sheol
-Shepard/2 1
-Shepherd/3
-shepherd/23 1
-shepherdess/4 1
-Sheppard/3
-Sheratan/3
-Sheraton/2 1
-sherbert/1 1
-sherbet/1 1
-sherd/1 1
-Sheree/3
-Sheri/3
-Sheridan
-sheriff/1 1
-Sherlock 1
-Sherman
-Sherpa 1
-Sherri/3
-Sherrie/3
-Sherry/3
-sherry/15 1
-Sherwood
-Sheryl/3
-Shetland/1 1
-Shevardnadze/3
-Shevat/2 1
-shew/126 1
-shh
-shiatsu/2 1
-shibboleth/1 1
-shield/23 1
-Shields/3
-shier 1
-shift/23 1
-shifter/10 1
-shifting 1
-shiftless/33 1
-shiftlessly 1
-shiftless 1
-shifty/50 1
-Shi'ite
-Shiite/1 1
-Shijiazhuang
-Shikoku/2 1
-shill/23 1
-shillalah/1 1
-shillelagh/1 1
-shilling/1 1
-Shillong
-Shiloh/2 1
-shim/160 1
-shimmer/23 1
-shimmering 1
-shimmery 1
-shimmy/56 1
-shin/133 1
-shinbone/1 1
-shindig/1 1
-shine/28 1416
-shiner/1 1
-shingle/28 1
-shingling 1
-shinguard/2 1
-shining 1
-shinsplints/2 1
-Shinto/1 1
-Shintoism/1 1
-Shintoist/1 1
-Shinto 1
-shiny/49 1
-shinny/362 1
-ship/47 1
-shipboard/1 1
-shipborne
-shipbuilder/1 1
-shipbuilding/2 1
-shipload/1 1
-shipmate/1 1
-shipment/1 1
-shipowner/1 1
-shippable
-shipper/1 1
-shipping/2 1
-shipshape 1
-shipwreck/23 1
-shipwright/1 1
-shipyard/1 1
-Shiraz/2 1
-shire/1 1
-shirk/5 1
-shirker/1 1
-Shirley/3
-shirr/23 1
-shirring/1 1
-shirt/23 1
-shirtfront/1 1
-shirting/2 1
-shirtless 1
-shirtsleeve/1 1
-shirttail/1 1
-shirtwaist/1 1
-shirty 1
-shit/501 1417
-shite/189 1
-shitfaced/309
-shithead/189 1
-shitload/309 1
-shitted/309
-shitty/502 1
-shiv/18 1
-Shiva/2 1
-shiver/23 1
-shiveringly
-shivering 1
-shivery 1
-shlemiel/1 1
-shlep/47 1
-shlepp/23 1
-shlock/2 1
-shmaltz/2 1
-shoal/23 1
-shoaling 1
-shoal 1
-shoat/1 1
-shock/78 1
-shocker/1 1
-shocking/8 1
-Shockley/3
-shockproof 1
-shoddy/363 1
-shoe/503 1
-shoebox 1
-shoehorn/23 1
-shoeing 1
-shoelace/1 1
-shoeless 1
-shoemaker/1 1
-shoeshine/1 1
-shoestring/1 1
-shoetree/1 1
-shogun/1 1
-shogunate/2 1
-shone 1418
-shoo/11 1
-shook 1419
-shoot/86 1420
-shooter/1 1
-shooting/1 1
-shootout/1 1
-shop/47 1
-shopaholic/10 1
-shopfitter
-shopfitters
-shopfitting
-shopfront/10 1
-shopkeeper/1 1
-shopkeeping 1
-shoplift/11 1
-shoplifter/1 1
-shoplifting/2 1
-shoppe/28 1
-shopper/1 1
-shopping/2 1
-shoptalk/2 1
-shopworn 1
-shore/28 1
-shorebird/1 1
-shoreline/1 1
-shore 1
-shoreward 1
-shoring/2 1
-Short/3
-short/52 1
-shortage/1 1
-shortbread/2 1
-shortcake/1 1
-shortchange/6 1
-shortcoming/1 1
-shortcrust
-shortcut/18 1
-shorten/11 1
-shortening/1 1
-shortfall/1 1
-shorthand/1 1
-shorthanded
-shorthand 1
-shorthorn/1 1
-Shorthorn 1
-shortie/1 1
-shortish 1
-shortlist/11 1
-shortsighted/16 1
-shortstop/1 1
-shortwave/18 1
-shorty/15 1
-Shoshone/1 1
-Shoshones 1421
-Shoshoni/1 1
-Shoshonis 1422
-Shostakovitch/3
-shot/18 1
-shotgun/133 1
-shot 1423
-should/44 1
-shoulder/23 1
-shouldering 1
-shouldn't
-should 1424
-shout/23 1
-shouter/1 1
-shouting 1
-shove/28 1
-shovel/23 1
-shoveler 1
-shovelful/1 1
-shoveling 1
-show/504 1
-showbiz/2 1
-showboat/23 1
-showcase/28 1
-showdown/1 1
-shower/23 1
-showering 1
-showerproof
-showery/34 1
-showgirl/1 1
-showground/10 1
-showing/1 1
-showjumping 1
-showman/2 1425
-showmanship/2 1
-showmen 1426
-showoff/1 1
-showpiece/1 1
-showplace/1 1
-showroom/1 1
-showstopper/1 1
-showstopping
-showtime 1
-showy/50 1
-shpt
-shrank 1427
-shrapnel/2 1
-shred/113 1
-shredder/1 1
-shredding 1
-Shrek/3
-Shreveport
-shrew/18 1
-shrewd/21 1
-shrewish 1
-shriek/23 1
-shrieker/10 1
-shrieking 1
-shrift/2 1
-shrike/1 1
-shrill/266 1
-shrilling 1
-shrilly 1
-shrimp/23 1
-shrimper/10 1
-shrimping 1
-shrine/18 1
-Shriner 1
-shrink/86 1428
-shrinkable 1
-shrinkage/2 1
-shrinkingly
-shrive/376 1
-shrivel/11 1
-shriveling 1
-Shropshire 1
-shroud/23 1
-shrouding 1
-shrub/18 1
-shrubbery/15 1
-shrubby/34 1
-shrug/92 1
-shrunken 1427
-shrunk 1427
-shtick/1 1
-shuck/23 1
-shucking 1
-shucks/89 1
-shudder/23 1
-shuddering 1
-shuffle/28 1
-shuffleboard/1 1
-shuffler/1 1
-shuffling 1
-Shula/3
-shun/192 1
-shunt/23 1
-shunting 1
-shush/7 1
-shut/505 1
-shutdown/1 1
-shuteye/2 1
-shutoff/1 1
-shutout/1 1
-shutter/23 1
-shutterbug/1 1
-shuttle/28 1
-shuttlecock/23 1
-shy/506 1
-shyer 1
-Shylockian/3
-Shylock 1
-shyster/1 1
-Siam/2 1
-Siamese/2 1
-Sian/2 1
-Sibelius
-Siberia/2 1
-Siberian/1 1
-sibilance 1
-sibilancy 1
-sibilant/1 1
-sibling/1 1
-sibyl/1 1
-sibylline 1
-Sibyl 1
-sic/332 1
-Sicilian/1 1
-Sicily/2 1
-sick/507 1
-sickbay/10 1
-sickbed/1 1
-sicken/11 1
-sickening/8 1
-sickie/1 1
-sickish 1
-sickle/18 1
-sickly 1
-sicko/1 1
-sickout/1 1
-sickroom/1 1
-sic 1
-Sid/3
-Siddhartha/2 1
-side/28 1
-sidearm/1 1
-sideband/10 1
-sidebar/1 1
-sideboard/1 1
-sideburns
-sideburns's
-sidecar/1 1
-sidekick/1 1
-sidelight/1 1
-sideline/28 1
-sidelong
-sideman/2 1429
-sidemen 1430
-sidepiece/1 1
-sidereal 1
-sidesaddle/1 1
-sideshow/1 1
-sidesplitting 1
-sidestep/47 1
-sidestroke/28 1
-sideswipe/28 1
-sidetrack/23 1
-side 1
-sidewalk/1 1
-sidewall/1 1
-sidewards
-sideways
-sidewinder/1 1
-sidewise
-siding/1 1
-sidle/28 1
-Sidney
-SIDS/2 1
-siege/18 1
-Siegfried
-Siemens
-sienna/2 1
-Sierpinski/3
-sierra/1 1
-Sierras
-siesta/1 1
-sieve/28 1
-sift/11 1
-sifter/1 1
-sifting 1
-sigh/23 1
-sight/23 1
-sighted/153 1
-sighting/1 1
-sightless/8 1
-sightly/34 1
-sightread 1
-sightseeing/2 1
-sightseer/1 1
-Sigismund
-sigma/1 1
-sigmoid 1
-Sigmund
-sign/78 1
-signage/2 1
-signal/459 1
-signaler/1 1
-signalization/2 1
-signalize/6 1
-signalman/2 1431
-signalmen 1432
-signatory/15 1
-signature/1 1
-signboard/1 1
-signer/1 1
-signet/18 1
-significance/1 1
-significant/8 1
-signification/1 1
-signified 1
-signifier 1
-signify/31 1
-signifying 1
-signing/1 1
-signor/508 1
-signora/509 1
-signore/510 1
-signorina/509 1
-signori 1
-signpost/23 1
-Sigurd
-Sihanouk/3
-Sikh/1 1
-Sikhism 1
-Sikkim
-Sikkimese
-Sikorsky
-silage/2 1
-Silas/3
-silence/28 1
-silencer/1 1
-silent/183 1
-Silesia/2 1
-silhouette/28 1
-silica/2 1
-silica's 1433
-silica 1434
-silicate/1 1
-siliceous
-silicious
-silicon/1 1435
-silicone/2 1
-silicosis/2 1
-silk/18 1
-silken 1
-silkscreen/18 1
-silk 1
-silkworm/1 1
-silky/50 1
-sill/1 1
-sillies
-silo/18 1
-silt/23 1
-siltstone 1
-silty/34 1
-Silurian/1 1
-Silva/3
-silvan 1
-silver/23 1
-silverfish/4 1
-silvering 1
-silversmith/1 1
-silver 1
-silverware/2 1
-silvery/34 1
-Silvia/2 1
-silly/49 1
-silly's
-Simenon/3
-simian/1 1
-similar/8 1
-similarity/15 1
-simile/1 1
-similitude/2 1
-Simmental 1
-simmer/23 1
-Simmons/3
-Simon
-Simone/3
-simonize/6 1
-simony/2 1
-simpatico
-simper/23 1
-simperingly
-simple/289 1
-simpleminded
-simpler 1
-simpleton/1 1
-simple 1
-simplex/89 1
-simplicity/15 1
-simplification/1 1
-simplifier 1
-simplify/31 1
-simplistic/39 1
-Simpson/1 1
-Sims
-simulacra 1436
-simulacrum/10 1437
-simulate/6 1
-simulation/1 1
-simulator/1 1
-simulcast/23 1
-simultaneity/2 1
-simultaneous/8 1
-sin/133 1
-Sinai/2 1
-Sinatra
-sincere/45 1
-sincerity/2 1
-since 1
-Sinclair
-Sindbad/3
-Sindhi/2 1
-sine/1 1
-sinecure/1 1
-sinecurist 1
-sinew/18 1
-sinewy 1
-sinful/16 1
-sing/86 1438
-singable 1
-singalong/10 1
-Singapore/2 1
-Singaporean/1 1
-singe/270 1
-Singer
-singer/1 1
-Singh/3
-singing/2 1
-single/511 1
-singlet/10 1
-Singleton/3
-singleton/1 1
-singletree/1 1
-singling 1
-singsong/23 1
-singular/30 1
-singularity/15 1
-singularization 1
-Sinhalese/2 1
-sinister/8 1
-sinistral 1
-sink/86 1439
-sinkable 1
-sinker/1 1
-sinkhole/1 1
-Sinkiang/3
-sinking 1
-sinless 1
-sinner/1 1
-sinning 1
-sinology 1
-sinuosity/2 1
-sinuous/8 1
-sinus/4 1
-sinusitis/2 1
-sinusoidal/8 1
-sinusoid 1
-Sioux/2 1
-sip/47 1
-siphon/23 1
-sipper/1 1
-sir/1 1
-Sir/1 1
-sir/58 1
-sire/28 1
-siree/2 1
-siren/1 1
-sires 1440
-Sirius/2 1
-sirloin/1 1
-sirocco/1 1
-sirrah 1
-sirree/2 1
-sirup/18 1
-sis/4 1
-sisal/2 1
-sissified
-sissy/42 1
-sister/30 1
-Sister/1 1
-sister/58 1
-sisterhood/1 1
-sisterly/140 1
-Sistine
-Si 1441
-Sisyphean
-Sisyphus/2 1
-sit/88 1442
-sitar/1 1
-sitarist/1 1
-sitcom/1 1
-site/28 1
-sitings
-sitter/1 1
-sitting/1 1
-situate/6 1
-situation/1 1
-situational 1
-situationist
-situp/1 1
-Siva/2 1
-Sivan/2 1
-six/4 1
-sixfold 1
-sixpence/1 1
-sixpenny 1
-sixshooter/2 1
-sixteen/1 1
-sixteenth/1 1
-sixteen 1
-sixth/30 1
-sixtieth/1 1
-six 1
-sixty/15 1
-sizable 1
-size/139 1
-sizer 1
-sizing/2 1
-sizzle/28 1
-sizzler/10 1
-sizzling 1
-SJ
-Sjaelland/2 1
-SK
-ska/2 1
-skate/28 1
-skateboard/23 1
-skateboarder/1 1
-skateboarding/2 1
-skater/1 1
-skating/2 1
-skedaddle/28 1
-skeet/2 1
-skeeter/10 1
-skein/18 1
-skeletal
-skeleton/1 1
-skeptic/1 1
-skeptical/8 1
-skepticism/2 1
-skeptic 1
-skerries
-sketch/22 1
-sketchbook/10 1
-sketcher/1 1
-sketchpad/10 1
-sketchy/50 1
-skew/512 1
-skewbald/10 1
-skewer/23 1
-ski/272 1
-skibob/10 1
-skid/113 1
-skidpan/10 1
-skier/1 1
-skiff/18 1
-skiffle 1
-skiing/2 1
-skilful/8 1
-skill/62 1
-skillet/1 1
-skillful/16 1
-skim/335 1
-skimmer/1 1
-skimming 1
-skimp/11 1
-skimpy/50 1
-skin/513 1
-skincare/2 1
-skinflick/1 1
-skinflint/1 1
-skinful 1
-skinhead/1 1
-skinless 1
-Skinner/2 1
-skinner/10 1
-skintight 1
-skint 1
-skinny/111 1
-skip/47 1
-skipper/23 1
-Skippy/3
-skirmish/22 1
-skirmisher/10 1
-skirmishing 1
-skirt/23 1
-skirting 1
-skit/18 1
-skitter/11 1
-skittish/16 1
-skittle/70 1
-skive/6 1
-skiver/58 1
-skiving 1
-skivvy/56 1
-skoal/18 1
-Skopje
-skua/10 1
-skulduggery/2 1
-skulk/5 1
-skulker/1 1
-skulking 1
-skull/1 1
-skullcap/1 1
-skullduggery/2 1
-skunk/23 1
-sky/56 1
-skycap/1 1
-skydive/6 1
-skydiver/1 1
-skydiving/2 1
-Skye
-skyjack/11 1
-skyjacker/1 1
-skyjacking/1 1
-Skylab/2 1
-skylark/23 1
-skylight/1 1
-skyline/18 1
-Skype/3
-skyrocket/23 1
-skyscraper/1 1
-skyward/10 1
-skywriter/1 1
-skywriting/2 1
-slab/136 1
-slabbing 1
-slack/514 1
-slacken/11 1
-slackening 1
-slacker/1 1
-Slackware/3
-slag/92 1
-slagheap/10 1
-slain
-slake/6 1
-slalom/23 1
-slam/160 1
-slammer/1 1
-slamming 1
-slander/23 1
-slanderer/1 1
-slanderous 1
-slang/334 1
-slanging 1
-slangy/34 1
-slant/23 1
-slanting/8 1
-slant 1
-slantwise 1
-slap/296 1
-slapdash 1
-slaphappy/34 1
-slapper/10 1
-slapstick/2 1
-slash/22 1
-Slashdot/3
-slasher/1 1
-slashing 1
-slat/515 1
-slate/28 1
-Slater/3
-slather/11 1
-slating 1
-slattern/1 1
-slatternly 1
-slaughter/23 1
-slaughterer/1 1
-slaughterhouse/1 1
-slaughterings
-Slav/1 1
-slave/139 1
-slaveholder/1 1
-slaver/23 1
-slavery/2 1
-Slavic/2 1
-slavish/16 1
-Slavonic/2 1
-Slav 1
-slaw/2 1
-slay/121 1443
-slayed
-slayer/1 1
-slaying/1 1
-sleaze/1 1
-sleazebag/10 1
-sleazeball/10 1
-sleazy/50 1
-sled/113 1
-sledder/1 1
-sledding 1
-sledge/28 1
-sledgehammer/23 1
-sledging 1
-sleek/98 1
-sleeker 1
-sleeking 1
-sleep/86 1444
-sleeper/1 1
-sleeping 1
-sleepless/16 1
-sleepover/1 1
-sleepwalk/11 1
-sleepwalker/1 1
-sleepwalking/2 1
-sleepwear/2 1
-sleepy/50 1
-sleepyhead/1 1
-sleet/23 1
-sleety/34 1
-sleeve/77 1
-sleeveless 1
-sleigh/23 1
-sleighing 1
-sleight/1 1
-slender/21 1
-slenderize/6 1
-slept 1445
-sleuth/86 1
-slew/23 1446
-slice/28 1
-slicer/1 1
-slicing 1
-slick/52 1
-slicker/1 1
-slicking 1
-slide/377 1
-slider/1 1
-sliding 1
-slid 1
-slier 1447
-sliest 1447
-slight/52 1
-slighter 1
-slighting/8 1
-slily
-slim/516 1
-slime/18 1
-slimline
-slimmer/10 1
-slimming/2 1
-slimy/49 1
-sling/86 1448
-slingback/10 1
-slingshot/1 1
-slink/141 1449
-Slinky/3
-slinky/34 1
-slip/47 1
-slipcase/1 1
-slipcover/18 1
-slipknot/1 1
-slippage/1 1
-slipper/18 1
-slippery/49 1
-slipping 1
-slippy 1
-slipshod 1
-slipstream/18 1
-slipway/1 1
-slit/403 1
-slither/23 1
-slithery 1
-slitted 1
-slitter 1
-sliver/23 1
-Sloan
-Sloane/2 1
-slob/1 1
-slobbed
-slobber/23 1
-slobbery 1
-slobbing
-Slocum/3
-sloe/1 1
-slog/92 1
-slogan/1 1
-sloganeering
-sloop/1 1
-slop/218 1
-slope/28 1
-sloping 1
-sloppy/50 1
-slosh/156 1
-slot/109 1
-sloth/18 1
-slothful/16 1
-slouch/22 1
-sloucher/1 1
-slouching 1
-slouchy/34 1
-slough/23 1
-Slovak/1 1
-Slovakia
-Slovakian 1
-sloven/1 1
-Slovene/1 1
-Slovenia/2 1
-Slovenian/1 1
-slovenly/49 1
-slow/98 1
-slowcoach/89 1
-slowdown/1 1
-slowing 1
-slowish
-slowpoke/1 1
-SLR
-sludge/2 1
-sludgy/34 1
-slue/28 1
-slug/92 1
-sluggard/1 1
-slugger/1 1
-sluggish/16 1
-sluice/28 1
-slum/335 1
-slumber/23 1
-slumbering 1
-slumberous 1
-slumbrous 1
-slumlord/1 1
-slummer 1
-slumming 1
-slummy/34 1
-slump/23 1
-slung 1450
-slunk 1451
-slur/103 1
-slurp/23 1
-Slurpee/3
-slurry/2 1
-slush/2 1
-slushy/49 1
-slut/1 1
-sluttish 1
-slutty/34 1
-sly/517 1
-slyly
-Sm/2 1
-smack/78 1
-smacker/1 1
-smacking 1
-Small/3
-small/518 1
-smallholder/10 1
-smallholding/10 1
-smallish 1
-smallpox/2 1
-smalltalk
-smarmy/34 1
-smart/514 1
-smarten/11 1
-smarting 1
-smarty/15 1
-smartypants/2 1
-smash/147 1
-smasher/1 1
-smashing 1
-smashup/1 1
-smattering/1 1
-smear/23 1
-smeary/34 1
-smegma 1
-smell/519 1
-smellable
-smelling 1
-smelt/23 1
-smelter/1 1
-smelting 1
-smelly/49 1
-Smetana
-smidgen/1 1
-smidgeon/1 1
-smidgin/1 1
-smilax/2 1
-smile/28 1
-smiler 1
-smiley/1 1
-smiling/8 1
-smirch/22 1
-smirk/23 1
-Smirnoff/3
-smite/317 1452
-Smith
-smith/18 1
-smithereens/2 1
-Smithson
-Smithsonian/3
-smithy/15 1
-smock/23 1
-smocking/2 1
-smog/1 1
-smoggy/34 1
-smoke/28 1
-smokehouse/1 1
-smokeless 1
-smoker/1 1
-smokescreen/1 1
-smokestack/1 1
-Smokey/3
-smokey 1453
-smokier 1454
-smokiest 1454
-smokiness/3
-smoking/2 1
-smoky/34 1
-smolder/23 1
-smoldering 1
-Smolensk
-Smollett
-smooch/22 1
-smoochy
-smooth/520 1
-smoother 1
-smoothie/1 1
-smoothing 1
-smoothy/60 1
-smorgasbord/1 1
-smote 1455
-smother/23 1
-smouldered
-smoulders
-smoulder's
-smudge/28 1
-smudged 1
-smudgy/34 1
-smug/521 1
-smuggle/6 1
-smuggler/1 1
-smuggling/2 1
-smug 1
-smurf/58 1
-smut/18 1
-Smuts
-smutty/49 1
-Smyrna
-Sn/2 1
-snack/23 1
-snaffle/28 1
-snafu/18 1
-snag/92 1
-snail/23 1
-snake/1 1
-Snake/2 1
-snake/6 1
-snakebite/1 1
-snakelike
-snakeskin 1
-snakier 1456
-snakiest 1456
-snaky/34 1
-snap/296 1
-snapdragon/1 1
-snapper/1 1
-snapping 1
-snappish/16 1
-Snapple/3
-snappy/50 1
-snapshot/18 1
-snare/28 1
-snarf/11 1
-snaring 1
-snark/10 1
-snarl/23 1
-snarlingly 1
-snarling 1
-snarly/34 1
-snatch/22 1
-snatcher/1 1
-snazzily 1
-snazzy/34 1
-Snead/3
-sneak/78 1
-sneaker/1 1
-sneaking/8 1
-sneaky/50 1
-sneer/23 1
-sneering/191 1
-sneeze/28 1
-sneezing 1
-Snell/3
-snick/5 1
-snicker/23 1
-Snickers/3
-snide/45 1
-Snider/3
-snide 1
-sniff/23 1
-sniffer/1 1
-sniffing 1
-sniffle/28 1
-sniffling 1
-sniffy/34 1
-snifter/18 1
-snigger/23 1
-sniggering 1
-snip/218 1
-snipe/28 1
-sniper/1 1
-sniping 1
-snippet/1 1
-snipping 1
-snippy/34 1
-snit/1 1
-snitch/22 1
-snivel/23 1
-sniveler/1 1
-snob/1 1
-snobbery/2 1
-snobbish/16 1
-snobby/34 1
-snog/117 1
-snood/18 1
-snooker/23 1
-snoop/23 1
-snooper/1 1
-Snoopy/3
-snoopy/34 1
-snoot/18 1
-snooty/50 1
-snooze/28 1
-snore/28 1
-snorer/1 1
-snoring 1
-snorkel/23 1
-snorkeler/1 1
-snorkeling/2 1
-snort/23 1
-snorter/1 1
-snorting 1
-snot/18 1
-snotty/50 1
-snout/18 1
-Snow
-snow/23 1
-snowball/23 1
-snowbank/1 1
-Snowbelt 1
-snowbird/1 1
-snowboard/23 1
-snowboarder/1 1
-snowboarding/2 1
-snowbound 1
-snowdrift/1 1
-snowdrop/1 1
-snowfall/1 1
-snowfield/1 1
-snowflake/1 1
-snowline 1
-snowman/2 1457
-snowmen 1458
-snowmobile/28 1
-snowmobiling 1
-snowplough/10 1
-snowplow/23 1
-snowshed 1
-snowshoe/86 1
-snowstorm/1 1
-snowsuit/1 1
-snowy/49 1
-snub/136 1
-snubbing 1
-snub 1
-snuff/216 1
-snuffbox/4 1
-snuffer/1 1
-snuffing 1
-snuffle/28 1
-snuffling 1
-snug/522 1
-snuggle/28 1
-Snyder/3
-SO
-so/2 1
-soak/23 1
-soaking/1 1
-soap/23 1
-soapbox/40 1
-soapiness/3
-soapstone/2 1
-soapsuds/2 1
-soapy/34 1
-soar/23 1
-soaring/8 1
-Soave/2 1
-sob/1 1
-SOB/2 1
-sob/145 1
-sobbingly 1
-sobbing 1
-sober/98 1
-sobering 1
-sobriety/2 1
-sobriquet/1 1
-Soc
-soc/523 1
-soccer/2 1
-sociability/2 1
-sociable/82 1
-social/30 1
-socialism/2 1
-socialist/1 1
-socialistic 1
-socialite/1 1
-socialization/2 1
-socialize/6 1
-societal
-society/15 1
-sociobiology 1
-sociocultural 1
-socioeconomic/39 1
-sociolinguistic/10 1
-sociolinguists
-sociological/8 1
-sociologist/1 1
-sociology/2 1
-sociopath/1 1
-sociopolitical
-sock/23 1
-socket/18 1
-sockeye/1 1
-Socorro/3
-Socrates/2 1
-Socratic 1
-sod/113 1
-soda/1 1
-sodden/8 1459
-Soddy
-sodium/2 1
-Sodom/2 1
-sodomite/1 1
-sodomize/6 1
-sodomy/2 1
-sod 1460
-soever 1
-sofa/1 1
-sofabed/1 1
-Sofia/2 1
-soft/21 1
-softback 1
-softball/1 1
-softbound 1
-softcover 1
-soften/11 1
-softener/1 1
-softening 1
-softhearted 1
-softie/1 1
-soft 1
-software/2 1
-softwood/1 1
-softy/15 1
-soggily 1
-soggy/49 1
-Soho
-soh 1
-soignee 1
-soigne 1
-soil/23 1
-soiling 1
-soiree/1 1
-sojourn/23 1
-sojourner/1 1
-sojourning 1
-sol/1 1
-Sol/2 1
-sol/58 1
-solace/28 1
-solaria 1461
-solarium/2 1462
-solar 1
-solder/23 1
-solderer/1 1
-soldering 1
-soldier/23 1
-soldiering 1
-soldierly 1
-soldiery/2 1
-sold 1463
-sole/54 1
-solecism/1 1
-solemn/21 1
-solemness/3
-solemnify/31 1
-solemnity/15 1
-solemnization/2 1
-solemnize/6 1
-solenoid/1 1
-solenoidal 1
-solicit/11 1
-solicitation/1 1
-soliciting 1
-solicitor/1 1
-solicitous/16 1
-solicitude/2 1
-solid/38 1
-solidarity/2 1
-solidification/2 1
-solidify/31 1
-solidi 1464
-solidity/2 1
-solidus/2 1465
-soliloquize/6 1
-soliloquy/15 1
-soling 1
-solipsism/1 1
-solipsist/10 1
-solipsistic
-Solis/3
-solitaire/1 1
-solitary/524 1
-solitude/1 1
-solo/23 1
-soloist/1 1
-Solomon 1
-Solon
-solo 1
-solstice/1 1
-solubility/2 1
-soluble/1 1
-solute/1 1
-solution/1 1
-solvable 1
-solve/6 1
-solvency/2 1
-solvent/1 1
-solver/1 1
-Solzhenitsyn
-Somali/1 1
-Somalia/2 1
-Somalian/1 1
-somatic
-somber/16 1
-sombrero/1 1
-sombre 1
-somebody/15 1
-someday
-somehow
-someone/1 1
-someplace
-somersault/23 1
-somerset/109 1
-something/1 1
-sometime/10 1
-some 1
-someway/10 1
-somewhat/10 1
-somewhere 1
-Somme/2 1
-somnambulism/2 1
-somnambulist/1 1
-somnolence/2 1
-somnolent 1
-Somoza/3
-son/1 1
-Son/2 1
-sonar/1 1
-sonata/1 1
-sonatina/1 1
-Sondheim
-Sondra/3
-song/1 1
-songbird/1 1
-songbook/1 1
-songfest/1 1
-Songhai/2 1
-Songhua/3
-songster/1 1
-songstress/4 1
-songwriter/1 1
-songwriting 1
-Sonia/3
-sonically
-sonic 1
-Sonja/3
-sonnet/18 1
-sonofabitch
-sonogram/1 1
-Sonora/2 1
-sonority/15 1
-sonorous/16 1
-sonsofbitches
-Sontag/3
-Sony/3
-Sonya/3
-Sonny/3
-sonny/15 1
-soon/166 1
-sooner 1
-soonish
-soot/2 1
-sooth/525 1
-soothe/253 1
-soother/1 1
-soothing/8 1
-soothsayer/1 1
-soothsaying/2 1
-soot 1
-sooty/34 1
-sop/1 1
-SOP/2 1
-sop/105 1
-Sophia
-Sophie/3
-sophism/2 1
-sophist/1 1
-sophistical 1
-sophisticate/28 1
-sophistication/2 1
-sophistic 1
-sophistry/15 1
-Sophoclean
-Sophocles
-sophomore/1 1
-sophomoric
-soporific/1 1
-soporifically
-sopping 1
-soppy/34 1
-soprano/1 1
-Sopwith/3
-sorbet/1 1
-Sorbonne/3
-sorcerer/1 1
-sorceress/4 1
-sorcery/2 1
-sordid/16 1
-sore/526 1
-sorehead/1 1
-sorghum/2 1
-sorority/15 1
-sorrel/1 1
-sorrow/23 1
-sorrowful/16 1
-sorrowing 1
-sorry/50 1
-sort/23 1
-sorta
-sortable 1
-sorter/1 1
-sortie/63 1
-sorting 1
-SOs
-SOS/4 1
-Sosa/3
-sot/1 1
-Soto/3
-so 1
-sottish 1
-sou/1 1
-soubriquet/1 1
-souffle/1 1
-sough/23 1
-soughing 1
-sought 1466
-souk/10 1
-soul/1 1
-souled
-soulful/16 1
-soulless/8 1
-soullessness
-soulless 1
-soul 1
-sound/52 1
-soundbite/10 1
-soundboard/1 1
-sounder/1 1
-sounding/1 1
-soundless/8 1
-soundproof/11 1
-soundproofing/2 1
-soundproof 1
-soundtrack/1 1
-soup/23 1
-soupcon/1 1
-Souphanouvong/3
-soupy/34 1
-sour/52 1
-source/28 1
-sourceless 1
-sourdough/1 1
-souring 1
-sourish 1
-sourpuss/4 1
-sous/7 1
-Sousa/2 1
-sousaphone/1 1
-souse/28 1
-sousing 1
-South/1 1
-south/2 1
-Southampton
-southbound 1
-southeast/44 1
-Southeast/1 1
-southeast/2 1
-southeaster/1 1
-southeasterly
-southeastern
-southeastward/10 1
-southerlies
-southerly's
-southerly 1
-southern/129 1
-southerner/1 1
-Southerner/1 1
-southernmost
-Southern 1
-Southey
-southpaw/1 1
-south 1
-South 1
-south 1
-southward/1 1
-southwest/44 1
-Southwest/1 1
-southwest/2 1
-southwester/1 1
-southwesterly
-southwestern
-southwestward/10 1
-souvenir/1 1
-sou'wester
-sovereign/1 1
-sovereignty/2 1
-soviet/1 1
-Soviet 1
-sow/504 1
-sower/1 1
-Soweto/2 1
-sowing 1
-soy/2 1
-soya/2 1
-soybean/1 1
-Soyinka/3
-Soyuz
-sozzled
-Sp
-spa/1 1
-Spaatz/3
-space/139 1
-spacecraft/1 1
-spaceflight/1 1
-spaceman/2 1467
-spacemen 1468
-spaceport/1 1
-spacer/1 1
-spaceship/1 1
-spacesuit/1 1
-spacewalk/23 1
-spacewoman/2 1469
-spacewomen 1470
-spacey 1471
-spacial 1
-spacier 1472
-spaciest 1472
-spaciness/3
-spacing/1 1
-spacious/16 1
-Spackle 1
-spacy/34 1
-spade/28 1
-spadeful/1 1
-spadework/2 1
-spadix/184 1
-spaghetti/2 1
-Spahn/3
-Spain/2 1
-spake 1473
-Spam/2 1
-spam/114 1
-spamblock
-spamblocks
-spammer/1 1
-Span
-span/133 1
-spandex/2 1
-spandrels
-spangle/28 1
-spangling 1
-Spanglish 1
-spangly 1
-Spaniard/1 1
-spaniel/18 1
-Spanish/2 1
-spank/23 1
-spanker 1
-spanking/1 1
-spanner/1 1
-spar/103 1
-spare/107 1
-spareribs
-spareribs's
-sparer 1
-sparing/8 1
-spark/23 1
-sparkle/28 1
-sparkler/1 1
-sparklingly
-sparkling 1
-sparkly 1
-Sparks
-sparky/34 1
-sparring 1
-sparrow/1 1
-sparrowhawk
-sparrowhawks
-spars/166 1
-sparse/27 1
-sparsity/2 1
-Sparta/2 1
-Spartacus
-Spartan/1 1
-spartan 1
-Spartan 1
-spar 1
-spasm/18 1
-spasmodic/39 1
-spastic/1 1
-spat/109 1
-spate/1 1
-spathe/1 1
-spatial/8 1
-spat 1474
-spatter/23 1
-spatula/1 1
-spavin/2 1
-spavined
-spawn/23 1
-spawning 1
-spay/11 1
-SPCA
-speak/121 1475
-speakable 1
-speakeasy/15 1
-speaker/1 1
-speakerphone/10 1
-Speaker 1
-speaking/10 1
-spear/23 1
-spearfish/22 1
-spearhead/23 1
-spearmint/2 1
-Spears
-spec/451 1
-special/527 1
-specialism/10 1
-specialist/1 1
-specialization/1 1
-specialize/6 1
-specialty/15 1
-specie/130 1
-specif
-specifiable
-specifiably
-specific/51 1
-specification/1 1
-specificity/2 1
-specificness
-specifier/10 1
-specify/31 1
-specimen/1 1
-specious/16 1
-speck/23 1
-specked 1
-speckle/28 1
-speckling 1
-spectacle/130 1
-spectacular/30 1
-spectate/6 1
-spectator/1 1
-specter/1 1
-spectral 1
-spectra 1476
-spectrogram 1
-spectrograph 1
-spectrometer/1 1
-spectrometric
-spectrometry 1
-spectrophotometer 1
-spectrophotometry 1
-spectroscope/1 1
-spectroscopic
-spectroscopically
-spectroscopy/2 1
-spectrum/2 1477
-spec 1
-specular 1
-speculate/6 1
-speculation/1 1
-speculative/8 1
-speculator/1 1
-speculum 1
-sped 1478
-speech/40 1
-speechify/31 1
-speechless/16 1
-speechwriter/10 1
-speed/86 1479
-speedboat/1 1
-speeder/1 1
-speeding/2 1
-speedometer/1 1
-speedster/1 1
-speedup/1 1
-speedway/1 1
-speedwell/2 1
-speedy/50 1
-Speer/3
-speleological
-speleologist/1 1
-speleology/2 1
-spell/23 1
-spellable
-spellbind/121 1480
-spellbinder/1 1
-spellbound 1481
-spellchecker/10 1
-spelldown/1 1
-speller/1 1
-spelling/1 1
-spelunker/1 1
-spelunking/2 1
-Spence
-Spencer
-Spencerian
-spend/382 1
-spendable 1
-spender/1 1
-spending/2 1
-spendthrift/1 1
-Spengler/3
-Spenglerian 1
-Spenser/2 1
-Spenserian 1
-sperm/1 1
-spermatozoa 1482
-spermatozoon/2 1483
-spermicidal
-spermicide/1 1
-Sperry/3
-spew/23 1
-spewer/1 1
-SPF
-sphagnum/1 1
-sphere/18 1
-spherical/8 1
-spheroid/1 1
-spheroidal
-sphincter/1 1
-Sphinx/2 1
-sphinx/4 1
-spic/5 1
-Spica/2 1
-spice/28 1
-spicier 1484
-spiciest 1484
-spic 1
-spicule/1 1
-spicy/50 1
-spider/1 1
-spiderweb/18 1
-spidery/34 1
-spiel/23 1
-Spielberg/3
-spiff/11 1
-spiffy/34 1
-spigot/1 1
-spik/70 1
-spike/28 1
-spikier 1485
-spikiest 1485
-spiky/49 1
-spill/23 1
-spillage/1 1
-Spillane/3
-spiller 1
-spilling 1
-spillover/1 1
-spillway/1 1
-spin/442 1486
-spinach/2 1
-spinal/30 1
-spindle/28 1
-spindling 1
-spindly/34 1
-spindrift 1
-spine/1 1
-spineless/83 1
-spinet/1 1
-spinnaker/1 1
-spinner/1 1
-spinneret/1 1
-spinney/10 1
-spinning/2 1
-spinoff/1 1
-Spinoza
-spinster/1 1
-spinsterhood/2 1
-spinsterish
-Spinx/3
-spiny/34 1
-spiracle/1 1
-spiraea/1 1
-spiral/210 1
-spire/18 1
-spirea/1 1
-spirit/23 1
-spirited/8 1
-spiriting 1
-spiritless 1
-spiritual/30 1
-spiritualism/2 1
-spiritualist/1 1
-spiritualistic 1
-spirituality/2 1
-spirituous 1
-Spiro/3
-spirochete/1 1
-Spirograph/3
-spiry/34 1
-spit/109 1487
-spitball/1 1
-spite/28 1
-spiteful/85 1
-spitfire/1 1
-Spitsbergen/2 1
-spitting 1
-spittle/2 1
-spittoon/1 1
-Spitz/3
-spiv/10 1
-splash/22 1
-splashdown/1 1
-splashily 1
-splashing 1
-splashy/49 1
-splat/109 1
-splatter/23 1
-splay/23 1
-splayfeet 1488
-splayfoot/2 1489
-splayfooted
-splayfoot 1
-splay 1
-spleen/1 1
-splendid/75 1
-splendor/1 1
-splendorous
-splenetic 1
-splice/28 1
-splicer/1 1
-spliff/10 1
-spline/70 1
-splint/23 1
-splinter/23 1
-splintery 1
-split/128 1
-splittable
-splitter/10 1
-splitting/1 1
-splodge/70 1
-splosh/7 1
-splotch/22 1
-splotchy/34 1
-splurge/28 1
-splutter/23 1
-spluttering 1
-Spock
-spoil/23 1
-spoilage/2 1
-spoiler/1 1
-spoilsport/1 1
-Spokane
-spoke/18 1
-spoken 1473
-spokeshave/10 1
-spokesman/2 1490
-spokesmen 1491
-spokespeople 1492
-spokesperson/1 1493
-spoke 1473
-spokeswoman/2 1494
-spokeswomen 1495
-spoliation/2 1
-sponge/28 1
-spongecake/2 1
-sponger/1 1
-spongy/49 1
-sponsor/23 1
-sponsorship/1 1
-spontaneity/2 1
-spontaneous/8 1
-spoof/23 1
-spook/23 1
-spooky/49 1
-spool/23 1
-spooling 1
-spoon/23 1
-spoonbill/1 1
-spoonerism/1 1
-spoonful/1 1
-spoor/23 1
-sporadic/39 1
-spore/28 1
-sporran/10 1
-sport/23 1
-sporting/8 1
-sportive/8 1
-sportscast/86 1
-sportscaster/1 1
-sportscasting 1
-sportsman/2 1496
-sportsmanlike
-sportsmanship/2 1
-sportsmen 1497
-sportspeople
-sportsperson
-sportswear/2 1
-sportswoman/2 1498
-sportswomen 1499
-sportswriter/1 1
-sport 1
-sporty/49 1
-spot/403 1
-spotless/16 1
-spotlight/23 1500
-spotlit 1501
-spotted 1
-spotter/1 1
-spotting 1
-spotty/50 1
-spousal/1 1
-spouse/18 1
-spout/23 1
-spouting 1
-sprain/23 1
-sprang 1502
-sprat/1 1
-sprawl/23 1
-spray/23 1
-sprayer/1 1
-spread/86 1
-spreadable 1
-spreadeagled
-spreader/1 1
-spreading 1
-spreadsheet/1 1
-spree/63 1
-sprig/361 1
-sprightly/49 1
-spring/408 1503
-springboard/1 1
-springbok/1 1
-springer 1
-Springfield/2 1
-springing 1
-springlike 1
-Springsteen/3
-springtime/2 1
-springy/50 1
-sprinkle/28 1
-sprinkler/1 1
-sprinkling/1 1
-Sprint/3
-sprint/23 1
-sprinter/1 1
-sprinting 1
-Sprite/3
-sprite/1 1
-spritz/22 1
-spritzer/1 1
-sprocket/1 1
-sprog/10 1
-sprout/23 1
-sprouting 1
-spruce/107 1
-sprung 1502
-spry/528 1
-spryness/3
-spud/18 1
-spume/28 1
-spumone/2 1
-spumoni/2 1
-spumy/34 1
-spunk/18 1
-spunky/34 1
-spun 1504
-spur/103 1
-spurge/2 1
-spurious/16 1
-spurn/5 1
-spurning 1
-spurring 1
-spurt/23 1
-sputa 1505
-sputnik/1 1
-Sputnik 1
-sputter/23 1
-sputtering 1
-sputum/2 1506
-spy/56 1
-spyglass/4 1
-spyhole 1
-spying 1
-spymaster/10 1
-sq
-Sq
-sqq
-squab/18 1
-squabble/28 1
-squabbler/1 1
-squab 1
-squad/18 1
-squaddie/10 1
-squadron/18 1
-squalid/21 1
-squall/23 1
-squalling 1
-squalor/2 1
-squally/34 1
-squamous 1
-squander/5 1
-squandering 1
-Squanto
-square/107 1
-squarer 1
-squaring 1
-squarish 1
-squash/22 1
-squashy/34 1
-squat/529 1
-squatter/18 1
-squaw/1 1
-squawk/23 1
-squawker/1 1
-squawking 1
-squeak/23 1
-squeaker/1 1
-squeakily 1
-squeakiness/3
-squeaking 1
-squeaky/34 1
-squeal/23 1
-squealer/1 1
-squealing 1
-squeamish/16 1
-squeegee/63 1
-squeezable 1
-squeeze/28 1
-squeezebox/89 1
-squeezer/1 1
-squeezing 1
-squelch/22 1
-squelching 1
-squelchy/34 1
-squib/18 1
-Squibb/3
-squid/18 1
-squidgy
-squiffy 1
-squiggle/28 1
-squiggly/34 1
-squint/179 1
-squinter 1
-squinting 1
-squire/28 1
-squires 1
-squirm/23 1
-squirming 1
-squirmy/34 1
-squirrel/23 1
-squirt/23 1
-squirting 1
-squish/22 1
-squishy/34 1
-Sr/2 1
-Srinagar
-Srivijaya/3
-SRO
-SS
-SSA
-SSE/2 1
-ssh
-SSS
-SST
-SSW/2 1
-st
-St
-ST
-Sta
-stab/136 1
-stabber/1 1
-stabbing/1 1
-stability/2 1
-stabilizability
-stabilization/2 1
-stabilize/6 1
-stabilizer/1 1
-stable/530 1
-stableman/2 1507
-stablemate/10 1
-stablemen 1508
-stabler 1
-stabling 1
-staccato/1 1
-Stacey/3
-Staci/3
-Stacie/3
-stack/23 1
-stacker 1
-stacking 1
-Stacy/3
-stadium/1 1
-Stael/3
-staff/78 1
-staffer/1 1
-staffing/2 1
-Stafford
-staffroom 1
-stag/531 1
-stage/28 1
-stagecoach/4 1
-stagecraft/2 1
-stagehand/1 1
-stagestruck
-stagey 1509
-stagflation/2 1
-stagger/23 1
-staggering/8 1
-stagier 1510
-stagiest 1510
-staging/1 1
-stagnancy/2 1
-stagnant/8 1
-stagnate/6 1
-stagnation/2 1
-stagy/34 1
-staid/21 1
-stain/23 1
-stainer 1
-staining 1
-stainless/2 1
-stair/1 1
-staircase/1 1
-StairMaster
-stairway/1 1
-stairwell/1 1
-stake/28 1
-stakeholder/1 1
-stakeout/1 1
-stalactite/1 1
-stalagmite/1 1
-stale/532 1
-stalemate/28 1
-Stalin/2 1
-Stalingrad/2 1
-Stalinist 1
-stalk/23 1
-stalker/1 1
-stalking/1 1
-stall/23 1
-stallholder/10 1
-stalling 1
-stallion/1 1
-Stallone/3
-stalwart/30 1
-stamen/1 1
-Stamford
-stamina/2 1
-stammer/23 1
-stammerer/1 1
-stammering/8 1
-stamp/23 1
-stampede/28 1
-stamped 1
-stamper/1 1
-stamping/10 1
-Stan/3
-stance/1 1
-stanch/533 1
-stancher 1
-stanching 1
-stanchion/18 1
-stand/86 1511
-standalone
-standard/1 1
-standardization/1 1
-standardize/6 1
-standard 1
-standby/1 1
-standee/1 1
-stander/1 1
-standing/1 1
-Standish
-standoff/1 1
-standoffish 1
-standout/1 1
-standpipe/1 1
-standpoint/1 1
-standstill/1 1
-standup/2 1
-Stanford/2 1
-Stanislavsky
-stank 1512
-Stanley
-Stanton
-stanza/1 1
-stapes 1
-staph/2 1
-staphylococcal
-staphylococci 1513
-staphylococcus/2 1514
-staple/139 1
-stapler/1 1
-Staples/3
-stapling 1
-star/445 1
-starboard/2 1
-Starbucks
-starch/22 1
-starchy/50 1
-stardom/2 1
-stardust/2 1
-stare/28 1
-starer/1 1
-starfish/4 1
-starfruit 1
-stargaze/6 1
-stargazer/1 1
-stargazing 1
-staring 1
-Stark
-stark/21 1
-starker/10 1
-Starkey/3
-stark 1
-starless 1
-starlet/1 1
-starlight/2 1
-starling/1 1
-starlit 1
-Starr/3
-starring 1
-starry/34 1
-starstruck
-start/23 1
-starter/1 1
-starting 1
-startle/43 1
-startling/8 1
-starvation/2 1
-starve/6 1
-starved 1
-starveling/1 1
-starving/10 1
-stash/22 1
-stasis 1
-stat/18 1
-state/342 1
-statecraft/2 1
-stated 1
-statehood/2 1
-statehouse/1 1
-Statehouse/1 1
-stateless/33 1
-stately/140 1
-statement/1 1
-statemented
-statementing
-Staten/3
-stateroom/1 1
-stater 1
-States
-stateside
-Stateside
-statesman/2 1515
-statesmanlike
-statesmanship/2 1
-statesmen 1516
-stateswoman/2 1517
-stateswomen 1518
-statewide
-static/51 1
-statical
-station/23 1
-stationary 1
-stationer/1 1
-stationery/2 1
-stationmaster/10 1
-statistic/1 1
-statistical/8 1
-statistician/1 1
-stator/10 1
-statuary/2 1
-statue/18 1
-statuesque
-statuette/1 1
-stature/1 1
-status/4 1
-statute/1 1
-statutory/211 1
-Staubach/3
-staunch/534 1
-stave/330 1519
-stay/478 1
-stayer/10 1
-staying 1
-std
-STD
-stdio
-Ste
-stead/18 1
-steadfast/16 1
-Steadicam
-steadier 1
-steady/275 1
-steadying 1
-steak/1 1
-steakhouse/1 1
-steal/86 1520
-stealer 1
-stealing 1
-stealth/2 1
-stealthy/50 1
-steam/78 1
-steamboat/1 1
-steamer/18 1
-steamfitter/1 1
-steamfitting/2 1
-steaming 1
-steamroll/11 1
-steamroller/23 1
-steamship/1 1
-steamy/49 1
-steed/1 1
-steel/23 1
-Steele
-steeling 1
-steelmaker/10 1
-steel 1
-steelwork/32 1
-steelworker/1 1
-steely/49 1
-steelyard/1 1
-steep/52 1
-steepen/11 1
-steeper 1
-steeple/1 1
-steeplechase/18 1
-steeplechaser 1
-steeplejack/1 1
-steer/23 1
-steerable 1
-steerage/2 1
-steering/2 1
-steersman/2 1521
-steersmen 1522
-Stefan/3
-Stefanie/3
-stegosauri 1523
-stegosaurus/4 1524
-Stein
-stein/18 1
-Steinbeck
-Steinem/3
-Steiner
-Steinmetz/3
-Steinway/3
-Stella
-stellar 1
-stellated
-stem/160 1
-stemless 1
-stemware/2 1
-stench/40 1
-stencil/23 1
-Stendhal
-Stengel/3
-steno/1 1
-stenographer/1 1
-stenographic
-stenography/2 1
-stenos 1
-stentorian
-step/47 1
-stepbrother/1 1
-stepchild/155 1
-stepdaughter/1 1
-stepfather/1 1
-Stephan/3
-Stephanie/3
-Stephen
-Stephens
-Stephenson
-stepladder/1 1
-stepmother/1 1
-stepparent/1 1
-steppe/28 1
-stepper/1 1
-steppingstone/1 1
-stepsister/1 1
-stepson/1 1
-stepwise 1
-steradians
-stereo/18 1
-stereographic
-stereophonic 1
-stereoscope/1 1
-stereoscopic
-stereoscopically
-stereoscopy 1
-stereo 1
-stereotype/28 1
-stereotypical
-stereotypically
-stereotyping 1
-sterile 1
-sterility/2 1
-sterilization/1 1
-sterilize/6 1
-sterilizer/1 1
-Sterling/3
-sterling/2 1
-Stern
-stern/455 1
-Sterne/3
-Sterno 1
-sternum/1 1
-steroid/1 1
-steroidal
-stertorous 1
-stet/12 1
-stethoscope/1 1
-stetson/1 1
-Stetson/2 1
-Steuben/3
-Steve/3
-stevedore/18 1
-Steven/3
-Stevens
-Stevenson
-Stevie/3
-stew/23 1
-steward/23 1
-stewardess/4 1
-stewardship/2 1
-Stewart/3
-stewing 1
-stick/86 1525
-sticker/18 1
-sticking 1
-stickleback/1 1
-stickler/1 1
-stickpin/1 1
-stickup/1 1
-sticky/535 1
-sticky's
-Stieglitz/3
-stiff/52 1
-stiffen/11 1
-stiffener/1 1
-stiffening/2 1
-stifle/43 1
-stifling/10 1
-stiflingly 1
-stigma/536 1
-stigmata 1
-stigmatic 1
-stigmatization/2 1
-stigmatize/6 1
-stile/18 1
-stiletto/18 1
-still/165 1
-stillbirth/1 1
-stillborn 1
-stiller 1
-stilling 1
-stilt/62 1
-stilted/8 1
-Stilton/1 1
-Stimson/3
-stimulant/1 1
-stimulate/6 1
-stimulating 1
-stimulation/2 1
-stimulative 1
-stimulator 1
-stimulatory
-stimuli 1526
-stimulus/2 1527
-Stine/3
-sting/86 1528
-stinger/1 1
-stinging 1
-stingray/1 1
-stingy/50 1
-stink/86 1529
-stinkbug/1 1
-stinker/1 1
-stinking 1
-stinky/34 1
-stint/23 1
-stinting 1
-stipend/1 1
-stipendiary/60 1
-stipple/28 1
-stippling/2 1
-stipulate/6 1
-stipulation/1 1
-stir/103 1
-Stirling
-stirrer/1 1
-stirring/191 1
-stirrup/1 1
-stitch/22 1
-stitchery/2 1
-stitching/2 1
-stoat/1 1
-stochastic 1
-stock/23 1
-stockade/28 1
-stockbreeder/1 1
-stockbroker/1 1
-stockbroking/2 1
-Stockhausen/3
-stockholder/1 1
-Stockholm/2 1
-stockinet/2 1
-stockinette/2 1
-stocking/1 1
-stockinged
-stockist/10 1
-stockpile/28 1
-stockpiling 1
-stockpot/1 1
-stockroom/1 1
-stocktaking/2 1
-Stockton
-stock 1
-stocky/50 1
-stockyard/1 1
-stodge 1
-stodgy/50 1
-stogie/1 1
-stogy/15 1
-stoic/1 1
-Stoic/1 1
-stoical/8 1
-Stoicism/1 1
-stoicism/2 1
-stoic 1
-Stoic 1
-stoke/6 1
-stoker/1 1
-Stokes/3
-STOL
-stole/1 1
-stolen 1530
-stole 1530
-Stolichnaya/3
-stolid/21 1
-stolidity/2 1
-stolon/1 1
-Stolypin/3
-stoma/492 1
-stomach/23 1
-stomachache/1 1
-stomacher/1 1
-stomp/23 1
-Stone
-stone/28 1
-Stonehenge
-stoneless 1
-stonemason/1 1
-stone 1
-stonewall/11 1
-stonewalling 1
-stoneware/2 1
-stonewashed
-stonework/2 1
-stoney 1531
-stonier 1532
-stoniest 1532
-stonkered
-stonking
-stony/50 1
-stood 1533
-stooge/18 1
-stool/18 1
-stoop/23 1
-stooping 1
-stop/47 1
-stopcock/1 1
-stopgap/1 1
-stoplight/1 1
-stopoff 1
-stopover/1 1
-stoppable 1
-stoppage/1 1
-Stoppard/3
-stopper/23 1
-stopping 1
-stopple/28 1
-stopwatch/4 1
-storage/2 1
-store/28 1
-storefront/1 1
-storehouse/1 1
-storekeeper/1 1
-storeroom/1 1
-store 1
-stork/1 1
-storm/23 1
-stormer
-stormers
-storming 1
-stormtroopers
-stormy/50 1
-story/148 1
-storyboard/18 1
-storybook/1 1
-storyline 1
-storyteller/1 1
-storytelling/2 1
-stoup/1 1
-Stout
-stout/38 1
-stouthearted 1
-stove/18 1
-stovepipe/1 1
-stove 1534
-stow/11 1
-stowage/2 1
-stowaway/1 1
-Stowe
-stowing 1
-Strabo/3
-straddle/28 1
-straddler/1 1
-Stradivari 1
-Stradivarius 1
-strafe/28 1
-straggle/43 1
-straggler/1 1
-straggling 1
-straggly/34 1
-straight/455 1
-straightaway/1 1
-straightedge/1 1
-straighten/11 1
-straightener/1 1
-straightforward/94 1
-straightjacket/18 1
-straightway 1
-strain/23 1
-strained 1
-strainer/1 1
-straining 1
-strait/18 1
-straiten/11 1
-straitjacket/23 1
-straitlaced
-strait 1
-strand/23 1
-strange/27 1
-stranger/18 1
-strangle/6 1
-stranglehold/1 1
-strangler/1 1
-strangling 1
-strangulate/6 1
-strangulation/2 1
-strap/47 1
-strapless/4 1
-strapping/2 1
-Strasbourg
-stratagem/1 1
-strata 1535
-strategic/32 1
-strategical/8 1
-strategist/1 1
-strategy/15 1
-stratification/2 1
-stratify/31 1
-stratigraphic
-stratigraphical
-strati 1536
-stratosphere/1 1
-stratospheric
-stratospherically
-stratum/2 1537
-stratus/2 1538
-Strauss
-Stravinsky/2 1
-straw/23 1
-strawberry/15 1
-straw 1
-stray/23 1
-straying 1
-stray 1
-streak/23 1
-streaked 1
-streaker/1 1
-streaking 1
-streaky/34 1
-stream/23 1
-streamer/1 1
-streaming 1
-streamline/43 1
-street/1 1
-streetcar/1 1
-streetlamp/10 1
-streetlight/1 1
-street 1
-streetwalker/1 1
-streetwise 1
-Streisand/3
-strength/1 1
-strengthen/11 1
-strengthener/1 1
-strengthening 1
-strenuous/16 1
-strep/2 1
-streptococcal
-streptococci 1539
-streptococcus/2 1540
-streptomycin/2 1
-stress/22 1
-stressfulness
-stressful 1
-stretch/147 1
-stretchability 1
-stretchable 1
-stretcher/23 1
-stretchmarks
-stretchy/259 1
-strew/126 1
-strewing 1
-strewn 1
-strewth
-stria/53 1
-striated
-striation/1 1
-stricken 1541
-Strickland/3
-strict/21 1
-stricture/1 1
-stride/366 1542
-stridency/2 1
-strident/8 1
-strider 1
-strife/2 1543
-strike/73 1544
-strikebound
-strikebreaker/1 1
-strikebreaking 1
-strikeout/1 1
-striker/1 1
-striking/191 1
-Strindberg
-string/86 1545
-stringed 1
-stringency/2 1
-stringent/8 1
-stringer/1 1
-stringing 1
-stringy/49 1
-strip/296 1
-stripe/28 1
-stripey
-striping 1
-stripling/1 1
-stripper/1 1
-stripping 1
-striptease/28 1
-stripteaser/1 1
-stripy/34 1
-strive/76 1546
-strives 1547
-striving 1
-strobe/1 1
-stroboscope/1 1
-stroboscopic
-strode 1548
-stroke/28 1
-stroking 1
-stroll/23 1
-stroller/1 1
-strolling 1
-stromatolites
-Stromboli
-Strong/3
-strong/75 1
-strongbow
-strongbox/4 1
-stronghold/1 1
-strongish
-strongman/2 1549
-strongmen 1550
-strongroom/10 1
-strontium/2 1
-strop/47 1
-strophe/1 1
-strophic 1
-stroppily
-stroppiness
-stroppy/34 1
-strove 1551
-struck 1541
-structural/8 1
-structuralism 1
-structuralist/10 1
-structure/28 1
-structureless 1
-strudel/1 1
-struggle/28 1
-struggling 1
-strum/160 1
-strumpet/18 1
-strung 1552
-strut/109 1
-strutter 1
-strutting 1
-strychnine/2 1
-s 1
-Stu/3
-Stuart/1 1
-stub/136 1
-stubble/2 1
-stubbly/34 1
-stubborn/21 1
-stubby/34 1
-stucco/22 1
-stuck 1553
-stud/113 1
-studbook/1 1
-studding/2 1
-Studebaker/3
-student/1 1
-studentship/10 1
-studied/8 1
-studier/10 1
-studio/1 1
-studious/16 1
-studly/34 1
-stud 1
-study/56 1
-stuff/23 1
-stuffer 1
-stuffing/2 1
-stuffy/50 1
-stultification/2 1
-stultify/31 1
-stumble/28 1
-stumbler/1 1
-stumblingly
-stump/23 1
-stumpy/34 1
-stun/537 1
-stung 1554
-stunk 1512
-stunner/10 1
-stunning/8 1
-stunt/23 1
-stunted 1
-stuntman 1555
-stuntmen 1556
-stupefaction/2 1
-stupefy/31 1
-stupefyingly
-stupendous/8 1
-stupid/183 1
-stupidity/15 1
-stupor/1 1
-sturdy/50 1
-sturgeon/1 1
-stutter/23 1
-stutterer/1 1
-stuttering 1
-Stuttgart/2 1
-Stuyvesant
-sty/167 1
-stye/18 1
-Stygian 1
-style/28 1
-styling 1
-stylish/16 1
-stylist/1 1
-stylistic/276 1
-styli 1557
-stylization 1
-stylize/6 1
-stylus/4 1558
-stymie/63 1
-stymy/148 1
-styptic/1 1
-styrene 1
-Styrofoam/1 1
-Styron/3
-Styx/2 1
-Suarez/3
-suasion/2 1
-suave/27 1
-suavity/2 1
-sub/136 1
-subaltern/1 1
-subaqua
-subarctic 1
-subarea/1 1
-Subaru/3
-subatomic 1
-subbasement/1 1
-subbing 1
-subbranch/4 1
-subcategory/15 1
-subclass/538 1
-subclauses
-subcommittee/1 1
-subcompact/1 1
-subconscious/239 1
-subcontinent/1 1
-subcontinental
-subcontract/23 1
-subcontractor/1 1
-subcultural 1
-subculture/18 1
-subcutaneous/8 1
-subdivide/6 1
-subdivision/1 1
-subducted
-subduction 1
-subdue/6 1
-subdued 1
-subeditor/10 1
-subfamilies
-subfamily/3
-subfreezing
-subgroup/1 1
-subharmonic
-subharmonics
-subhead/1 1
-subheading/1 1
-subhuman/1 1
-subj
-subject/23 1
-subjection/2 1
-subjective/8 1
-subjectivity/2 1
-subject 1
-subjoin/11 1
-subjugate/6 1
-subjugation/2 1
-subjunctive/1 1
-sublayer
-sublease/28 1
-sublet/128 1
-subletting 1
-sublieutenant/10 1
-sublimate/43 1
-sublimation/2 1
-sublime/404 1
-sublimer 1
-subliminal/8 1
-subliming 1
-sublimity/2 1
-sublunary
-submarginal 1
-submarine/18 1
-submariner/1 1
-submerge/6 1
-submergence/2 1
-submerse/6 1
-submersible/1 1
-submersion/2 1
-submicroscopic 1
-submission/1 1
-submissive/16 1
-submit/12 1
-submittable
-submitter/10 1
-submitting 1
-subnormal 1
-suboptimal
-suborbital
-suborder/1 1
-subordinate/28 1
-subordination/2 1
-suborn/11 1
-subornation/2 1
-subpena/23 1
-subplot/1 1
-subpoena/23 1
-subprofessional/1 1
-subprogram/10 1
-subroutine/1 1
-subscribe/6 1
-subscriber/1 1
-subscribing 1
-subscript/1 1
-subscription/1 1
-subscript 1
-subsection/1 1
-subsequent/8 1
-subservience/2 1
-subservient/8 1
-subset/1 1
-subside/6 1
-subsidence/2 1
-subsidiarity 1
-subsidiary/15 1
-subsidization/2 1
-subsidize/6 1
-subsidizer/1 1
-subsidy/15 1
-subsist/11 1
-subsistence/2 1
-subsoil/2 1
-subsonic
-subspace/10 1
-subspecies/2 1
-substance/1 1
-substandard
-substantial/8 1
-substantiate/6 1
-substantiation/1 1
-substantive/30 1
-substation/1 1
-substitutable
-substitute/28 1
-substitution/1 1
-substrata 1559
-substrate/1 1
-substratum/2 1560
-substructure/1 1
-subsume/6 1
-subsurface/2 1
-subsystem/1 1
-subteen/1 1
-subtenancy/2 1
-subtenant/1 1
-subtend/11 1
-subterfuge/1 1
-subterranean 1
-subtext/1 1
-subtitle/28 1
-subtle/17 1
-subtlety/15 1
-subtopic/1 1
-subtotal/23 1
-subtract/11 1
-subtraction/1 1
-subtractive
-subtractively
-subtrahend/1 1
-subtropic/32 1
-subtropical
-subtype/10 1
-subunit/10 1
-suburb/1 1
-suburban/1 1
-suburbanite/1 1
-suburbanization 1
-suburbia/2 1
-subvention/1 1
-subversion/2 1
-subversive/36 1
-subvert/11 1
-subway/18 1
-subzero
-succeed/11 1
-succeeding 1
-success/4 1
-successful/8 1
-succession/1 1
-successive/8 1
-successor/1 1
-succinct/21 1
-succor/23 1
-succotash/2 1
-succubi 1561
-succubus 1562
-succulence/2 1
-succulency/2 1
-succulent/1 1
-succumb/11 1
-suchlike 1
-such 1
-suck/23 1
-suckable
-sucker/23 1
-sucking 1
-suckle/6 1
-suckling/1 1
-Sucre
-Sucrets/3
-sucrose/2 1
-suction/23 1
-sud/32 1
-Sudan/2 1
-Sudanese/2 1
-sudden/16 1
-Sudetenland/3
-Sudoku/3
-Sudra/2 1
-suds/2 1
-sudsy/34 1
-Sue
-sue/6 1
-suede/2 1
-sued 1
-suet/2 1
-Suetonius
-suety 1
-Suez
-suffer/11 1
-sufferance/2 1
-sufferer/1 1
-suffering/1 1
-suffice/6 1
-sufficiency/2 1
-sufficient/8 1
-suffix/287 1
-suffixation/2 1
-suffocate/6 1
-suffocatingly
-suffocating 1
-suffocation/2 1
-Suffolk 1
-suffragan/1 1
-suffrage/2 1
-suffragette/1 1
-suffragist/1 1
-suffuse/6 1
-suffused 1
-suffusion/2 1
-Sufism 1
-Sufi 1
-sugar/23 1
-sugarcane/2 1
-sugarcoat/11 1
-sugaring 1
-sugarless 1
-sugarplum/1 1
-sugary/34 1
-suggest/11 1
-suggested 1
-suggester/10 1
-suggestibility/2 1
-suggestible 1
-suggestion/1 1
-suggestive/16 1
-sugillate
-Suharto/3
-Sui/3
-suicidal/8 1
-suicide/18 1
-suit/23 1
-suitability/15 1
-suitable/29 1
-suitcase/1 1
-suite/28 1
-suiting/2 1
-suitor/1 1
-Sukarno
-sukiyaki/2 1
-Sukkoth/1 1
-Sukkot 1
-Sulawesi/2 1
-Suleiman/3
-sulfa/2 1
-sulfate/18 1
-sulfa 1
-sulfide/1 1
-sulfur/23 1
-sulfuric
-sulfurous 1
-sulk/23 1
-sulky/221 1
-Sulla/2 1
-sullen/21 1
-Sullivan/2 1
-sulphate/70 1
-sulphide/10 1
-sultan/1 1
-sultana/1 1
-sultanate/1 1
-sultry/50 1
-sully/31 1
-sum/160 1
-sumac/2 1
-sumach/2 1
-Sumatra/2 1
-Sumatran/1 1
-Sumeria/3
-Sumerian/1 1
-summability 1
-summable
-summarize/6 1
-summarizer/10 1
-summary/206 1
-summat
-summation/1 1
-Summer/3
-summer/23 1
-summerhouse/1 1
-summering 1
-Summers
-summertime/2 1
-summer 1
-summery/34 1
-summing 1
-summit/18 1
-summitry/2 1
-summon/11 1
-summoner/1 1
-summonings
-summons/22 1
-Sumner/3
-sumo/2 1
-sump/1 1
-sumptuous/16 1
-Sumter
-sun/1 1
-Sun/1 1
-sun/192 1
-sunbath/23 1
-sunbathe/6 1
-sunbather/1 1
-sunbathing/2 1
-Sunbeam/3
-sunbeam/1 1
-sunbed/10 1
-Sunbelt/2 1
-sunbelt 1
-sunblock/1 1
-sunbonnet/1 1
-sunburn/23 1
-sunburst/1 1
-suncream
-sundae/1 1
-Sundanese/2 1
-Sundas
-Sunday/18 1
-sundeck/10 1
-sunder/11 1
-sundering 1
-sundial/1 1
-sundown/18 1
-sundress/89 1
-sundry/539 1
-sunfish/4 1
-sunflower/1 1
-Sung
-sunglasses
-sunglasses's
-sung 1369
-sunhat/10 1
-sunken 1370
-Sunkist/3
-sunk 1370
-sunlamp/1 1
-sunless 1
-sunlight/2 1
-sunlit 1
-Sunni/1 1
-Sunnite/1 1
-sunrise/18 1
-sunroof/1 1
-sunscreen/1 1
-sunset/18 1
-sunshade/1 1
-sunshine/2 1
-sunshiny 1
-sunspot/1 1
-sunspots/89 1
-sunstroke/2 1
-suntan/133 1
-suntrap/10 1
-sunup/2 1
-sunny/49 1
-Sunnyvale
-sup/47 1
-super/18 1
-superabundance/1 1
-superabundant 1
-superannuate/6 1
-superannuation/2 1
-superb/75 1
-Superbowl/3
-supercargo/4 1
-supercharge/6 1
-supercharger/1 1
-supercilious/16 1
-supercity/15 1
-supercomputer/1 1
-supercomputing
-superconducting
-superconductive
-superconductivity/2 1
-superconductor/1 1
-supercooled
-supercooling
-superdense
-superego/1 1
-supererogation/2 1
-supererogatory
-superficial/8 1
-superficiality/2 1
-superficial 1
-superfine
-superfix 1
-superfluity/15 1
-superfluous/8 1
-superfluousness/3
-Superfund/3
-Superglue/3
-superglue 1
-supergrass/89 1
-superheat/195 1
-superhero/71 1
-superhighway/1 1
-superhuman 1
-superimpose/6 1
-superimposition/2 1
-superintend/11 1
-superintendence/2 1
-superintendency/2 1
-superintendent/1 1
-Superior
-superior/1 1
-superiority/2 1
-superlative/30 1
-Superman/3
-superman/2 1563
-supermarket/1 1
-supermen 1564
-supermodel/10 1
-supermom/1 1
-supernal 1
-supernatant 1
-supernatural/191 1
-supernova/57 1
-supernumerary/15 1
-superordinate 1
-superpose/6 1
-superposition/1 1
-superpower/1 1
-supersaturate/6 1
-supersaturation/2 1
-superscribe/6 1
-superscript/1 1
-superscription/2 1
-supersede/6 1
-supersonically
-supersonic 1
-superstar/1 1
-superstate/10 1
-superstition/1 1
-superstitious/8 1
-superstore/1 1
-superstructure/1 1
-supertanker/1 1
-super 1
-superuser
-superusers
-supervene/6 1
-supervention/2 1
-supervise/6 1
-supervision/1 1
-supervisor/1 1
-supervisory
-superwoman/2 1565
-superwomen 1566
-supine/8 1
-supp
-supper/18 1
-suppertime 1
-suppl
-supplant/11 1
-supple/540 1
-supplement/23 1
-supplemental 1
-supplementary 1
-supplementation/2 1
-supple 1
-suppliant/1 1
-supplicant/1 1
-supplicate/6 1
-supplication/1 1
-supplier/1 1
-supply/31 1
-supply's
-support/78 1
-supportability 1
-supportable 1
-supporter/1 1
-supporting 1
-supportive
-suppose/6 1
-supposed/8 1
-supposing 1
-supposition/1 1
-suppository/15 1
-suppress/7 1
-suppressant/1 1
-suppressible
-suppression/2 1
-suppressive
-suppressor/1 1
-suppurate/6 1
-suppuration/2 1
-supranational
-supra 1
-supremacist/1 1
-supremacy/2 1
-supremal
-supreme/45 1
-supremo/10 1
-supt
-Supt
-Surabaja
-Surabaya
-Surat
-surcease/28 1
-surcharge/28 1
-surcingle/18 1
-surd 1
-sure/27 1
-surefire
-surefooted
-sure 1
-surety/15 1
-surf/23 1
-surface/28 1
-surfacing 1
-surfactant/10 1
-surfboard/23 1
-surfboarding 1
-surfeit/23 1
-surfeiting 1
-surfer/1 1
-surfing/2 1
-surge/28 1
-surgeon/1 1
-surgery/15 1
-surgical/8 1
-surging 1
-Surinam/2 1
-Suriname/2 1
-Surinamese
-surlily
-surly/49 1
-surmise/28 1
-surmising 1
-surmount/11 1
-surmountable 1
-surmounting 1
-surname/18 1
-surpass/7 1
-surpassing 1
-surplice/1 1
-surplus/541 1
-surprise/28 1
-surprised 1
-surprising/191 1
-surrealism/2 1
-surrealist/1 1
-surrealistic
-surrealistically
-surreality
-surreal 1
-surrender/23 1
-surreptitious/8 1
-surreptitiousness/3
-surrey/1 1
-surrogacy/2 1
-surrogate/18 1
-surround/5 1
-surrounded 1
-surrounding/130 1
-surtax/22 1
-surtitle/10 1
-surveillance/2 1
-survey/23 1
-surveying/2 1
-surveyor/1 1
-survivability 1
-survivable
-survival/1 1
-survivalist/1 1
-survive/6 1
-survivor/1 1
-Surya/2 1
-Susan/3
-Susana/3
-Susanna
-Susanne/3
-susceptibility/15 1
-susceptible 1
-SUSE
-sushi/2 1
-Susie/3
-suspect/23 1
-suspected 1
-suspect 1
-suspend/11 1
-suspender/1 1
-suspense/2 1
-suspenseful
-suspension/1 1
-suspicion/18 1
-suspicious/8 1
-Susquehanna/2 1
-suss/7 1
-Sussex 1
-sustain/11 1
-sustainability 1
-sustainable
-sustainably
-sustained 1
-sustaining 1
-sustenance/2 1
-Sutherland/3
-sutler/1 1
-suttee 1
-Sutton/3
-suture/28 1
-SUV
-Suva/2 1
-Suwanee/3
-Suzanne/3
-suzerain/1 1
-suzerainty/2 1
-Suzette/3
-Suzhou/3
-Suzuki/3
-Suzy/3
-Svalbard/2 1
-svelte/150 1
-Sven/3
-Svengali 1
-Sverdlovsk
-SW/2 1
-swab/136 1
-swaddle/43 1
-swag/92 1
-swagger/78 1
-swaggerer 1
-swaggering 1
-Swahili/1 1
-swain/1 1
-SWAK
-swallow/23 1
-swallower 1
-swallowtail/1 1
-swami/1 1
-Swammerdam/3
-swamp/23 1
-swampland/1 1
-swamp 1
-swampy/34 1
-swam 1567
-swan/133 1
-Swanee
-swank/179 1
-swanker 1
-swanky/50 1
-swansdown/2 1
-Swansea/2 1
-Swanson/3
-swansong/10 1
-swap/47 1
-swappable
-swapper/10 1
-swapping 1
-sward/18 1
-swarm/23 1
-swarming 1
-swarthy/34 1
-swash/22 1
-swashbuckler/1 1
-swashbuckling/2 1
-swashing 1
-swastika/1 1
-SWAT
-swat/109 1
-swatch/4 1
-swath/23 1
-swathe/28 1
-swatter/23 1
-sway/23 1
-swayback/2 1
-swaybacked
-swayback 1
-swaying 1
-Swazi/1 1
-Swaziland/2 1
-Swazi 1
-swear/121 1568
-swearer/1 1
-swearing 1
-swearword/1 1
-sweat/185 1
-sweatband/1 1
-sweater/1 1
-sweating 1
-sweatpants/2 1
-sweatshirt/1 1
-sweatshop/1 1
-sweatsuit/10 1
-sweaty/59 1
-Swed
-swede/1 1
-Swede/1 1
-Sweden/2 1
-Swedenborg/3
-Swedish/2 1
-Sweeney/3
-sweep/86 1569
-sweepable
-sweeper/1 1
-sweeping/542 1
-sweepstake/130 1
-Sweet
-sweet/38 1
-sweetbread/1 1
-sweetbriar/1 1
-sweetbrier/1 1
-sweetcorn
-sweeten/11 1
-sweetener/1 1
-sweetening/2 1
-sweetheart/1 1
-sweetie/1 1
-sweetish 1
-sweetmeat/1 1
-sweetshop 1
-swell/179 1570
-sweller 1
-swellhead/1 1
-swellheaded 1
-swelling/1 1
-swelter/23 1
-sweltering 1
-sweptback 1
-swept 1571
-swerve/28 1
-swerving 1
-swift/38 1
-Swift/2 1
-swift/58 1
-swifter 1
-swig/92 1
-swill/23 1
-swilling 1
-swim/543 1572
-swimmer/1 1
-swimming/37 1
-swimsuit/1 1
-swimwear
-Swinburne/3
-swindle/28 1
-swindler/1 1
-swindling 1
-swine/2 1
-swineherd/1 1
-swines
-swing/408 1573
-swingeing 1
-swinger/1 1
-swinging 1
-swinish 1
-swipe/28 1
-swirl/23 1
-swirling 1
-swirly/34 1
-swish/293 1
-swisher 1
-swishing 1
-swishy 1
-Swiss/4 1
-Swissair/3
-Swiss 1
-switch/147 1
-switchable
-switchback/18 1
-switchblade/1 1
-switchboard/1 1
-switcher/1 1
-switchgear 1
-switching 1
-switchover
-Switz
-Switzerland/2 1
-swivel/23 1
-swiveling 1
-swiz 1
-swizzle/43 1
-swizzling 1
-swizz 1
-swob/136 1
-swollen 1574
-swoon/23 1
-swooning 1
-swoop/23 1
-swoosh/22 1
-swop/47 1
-swopping 1
-sword/18 1
-swordfish/4 1
-swordplay/2 1
-swordsman/2 1575
-swordsmanship/2 1
-swordsmen 1576
-swore 1577
-sworn 1577
-swot/479 1
-swotting 1
-swum 1567
-swung 1578
-sybarite/1 1
-sybaritic
-Sybil/3
-sycamore/1 1
-sycophancy/2 1
-sycophant/1 1
-sycophantic
-sycophantically
-Sydney/2 1
-Sykes/3
-syllabary 1
-syllabicate/6 1
-syllabication/2 1
-syllabic 1
-syllabification/2 1
-syllabify/31 1
-syllable/18 1
-syllabub/10 1
-syllabus/4 1
-syllogism/1 1
-syllogistic 1
-sylph/1 1
-sylphic 1
-sylphlike 1
-sylvan 1
-Sylvester/3
-Sylvia/3
-Sylvie/3
-symbiont 1
-symbioses 1579
-symbiosis/2 1580
-symbiotically
-symbiotic 1
-symbol/18 1
-symbolical/8 1
-symbolic 1
-symbolism/2 1
-symbolist 1
-symbolization/2 1
-symbolize/6 1
-symmetrical/8 1
-symmetric 1
-symmetrization 1
-symmetrizing
-symmetry/15 1
-sympathetic/39 1
-sympathize/6 1
-sympathizer/1 1
-sympathy/344 1
-symphonic 1
-symphonists
-symphony/15 1
-symposium/1 1
-symptom/1 1
-symptomatic/39 1
-symptomless 1
-syn
-synagog/1 1
-synagogal
-synagogue/1 1
-synapse/18 1
-synapses 1581
-synaptic 1
-sync/23 1
-synch/23 1
-synchronicity 1
-synchronization/1 1
-synchronize/6 1
-synchronous/8 1
-synchrony 1
-synchrotron 1
-syncopate/6 1
-syncopation/2 1
-syncope/2 1
-sync 1
-syndicalism 1
-syndicalist/10 1
-syndicate/28 1
-syndication/2 1
-syndrome/1 1
-synergism/2 1
-synergistic 1
-synergy/15 1
-synfuel/1 1
-Synge
-synod/1 1
-synonym/1 1
-synonymic
-synonymous/8 1
-synonymy/2 1
-synopses 1582
-synopsis/2 1583
-synopsizes
-synoptic 1
-syntactical/8 1
-syntactic 1
-syntax/2 1
-syntheses 1584
-synthesis/2 1585
-synthesize/6 1
-synthesizer/1 1
-synthetic/1 1
-synthetically
-synthetic 1
-syphilis/2 1
-syphilitic/1 1
-Syracuse/2 1
-Syria/2 1
-Syriac
-Syrian/1 1
-syringe/28 1
-syrup/18 1
-syrupy 1
-sysadmin
-sysadmins
-sysop/10 1
-system/1 1
-systematic/39 1
-systematical
-systematic 1
-systematization/2 1
-systematize/6 1
-systemic/1 1
-systemically
-systemic 1
-systole/1 1
-systolic 1
-Szechuan/2 1
-Szilard/3
-Szymborska/3
-T/2 1
-t/544 1
-TA
-Ta/2 1
-tab/136 1
-Tabasco/1 1
-Tabatha/3
-tabbouleh/2 1
-tabby/167 1
-tabernacle/1 1
-Tabernacle/1 1
-tabernacle/58 1
-Tabitha/3
-tabla/1 1
-table/28 1
-tableau/100 1
-tablecloth/1 1
-tableland/1 1
-tablespoon/1 1
-tablespoonful/1 1
-tablet/18 1
-tabletop/1 1
-tableware/2 1
-tabling 1
-tabloid/1 1
-taboo/23 1
-tabor/18 1
-Tabriz/4 1
-tabu/23 1
-tabular 1
-tabulate/6 1
-tabulation/1 1
-tabulator/1 1
-tabus 1
-tabu 1
-tachograph/10 1
-tachometer/1 1
-tachycardia/2 1
-tachyon/10 1
-tacit/16 1
-taciturn/8 1
-taciturnity/2 1
-Tacitus
-tack/23 1
-tacker/1 1
-tackier 1586
-tackiest 1586
-tacking 1
-tackle/28 1
-tackler/1 1
-tackling 1
-tacky/49 1
-taco/1 1
-Tacoma/2 1
-tact/2 1
-tactful/16 1
-tactic/1 1
-tactical/8 1
-tactician/1 1
-tactile 1
-tactility/2 1
-tactless/16 1
-tactual 1
-Tad/3
-tad/1 1
-tadpole/1 1
-Tadzhik/2 1
-Tadzhikistan/2 1
-Taegu/2 1
-Taejon
-taffeta/2 1
-taffrail/1 1
-taffy/15 1
-Taft/2 1
-tag/92 1
-Tagalog/1 1
-tagger/1 1
-tagliatelle 1
-Tagore
-Tagus/2 1
-Tahiti/2 1
-Tahitian/1 1
-Tahoe
-Taichung/2 1
-taiga/1 1
-tail/23 1
-tailback/1 1
-tailboard/10 1
-tailbone/10 1
-tailcoat/1 1
-tailgate/28 1
-tailgater/1 1
-tailing 1
-tailless/153 1
-taillight/1 1
-tailor/23 1
-tailorable
-tailoring/2 1
-tailpiece/10 1
-tailpipe/1 1
-tailplane 1
-tailspin/1 1
-tail 1
-tailwind/1 1
-Tainan
-Taine/3
-taint/23 1
-Taipei/2 1
-Taiping 1
-Taiwan/2 1
-Taiwanese/2 1
-Taiyuan
-Tajikistan/2 1
-take/263 1587
-takeable
-takeaway/10 1
-takeoff/1 1
-takeout/1 1
-takeover/1 1
-taker/1 1
-taking/130 1
-Taklamakan/3
-Talbot 1
-talc/2 1
-talcum/2 1
-tale/1 1
-talebearer/1 1
-talent/1 1
-talented
-talentless 1
-Taliban/3
-Taliesin
-talisman/1 1
-tali 1588
-talk/23 1
-talkative/16 1
-talker/1 1
-talkie/41 1
-talking 1
-talky/219 1
-tall/178 1
-Tallahassee/2 1
-tallboy/1 1
-Tallchief/3
-Talley/3
-Talleyrand/3
-tallier/1 1
-Tallinn/2 1
-tallish 1
-tallow/2 1
-tallowy 1
-Talmud/1 1
-Talmudic
-Talmudist 1
-talon/1 1
-talus/4 1589
-tally/31 1
-tallyho/23 1
-tally's
-tam/18 1
-tamable 1
-tamale/1 1
-Tamara/3
-tamarack/1 1
-tamarind/1 1
-tambourine/1 1
-tame/104 1
-tameable 1
-Tameka/3
-tamer/1 1
-Tamera/3
-Tamerlane/2 1
-tames 1590
-Tamika/3
-Tamil/1 1
-taming 1
-Tami's 1591
-Tami 1592
-Tammany/2 1
-Tammi/3
-Tammie/3
-Tammuz/2 1
-Tammy/3
-tamoxifen 1
-tamp/5 1
-Tampa/2 1
-Tampax/3
-tamper/5 1
-tamperer/1 1
-tampering 1
-tamping 1
-tampon/18 1
-Tamra/3
-tam 1
-Tamworth 1
-tan/267 1
-tanager/1 1
-tanbark/2 1
-Tancred
-tandem/1 1
-tandoori/2 1
-Taney
-T'ang
-tang/18 1
-Tanganyika/2 1
-tangelo/1 1
-tangent/1 1
-tangential/8 1
-tangent 1
-tangerine/1 1
-tangibility/2 1
-tangible/545 1
-Tangier/1 1
-tangle/28 1
-tangling 1
-tango/23 1
-Tangshan
-tangy/34 1
-Tania/3
-Tanisha/3
-tank/23 1
-tankard/1 1
-tanker/1 1
-tankful/1 1
-tanking 1
-Tanner/3
-tanner/1 1
-tannery/15 1
-Tannhauser/3
-tannin/1 1
-tanning/2 1
-tansy/2 1
-tantalization/2 1
-tantalize/6 1
-tantalizer/1 1
-tantalizing/8 1
-tantalum/2 1
-Tantalus/2 1
-tantamount
-tantra/2 1
-tantra's 1593
-tantra 1594
-tantrum/1 1595
-Tanzania/2 1
-Tanzanian/1 1
-Tanya/3
-Tao/2 1
-Taoism/1 1
-Taoist/1 1
-tap/47 1
-tapas
-tape/139 1
-tapeline/1 1
-taper/23 1
-tapering 1
-tapes 1596
-tapestry/167 1
-tapeworm/1 1
-tapioca/2 1
-tapir/1 1
-tapper/1 1
-tappet/1 1
-tapping 1
-taproom/1 1
-taproot/1 1
-tar/103 1
-Tara/2 1
-taramasalata 1
-tarantella/1 1
-Tarantino/3
-tarantula/1 1
-Tarawa/2 1
-Tarazed/3
-tarball/10 1
-Tarbell/3
-tardy/50 1
-tare/28 1
-Target/3
-target/23 1
-tariff/18 1
-Tarim
-Tarkenton/3
-Tarkington
-tarmac/64 1
-tarmacadam 1
-tarmac 1
-tarn/1 1
-tarnish/22 1
-taro/1 1
-tarot/1 1
-tarp/1 1
-tarpaulin/1 1
-tarpon/1 1
-tarragon/1 1
-tarrier 1
-tarring 1
-tarry/169 1
-tarsal/1 1
-tarsi 1597
-tarsus/2 1598
-tart/52 1
-tartan/1 1
-tartar/1 1
-Tartar/1 1
-tartaric
-Tartary
-tar 1
-Tartuffe 1
-tarty/546 1
-Tarzan/2 1
-Tasha/3
-Tashkent/2 1
-task/23 1
-tasking 1
-taskmaster/1 1
-taskmistress/4 1
-Tasman
-Tasmania/2 1
-Tasmanian 1
-Tass
-tassel/23 1
-tasseling 1
-taste/28 1
-tasteful/16 1
-tasteless/16 1
-taster/1 1
-tasting/1 1
-ta 1599
-tasty/50 1
-tat/479 1
-tatami/1 1
-Tatar/1 1
-Tate
-tater/1 1
-tatter/23 1
-tatterdemalion/1 1
-tattie/447 1
-tatting/2 1
-tattle/28 1
-tattler/1 1
-tattletale/1 1
-tattling 1
-tattoo/23 1
-tattooer/1 1
-tattooist/1 1
-Tatum
-tatty/219 1
-tau/1 1
-taught 1600
-taunt/23 1
-taunter/1 1
-taunting/8 1
-taupe/2 1
-Taurus/4 1
-taus 1
-taut/21 1
-tauten/11 1
-tautological/8 1
-tautologous
-tautology/15 1
-taut 1
-tavern/1 1
-taverna/10 1
-tawdry/50 1
-Tawney
-tawnier 1601
-tawniest 1601
-tawny/244 1
-tax/22 1
-taxable 1
-taxation/2 1
-taxer/1 1
-taxes 1602
-taxi/23 1
-taxicab/1 1
-taxidermist/1 1
-taxidermy/2 1
-taximeter/1 1
-taxing 1
-taxi's 1603
-taxis 1604
-taxi 1605
-taxiway/10 1
-taxman 1606
-taxmen 1607
-taxonomic
-taxonomical 1
-taxonomist/1 1
-taxonomy/15 1
-taxpayer/1 1
-taxpaying
-Taylor/2 1
-Tb/2 1
-TB/2 1
-TBA
-Tbilisi/2 1
-tbs
-tbsp
-Tc/2 1
-Tchaikovsky
-TD
-TDD
-Te/2 1
-tea/18 1
-teabag
-teabags
-teacake/1 1
-teach/547 1608
-teachable 1
-teacher/1 1
-teaching/1 1
-teacloth
-teacup/1 1
-teacupful/1 1
-teak/1 1
-teakettle/1 1
-teal/1 1
-tealeaves
-team/23 1
-teaming 1
-teammate/1 1
-teamster/1 1
-team 1
-teamwork/2 1
-teapot/1 1
-tear/23 1609
-tearaway/10 1
-teardrop/1 1
-tearful/83 1
-teargas/541 1
-tearing 1
-tearjerker/1 1
-tearless 1
-tearoom/1 1
-teary/34 1
-teas/7 1
-Teasdale/3
-tease/28 1
-teasel/18 1
-teaser/1 1
-teashop/10 1
-teasing/8 1
-teaspoon/1 1
-teaspoonful/1 1
-teat/1 1
-teatime/10 1
-teazel/70 1
-teazle/58 1
-tech/1 1
-techie/10 1
-technetium/2 1
-technical/8 1
-technicality/15 1
-technical 1
-technician/1 1
-technicolor 1
-Technicolor 1
-technique/1 1
-technocracy/15 1
-technocrat/1 1
-technocratic
-technological/8 1
-technologist/1 1
-technology/15 1
-technophiles
-technophobe/10 1
-technophobia 1
-technophobic
-techno 1
-tech 1
-tectonic/35 1
-Tecumseh/2 1
-Ted/2 1
-ted/58 1
-Teddy/3
-teddy/60 1
-tedious/16 1
-tedium/2 1
-tee/63 1
-teem/11 1
-teeming 1
-teen/1 1
-teenage/336 1
-teenaged
-teenager/1 1
-teensy/34 1
-teen 1
-teeny/34 1
-teenybopper/1 1
-teepee/1 1
-teeter/23 1
-teethe/6 1
-teething/2 1
-teethmarks
-teeth 1610
-teetotaler/1 1
-teetotalism/2 1
-teetotal 1
-tee 1
-TEFL
-Teflon/1 1
-Tegucigalpa/2 1
-Teheran/2 1
-Tehran
-tektite/1 1
-telecast/86 1
-telecaster/1 1
-telecommunication/130 1
-telecommute/6 1
-telecommuter/1 1
-telecommuting/2 1
-telecoms
-teleconference/28 1
-teleconferencing/2 1
-telegenic
-telegram/18 1
-telegraph/23 1
-telegrapher/1 1
-telegraphese 1
-telegraphic
-telegraphically
-telegraphist/1 1
-telegraphy/2 1
-telekinesis/2 1
-telekinetic
-Telemachus
-Telemann
-telemarketer/1 1
-telemarketing/2 1
-telemeter/18 1
-telemetry/15 1
-teleological
-teleology 1
-telepathic/39 1
-telepathy/2 1
-telephone/28 1
-telephoner/1 1
-telephonic 1
-telephonist/10 1
-telephony/2 1
-telephoto/1 1
-telephotography/2 1
-teleplay/1 1
-teleprinter/1 1
-teleprocessing/2 1
-TelePrompter
-teleprompter/1 1
-TelePrompTer 1
-telesales
-telescope/28 1
-telescopic/39 1
-teletext/1 1
-telethon/1 1
-teletype/58 1
-Teletype 1
-teletypewriter/1 1
-televangelism/2 1
-televangelist/1 1
-televise/6 1
-television/1 1
-televisual
-teleworker/10 1
-teleworking
-telex/22 1
-Tell/2 1
-tell/141 1611
-Teller
-teller/18 1
-telling/8 1
-telltale/1 1
-tellurium/2 1
-TELNET/548 1
-telnet 1
-tel 1
-Telugu/2 1
-telly/15 1
-temblor/1 1
-temerity/2 1
-temp/179 1
-Tempe
-temper/23 1
-tempera/1 1
-temperament/1 1
-temperamental/8 1
-temperance/2 1
-temperate/16 1
-temperature/1 1
-tempering 1
-tempest/18 1
-tempestuous/16 1
-Templar/2 1
-template/1 1
-temple/1 1
-tempo/1 1
-temporal/8 1
-temporary/212 1
-temporize/6 1
-temporizer/1 1
-temporizing 1
-tempt/11 1
-temptation/1 1
-tempter/1 1
-tempting/8 1
-temptress/4 1
-tempura/2 1
-ten/350 1
-tenability/2 1
-tenable/19 1
-tenacious/16 1
-tenacity/2 1
-tenancy/15 1
-tenant/23 1
-tenantry/2 1
-tench 1
-tend/11 1
-tendency/15 1
-tendentious/16 1
-tender/52 1
-tenderer 1
-tenderfoot/1 1
-tenderhearted/33 1
-tenderheartedly
-tendering 1
-tenderize/6 1
-tenderizer/1 1
-tenderloin/1 1
-tendinitis/2 1
-tendon/1 1
-tendonitis/2 1
-tendril/1 1
-tenement/1 1
-tenet/1 1
-tenfold 1
-Tenn
-tenner/10 1
-Tennessean/1 1
-Tennessee/2 1
-tennis/2 1
-Tenochtitlan/3
-tenon/18 1
-tenor/1 1
-tenpin/130 1
-tens/393 1
-tense/107 1
-tensile 1
-tension/62 1
-tensional
-tensity/2 1
-tensor/10 1
-tent/23 1
-tentacle/1 1
-tentacled
-tentative/8 1
-tentativeness/3
-tentative 1
-tenterhook/1 1
-tenth/30 1
-tenting 1
-tenuity/2 1
-tenuous/16 1
-tenure/28 1
-Tennyson
-Teotihuacan/3
-tepee/1 1
-tepid/16 1
-tepidity/2 1
-tequila/1 1
-terabyte/1 1
-terbium/2 1
-tercentenary/15 1
-tercentennial/1 1
-Terence
-Teresa/3
-Tereshkova
-Teri/3
-Terkel/3
-term/23 1
-termagant/1 1
-terminable 1
-terminal/30 1
-terminate/6 1
-termination/1 1
-terminator/10 1
-termini 1612
-terminological/8 1
-terminology/15 1
-terminus/2 1613
-termite/1 1
-termly 1
-tern/18 1
-ternary/15 1
-Terpsichore/2 1
-terpsichorean 1
-Terr/3
-Terra/3
-terrace/28 1
-terracing 1
-terracotta/2 1
-terraform/195 1
-terrain/1 1
-Terran/2 1
-Terrance/3
-terrapin/1 1
-terrarium/1 1
-terrazzo/1 1
-Terrell/3
-Terrence/3
-terrestrial/30 1
-Terri/3
-terrible/29 1
-Terrie/3
-terrier/1 1
-terrific/39 1
-terrify/31 1
-terrifying/8 1
-terrine/10 1
-territorial/30 1
-territoriality 1
-Territorial 1
-territory/15 1
-Territory 1
-terror/1 1
-terrorism/2 1
-terrorist/1 1
-terrorize/6 1
-terr 1
-Terry
-terry/549 1
-terrycloth/2 1
-terse/27 1
-tertiary/60 1
-Tertiary/2 1
-tertiary 1
-TESL
-Tesla
-TESOL
-Tess
-Tessa/3
-tessellate/6 1
-tessellation/1 1
-tesseral
-Tessie/3
-test/78 1
-testability 1
-testable 1
-testament/1 1
-testamentary
-testate/10 1
-testator/1 1
-testatrix/184 1
-testbed
-testbeds
-testcard
-tester/1 1
-testes 1614
-testicle/1 1
-testicular
-testifier/1 1
-testify/31 1
-testimonial/1 1
-testimony/15 1
-testing/10 1
-testis/2 1615
-testosterone/2 1
-testy/50 1
-Tet/2 1
-tetanus/2 1
-tetchy/193 1
-tether/23 1
-Tethys/2 1
-Tetons
-tetra/1 1
-tetrachloride 1
-tetracycline/2 1
-tetrahedral 1
-tetrahedron/1 1
-tetrameter/1 1
-Teuton/1 1
-Teutonic
-Tevet/2 1
-Tex
-TeX/89 1
-Texaco/3
-Texan/1 1
-Texas/2 1
-text/1 1
-textbook/1 1
-textile/1 1
-textual 1
-textually 1
-textural
-texturally
-texture/77 1
-TGIF
-Th/2 1
-Thackeray
-Thad/3
-Thaddeus
-Thai/1 1
-Thailand/2 1
-Thai 1
-thalami 1616
-thalamus/2 1617
-Thales
-Thalia/2 1
-thalidomide/2 1
-thallium/2 1
-Thames/2 1
-than
-thane/1 1
-Thanh/3
-thank/11 1
-thankful/85 1
-thankless/16 1
-thanksgiving/1 1
-Thanksgiving/1 1
-Thant
-Thar/3
-Tharp/3
-that/2 1
-thatch/22 1
-Thatcher
-thatcher/1 1
-thatching/2 1
-that 1
-thaumaturge 1
-thaw/23 1
-thawing 1
-THC
-Thea/2 1
-theater/1 1
-theatergoer/1 1
-theatrical/550 1
-theatricality/2 1
-theatrics
-theatrics's
-Thebes/2 1
-thee/70 1
-theft/1 1
-Theiler/3
-their/10 1
-theism/2 1
-theist/1 1
-theistic 1
-theist 1
-Thelma/3
-themas
-thematic/39 1
-theme/77 1
-Themistocles
-themselves 1
-them 1
-then/2 1
-thenceforth
-thenceforward 1
-thence 1
-then 1
-theocracy/15 1
-theocratic
-Theocritus
-theodolite/10 1
-Theodora
-Theodore/3
-Theodoric/3
-Theodosius/3
-theologian/1 1
-theological/8 1
-theologists
-theology/15 1
-theorem/1 1
-theoretical/8 1
-theoretician/1 1
-theoretic 1
-theorist/1 1
-theorize/6 1
-theory/15 1
-theosophic
-theosophical 1
-theosophist/1 1
-theosophy/2 1
-Theosophy 1
-therapeutic/32 1
-therapeutically
-therapist/1 1
-therapy/15 1
-Theravada 1
-there/2 1
-thereabout/10 1
-thereafter
-thereat 1
-thereby 1
-therefor
-therefore
-therefrom
-therein 1
-thereof 1
-thereon 1
-Theresa
-Therese/3
-thereto
-theretofore
-there 1
-thereunder
-thereunto
-thereupon
-therewith
-therm/1 1
-thermal/30 1
-thermionic 1
-thermistor/10 1
-thermochemical 1
-thermocouple/10 1
-thermodynamic/32 1
-thermodynamical/8 1
-thermoelectric
-thermoluminescence 1
-thermometer/1 1
-thermometric 1
-thermonuclear
-thermophile/10 1
-thermophilic
-thermoplastic/1 1
-Thermopylae/2 1
-thermos/4 1
-thermostat/18 1
-thermostatic/39 1
-Thermos 1
-Theron/3
-thesauri 1618
-thesaurus/4 1619
-these/10 1
-theses 1620
-Theseus/2 1
-thesis/2 1621
-thespian/1 1
-Thespian 1
-Thespis/3
-Thessalonian/10 1
-Thessaloniki/3
-Thessaly/2 1
-theta/1 1
-the 1
-thew/1 1
-they'd
-they'll
-they're
-they 1
-they've
-thiamin/2 1
-thiamine/2 1
-thick/551 1
-thicken/11 1
-thickener/1 1
-thickening/1 1
-thicket/1 1
-thickheaded/2 1
-thicko/10 1
-thickset 1
-thief/120 1
-Thieu/3
-thieve/6 1
-thievery/2 1
-thieving/2 1
-thievish/153 1
-thigh/1 1
-thighbone/1 1
-thimble/18 1
-thimbleful/1 1
-Thimbu
-Thimphu
-thin/552 1
-thine 1
-thing/1 1
-thingamabob/1 1
-thingamajig/1 1
-thingumabob/10 1
-thingummy/60 1
-thingy/60 1
-think/141 1622
-thinkable 1
-thinker/1 1
-thinking/2 1
-thinner/1 1
-thinning 1
-thinnish
-third/164 1
-thirst/23 1
-thirstiness/3
-thirsty/59 1
-thirteen/1 1
-thirteenth/1 1
-thirteen 1
-thirtieth/1 1
-thirty/15 1
-thistle/1 1
-thistledown/2 1
-this 1
-thither 1
-thole/18 1
-Thomas/2 1
-Thomism/2 1
-Thomistic
-Thompson
-Thomson
-thong/1 1
-Thor/2 1
-thoracic
-thorax/4 1
-Thorazine/2 1
-Thoreau/2 1
-thorium/2 1
-thorn/18 1
-thorniness/3
-Thornton/3
-thorny/34 1
-thorough/21 1
-thoroughbred/1 1
-Thoroughbred 1
-thoroughfare/1 1
-thoroughgoing 1
-Thorpe
-those 1
-Thoth/2 1
-tho 1
-thou/18 1
-thought/1 1
-thoughtful/16 1
-thoughtless/16 1
-though 1
-thought 1623
-thousand/1 1
-thousandfold
-thousandth/1 1
-thousand 1
-Thrace/2 1
-Thracian/2 1
-thraldom/2 1
-thrall/23 1
-thralldom/2 1
-thrash/22 1
-thrasher/1 1
-thrashing/1 1
-thread/23 1
-threadbare 1
-threader/1 1
-threadlike 1
-thready/34 1
-threat/18 1
-threaten/11 1
-threatening/8 1
-three/1 1
-threefold 1
-threepence/2 1
-threepenny 1
-threescore/1 1
-threesome/1 1
-three 1
-threnody/15 1
-thresh/22 1
-thresher/1 1
-threshing 1
-threshold/1 1
-threw 1624
-thrice 1
-thrift/1 1
-thriftless 1
-thrifty/50 1
-thrill/23 1
-thriller/1 1
-thrilling/8 1
-thrive/6 1
-thriving 1
-throat/18 1
-throaty/50 1
-throb/136 1
-throbbing 1
-throe/18 1
-thrombi 1625
-thromboses 1626
-thrombosis/2 1627
-thrombotic
-thrombus/2 1628
-throne/77 1
-throng/23 1
-throttle/28 1
-throttler/1 1
-throttling 1
-throughout 1
-throughput/2 1
-through 1
-throughway/1 1
-throw/144 1629
-throwaway/1 1
-throwback/1 1
-thrower/1 1
-throwing 1
-throwout
-thrum/160 1
-thrumming 1
-thrush/4 1
-thrust/86 1
-thruster/10 1
-thrusting 1
-thru 1
-thruway/1 1
-Thu
-Thucydides/2 1
-thud/113 1
-thudding 1
-thug/1 1
-thuggery/2 1
-thuggish 1
-Thule/2 1
-thulium/2 1
-thumb/23 1
-thumbnail/1 1
-thumbprint/1 1
-thumbscrew/1 1
-thumbtack/18 1
-thump/23 1
-thumping's
-thumping 1
-thunder/23 1
-Thunderbird/3
-thunderbolt/1 1
-thunderclap/1 1
-thundercloud/1 1
-thunderer/1 1
-thunderflashes
-thunderhead/1 1
-thundering 1
-thunderous/8 1
-thundershower/1 1
-thunderstorm/1 1
-thunderstruck 1630
-thundery 1
-thunk/70 1
-Thur
-Thurber
-Thurman/3
-Thurmond/3
-Thurs
-Thursday/1 1
-thus 1
-Thutmose/3
-thwack/23 1
-thwacker/1 1
-thwacking 1
-thwart/23 1
-thwarted 1
-thwarting 1
-thwart 1
-thyme/2 1
-thymine/2 1
-thymus/4 1
-thyristor/10 1
-thyroid/1 1
-thyroidal 1
-thyroid 1
-thyself 1
-thy 1
-ti/2 1
-Ti/2 1
-Tia/3
-Tianjin/2 1
-tiara/1 1
-Tiber/2 1
-Tiberius
-Tibet/2 1
-Tibetan/1 1
-tibia/53 1
-tibial 1
-tic/64 1
-tick/23 1
-ticker/1 1
-ticket/23 1
-Ticketmaster/3
-ticking/2 1
-tickle/28 1
-tickler/1 1
-tickling 1
-ticklish/16 1
-ticktacktoe/2 1
-ticktock/18 1
-Ticonderoga
-tidal/8 1
-tidbit/1 1
-tiddler/10 1
-tiddly 1
-tiddlywink/32 1
-Tide/3
-tide/28 1
-tideland/1 1
-tideless 1
-tidemark/10 1
-tidewater/1 1
-tideway/1 1
-tidier 1
-tiding/32 1
-tidy/275 1
-tie/77 1631
-tieback/1 1
-tiebreak
-tiebreaker/1 1
-tiebreaks
-Tienanmen/3
-Tientsin/2 1
-tiepin/10 1
-tier/62 1
-tiff/23 1
-Tiffany
-tiffing 1
-tiger/1 1
-tigerish 1
-tight/434 1
-tighten/11 1
-tightener/1 1
-tightfisted 1
-tightrope/18 1
-tightwad/1 1
-tigress/4 1
-Tigris/2 1
-Tijuana/2 1
-tike/1 1
-tikes 1632
-til/553 1
-tilde/1 1
-tile/28 1
-tiler/1 1
-tiling/1 1
-till/23 1
-tillable 1
-tillage/2 1
-tiller/18 1
-Tillich
-tilling 1
-Tillman/3
-Tilsit 1
-tilt/23 1
-tilting 1
-Tim/3
-timber/62 1
-timberland/2 1
-timberline/1 1
-timbre/1 1
-timbrel/1 1
-Timbuktu/2 1
-time/139 1
-timebase
-timekeeper/1 1
-timekeeping/2 1
-timeless/33 1
-timelessly
-timeless 1
-timely/49 1
-timeout/1 1
-timepiece/1 1
-timer/1 1
-timescale/10 1
-timeserver/1 1
-timeserving/2 1
-timeshare
-timeshares
-timestamped
-timestamps
-timetable/28 1
-timeworn
-Timex/3
-timezone
-timezones
-timid/21 1
-timidity/2 1
-timid 1
-timing/1 1
-Timmy/3
-Timon/3
-Timor
-timorous/16 1
-Timothy
-timothy/2 1
-timpani/2 1
-timpanist/1 1
-Timur/2 1
-Timurid/3
-tin/133 1
-Tina/3
-tincture/28 1
-tinder/2 1
-tinderbox/4 1
-tine/18 1
-tinfoil/2 1
-Ting/3
-ting/23 1
-tinge/270 1
-tingle/28 1
-tingling/2 1
-tinglings
-tingling 1
-tingly/34 1
-tinker/23 1
-Tinkerbell/3
-tinkerer/1 1
-tinkering 1
-Tinkertoy 1
-tinkle/28 1
-tinkling 1
-tinkly 1
-tinning 1
-tinnitus/2 1
-tinplate/2 1
-tinpot 1
-tinsel/23 1
-Tinseltown/3
-tinsel 1
-tinsmith/1 1
-tint/23 1
-tinting 1
-tintinnabulation/1 1
-Tintoretto
-tin 1
-tintype/1 1
-tinware/2 1
-tiny/49 1
-tinny/50 1
-tip/47 1
-tipi/1 1
-Tippecanoe/3
-tipper/1 1
-Tipperary
-tippet/1 1
-tippex
-tippexed
-tippexes
-tippexing
-tipping 1
-tipple/28 1
-tippler/1 1
-tipster/1 1
-tipsy/50 1
-tiptoe/63 1
-tiptop/1 1
-tirade/1 1
-Tirana/2 1
-Tirane
-tire/28 1
-tired/21 1
-tireless/16 1
-Tiresias/2 1
-tiresome/16 1
-tiring 1
-tiro/2 1
-Tirol/2 1
-Tirolean 1
-Tisha/3
-Tishri/2 1
-tissue/18 1
-tit/18 1
-titan/1 1
-Titan/1 1
-Titania
-Titanic
-titanic/39 1
-titanium/2 1
-titbit/1 1
-titch/89 1
-titchy
-titer/10 1
-tithe/28 1
-tither/1 1
-tithing 1
-titian/2 1
-Titian/2 1
-titian 1
-Titicaca
-titillate/6 1
-titillating/8 1
-titillation/2 1
-titivate/6 1
-titivation/2 1
-title/28 1
-titleholder/1 1
-title 1
-titling 1
-titlist/1 1
-titmice 1633
-titmouse/2 1634
-Tito/3
-titrated
-titration 1
-titter/23 1
-tittering 1
-tittivate/6 1
-tittle/18 1
-titular 1
-Titus
-titty/60 1
-tizz 1
-tizzy/15 1
-TKO/2 1
-Tl/2 1
-Tlaloc/3
-TLC/2 1
-Tlingit/2 1
-TM
-Tm/2 1
-tn
-TN
-tnpk
-TNT/2 1
-toad/113 1
-toadstool/1 1
-toady/56 1
-toadyism/2 1
-toast/23 1
-toaster/1 1
-toasting 1
-toastmaster/1 1
-toastmistress/4 1
-toasty/219 1
-tobacco/1 1
-tobacconist/1 1
-Tobago/2 1
-Tobit
-toboggan/23 1
-tobogganer/1 1
-tobogganing/2 1
-Toby 1
-Tocantins
-toccata/10 1
-Tocqueville
-tocsin/1 1
-Tod/3
-today/2 1
-Todd
-toddle/28 1
-toddler/1 1
-toddy/15 1
-toe/63 1
-toecap/1 1
-toeclip/10 1
-TOEFL
-toehold/1 1
-toenail/18 1
-toerag/10 1
-toe 1
-toff/10 1
-toffee/1 1
-toffy/15 1
-tofu/2 1
-tog/554 1
-toga/1 1
-togaed 1
-toge
-together/33 1
-toggle/28 1
-Togo/2 1
-Togolese/2 1
-toil/23 1
-toiler/1 1
-toilet/23 1
-toiletry/15 1
-toilette/2 1
-toiling 1
-toilsome 1
-Tojo
-Tokay/2 1
-toke/28 1
-token/18 1
-tokenism/2 1
-token 1
-Tokugawa
-Tokyo/2 1
-Tokyoite 1
-told 1635
-tole/2 1
-Toledo/1 1
-tolerable/19 1
-tolerance/1 1
-tolerant/8 1
-tolerate/6 1
-toleration/2 1
-tole 1
-Tolkien
-toll/23 1
-tollbooth/1 1
-tollgate/1 1
-tollway/1 1
-Tolstoy/2 1
-Toltec 1
-toluene/2 1
-Tolyatti/3
-tom/1 1
-Tom/2 1
-tom/58 1
-tomahawk/23 1
-Tomas
-tomato/4 1
-tomb/23 1
-Tombaugh/3
-tombola/10 1
-tomboy/1 1
-tomboyish 1
-tombstone/1 1
-tomcat/18 1
-tome/1 1
-tomfoolery/15 1
-Tomlin/3
-Tommie/3
-Tommy 1
-tomographic
-tomography/2 1
-tomorrow/1 1
-Tompkins/3
-Tomsk
-tomtit/1 1
-tom 1
-Tom 1
-ton/18 1
-tonal/8 1
-tonality/15 1
-tone/28 1
-tonearm/1 1
-toneless/8 1
-toner/1 1
-tong/23 1
-Tonga/2 1
-Tongan/1 1
-tongue/28 1
-tongueless 1
-tonguing 1
-Toni/3
-Tonia/3
-tonic/1 1
-tonier 1636
-toniest 1636
-tonight/2 1
-tonnage/1 1
-tonne/1 1
-tonsil/1 1
-tonsillectomy/15 1
-tonsillitis/2 1
-tonsorial
-tonsure/28 1
-Tonto/3
-tony/34 1
-Tonya/3
-Tony 1
-took 1637
-tool/23 1
-toolbar 1
-toolbox/4 1
-tooling 1
-toolkit 1
-toolmaker/1 1
-toolmaking 1
-toot/23 1
-tooter/1 1
-tooth/173 1638
-toothache/1 1
-toothbrush/4 1
-toothily 1
-toothless 1
-toothmarks
-toothpaste/1 1
-toothpick/1 1
-toothsome 1
-toothy/34 1
-tootle/43 1
-tootling 1
-too 1
-tootsie/10 1
-toots 1
-top/296 1
-topaz/4 1
-topcoat/1 1
-topdressing/1 1
-topee/10 1
-Topeka/2 1
-topflight 1
-topi/10 1
-topiary/2 1
-topic/1 1
-topical/8 1
-topicality/2 1
-topis 1
-topknot/1 1
-topless 1
-topmast/1 1
-topmost 1
-topnotch 1
-topographer/1 1
-topographic
-topographical/8 1
-topography/15 1
-topological/8 1
-topologist/10 1
-topology/60 1
-topper/1 1
-topping/1 1
-topple/6 1
-topsail/1 1
-topside/1 1
-topsoil/2 1
-topspin/2 1
-Topsy/3
-toque/1 1
-tor/1 1
-torah/1 1
-Torah/1 1
-torch/22 1
-torchbearer/1 1
-torchlight/2 1
-torchlit
-toreador/1 1
-tore 1639
-tori 1640
-torment/23 1
-tormenter/1 1
-tormentingly
-tormenting 1
-tormentor/1 1
-tornado/4 1
-torn 1639
-toroidal 1
-toroid 1
-Toronto/2 1
-torpedo/22 1
-torpid/8 1
-torpidity/2 1
-torpid 1
-torpor/2 1
-torque/28 1
-Torquemada
-torques 1
-Torrance
-Torrens
-torrent/1 1
-torrential
-torrent 1
-Torres
-Torricelli/2 1
-torrid/21 1
-torridity/2 1
-tors/89 1
-torsion/1 1
-torsional
-torso/1 1
-tort/1 1
-torte/1 1
-tortellini/1 1
-tortilla/1 1
-tortoise/1 1
-tortoiseshell/1 1
-Tortola
-tortoni/2 1
-Tortuga
-tortuous/16 1
-torture/28 1
-torturer/1 1
-torturing 1
-torturous 1
-torus 1641
-Torvalds/3
-Tory/15 1
-Tosca/3
-Toscanini
-Toshiba/3
-tosh 1
-toss/22 1
-tosser/10 1
-tossing 1
-tossup/1 1
-tot/109 1
-total/210 1
-totalitarian/1 1
-totalitarianism/2 1
-totality/15 1
-totalizator/1 1
-totalizing
-tote/28 1
-totem/1 1
-totemic 1
-toter 1
-Toto/3
-to 1
-totter/23 1
-totterer/1 1
-tottering 1
-totting 1
-toucan/1 1
-touch/22 1
-touchable 1
-touchdown/1 1
-touche/6 1
-touching/191 1
-touchline/10 1
-touchpaper
-touchpapers
-touchscreen/1 1
-touchstone/1 1
-touchy/50 1
-tough/52 1
-toughen/11 1
-toughener/1 1
-toughening 1
-toughie/1 1
-Toulouse
-toupee/1 1
-tour/23 1
-tourer/10 1
-touring 1
-tourism/2 1
-tourist/1 1
-touristic 1
-tourist 1
-touristy 1
-tourmaline/2 1
-tournament/1 1
-tourney/18 1
-tourniquet/1 1
-tousle/43 1
-tout/23 1
-tow/23 1
-toward/10 1
-towboat/1 1
-towel/23 1
-towelette/1 1
-toweling/1 1
-tower/23 1
-towhead/1 1
-towheaded
-towhee/1 1
-towing 1
-towline/1 1
-town/1 1
-townee/10 1
-Townes
-townhouse/1 1
-townie/1 1
-Townsend/3
-townsfolk/2 1
-township/1 1
-townsman/2 1642
-townsmen 1643
-townspeople/2 1
-townswoman/2 1644
-townswomen 1645
-town 1
-towpath/1 1
-towrope/1 1
-toxemia/2 1
-toxicity/15 1
-toxicological 1
-toxicologist/1 1
-toxicology/2 1
-toxic 1
-toxin/1 1
-toy/23 1
-toyboy
-toyboys
-toying 1
-toymaker
-Toynbee/3
-Toyoda/3
-Toyota/3
-toyshop 1
-toy 1
-TQM
-tr
-trace/28 1
-traceability 1
-traceable 1
-traceless 1
-tracer/1 1
-tracery/15 1
-Tracey/3
-trachea/53 1
-tracheal 1
-tracheotomy/15 1
-Traci/3
-Tracie/3
-tracing/1 1
-track/23 1
-trackball/1 1
-trackbed
-tracker/1 1
-tracking 1
-trackless 1
-tracksuit/10 1
-trackway/10 1
-tract/1 1
-tractability/2 1
-tractable 1
-tractably 1
-traction/2 1
-tractor/1 1
-Tracy/3
-trad/89 1
-trade/139 1
-trademark/23 1
-tradeoff/1 1
-trader/1 1
-tradesman/2 1646
-tradesmen 1647
-tradespeople's 1648
-tradespeople 1649
-tradeswoman/2 1650
-tradeswomen 1651
-trading/1 1
-tradition/1 1
-traditional/8 1
-traditionalism/2 1
-traditionalist/1 1
-trad 1
-traduce/6 1
-traducer/1 1
-traducing 1
-Trafalgar/2 1
-traffic/64 1
-trafficker/1 1
-trafficking/2 1
-tragedian/1 1
-tragedienne/1 1
-tragedy/15 1
-tragical/8 1
-tragicomedy/15 1
-tragicomic
-tragic 1
-trail/23 1
-trailblazer/1 1
-trailblazing/2 1
-trailer/18 1
-trailing 1
-Trailways/3
-train/23 1
-trainable 1
-trainee/1 1
-trainer/1 1
-training/1 1
-trainload/1 1
-trainman/2 1652
-trainmen 1653
-trainspotter
-trainspotters
-trainspotting
-traipse/28 1
-traipsing 1
-trait/1 1
-traitor/1 1
-traitorous/8 1
-Trajan
-trajectory/15 1
-tram/160 1
-tramcar/10 1
-tramlines
-trammel/23 1
-tramp/23 1
-tramper/1 1
-tramping 1
-trample/28 1
-trampler/1 1
-trampling 1
-trampoline/28 1
-trampolining 1
-trampolinist 1
-tramway/10 1
-Tran/3
-trance/18 1
-tranche/10 1
-tranquil/75 1
-tranquility/2 1
-tranquilize/6 1
-tranquilizer/1 1
-tranquillize/6 1
-tranquillizer/1 1
-transact/11 1
-transaction/1 1
-transactional 1
-transactor/1 1
-transatlantic 1
-Transcaucasia
-transceiver/1 1
-transcend/11 1
-transcendence/2 1
-transcendental/191 1
-transcendentalism/2 1
-transcendentalist/1 1
-transcendent 1
-transcontinental 1
-transcribe/6 1
-transcriber/1 1
-transcript/1 1
-transcription/1 1
-transcriptional 1
-transducer/1 1
-transduction 1
-transect/11 1
-transept/1 1
-transfer/103 1
-transferability 1
-transferable
-transferal/1 1
-transferee/10 1
-transference/2 1
-transfiguration/2 1
-transfigure/6 1
-transfinite
-transfinitely
-transfix/7 1
-transform/23 1
-transformable
-transformation/1 1
-transformational
-transformer/1 1
-transforming 1
-transfuse/6 1
-transfusion/1 1
-transgender/3
-transgendered
-transgenders
-transgenic
-transgress/7 1
-transgression/1 1
-transgressive 1
-transgressor/1 1
-transhipment
-transience/2 1
-transiency/2 1
-transient/30 1
-transistor/1 1
-transistorize/6 1
-transit/23 1
-transition/23 1
-transitional/8 1
-transitive/36 1
-transitivity/2 1
-transitory 1
-transl
-translatable 1
-translate/6 1
-translation/1 1
-translational 1
-translator/1 1
-transliterate/6 1
-transliteration/1 1
-translucence/2 1
-translucency/2 1
-translucent/8 1
-transmigrate/6 1
-transmigration/2 1
-transmissible
-transmission/1 1
-transmissive 1
-transmit/12 1
-transmittable
-transmittal/2 1
-transmittance/2 1
-transmitter/1 1
-transmogrification/2 1
-transmogrify/31 1
-transmutable 1
-transmutation/1 1
-transmute/6 1
-transnational/1 1
-transoceanic
-transom/1 1
-transonic 1
-transpacific
-transparency/15 1
-transparent/8 1
-transpiration/2 1
-transpire/6 1
-transplant/23 1
-transplantation/2 1
-transpolar
-transponder/1 1
-transport/23 1
-transportability 1
-transportable
-transportation/2 1
-transporter/1 1
-transporting 1
-transpose/6 1
-transposing 1
-transposition/1 1
-transputer/10 1
-transsexual/1 1
-transsexualism/2 1
-transship/105 1
-transshipment/2 1
-trans 1
-transubstantiation/2 1
-Transvaal/2 1
-transverse/164 1
-transvestism/2 1
-transvestite/1 1
-Transylvania
-trap/47 1
-trapdoor/1 1
-trapeze/18 1
-trapezium/1 1
-trapezoid/1 1
-trapezoidal
-trappable
-trapper/1 1
-trapping/32 1
-Trappist/1 1
-trapshooting/2 1
-trash/22 1
-trashcan/1 1
-trashy/49 1
-trauma/1 1
-traumatic
-traumatically
-traumatize/6 1
-travail/23 1
-travel/78 1
-traveler/1 1
-traveling/1 1
-travelog/1 1
-travelogue/1 1
-traversal/1 1
-traverse/28 1
-traversing 1
-travesty/56 1
-Travis/3
-Travolta/3
-trawl/23 1
-trawler/1 1
-trawling 1
-tray/1 1
-treacherous/16 1
-treachery/15 1
-treacle/2 1
-treacly 1
-tread/86 1654
-treader 1
-treading 1
-treadle/28 1
-treadling 1
-treadmill/1 1
-treas
-treason/2 1
-treasonable 1
-treasonous 1
-treasure/28 1
-treasurer/1 1
-treasurership 1
-treasury/15 1
-Treasury/15 1
-treat/23 1
-treatable 1
-treating 1
-treatise/1 1
-treatment/1 1
-treaty/15 1
-treble/28 1
-Treblinka
-tree/63 1
-treeless 1
-treelike 1
-treeline
-treetop/1 1
-trefoil/1 1
-trek/64 1
-trekker/1 1
-Trekkie/3
-trellis/22 1
-trematode/1 1
-tremble/28 1
-trembling/10 1
-tremblingly
-tremendous/8 1
-tremolo/1 1
-tremor/18 1
-tremulous/16 1
-trench/22 1
-trenchancy/2 1
-trenchant/8 1
-trencher/1 1
-trencherman/2 1655
-trenchermen 1656
-trend/23 1
-trendily 1
-trendiness/3
-trendsetter/10 1
-trendsetting
-trendy/42 1
-Trent/3
-Trenton/2 1
-trepanned
-trepidation/1 1
-trespass/22 1
-trespasser/1 1
-tress/40 1
-trestle/1 1
-Trevelyan
-Trevino/3
-Trevor/3
-trews 1
-Trey/3
-trey/1 1
-triad/1 1
-triadic 1
-triage/2 1
-trial/213 1
-trialed
-trialing
-trialling 1
-trial 1
-triangle/1 1
-triangulable
-triangular/8 1
-triangulate/6 1
-triangulation/1 1
-Triangulum/3
-Triassic/2 1
-triathlete/10 1
-triathlon/1 1
-triatomic 1
-tribal/8 1
-tribalism/2 1
-tribe/1 1
-tribesman/2 1657
-tribesmen 1658
-tribeswoman/2 1659
-tribeswomen 1660
-tribulation/1 1
-tribunal/1 1
-tribune/1 1
-tributary/15 1
-tribute/1 1
-trice/2 1
-tricentennial/1 1
-triceps/4 1
-triceratops/2 1
-trice 1
-trichina/53 1
-trichinosis/2 1
-Tricia/3
-trick/23 1
-trickery/2 1
-tricking 1
-trickle/28 1
-trickling 1
-trickster/1 1
-trick 1
-tricky/50 1
-tricolor/1 1
-tricycle/18 1
-Trident/3
-trident/1 1
-triennial/30 1
-trier/1 1
-Trieste
-triffid/10 1
-trifle/28 1
-trifler/1 1
-trifling 1
-trifocals
-trifocals's
-trig/555 1
-trigger/23 1
-triglyceride/1 1
-trigonometric
-trigonometrical 1
-trigonometry/2 1
-trigram/10 1
-trig 1
-trike/18 1
-trilateral/10 1
-trilby/15 1
-trilingual 1
-trill/23 1
-trilling 1
-trillion/1 1
-trillionth/1 1
-trillion 1
-trillium/2 1
-trilobite/1 1
-trilogy/15 1
-trim/556 1
-trimaran/1 1
-trimester/1 1
-trimmer/1 1
-trimming/130 1
-trimodal
-trimonthly 1
-Trimurti/2 1
-Trina/3
-Trinidad/2 1
-Trinidadian/1 1
-trinitrotoluene/2 1
-trinity/15 1
-Trinity/15 1
-trinket/18 1
-trio/1 1
-trios 1
-trip/47 1
-tripartite
-tripe/2 1
-Tripitaka
-triplane 1
-triple/467 1
-triplet/1 1
-triplex/4 1
-triplicate/28 1
-triplication 1
-tripling 1
-triply 1
-tripod/1 1
-tripodal
-Tripoli/2 1
-tripos/89 1
-Trippe/3
-tripper/1 1
-tripping 1
-trips 1
-triptych/1 1
-tripwire/10 1
-trireme/1 1
-trisect/11 1
-trisection/2 1
-trisector 1
-Trisha/3
-Tristan/2 1
-trite/27 1
-tritium/2 1
-Triton/2 1
-triumph/23 1
-triumphalism 1
-triumphalist 1
-triumphal 1
-triumphant/8 1
-triumphing 1
-triumvir/1 1
-triumvirate/1 1
-trivalent
-trivet/1 1
-trivia/2 1
-trivial/8 1
-triviality/15 1
-trivialization/1 1
-trivialize/6 1
-trivia's 1661
-trivia 1662
-trivium/2 1663
-Trobriand/3
-trochaic 1
-trochee/1 1
-trodden 1664
-trod 1664
-troglodyte/1 1
-troika/1 1
-Trojan/1 1
-troll/23 1
-trolley/18 1
-trolleybus/4 1
-trolling 1
-trollish
-trollop/18 1
-Trollope
-trolly/258 1
-trolly's
-trombone/1 1
-trombonist/1 1
-tromp/11 1
-tron/192 1
-Trondheim/2 1
-troop/23 1
-trooper/1 1
-troopship/1 1
-trope/1 1
-trophy/167 1
-tropic/130 1
-tropical/8 1
-Tropicana/3
-tropic 1
-tropism/1 1
-tropopause 1
-troposphere/1 1
-tropospheric
-trot/109 1
-troth/2 1
-Trotsky
-trotter/1 1
-trotting 1
-troubadour/1 1
-trouble/28 1
-troubled 1
-troublemaker/1 1
-troubleshoot/11 1665
-troubleshooter/1 1
-troubleshooting/2 1
-troubleshot 1666
-troublesome/8 1
-troubling 1
-trough/1 1
-trounce/6 1
-trouncer/1 1
-trouncing 1
-troupe/28 1
-trouper/1 1
-trouser/138 1
-trousseau/100 1
-trout/1 1
-trove/1 1
-trow/11 1
-trowel/23 1
-troy/10 1
-Troy/4 1
-troy 1
-truancy/2 1
-truant/23 1
-truce/18 1
-truck/23 1
-Truckee/3
-trucker/1 1
-trucking/2 1
-truckle/28 1
-truckling 1
-truckload/1 1
-truculence/2 1
-truculent/8 1
-Trudeau
-trudge/28 1
-trudging 1
-Trudy/3
-true/254 1
-truelove/1 1
-Truffaut/3
-truffle/1 1
-trug/10 1
-truism/1 1
-Trujillo
-truly 1
-Truman/2 1
-Trumbull/3
-Trump/3
-trump/23 1
-trumpery/2 1
-trumpet/23 1
-trumpeter/1 1
-trumpeting 1
-truncate/6 1
-truncation/1 1
-truncheon/18 1
-trundle/28 1
-trundler/1 1
-trunk/86 1
-trunking 1
-trunnion/10 1
-truss/22 1
-trussing 1
-trust/23 1
-trustee/18 1
-trusteeship/1 1
-trustful/16 1
-trusting/8 1
-trustworthy/49 1
-trusty/42 1
-truth/1 1
-truthful/16 1
-Truth 1
-try/56 1
-trying/8 1667
-tryout/1 1
-tryst/23 1
-tsarina/1 1
-tsarism 1
-tsarist/10 1
-tsetse/1 1
-Tsimshian/2 1
-Tsingtao
-Tsiolkovsky/3
-Tsitsihar/3
-Tsongkhapa/3
-tsp
-tsunami/1 1
-Tswana/2 1
-Tu
-Tuamotu/3
-Tuareg/2 1
-tub/18 1
-tuba/57 1
-tubal 1
-tubby/34 1
-tube/28 1
-tubeless/2 1
-tuber/1 1
-tubercle/1 1
-tubercular 1
-tuberculin/2 1
-tuberculosis/2 1
-tuberculous
-tuberose/2 1
-tuberous
-tubful/1 1
-tubing/2 1
-Tubman
-tubular 1
-tubule/1 1
-tuck/23 1
-Tucker/3
-tucker/23 1
-Tucuman/3
-Tucson/2 1
-Tudor/1 1
-Tue
-Tues/2 1
-Tuesday/1 1
-tuft/23 1
-tufter/1 1
-tufting 1
-tug/92 1
-tugboat/1 1
-tugging 1
-tuition/2 1
-Tulane/3
-tularemia/2 1
-tulip/1 1
-Tull/3
-tulle/2 1
-Tulsa/2 1
-Tulsidas/3
-tum/10 1668
-tumble/28 1
-tumbledown
-tumbler/1 1
-tumbleweed/1 1
-tumbling/2 1
-tumbrel/1 1
-tumbril/1 1
-tumescence/2 1
-tumescent
-tumidity/2 1
-tumid 1
-tummy/15 1
-tumor/1 1
-tumorous
-Tums/2 1
-tumult/18 1
-tumultuous/8 1
-tumulus 1
-tun/18 1
-tuna/1 1
-tunable 1
-tundra/1 1
-tune/28 1
-tuneful/16 1
-tuneless/8 1
-tuner/1 1
-tuneup/1 1
-tungsten/2 1
-Tungus/2 1
-Tunguska/3
-tunic/1 1
-tuning/10 1
-Tunis/2 1
-Tunisia/2 1
-Tunisian/1 1
-tunnel/23 1
-tunneler/1 1
-tunneling/10 1
-Tunney/3
-tunny/15 1
-Tupi/2 1
-tuppence/10 1
-tuppenny
-Tupperware
-Tupungato/2 1
-tuque/1 1
-turban/1 1
-turbaned
-turbidity/2 1
-turbid 1
-turbine/1 1
-turbo/1 1
-turbocharge/6 1
-turbocharger/1 1
-turbocharging 1
-turbofan/1 1
-turbojet/1 1
-turboprop/1 1
-turbot/1 1
-turbulence/2 1
-turbulent/8 1
-turd/1 1
-tureen/1 1
-turf/23 1
-turfing 1
-turfy/34 1
-Turgenev
-turgid/8 1
-turgidity/2 1
-Turin/2 1
-Turing/3
-Turk/1 1
-Turkestan/2 1
-turkey/1 1
-Turkey/2 1
-Turkic/1 1
-Turkish/2 1
-Turkmenistan/2 1
-turmeric/1 1
-turmoil/18 1
-turn/23 1
-turnabout/1 1
-turnaround/1 1
-turnbuckle/1 1
-turncoat/1 1
-Turner
-turner/1 1
-turning/1 1
-turnip/18 1
-turnkey/1 1
-turnoff/1 1
-turnout/1 1
-turnover/1 1
-turnpike/1 1
-turnstile/1 1
-turntable/1 1
-turpentine/2 1
-Turpin
-turpitude/2 1
-turps 1
-turquoise/1 1
-turret/1 1
-turreted
-turtle/18 1
-turtledove/1 1
-turtleneck/1 1
-turtlenecked
-Tuscaloosa/3
-Tuscan/2 1
-Tuscany/2 1
-Tuscarora/1 1
-Tuscon/3
-tush/40 1
-tusk/62 1
-Tuskegee/3
-Tussaud/3
-tussle/28 1
-tussock/1 1
-tussocky 1
-Tut/3
-tut/109 1
-Tutankhamen
-tutelage/2 1
-tutelary 1
-tutor/23 1
-tutorial/1 1
-tutorship/2 1
-Tutsi 1
-tuts 1
-tutti/1 1
-Tutu/3
-tutu/1 1
-Tuvalu/2 1
-Tuvaluan
-tux/4 1
-tuxedo/1 1
-TV/1 1
-TVA
-TWA/3
-twaddle/28 1
-twaddler/1 1
-twaddling 1
-Twain
-twain/2 1
-twang/23 1
-twanging 1
-twangy/34 1
-twas
-twat/10 1
-tweak/23 1
-Tweed
-tweed/130 1
-Tweedledee/3
-Tweedledum/3
-tweedy/34 1
-tween
-tweeness
-tweet/23 1
-tweeter/1 1
-twee 1
-tweezers
-tweezers's
-twelfth/1 1
-twelve/1 1
-twelvemonth/1 1
-twelve 1
-twentieth/1 1
-twenty/15 1
-twerp/1 1
-twice 1
-twiddle/28 1
-twiddler 1
-twiddling 1
-twiddly/34 1
-twig/92 1
-twiggy/34 1
-Twila/3
-twilight/2 1
-twilit 1
-twill/173 1
-twin/557 1
-twine/28 1
-twiner/1 1
-twinge/28 1
-twinight 1
-twining 1
-twink/58 1
-Twinkies
-twinkle/28 1
-twinkling/1 1
-twinkly 1
-twinning 1
-twinset/10 1
-twirl/23 1
-twirler/1 1
-twirly/34 1
-twist/23 1
-twisted 1
-twister/1 1
-twisting 1
-twisty/34 1
-twit/109 1
-twitch/22 1
-twitching 1
-twitchy/34 1
-twitter/23 1
-twittering 1
-twittery 1
-twitting 1
-twixt
-Twizzlers/3
-two/1 1
-twofer/1 1
-twofold 1
-twopence/1 1
-twopenny 1
-twosome/1 1
-two 1
-twp
-Twp
-TWX
-TX
-tzar/1 1
-tzarina/1 1
-tzarism 1
-tzarist/10 1
-Ty/3
-Tycho
-tycoon/1 1
-tying 1669
-tyke/1 1
-Tylenol/2 1
-Tyler/2 1
-tympani/2 1
-tympanist/1 1
-tympanum/1 1
-Tyndale
-Tyndall
-type/28 1
-typecast/121 1
-typeface/1 1
-typeless
-typescript/1 1
-typeset/88 1
-typesetter/1 1
-typesetting/2 1
-typewrite/317 1670
-typewriter/1 1
-typewriting/2 1
-typewrote 1671
-typhoid/2 1
-typhoon/1 1
-typhus/2 1
-typical/8 1
-typicality/2 1
-typification/2 1
-typify/31 1
-typing/2 1
-typist/1 1
-typo/1 1
-typographer/1 1
-typographic
-typographical/8 1
-typography/2 1
-typological/8 1
-typology/15 1
-tyrannical/8 1
-tyrannicide 1
-tyrannic 1
-tyrannize/6 1
-tyrannosaur/1 1
-tyrannosaurus/4 1
-tyrannous 1
-tyrant/1 1
-tyranny/15 1
-Tyre
-Tyree/3
-tyro/1 1
-Tyrol/2 1
-Tyrolean 1
-Tyrone
-tyrosine 1
-Tyson/3
-ttys
-U/2 1
-UAR
-UAW
-Ubangi 1
-ubiquitously
-ubiquitous 1
-ubiquity/2 1
-UBS/3
-Ubuntu/3
-Ucayali
-Uccello/3
-UCLA/3
-Udall
-udder/1 1
-Ufa/2 1
-UFO/1 1
-ufologist/1 1
-ufology/2 1
-Uganda/2 1
-Ugandan/1 1
-ugh 1
-uglification 1
-ugly/49 1
-uh
-UHF/2 1
-Uighur/2 1
-Ujungpandang/3
-UK/2 1
-ukase/1 1
-ukelele/1 1
-Ukraine/2 1
-Ukrainian/1 1
-ukulele/1 1
-UL
-Ulaanbaatar/2 1
-ulcer/18 1
-ulcerate/6 1
-ulceration/1 1
-ulcerous 1
-ulna/53 1
-ulnar 1
-ulster/1 1
-Ulster/2 1
-ulterior 1
-ultimate/37 1
-ultimatum/1 1
-ultimo
-ultra/1 1
-ultraconservative/1 1
-ultrahigh
-ultralight/1 1
-ultramarine/2 1
-ultramodern
-ultramontane 1
-ultrasonic/276 1
-ultrasound/1 1
-Ultrasuede/2 1
-ultra 1
-ultraviolet/2 1
-ult 1
-ululate/6 1
-ululation/1 1
-Ulyanovsk
-Ulysses/2 1
-um
-umbel/1 1
-umber/2 1
-umbilical 1
-umbilici 1672
-umbilicus/2 1673
-umbra/1 1
-umbrage/2 1
-umbrageous 1
-umbrage 1
-umbrella/18 1
-Umbriel/3
-umiak/1 1
-umlaut/18 1
-ump/23 1
-umpire/28 1
-umpteenth 1
-umpteen 1
-UN/2 1
-unabashed/8 1
-unabated 1
-unable 1
-unabridged/1 1
-unabsorbed
-unaccented
-unacceptability 1
-unacceptable/19 1
-unaccepted
-unaccommodating 1
-unaccompanied
-unaccomplished
-unaccountability 1
-unaccountable/19 1
-unaccounted
-unaccredited
-unaccustomed 1
-unachievable 1
-unacknowledged
-unacquainted
-unactivated
-unadapted
-unadaptive 1
-unaddressable
-unaddressed
-unadjusted
-unadorned
-unadulterated 1
-unadventurous 1
-unadvertised
-unadvised/8 1
-unaesthetic
-unaffectedly
-unaffected 1
-unaffiliated
-unaffordable
-unafraid
-unaided 1
-unalienable
-unaligned
-unalike
-unallocated
-unalloyed
-unalterable/19 1
-unaltered
-unambiguity 1
-unambiguous/8 1
-unambitious 1
-unamended
-unamused
-unanimity/2 1
-unanimous/8 1
-unannotated
-unannounced
-unanswerable 1
-unanswered
-unanticipated
-unapologetic 1
-unapparent 1
-unappealing/8 1
-unappeased
-unappetizing 1
-unappreciated
-unappreciative 1
-unapproachable
-unappropriated
-unapproved
-unarchived
-unarguable/19 1
-unarmed
-unarmored
-unaroused
-unashamed/8 1
-unasked
-unassailable 1
-unassailed
-unassertive 1
-unassigned
-unassisted
-unassociated
-unassuaged
-unassuming/8 1
-unattached
-unattainable/19 1
-unattained
-unattended
-unattenuated 1
-unattested
-unattractive/83 1
-unattributable 1
-unattributed
-unaudited
-unauthentic
-unauthenticated
-unauthorized
-unavailability/2 1
-unavailable 1
-unavailing/8 1
-unavenged
-unavoidable/19 1
-unawakened
-unaware/489 1
-unbaked
-unbalance/43 1
-unbanned
-unbanning
-unbaptized
-unbar/13 1
-unbearable/19 1
-unbeatable
-unbeaten
-unbecoming/8 1
-unbeknown
-unbeknownst
-unbelief/2 1
-unbelievability
-unbelievable/19 1
-unbelieved
-unbeliever/1 1
-unbelieving 1
-unbend/382 1
-unbending 1
-unbiased/8 1
-unbiassedly
-unbidden
-unbid 1
-unbind/121 1674
-unbinding 1
-unbleached
-unblemished
-unblinking/8 1
-unblock/11 1
-unbloodied
-unblushing/8 1
-unboiled
-unbolt/11 1
-unbooked
-unborn 1675
-unbosom/11 1
-unbounded 1
-unbound 1676
-unbowed
-unbraced
-unbracketed
-unbranded
-unbreakability
-unbreakable 1
-unbridgeable
-unbridged
-unbridled
-unbroken 1
-unbruised
-unbuckle/6 1
-unbundled
-unburden/11 1
-unburied
-unburned
-unburnt
-unbutton/11 1
-uncalibrated
-uncalled
-uncanceled
-uncanny/59 1
-uncap/105 1
-uncared
-uncaring
-uncased
-uncatalogued
-uncaught 1
-unceasing/8 1
-uncelebrated
-uncensored
-unceremonious/8 1
-uncertain/8 1
-uncertainty/15 1
-unchain/11 1
-unchallengeable 1
-unchallenged
-unchangeable 1
-unchanged
-unchanging 1
-unchaperoned
-uncharacteristic/39 1
-uncharged
-uncharismatic
-uncharitable/19 1
-uncharted
-unchaste/150 1
-uncheckable
-unchecked
-unchristened
-unchristian 1
-unchronicled
-uncial/2 1
-uncircumcised
-uncivil/8 1
-uncivilized
-unclad 1677
-unclaimed
-unclasp/11 1
-unclassifiable 1
-unclassified
-uncle/18 1
-unclean/396 1
-uncleaned
-uncleanly/140 1
-unclear/166 1
-uncleared
-unclench/195 1
-unclimbable
-unclimbed
-uncloak/11 1
-unclog/117 1
-unclosed
-unclothe/6 1678
-unclouded 1
-uncluttered
-uncoil/11 1
-uncollated
-uncollected
-uncollimated
-uncolored 1
-uncombed
-uncombined
-uncomfortable/55 1
-uncommitted
-uncommon/21 1
-uncommunicative 1
-uncompensated
-uncompetitive/153 1
-uncompilable
-uncomplaining/8 1
-uncompleted
-uncomplicated
-uncomplimentary
-uncompounded
-uncomprehending/8 1
-uncompressed
-uncompromisable
-uncompromising/8 1
-unconcealed
-unconcern/173 1
-unconcerned/8 1
-unconditional/8 1
-unconditioned 1
-unconfined
-unconfirmed
-unconformable 1
-unconfused 1
-uncongenial 1
-unconnected 1
-unconquerable 1
-unconquered
-unconscionable/19 1
-unconscious/239 1
-unconsecrated
-unconsidered
-unconsoled
-unconsolidated
-unconstitutional/8 1
-unconstitutionality/2 1
-unconstrained
-unconsumed
-unconsummated
-uncontainable
-uncontaminated
-uncontentious 1
-uncontested 1
-uncontrollable/19 1
-uncontrolled
-uncontroversial/8 1
-unconventional/8 1
-unconventionality/2 1
-unconverted
-unconvinced
-unconvincing/8 1
-uncooked
-uncool 1
-uncooperative 1
-uncoordinated
-uncork/11 1
-uncorrectable 1
-uncorrected
-uncorrelated 1
-uncorroborated
-uncorrupted 1
-uncountable
-uncountably
-uncounted
-uncouple/6 1
-uncouth/83 1
-uncover/11 1
-uncrackable
-uncreased
-uncreated
-uncreative 1
-uncredited
-uncritical/8 1
-uncross/7 1
-uncrossable
-uncross 1
-uncrowded
-uncrowned
-uncrushable
-unction/1 1
-unctuous/16 1
-uncultivated
-uncultured
-uncured
-uncurl/11 1
-uncustomary 1
-uncut 1
-undamaged
-undated
-undaunted/8 1
-undead 1
-undeceive/6 1
-undecidability 1
-undecidable
-undecided/1 1
-undecipherable 1
-undeclared
-undecorated
-undefeated 1
-undefended
-undefiled
-undefinable
-undefined 1
-undeliverable
-undelivered
-undemanding
-undemocratic/39 1
-undemonstrative/8 1
-undeniable/19 1
-undependable 1
-underachieve/6 1
-underachievement 1
-underachiever/1 1
-underact/11 1
-underage 1
-underarm/18 1
-underbellies
-underbelly/3
-underbid/474 1
-underbrush/2 1
-undercarriage/1 1
-undercharge/28 1
-underclass/4 1
-underclassman/2 1679
-underclassmen 1680
-underclothes
-underclothes's
-underclothing/2 1
-undercoat/23 1
-undercoating/1 1
-undercooked
-undercover
-undercurrent/1 1
-undercut/128 1
-underdeveloped
-underdevelopment/2 1
-underdog/1 1
-underdone
-undereducated
-underemphasis 1
-underemployed
-underemployment/2 1
-underestimate/28 1
-underestimation/1 1
-underexploited
-underexpose/6 1
-underexposure/1 1
-underfed 1681
-underfeed/121 1682
-underfloor
-underflow 1
-underfoot
-underframe 1
-underfund/241 1
-underfunding 1
-underfur/2 1
-undergarment/1 1
-undergo/302 1683
-undergrad/10 1
-undergraduate/1 1
-underground/1 1
-undergrowth/2 1
-underhand
-underhanded/16 1
-underinvestment 1
-underlain 1684
-underlay/18 1685
-underlie/58 1686
-underline/28 1
-underling/1 1
-underlining/10 1
-underlip/1 1
-underloaded
-underlying 1684
-undermanned
-undermentioned
-undermine/6 1
-undermining 1
-undermost
-underneath/1 1
-undernourished
-undernourishment/2 1
-underpants/2 1
-underpart/1 1
-underpass/4 1
-underpay/312 1
-underpayment/1 1
-underperformed
-underpin/192 1
-underpinning/1 1
-underplay/11 1
-underpopulated
-underpopulation
-underpowered
-underpricing
-underprivileged
-underproduction/2 1
-underrate/6 1
-underrepresented
-underscore/28 1
-undersea/10 1
-undersealed
-undersecretary/15 1
-undersell/121 1687
-undersexed
-undershirt/1 1
-undershoot/121 1688
-undershorts/2 1
-undershot 1689
-underside/1 1
-undersign/11 1
-undersigned's
-undersize
-undersized
-underskirt/1 1
-undersold 1690
-underspecification
-underspecified
-underspend/481 1
-understaffed
-understand/121 1691
-understandability 1
-understandable/19 1
-understander 1
-understanding/30 1
-understate/6 1
-understatement/1 1
-understocked
-understood 1692
-understorey
-understory 1
-understrength
-understudy/56 1
-undertake/76 1693
-undertaker/1 1
-undertaking/1 1
-underthings/2 1
-undertone/1 1
-undertook 1694
-undertow/1 1
-under 1
-underused
-underusing
-underutilized
-undervaluation/2 1
-undervalue/6 1
-underwater 1
-underway
-underwear/2 1
-underweight/2 1
-underwent 1695
-underwhelm/11 1
-Underwood/3
-underworld/1 1
-underwrite/317 1696
-underwriter/1 1
-underwrote 1697
-undeserved/8 1
-undeserving 1
-undesirability/2 1
-undesirable/82 1
-undesired
-undetectability
-undetectable/19 1
-undetected
-undetermined
-undeterred
-undetonated
-undeveloped
-undeviating 1
-undiagnosable
-undiagnosed
-undies
-undies's
-undifferentiated
-undigested
-undignified 1
-undiluted
-undiminished
-undimmed
-undiplomatic 1
-undirected
-undiscerning 1
-undischarged
-undisciplined
-undisclosed
-undiscovered
-undiscriminated
-undiscriminating 1
-undisguised
-undisguisedly
-undismayed
-undisplayed
-undisputed 1
-undissipated
-undissolved
-undistinguished
-undistorted 1
-undistributed
-undisturbed
-undivided
-undo/413 1
-undocumented
-undoing/1 1
-undomesticated
-undoubted/8 1
-undramatic
-undreamed
-undreamt 1
-undress/22 1
-undressing 1
-undress 1
-undrinkability
-undrinkable
-undroppable
-undue 1
-undulant
-undulate/6 1
-undulation/1 1
-unduly 1
-undying 1
-unearned
-unearth/11 1
-unearthliness/3
-unearthly 1
-unease/2 1
-uneasy/50 1
-uneatable
-uneaten
-uneconomic
-uneconomical/8 1
-unedifying
-unedited
-uneducated
-unelectable
-unelected
-unembarrassed
-unemotional/8 1
-unemphatic 1
-unemployable 1
-unemployed/2 1
-unemployment/2 1
-unenclosed
-unencrypted
-unencumbered
-unending 1
-unendurable 1
-unenforceable
-unenforced 1
-unengaged
-unenlightened
-unenlightening
-unentered
-unenterprising 1
-unenthusiastic/39 1
-unenviable 1
-unequal/8 1
-unequaled
-unequal 1
-unequipped
-unequivocal/8 1
-unergonomic
-unerring/8 1
-UNESCO/2 1
-unescorted
-unessential 1
-unestablished
-unethical/8 1
-unevaluated
-uneven/21 1
-uneventful/8 1
-unexacting
-unexamined
-unexampled
-unexceptionable/19 1
-unexceptional/8 1
-unexcited
-unexciting 1
-unexcused 1
-unexpanded
-unexpected/16 1
-unexpired
-unexplainable 1
-unexplained 1
-unexploded
-unexploited
-unexplored
-unexposed
-unexpressed
-unexpurgated
-unfading
-unfailing/8 1
-unfair/21 1
-unfaithful/16 1
-unfalsifiable
-unfaltering 1
-unfamiliar
-unfamiliarity/2 1
-unfashionable/19 1
-unfasten/11 1
-unfathomable
-unfathomably
-unfathomed
-unfatigued
-unfavorable/19 1
-unfavored
-unfazed
-unfeasible/19 1
-unfed 1
-unfeeling/8 1
-unfeigned 1
-unfeminine 1
-unfenced
-unfertilized
-unfetchable
-unfetter/11 1
-unfilled
-unfiltered
-unfinished 1
-unfired
-unfit/558 1
-unfitting 1
-unfix/7 1
-unflagging/8 1
-unflappability/2 1
-unflappable
-unflappably
-unflattering 1
-unflavored
-unfledged
-unflinching/8 1
-unfocused
-unfocussed
-unfold/11 1
-unfolding 1
-unforced 1
-unfordable
-unforeseeable 1
-unforeseen
-unforgettable/19 1
-unforgivable/19 1
-unforgiven
-unforgiving 1
-unforgotten
-unformed
-unformulated
-unfortified
-unfortunate/30 1
-unfounded 1
-unframed
-unfreeze/14 1698
-unfrequented
-unfriendly/49 1
-unfrock/11 1
-unfrozen 1699
-unfroze 1699
-unfruitful
-unfulfillable
-unfulfilled
-unfunded
-unfunny 1
-unfurl/11 1
-unfurnished
-unfussy 1
-ungainly/49 1
-Ungava
-ungenerous/8 1
-ungentlemanly
-ungentle 1
-ungerminated
-unglamorous 1
-unglazed
-unglued
-ungodly/49 1
-ungovernable 1
-ungoverned
-ungraceful/8 1
-ungracious/8 1
-ungraded
-ungrammatical/8 1
-ungrateful/16 1
-ungrounded
-ungrudging 1
-unguarded 1
-unguent/1 1
-unguessable
-unguided 1
-ungulate/1 1
-unhallowed
-unhampered
-unhand/11 1
-unhandy/34 1
-unhappily
-unhappiness
-unhappiness's
-unhappy/34 1
-unhardened
-unharmed
-unharness/7 1
-unharvested
-unhatched
-unhealed
-unhealthful 1
-unhealthy/50 1
-unheard 1
-unheated
-unheeded 1
-unhelpful/8 1
-unheralded
-unheroic
-unhesitating/8 1
-unhidden
-unhindered
-unhinge/6 1
-unhistorical 1
-unhitch/7 1
-unholy/49 1
-unhonored
-unhook/11 1
-unhoped
-unhorse/6 1
-unhurried/8 1
-unhurt 1
-unhygienic 1
-unhyphenated
-uni/10 1
-unicameral
-UNICEF/2 1
-unicellular
-Unicode/3
-unicorn/1 1
-unicycle/18 1
-unicyclist/10 1
-unideal
-unidentifiable 1
-unidentified
-unidiomatic 1
-unidirectional
-unifiable
-unification/2 1
-unifier 1
-uniform/559 1
-uniformity/2 1
-unify/31 1
-unilateral/8 1
-unilateralism 1
-unilateralist 1
-Unilever/3
-unillustrated
-unimaginable/19 1
-unimaginative/8 1
-unimagined
-unimpaired
-unimpeachable 1
-unimpeded
-unimplementable
-unimplemented
-unimportance 1
-unimportant 1
-unimposing
-unimpressed
-unimpressive 1
-unimproved
-unincorporated
-uninfected
-uninfluenced
-uninformative/8 1
-uninformed
-uninhabitable
-uninhabited
-uninhibited/8 1
-uninitialized
-uninitiated
-uninjured
-uninspired
-uninspiring 1
-uninstall
-uninstallable
-uninstalled
-uninstaller/3
-uninstallers
-uninstalling
-uninstalls
-uninstructed 1
-uninsulated
-uninsured
-unintellectual 1
-unintelligent 1
-unintelligible/19 1
-unintended 1
-unintentional/8 1
-uninterested/8 1
-uninteresting 1
-uninterpretable
-uninterpreted
-uninterrupted/8 1
-unintuitive 1
-uninvented
-uninvited 1
-uninviting 1
-uninvolved
-union/1 1
-Union/1 1
-unionism/2 1
-unionist/1 1
-Unionist 1
-unionization/2 1
-unionize/6 1
-union 1
-Union 1
-unipolar
-unique/27 1
-Uniroyal/3
-unisex/2 1
-unison/2 1
-unissued
-unit/18 1
-Unitarian/1 1
-Unitarianism/1 1
-unitary 1
-Unitas/3
-unite/43 1
-united/8 1
-uniting 1
-unitize/6 1
-unit 1
-unity/15 1
-univ
-univalent 1
-univalve/1 1
-universal/30 1
-universalism 1
-universality/2 1
-universalize/6 1
-universe/1 1
-university/15 1
-UNIX/2 1
-Unix/89 1
-unixism
-unixisms
-unjam/560 1
-unjaundiced
-unjust/83 1
-unjustifiable/19 1
-unjustified
-unkempt 1
-unkind/396 1
-unkindly 1
-unknightly 1
-unknowable/2 1
-unknowing/191 1
-unknown/1 1
-unlabeled
-unlace/6 1
-unladen
-unladylike
-unlamented
-unlatch/7 1
-unlawful/16 1
-unleaded
-unleaded's
-unlearn/11 1
-unlearned 1
-unleash/7 1
-unleavened
-unless 1
-unlettered
-unlicensed
-unlighted
-unlikable 1
-unlike/561 1
-unlikeable 1
-unlikelihood/2 1
-unlikely/140 1
-unlike 1
-unlimber/11 1
-unlimited 1
-unlined
-unlink/195 1
-unlisted
-unlit 1
-unlivable
-unload/11 1
-unloading 1
-unlock/11 1
-unloose/6 1
-unloosen/11 1
-unlovable 1
-unloved
-unlovely/34 1
-unloving
-unlucky/50 1
-unmade 1700
-unmagnified
-unmaintainable
-unmaintained
-unmake/14 1701
-unman/192 1
-unmanageable/19 1
-unmanly/34 1
-unmannerly 1
-unmapped
-unmarked
-unmarketable
-unmarred
-unmarried 1
-unmask/11 1
-unmatchable
-unmatched
-unmeaning 1
-unmeant 1
-unmeasurable 1
-unmeasured 1
-unmechanized
-unmediated
-unmeetable
-unmelodious 1
-unmemorable 1
-unmemorized
-unmentionable/130 1
-unmentioned
-unmerciful/8 1
-unmerited 1
-unmet
-unmindful 1
-unmissable
-unmistakable/19 1
-unmistakeable
-unmistakeably
-unmitigated 1
-unmixed 1
-unmnemonic
-unmodifiable
-unmodified
-unmolested
-unmonitored
-unmorality/2 1
-unmoral 1
-unmotivated
-unmounted
-unmovable
-unmoved
-unmoving
-unmusical/8 1
-unmutilated
-unmuzzled
-unnameable
-unnamed
-unnatural/16 1
-unnavigable 1
-unnecessary/211 1
-unneeded
-unnerve/6 1
-unnervingly
-unnoticeable 1
-unnoticed
-unnumbered
-unobjectionable
-unobliging
-unobservable
-unobservant 1
-unobserved
-unobstructed
-unobtainable
-unobtrusive/16 1
-unoccupied
-unoffensive 1
-unofficial/8 1
-unopened
-unopposed
-unoptimized
-unordered
-unorganized
-unoriginality 1
-unoriginal 1
-unorthodox 1
-unorthodoxy 1
-unowned
-unpack/11 1
-unpackers
-unpaid
-unpainted
-unpaired
-unpalatable 1
-unparalleled
-unparallelled
-unpardonable/19 1
-unparodied
-unpasted
-unpasteurized
-unpatriotic 1
-unpaved
-unpeeled
-unpeople 1702
-unperceived
-unperceptive 1
-unperformed
-unperson/1 1703
-unpersonalized
-unpersuaded
-unpersuasive 1
-unperturbed
-unphysical 1
-unpick/11 1
-unpin/192 1
-unplaced
-unplanned
-unplayability
-unplayable
-unpleasant/16 1
-unpleasing 1
-unploughed
-unplug/117 1
-unplumbed
-unpoetical 1
-unpolished
-unpolitical 1
-unpolluted
-unpopularity/2 1
-unpopular 1
-unpopulated
-unportable
-unpractical 1
-unpracticed
-unprecedented/8 1
-unpredictability/2 1
-unpredictable/19 1
-unpredicted
-unprejudiced 1
-unpremeditated
-unprepared/33 1
-unprepossessing 1
-unpressed
-unpressurized
-unpretending
-unpretentious/8 1
-unpreventable
-unprincipled
-unprintable 1
-unprinted
-unprivileged
-unproblematic
-unprocessed
-unproductive/8 1
-unprofessional/8 1
-unprofitable/19 1
-unpromising
-unprompted
-unpronounceable
-unpronounced
-unpropitious 1
-unprotected 1
-unprovable
-unproved
-unproven
-unprovided
-unprovoked
-unpublicized
-unpublishable
-unpublished
-unpunctuality 1
-unpunctual 1
-unpunished
-unqualified 1
-unquantifiable
-unquantified
-unquenchable
-unquestionable/19 1
-unquestioned
-unquestioning/8 1
-unquiet/166 1
-unquote/6 1
-unraisable
-unrated
-unravel/11 1
-unreachable
-unreached
-unreadability 1
-unreadable 1
-unread 1
-unready/34 1
-unrealistic/39 1
-unreality/2 1
-unrealizable
-unrealized
-unreal 1
-unreasonable/29 1
-unreasoned
-unreasoning 1
-unreceived
-unreceptive 1
-unrecognizable/19 1
-unrecognized
-unrecommended
-unreconciled
-unreconstructed
-unrecorded
-unrecoverable
-unredeemed
-unreduced
-unreel/11 1
-unrefereed
-unreferenced
-unreferencing
-unrefined
-unreflected
-unreformed
-unrefreshed
-unrefrigerated
-unregarded 1
-unregenerate
-unregistered
-unregulated
-unrehearsed
-unrelated 1
-unreleasable
-unreleased
-unrelenting/8 1
-unreliability/2 1
-unreliable/19 1
-unrelieved
-unrelievedly
-unremarkable 1
-unremarked
-unremembered
-unremitting/8 1
-unrepairable
-unrepeatability
-unrepeatable
-unrepeated
-unrepentant/8 1
-unreported
-unrepresentable
-unrepresentative 1
-unrepresented
-unreproducible 1
-unrequested
-unrequited
-unreserved/8 1
-unresistant
-unresisting
-unresistingly
-unresolvable
-unresolved
-unresponsive/16 1
-unrest/2 1
-unrestrained 1
-unrestricted 1
-unrest 1
-unrevealed
-unrevised
-unrewarded
-unrewarding
-unriddle 1
-unrighteous/33 1
-unripe/150 1
-unripened
-unrivaled
-unroll/11 1
-unromantic 1
-unruffled
-unruly/49 1
-unsaddle/6 1
-unsafe/250 1
-unsalable 1
-unsaleable 1
-unsalted
-unsanctioned
-unsanitary 1
-unsatisfactory/243 1
-unsatisfiable
-unsatisfied
-unsatisfying
-unsaturated
-unsaved
-unsavory 1
-unsay/312 1
-unscaled
-unscathed
-unscented
-unscheduled
-unschooled
-unscientific/39 1
-unscramble/6 1
-unscratched
-unscrew/11 1
-unscripted
-unscrupulous/16 1
-unseal/11 1
-unsealable
-unsearchable 1
-unseasonable/19 1
-unseasonal
-unseasoned
-unseat/11 1
-unseaworthiness
-unsecured
-unseeded
-unseeing/8 1
-unseemly/49 1
-unseen/1 1
-unsegmented
-unsegregated
-unselected
-unselfconscious/8 1
-unselfish/16 1
-unsellable
-unsentimental 1
-unsent 1
-unserviceable 1
-unserviced
-unsettle/6 1
-unsettled 1
-unset 1
-unshackle/6 1
-unshaded
-unshakable/19 1
-unshakeable
-unshaken
-unshaped
-unshapely 1
-unsharable
-unshared
-unshaven
-unsheathe/6 1
-unshielded
-unshod
-unshorn 1
-unshrinking 1
-unsifted
-unsighted
-unsightlier
-unsightliest
-unsightly/140 1
-unsigned
-unsimplified
-unsinkable
-unskilful 1
-unskilled
-unskillful/8 1
-unsliced
-unsmiling/8 1
-unsnap/105 1
-unsnarl/11 1
-unsociable 1
-unsocial 1
-unsoiled
-unsolder 1
-unsold 1704
-unsolicited
-unsolvable 1
-unsolved
-unsophisticated 1
-unsophistication 1
-unsorted
-unsought 1
-unsound/21 1
-unspanned
-unsparing/8 1
-unspeakable/19 1
-unspecific 1
-unspecified
-unspectacular 1
-unspent 1
-unspoiled
-unspoilt 1
-unspoken 1705
-unsporting 1
-unsportsmanlike
-unstable/17 1
-unstack/241 1
-unstained
-unstamped
-unstated
-unsteady/50 1
-unsterilized
-unsticking
-unstimulated
-unstinting/8 1
-unstirred
-unstop/105 1
-unstoppable/19 1
-unstrap/105 1
-unstressed
-unstretchable
-unstructured
-unstrung 1706
-unstuck 1707
-unstudied
-unsubdued
-unsubscribe
-unsubscribed
-unsubscribes
-unsubscribing
-unsubsidized
-unsubstantial 1
-unsubstantiated
-unsubstituted
-unsubtle/19 1
-unsuccessful/8 1
-unsuitability/2 1
-unsuitable/55 1
-unsuited
-unsullied
-unsung 1
-unsupervised
-unsupportable 1
-unsupported 1
-unsuppressed
-unsure/153 1
-unsurfaced
-unsurpassed
-unsurprised
-unsurprising/8 1
-unsurvivable
-unsuspected 1
-unsuspecting/8 1
-unsustainable
-unswappable
-unswayed
-unsweetened
-unswerving/8 1
-unsymmetrical 1
-unsympathetic/39 1
-unsystematic
-untactful 1
-untagged
-untainted
-untalented
-untamed
-untangle/6 1
-untanned
-untapped
-untarnished
-untasted
-untaught 1708
-untaxed
-untaxing
-unteachable
-untempered
-untenability 1
-untenable 1
-untenanted
-untended
-unterminated
-untestable
-untested
-untethered
-untextured
-unthinkable/19 1
-unthinking/8 1
-unthoughtful 1
-untidy/50 1
-untie/122 1709
-until 1
-untimely/49 1
-untiring/8 1
-untitled
-unto
-untold 1
-untouchable/1 1
-untouched
-untoward 1
-untraceable
-untrained
-untrammeled
-untransformed
-untranslatable
-untranslated
-untransportable
-untrappable
-untraveled
-untreatable
-untreated
-untried 1
-untrimmed 1
-untrodden 1710
-untrod 1710
-untroubled
-untrue/150 1
-untruly 1
-untrusted
-untrustworthy 1
-untruth/1 1
-untruthful/16 1
-unturned
-untutored
-untwist/11 1
-untying 1711
-untyped
-untypical/8 1
-Unukalhai/3
-unusable/19 1
-unused
-unusual/8 1
-unutterable/19 1
-unvalidated
-unvanquished
-unvaried 1
-unvarnished
-unvarying/8 1
-unveil/11 1
-unveiling 1
-unventilated
-unverifiable
-unverified
-unversed
-unvisitable
-unvisited
-unvoiced
-unwaged
-unwanted 1
-unwarned
-unwarrantable/19 1
-unwarranted 1
-unwary/50 1
-unwashed 1
-unwatchable
-unwatched
-unwavering/8 1
-unwearable
-unwearied 1
-unwedge
-unwed 1
-unweighted
-unwelcome
-unwelcoming
-unwell 1
-unwholesome/33 1
-unwieldy/49 1
-unwilling/16 1
-unwind/121 1712
-unwindable
-unwisdom 1
-unwise/45 1
-unwitting/8 1
-unwonted 1
-unworkability 1
-unworkable 1
-unworldly/140 1
-unworn 1
-unworried
-unworthy/50 1
-unwounded
-unwound 1713
-unwoven 1714
-unwrap/105 1
-unwrinkled
-unwritten
-unzip/105 1
-unyielding 1
-unyoke/6 1
-up/562 1
-Upanishads
-upbeat/1 1
-upbraid/11 1
-upbraiding 1
-upbringing/1 1
-UPC
-upchuck/11 1
-upcoming
-upcountry/2 1
-updatability
-update/28 1
-updater 1
-Updike
-updraft/1 1
-upend/11 1
-upfront 1
-upgradable
-upgrade/28 1
-upgradeable
-upgrade 1
-upgradings
-upheaval/1 1
-upheld 1715
-uphill/1 1
-uphold/121 1716
-upholder/1 1
-upholding 1
-upholster/11 1
-upholsterer/1 1
-upholstery/2 1
-UPI
-Upjohn/3
-upkeep/2 1
-upland/1 1
-uplift/23 1
-uplifting/10 1
-upload/11 1
-upmarket
-upon
-upper/1 1
-uppercase/2 1
-upperclassman/2 1717
-upperclassmen 1718
-upperclasswoman
-upperclasswomen
-uppercut/128 1
-uppermost
-upping 1
-uppish 1
-uppity 1
-upraise/6 1
-uprate/251 1
-uprear/11 1
-upright/220 1
-uprising/1 1
-upriver 1
-uproar/1 1
-uproarious/8 1
-uproot/11 1
-uprooting 1
-UPS
-upscale 1
-upset/128 1
-upsetting 1
-upshot/1 1719
-upside/1 1
-upsilon/1 1
-upstage/43 1
-upstairs
-upstanding 1
-upstart/23 1
-upstate/2 1
-upstream 1
-upstroke/1 1
-upsurge/28 1
-upswing/18 1
-uptake/1 1
-uptempo 1
-upthrust/86 1
-uptick/1 1
-uptight 1
-Upton/3
-uptown/2 1
-uptrend 1
-upturn/23 1
-upturning 1
-upward/191 1
-upwelling 1
-upwind 1
-Ur
-uracil/2 1
-Ural/10 1
-Urania/2 1
-uranium/2 1
-Uranus/2 1
-Urban/3
-urban/166 1
-urbane/45 1
-urbanity/2 1
-urbanization/2 1
-urbanize/6 1
-urbanologist/1 1
-urbanology/2 1
-urchin/1 1
-Urdu/2 1
-urea/2 1
-uremia/2 1
-uremic
-ureter/1 1
-urethane/2 1
-urethra/53 1
-urethral
-urethritis 1
-Urey
-urge/28 1
-urgency/2 1
-urgent/8 1
-urging/10 1
-Uriah
-uric 1
-Uriel
-urinal/1 1
-urinalyses 1720
-urinalysis/2 1721
-urinary 1
-urinate/6 1
-urination/2 1
-urine/2 1
-Uris
-URL/10 1
-urn/18 1
-urogenital
-urological
-urologist/1 1
-urology/2 1
-Urquhart
-Ursa/3
-ursine 1
-Ursula
-Ursuline 1
-urticaria/2 1
-Uruguay/2 1
-Uruguayan/1 1
-Urumqi
-US/2 1
-us/89 1722
-USA/2 1
-usability/2 1
-usable 1
-USAF
-usage/1 1
-USCG
-USDA
-use/28 1
-useability/2 1
-useable 1
-useful/16 1
-useless/16 1
-Usenet/1 1
-user/1 1
-usher/23 1
-usherette/1 1
-USIA
-USMC
-USN
-USO
-USP
-USPS
-USS
-USSR/2 1
-Ustinov
-usu
-usual/37 1
-usurer/1 1
-usurious 1
-usurp/11 1
-usurpation/2 1
-usurper/1 1
-usury/2 1
-UT/2 1
-Utah/2 1
-Utahan/1 1
-Utahn 1
-Ute/1 1
-utensil/1 1
-uterine
-uteri 1723
-uterus/2 1724
-utilitarian/1 1
-utilitarianism/2 1
-utility/15 1
-utilizable
-utilization/2 1
-utilize/6 1
-utmost/2 1
-utopia/1 1
-Utopia/1 1
-utopian/1 1
-Utopian/1 1
-Utrecht/2 1
-Utrillo/2 1
-u 1
-utter/305 1
-utterance/1 1
-utterer 1
-uttering 1
-uttermost/2 1
-UV/2 1
-uvula/1 1
-uvular/1 1
-uxorious 1
-Uzbek/2 1
-Uzbekistan/2 1
-Uzi/1 1
-v/374 1
-V/2 1
-Va
-VA
-vac/70 1
-vacancy/15 1
-vacant/8 1
-vacate/6 1
-vacation/23 1
-vacationer/1 1
-vacationist/1 1
-vaccinate/6 1
-vaccination/1 1
-vaccine/1 1
-vacillate/6 1
-vacillating 1
-vacillation/1 1
-vacuity/2 1
-vacuole/1 1
-vacuous/16 1
-vacuum/23 1
-Vader/3
-Vaduz/2 1
-vagabond/23 1
-vagabondage/2 1
-vagarious 1
-vagary/15 1
-vagina/53 1
-vaginal
-vaginally
-vagrancy/2 1
-vagrant/1 1
-vague/27 1
-vain/75 1
-vainglorious/8 1
-vainglory/2 1
-val
-Val/3
-valance/18 1
-Valarie/3
-Valdez/2 1
-vale/1 1
-valediction/1 1
-valedictorian/1 1
-valedictory/15 1
-valence/1 1
-Valencia/1 1
-valency/15 1
-Valenti/3
-Valentin/3
-valentine/1 1
-Valentine/2 1
-Valentino
-Valenzuela/3
-Valeria/3
-Valerian/3
-Valerie/3
-Valery
-vales 1725
-valet/23 1
-valeting 1
-valetudinarian/1 1
-valetudinarianism/2 1
-Valhalla/2 1
-valiance/2 1
-valiant/8 1
-valid/16 1
-validate/6 1
-validation/1 1
-validity/2 1
-valise/1 1
-Valium/1 1
-Valkyrie/1 1
-Vallejo
-Valletta/2 1
-valley/1 1
-Valois
-valor/2 1
-valorous/8 1
-Valparaiso/2 1
-valuable/1 1
-valuate/6 1
-valuation/1 1
-value/28 1
-valueless 1
-valuer/1 1
-valve/28 1
-valveless 1
-Valvoline/3
-valvular
-vamoose/6 1
-vamp/23 1
-vamping 1
-vampire/18 1
-Van
-van/133 1
-vanadium/2 1
-Vance
-Vancouver/2 1
-vandal/1 1
-Vandal/1 1
-vandalism/2 1
-vandalize/6 1
-Vanderbilt
-Vandyke 1
-vane/1 1
-Vanessa/2 1
-Vang/3
-vanguard/1 1
-vanilla/1 1
-vanish/156 1
-vanishing/191 1
-vanity/15 1
-vanning 1
-vanquish/7 1
-vanquisher/1 1
-vantage/1 1
-Vanuatu/2 1
-Vanzetti/3
-vapid/16 1
-vapidity/2 1
-vapor/18 1
-vaporization/2 1
-vaporize/6 1
-vaporizer/1 1
-vaporous 1
-vaporware/10 1
-vapory 1
-vaquero/1 1
-var/10 1
-Varanasi
-Varese
-Vargas
-variability/2 1
-variable/82 1
-variance/1 1
-variant/1 1
-variate/70 1
-variation/1 1
-variational 1
-varicolored
-varicose 1
-varied 1
-variegate/6 1
-variegation/2 1
-varietal/1 1
-variety/15 1
-various/8 1
-varlet/1 1
-varmint/1 1
-varnish/22 1
-varnishing 1
-varsity/15 1
-vary/31 1
-varying 1
-vascular 1
-vase/1 1
-vasectomy/15 1
-Vaseline/18 1
-vasomotor
-Vasquez/3
-vassal/18 1
-vassalage/2 1
-vassal 1
-Vassar/3
-vast/38 1
-vat/1 1
-VAT/2 1
-vat/12 1
-Vatican/2 1
-Vauban
-vaudeville/2 1
-vaudevillian/1 1
-Vaughan
-Vaughn/3
-vault/23 1
-vaulter/1 1
-vaulting/2 1
-vaunt/23 1
-vaunting 1
-VAX/89 1
-Vazquez/3
-vb
-VCR/2 1
-VD/2 1
-VDT
-VDU
-veal/2 1
-Veblen/3
-vector/23 1
-vectorization
-vectorized
-Veda/1 1
-Vedanta 1
-veejay/1 1
-veep/1 1
-Veep 1
-veer/23 1
-veering 1
-veg/563 1
-Vega/1 1
-vegan/1 1
-vegeburger/10 1
-Vegemite/3
-vegetable/1 1
-vegetarian/1 1
-vegetarianism/2 1
-vegetate/6 1
-vegetation/2 1
-vegetational
-vegetative
-vegges
-veggie/1 1
-veggieburger/10 1
-vehemence/2 1
-vehemency/2 1
-vehement/8 1
-vehicle/1 1
-vehicular
-veil/23 1
-veiled 1
-veiling 1
-vein/23 1
-veining 1
-Vela
-velar/1 1
-Velasquez/3
-vela 1726
-Velazquez
-Velcro/1 1
-veld/1 1
-veldt/1 1
-Velez/3
-vellum/2 1
-Velma/3
-velocipede/1 1
-velocity/15 1
-velodrome/10 1
-velor
-velour's
-velours's
-velum/2 1727
-Velveeta/2 1
-velvet/18 1
-velveteen/1 1
-velvet 1
-velvety/34 1
-venal/8 1
-venality/2 1
-venation/2 1
-vend/11 1
-vender/1 1
-vendetta/1 1
-vendible 1
-vendor/1 1
-veneer/23 1
-veneering 1
-venerability/2 1
-venerable
-venerate/6 1
-veneration/2 1
-venereal
-Venetian/1 1
-venetian 1
-Venezuela/2 1
-Venezuelan/1 1
-vengeance/2 1
-vengeful/8 1
-venial 1
-Venice/2 1
-venireman/2 1728
-veniremen 1729
-venison/2 1
-Venn/3
-venom/2 1
-venomous/8 1
-venom 1
-venous 1
-vent/23 1
-ventilate/6 1
-ventilation/2 1
-ventilator/1 1
-venting 1
-Ventolin/2 1
-ventral/8 1
-ventricle/1 1
-ventricular
-ventriloquism/2 1
-ventriloquist/1 1
-ventriloquy/2 1
-venture/28 1
-venturesome/16 1
-ventures 1730
-venturing 1
-venturous/16 1
-venue/1 1
-Venus/4 1
-Venusian 1
-Vera/3
-veracious/8 1
-veracity/2 1
-Veracruz/2 1
-veranda/1 1
-verandah/1 1
-verb/1 1
-verbal/164 1
-verbalization/2 1
-verbalize/6 1
-verbatim
-verbena/1 1
-verbiage/1 1
-verbose/83 1
-verbosity/2 1
-verboten
-verdant/8 1
-Verde
-Verdi
-verdict/1 1
-verdigris/22 1
-Verdun/2 1
-verdure/2 1
-verge/28 1
-verger/1 1
-Vergil/2 1
-verifiability 1
-verifiable 1
-verification/1 1
-verifier/10 1
-verify/31 1
-verisimilitude/2 1
-veritable/19 1
-verity/15 1
-Verizon/3
-Verlaine/3
-Vermeer
-vermicelli/2 1
-vermiculite/2 1
-vermiform
-vermilion/2 1
-vermillion/2 1
-vermin/2 1
-verminous 1
-Vermont/2 1
-Vermonter/1 1
-vermouth/2 1
-Vern/3
-Verna/3
-vernacular/1 1
-vernal 1
-Verne
-vernier/1 1
-Vernon/3
-Verona/2 1
-Veronese
-veronica/2 1
-Veronica 1
-verruca/57 1
-Versailles/2 1
-versatile 1
-versatility/2 1
-verse/28 1
-versicle 1
-versification/2 1
-versifier/1 1
-versify/31 1
-versing 1
-version/1 1
-verso/1 1
-versus
-vertebra/53 1
-vertebral 1
-vertebrate/1 1
-vertex/4 1
-vertical/30 1
-vertiginous
-vertigo/2 1
-verve/2 1
-very/59 1
-Vesalius/2 1
-vesicle/1 1
-vesicular 1
-vesiculate 1
-Vespasian
-vesper/1 1
-Vespers
-vesper 1
-Vespucci/2 1
-vessel/1 1
-vest/23 1
-Vesta/2 1
-vestal/1 1
-vestibular
-vestibule/18 1
-vestige/1 1
-vestigial/8 1
-vesting/2 1
-vestment/1 1
-vestry/15 1
-vestryman/2 1731
-vestrymen 1732
-Vesuvius/2 1
-vet/109 1
-vetch/4 1
-veteran/1 1
-veterinarian/1 1
-veterinary/15 1
-veto/22 1
-vet 1
-vex/7 1
-vexation/1 1
-vexatious/8 1
-vexed 1
-vexing 1
-VF
-VFW/2 1
-VG
-VGA
-vhf
-VHF/2 1
-VHS
-VI/2 1
-viability/2 1
-viable 1
-viably 1
-Viacom/3
-viaduct/1 1
-Viagra
-vial/18 1
-viand/1 1
-via 1
-vibe/130 1
-vibraharp/1 1
-vibrancy/2 1
-vibrant/8 1
-vibraphone/1 1
-vibraphonist/1 1
-vibrate/6 1
-vibrating 1
-vibration/1 1
-vibrational
-vibrationally
-vibrato/1 1
-vibrator/1 1
-vibratory
-viburnum/1 1
-Vic
-vicar/1 1
-vicarage/1 1
-vicarious/16 1
-vice/28 1
-vicegerent/1 1
-vicennial
-Vicente/3
-viceregal 1
-viceroy/1 1
-vichyssoise/2 1
-Vichy 1
-vicinity/15 1
-vicious/16 1
-vicissitude/1 1
-Vicki/3
-Vickie/3
-Vicksburg/2 1
-Vicky
-victim/1 1
-victimization/2 1
-victimize/6 1
-victimless 1
-Victor/3
-victor/1 1
-Victoria/2 1
-Victorian/1 1
-Victorianism 1
-victorious/8 1
-victory/15 1
-Victrola/2 1
-victual/23 1
-vicuna/1 1
-Vidal/3
-videlicet
-video/23 1
-videocassette/1 1
-videoconferencing 1
-videodisc/1 1
-videodisk/1 1
-videophone/1 1
-videotape/28 1
-videotex/89 1
-video 1
-vie/122 1733
-Vienna/2 1
-Viennese 1
-Vientiane/2 1
-Vietcong
-Vietminh
-Vietnam/2 1
-Vietnamese/2 1
-view/23 1
-viewable
-viewer/1 1
-viewership/2 1
-viewfinder/1 1
-viewing/1 1
-viewpoint/1 1
-vigesimal
-vigil/1 1
-vigilance/2 1
-vigilant/8 1
-vigilante/1 1
-vigilantism/2 1
-vigilantist/2 1
-vignette/28 1
-vignettist/1 1
-vigor/2 1
-vigorous/8 1
-viii 1
-vii 1
-Vijayanagar/3
-Vijayawada/3
-viking/1 1
-Viking/1 1
-Vila/2 1
-vile/27 1
-vilification/2 1
-vilify/31 1
-Villa
-villa/1 1
-village/48 1
-villager/1 1
-villain/1 1
-villainous 1
-villainy/15 1
-Villarreal/3
-ville
-villein/1 1
-villeinage/2 1
-villi 1734
-Villon
-villus/2 1735
-Vilma/3
-Vilnius/2 1
-Vilyui/3
-vim/2 1
-vinaigrette/2 1
-Vince/3
-Vincent/3
-vincible 1
-vindaloos
-Vindemiatrix/3
-vindicate/6 1
-vindication/1 1
-vindicator/1 1
-vindictive/16 1
-vine/18 1
-vinegar/18 1
-vinegary 1
-vineyard/1 1
-vino/2 1
-vinous 1
-Vinson/3
-vintage/18 1
-vintner/1 1
-vinyl/1 1
-viol/1 1
-Viola/3
-viola/1 1
-violable 1
-violate/6 1
-violation/1 1
-violator/1 1
-violence/2 1
-violent/8 1
-Violet/3
-violet/1 1
-violin/1 1
-violincello
-violincellos
-violinist/1 1
-violist/1 1
-violoncellist/1 1
-violoncello/1 1
-VIP/1 1
-viper/1 1
-viperous 1
-virago/4 1
-viral 1
-vireo/1 1
-Virgie/3
-Virgil/2 1
-virgin/1 1
-virginal/1 1
-Virginia/2 1
-Virginian/1 1
-virginity/2 1
-virgin 1
-Virgo/1 1
-virgule/1 1
-virile 1
-virility/2 1
-virologist/1 1
-virology/2 1
-virtual/8 1
-virtue/1 1
-virtuosic
-virtuosity/2 1
-virtuoso/1 1
-virtuous/16 1
-virulence/2 1
-virulent/8 1
-virus/4 1
-Visa/3
-visa/23 1
-visage/1 1
-Visakhapatnam
-visa's 1736
-visa 1737
-Visayans
-visceral/8 1
-viscera 1738
-viscid 1
-viscometer 1
-viscose/2 1
-viscosity/2 1
-viscount/1 1
-viscountcy/15 1
-viscountess/4 1
-viscous 1
-viscus/2 1739
-vise/28 1
-Vishnu/2 1
-visibility/15 1
-visible/19 1
-Visigoth/1 1
-vision/23 1
-visionary/15 1
-visioning 1
-visit/23 1
-visitable
-visitant/1 1
-visitation/1 1
-visiting 1
-visitor/1 1
-visor/18 1
-VISTA
-vista/18 1
-Vistula/2 1
-visual/30 1
-visualization/1 1
-visualize/6 1
-visualizer/1 1
-vita/53 1
-vital/550 1
-vitality/2 1
-vitalization/2 1
-vitalize/6 1
-vitamin/1 1
-vitiate/6 1
-vitiation/2 1
-viticulture/2 1
-viticulturist/1 1
-Vitim/3
-Vito/3
-vitreous 1
-vitrifaction/2 1
-vitrification/2 1
-vitrify/31 1
-vitrine/1 1
-vitriol/2 1
-vitriolic/39 1
-vitriol 1
-vi 1
-vittles
-vittles's
-vituperate/6 1
-vituperation/2 1
-vituperative
-Vitus/3
-viva/58 1
-vivace 1
-vivacious/16 1
-vivacity/2 1
-Vivaldi
-vivaria 1740
-vivarium/1 1741
-viva's
-Vivekananda/3
-Vivian
-vivid/21 1
-Vivienne/3
-vivify/31 1
-viviparous 1
-vivisect/11 1
-vivisection/2 1
-vivisectional 1
-vivisectionist/1 1
-vixen/1 1
-vixenish/8 1
-vixen 1
-viz
-vizier/1 1
-vizir/1 1
-vizor/18 1
-VJ
-Vlad/3
-Vladimir
-Vladivostok/2 1
-Vlaminck
-Vlasic/3
-VLF/2 1
-VOA
-vocable/1 1
-vocab 1
-vocabulary/15 1
-vocal/30 1
-vocalic 1
-vocalist/1 1
-vocalization/1 1
-vocalize/6 1
-vocation/1 1
-vocational/8 1
-vocative/1 1
-vociferate/6 1
-vociferation/2 1
-vociferous/16 1
-vodka/1 1
-voe/10 1
-Vogue/3
-vogue/18 1
-voguish 1
-voice/28 1
-voiced 1
-voiceless/16 1
-voicing 1
-void/23 1
-voidable 1
-voiding 1
-void 1
-voila
-voile/2 1
-volatile/10 1
-volatility/2 1
-volatilize/6 1
-volcanic/39 1
-volcanism 1
-volcano/4 1
-Volcker/3
-Voldemort/3
-vole/18 1
-Volga/2 1
-Volgograd/2 1
-volition/2 1
-volitional 1
-Volkswagen/2 1
-volley/23 1
-volleyball/1 1
-Volstead/3
-volt/1 1
-Volta
-voltage/1 1
-voltaic 1
-Voltaire/2 1
-voltmeter/1 1
-vol 1
-volubility/2 1
-voluble/19 1
-volume/18 1
-volumetric
-voluminous/16 1
-voluntarism/2 1
-voluntary/206 1
-volunteer/23 1
-volunteerism/2 1
-voluptuary/15 1
-voluptuous/16 1
-volute/1 1
-Volvo/3
-vomit/23 1
-vomiting 1
-Vonda/3
-Vonnegut/3
-voodoo/23 1
-voodooism/2 1
-voodoo 1
-voracious/16 1
-voracity/2 1
-Voronezh
-Vorster/3
-vortex/4 1
-vorticity 1
-votary/15 1
-vote/28 1
-voter/1 1
-votive 1
-vouch/156 1
-voucher/18 1
-vouchsafe/6 1
-vow/23 1
-vowel/18 1
-voyage/28 1
-Voyager/3
-voyager/1 1
-voyageur/1 1
-voyeur/1 1
-voyeurism/2 1
-voyeuristic
-VP
-vs
-Vt
-VT
-VTOL
-Vuitton/3
-Vulcan/2 1
-vulcanism 1
-vulcanization/2 1
-vulcanize/6 1
-vulcanologist 1
-Vulg
-vulgar/75 1
-vulgarian/1 1
-vulgarism/1 1
-vulgarity/15 1
-vulgarization/2 1
-vulgarize/6 1
-vulgarizer/1 1
-vulgar 1
-Vulgate/1 1
-vulnerability/15 1
-vulnerable/19 1
-vulpine 1
-vulture/1 1
-vulturous
-vulva/53 1
-vying 1742
-w
-W/2 1
-WA
-Wabash/2 1
-wabbit/10 1
-WAC
-wackes
-wacko/1 1
-wacky/49 1
-Waco
-Wac 1
-wad/113 1
-wadding/2 1
-waddle/28 1
-Wade
-wade/28 1
-wader/130 1
-wades 1743
-wadge
-wadges
-wadi/1 1
-wading 1
-wadis 1744
-wafer/18 1
-waffle/28 1
-waffler/1 1
-waffling 1
-waft/23 1
-wafting 1
-wag/92 1
-wage/28 1
-wager/23 1
-wagerer/1 1
-waggery/15 1
-waggish/16 1
-waggle/28 1
-waggly 1
-Wagner/2 1
-Wagnerian 1
-wagon/18 1
-wagoner/1 1
-wagtail/1 1
-Wahhabi 1
-waif/564 1
-Waikiki
-wail/23 1
-wailer/1 1
-wailing/2 1
-wain/18 1
-wainscot/23 1
-wainscoting/1 1
-wainwright/1 1
-waist/18 1
-waistband/1 1
-waistcoat/18 1
-waistline/1 1
-wait/23 1
-Waite/3
-waiter/18 1
-waiting/2 1
-waitpeople 1745
-waitperson/1 1746
-waitress/40 1
-waitstaff/2 1
-waive/6 1
-waiver/1 1
-wake/1 1
-Wake/2 1
-wake/6 1747
-wakeful/16 1
-waken/11 1
-wakening 1
-waking/10 1
-Waksman
-Wald/3
-Waldemar/3
-Walden/3
-Waldensian 1
-Waldheim
-Waldo/3
-waldo/231 1
-Waldorf/3
-wale/28 1
-Wales/2 1
-Walesa
-wales 1748
-Walgreen/3
-walk/23 1
-walkable
-walkabout/10 1
-walkaway/1 1
-Walker/3
-walker/1 1
-walkies
-walking/2 1
-Walkman 1
-walkout/1 1
-walkover/1 1
-walkway/1 1
-Wall/3
-wall/23 1
-walla/10 1
-wallaby/15 1
-Wallace
-wallah/10 1
-wallboard/2 1
-wallchart 1
-Wallenstein
-Waller
-wallet/1 1
-walleye/1 1
-walleyed
-wallflower/1 1
-wallies
-walling 1
-Wallis
-Walloon 1
-wallop/23 1
-walloping/1 1
-wallow/23 1
-wallowing 1
-wallpaper/23 1
-Walls
-walnut/1 1
-Walpole/2 1
-Walpurgisnacht 1
-walrus/4 1
-Walsh/3
-Walt/3
-Walter
-Walters
-Walton/3
-waltz/22 1
-waltzer/1 1
-waltzing 1
-wally
-wampum/2 1
-wan/565 1
-Wanamaker/3
-wand/1 1
-Wanda/3
-wander/5 1
-wanderer/1 1
-wandering/32 1
-wanderlust/1 1
-wane/28 1
-Wang/3
-wangle/28 1
-wangler/1 1
-wangling 1
-waning 1
-wank/5 1
-Wankel/3
-wanker/10 1
-wanna
-wannabe/1 1
-wannabee/10 1
-want/23 1
-wanting 1
-wanton/566 1
-wantoner 1
-wan 1
-wapiti/1 1
-war/103 1
-warble/28 1
-warbler/1 1
-warbling 1
-warbonnet/1 1
-Ward
-ward/23 1
-warden/18 1
-warder/18 1
-warding 1
-wardress/89 1
-wardrobe/18 1
-wardroom/1 1
-wardship 1
-Ware/3
-ware/73 1
-warehouse/28 1
-warehouseman 1
-warehousing 1
-ware 1
-warez/89 1
-warfare/2 1
-warhead/1 1
-Warhol
-warhorse/1 1
-Waring/3
-warlike 1
-warlock/1 1
-warlord/1 1
-warm/520 1
-warmblooded
-warmer/1 1
-warmhearted/33 1
-warming 1
-warmish 1
-warmonger/1 1
-warmongering/2 1
-warmth/2 1
-warmup/1 1
-warn/11 1
-Warner/3
-warning/30 1
-warp/23 1
-warpaint
-warpath/1 1
-warping 1
-warplane/1 1
-warrant/23 1
-warranting 1
-warranty/56 1
-Warren
-warren/1 1
-warrior/1 1
-Warsaw/2 1
-warship/1 1
-wart/1 1
-warthog/1 1
-wartime/2 1
-war 1
-warty/34 1
-Warwick
-wary/50 1
-Wasatch/3
-Wash
-wash/22 1
-washable/1 1
-washbasin/1 1
-washboard/1 1
-washbowl/1 1
-washcloth/1 1
-washday 1
-washer/18 1
-washerwoman/2 1749
-washerwomen 1750
-washing/1 1
-Washington/2 1
-Washingtonian/1 1
-washout/1 1
-washrag/1 1
-washroom/1 1
-washstand/1 1
-washtub/1 1
-washy/34 1
-wasn't
-wasp/1 1
-WASP/2 1
-waspish/16 1
-Wasp 1
-wassail/23 1
-Wassermann 1
-was 46
-wast/241 1
-wastage/2 1
-waste/139 1
-wastebasket/1 1
-wasteful/16 1
-wasteland/1 1
-wastepaper/2 1
-waster/18 1
-wasting 1
-wastrel/1 1
-was 1
-wast 46
-watch/22 1
-watchable 1
-watchband/1 1
-watchdog/18 1
-watcher/1 1
-watchful/16 1
-watchmaker/1 1
-watchmaking/2 1
-watchman/2 1751
-watchmen 1752
-watchstrap/10 1
-watchtower/1 1
-watchword/1 1
-water/185 1
-waterbed/1 1
-waterbird/1 1
-waterborne
-Waterbury
-watercolor/18 1
-watercolorists
-watercourse/1 1
-watercraft/2 1
-watercress/2 1
-waterfall/1 1
-Waterford
-waterfowl/1 1
-waterfront/1 1
-Watergate 1
-waterhole/1 1
-watering 1
-waterless 1
-waterlilies
-waterlily/3
-waterline/1 1
-waterlogged
-Waterloo/1 1
-waterman 1
-watermark/23 1
-watermelon/1 1
-watermill/1 1
-waterpower/2 1
-waterproof/23 1
-waterproofing/2 1
-Waters/3
-watershed/1 1
-waterside/1 1
-waterspout/1 1
-watertight 1
-waterway/1 1
-waterwheel/1 1
-waterworks
-waterworks's
-watery/49 1
-Watkins
-WATS/2 1
-Watson
-Watt
-watt/1 1
-wattage/2 1
-Watteau
-wattle/28 1
-wattling 1
-Watts
-watt 1
-Watusi 1
-Waugh
-wave/28 1
-waveband/10 1
-waveform/10 1
-wavefront 1
-waveguide/10 1
-wavelength/1 1
-wavelet/1 1
-wavelike
-waver/23 1
-waverer/1 1
-wavering/8 1
-Wave 1
-wavier 1753
-waviest 1753
-waving 1
-wavy/50 1
-wax/567 1
-waxen 1
-waxing 1
-wax 1
-waxwing/1 1
-waxwork/1 1
-waxy/49 1
-way/1 1
-waybill/1 1
-wayfarer/1 1
-wayfaring/1 1
-waylay/312 1
-waylayer/1 1
-wayleave/10 1
-waymarked
-Wayne
-wayside/1 1
-way 1
-waywardly 1
-waywardness/3
-wayward 1
-wazoo/10 1
-WC
-weak/568 1
-weaken/11 1
-weakener/1 1
-weakfish/4 1
-weakish 1
-weakling/1 1
-weakly 1
-weal/1 1
-wealth/2 1
-wealthy/49 1
-wean/11 1
-weaned 1
-weanling 1
-weapon/18 1
-weaponless 1
-weaponry/2 1
-wear/86 1754
-wearable 1
-wearer/1 1
-wearing/10 1
-wearisome/8 1
-weary/143 1
-wearying/8 1
-weasel/23 1
-weaselly 1
-weather/23 1
-weatherboard/141 1
-weatherboarding 1
-weathercock/18 1
-weathering/2 1
-weatherization/2 1
-weatherize/6 1
-weatherman/2 1755
-weathermen 1756
-weatherperson/1 1
-weatherproof/11 1
-weatherstrip/105 1
-weatherstripping/2 1
-weather 1
-weave/28 1757
-Weaver/3
-weaver/1 1
-weaving/2 1
-Web
-web/136 1
-Webb
-webbing/2 1
-Weber
-Webern/3
-webfeet 1758
-webfoot/2 1759
-webmaster/1 1
-webmistress/4 1
-website/1 1
-Webster/1 1
-we'd
-Wed/2 1
-wed/569 1
-Weddell/3
-wedder 1
-wedding/1 1
-wedge/28 1
-wedgie/1 1
-wedging 1
-Wedgwood 1
-wedlock/2 1
-Wednesday/1 1
-wee/570 1
-weed/23 1
-weeder/1 1
-weeding 1
-weedkiller/10 1
-weedless 1
-weeds/89 1
-weedy/34 1
-week/1 1
-weekday/1 1
-weekend/23 1
-weekender/10 1
-weeklies
-weekly's
-weekly 1
-weeknight/1 1
-Weeks/3
-week 1
-ween/11 1
-weenie/41 1
-weensy/34 1
-weeny/219 1
-weep/86 1760
-weeper/1 1
-weepie/447 1
-weeping/10 1
-weepy/42 1
-weevil/1 1
-weft/18 1
-Wehrmacht
-Wei/3
-Weierstrass/3
-weigh/23 1
-weighbridge/10 1
-weighing 1
-weight/23 1
-weighted 1
-weighting/10 1
-weightless/16 1
-weightlifter/1 1
-weightlifting/2 1
-weighty/50 1
-Weill/3
-Weinberg/3
-weir/18 1
-weird/21 1
-weirdie/1 1
-weirdo/1 1
-weird 1
-Weiss/3
-Weissmuller/3
-Weizmann
-Welch
-welch/7 1
-welcome/28 1
-weld/23 1
-weldable 1
-welder/1 1
-welding 1
-Weldon/3
-welfare/2 1
-welkin/2 1
-we'll
-well/571 643
-Welland/3
-Weller/3
-Welles
-wellhead/1 1
-wellie/10 1
-wellington/1 1
-Wellington/1 1
-welling 1
-Wells
-wellspring/1 1
-Welsh/2 1
-welsh/7 1
-welsher/1 1
-Welshman/2 1761
-Welshmen 1762
-Welsh 1
-Welshwoman 1
-welt/23 1
-welter/23 1
-welterweight/1 1
-welting 1
-welly
-wen/1 1
-wench/40 1
-wend/572 1
-Wendell/3
-Wendi/3
-Wendy/3
-went 1763
-wept 1764
-we're
-weren't
-were 46
-werewolf/120 1
-werwolf/120 1
-Wesak/3
-Wesley/2 1
-Wesleyan/2 1
-Wessex
-Wesson/3
-West/1 1
-west/2 1
-westbound 1
-westerlies
-westerly's
-westerly 1
-western/129 1
-Western/1 1
-westerner/1 1
-Westerner 1
-westernization/2 1
-westernize/6 1
-westernmost
-Westinghouse
-Westminster
-Weston/3
-Westphalia
-west 1
-westward/10 1
-wet/573 1
-wetback/1 1
-wetland/1 1
-we 1
-wetsuit/10 1
-wettable
-wetter/1 1
-wetting 1
-wetware/10 1
-we've
-Weyden/3
-Wezen/3
-whack/23 1
-whacker/1 1
-whacking/10 1
-whacky/34 1
-whale/28 1
-whaleboat/1 1
-whalebone/2 1
-whaler/1 1
-whales/89 1
-whaling/2 1
-wham/160 1
-whammy/15 1
-wham 1
-wharf/564 1
-Wharton
-what/1 1
-whatchamacallit/1 1
-whatever 1
-whatnot/2 1
-whatshername
-whatshisname
-whatsit/10 1
-whatsoever 1
-what 1
-wheal/1 1
-wheat/2 1
-wheaten 1
-wheatgerm
-Wheaties/3
-wheatmeal
-Wheatstone/3
-wheedle/6 1
-wheedler/1 1
-wheedling 1
-wheel/23 1
-wheelbarrow/18 1
-wheelbase/1 1
-wheelchair/1 1
-Wheeler/3
-wheeler/10 1
-wheelhouse/1 1
-wheelie/1 1
-Wheeling/2 1
-wheeling 1
-wheelwright/1 1
-whee 1
-wheeze/28 1
-wheezing 1
-wheezy/50 1
-whelk/62 1
-whelm/11 1
-whelp/23 1
-when/1 1
-whence 1
-whenever
-whensoever
-when 1
-where/1 1
-whereabouts/2 1
-whereas 1
-whereat 1
-whereby 1
-wherefore/1 1
-wherein 1
-whereof 1
-whereon 1
-wheresoever
-whereto
-where 1
-whereupon
-wherever
-wherewithal/2 1
-wherewith 1
-wherry/167 1
-whet/479 1
-whether
-whetstone/1 1
-whew 1
-whey/2 1
-whichever 1
-which 1
-whiff/23 1
-whiffing 1
-whiffletree/1 1
-Whig/1 1
-while/28 1
-whilom 1
-whilst
-whim/18 1
-whimper/23 1
-whimpering 1
-whimsey/1 1
-whimsical/8 1
-whimsicality/2 1
-whimsy/15 1
-whine/28 1
-whiner/1 1
-whinge/574 1
-whingeing 1
-whinger/10 1
-whinier 1765
-whiniest 1765
-whining 1
-whiny/34 1
-whinny/56 1
-whip/47 1
-whipcord/2 1
-whiplash/40 1
-whipper/1 1
-whippersnapper/1 1
-whippet/1 1
-whipping/1 1
-Whipple/3
-whippletree/1 1
-whippoorwill/1 1
-whipsaw/23 1
-whir/103 1
-whirl/23 1
-whirligig/18 1
-whirling 1
-Whirlpool/3
-whirlpool/18 1
-whirlwind/1 1
-whirlybird/1 1
-whirr/23 1
-whirring 1
-whisk/23 1
-whisker/62 1
-whiskery 1
-whiskey/1 1
-whisper/23 1
-whisperer/1 1
-whispering/10 1
-whist/2 1
-whistle/28 1
-Whistler
-whistler/1 1
-whistling 1
-whist 1
-whit/18 1
-Whitaker
-white/25 1
-White/1 1
-white/6 1
-whitebait 1
-whiteboard/10 1
-whitecap/1 1
-Whitefield/3
-whitefish/4 1
-Whitehall
-Whitehead
-whitehead/1 1
-Whitehorse/2 1
-Whiteley/3
-whiten/11 1
-whitener/1 1
-whitening/1 1
-whiteout/1 1
-whitetail/1 1
-whitewall/1 1
-whitewash/22 1
-whitewashing 1
-whitewater/2 1
-whitey/1 1
-Whitfield/3
-whither 1
-whiting/1 1
-whitish 1
-Whitley/3
-Whitman
-Whitney/2 1
-Whitsunday/1 1
-Whittier
-whittle/43 1
-whittler/1 1
-whittling 1
-whit 1
-whiz/306 1
-whizkid/2 1
-whizzbang/1 1
-whizzing 1
-who/2 1
-WHO/2 1
-whoa 1
-who'd
-whodunit/1 1
-whodunnit/1 1
-whoever 1
-whole/20 1
-wholefood/10 1
-wholegrain
-wholehearted/16 1
-wholemeal
-wholesale/28 1
-wholesaler/1 1
-wholesome/16 1
-wholewheat
-who'll
-wholly 1
-whomever 1
-whomsoever 1
-whom 1
-whoop/23 1
-whoopee/10 1
-whooper/1 1
-whooping 1
-whoosh/22 1
-whop/105 1
-whopper/1 1
-whopping 1
-who're
-whore/73 1
-whorehouse/1 1
-whoreish 1
-whorish 1
-whorl/1 1
-whorled 1
-whose 1
-whosoever 1
-whoso 1
-who've
-whup/105 1
-why/1 1
-why'd
-why 1
-WI
-Wicca 1
-Wichita/2 1
-wick/62 1
-wicked/21 1
-wicker/1 1
-wickerwork/2 1
-wicket/1 1
-wicketkeeper/10 1
-wicketkeeping
-wide/575 1
-widemouthed
-widen/11 1
-widener/1 1
-widespread
-widgeon/1 1
-widget/10 1
-widow/23 1
-widower/1 1
-widowhood/2 1
-width/1 1
-wield/11 1
-wielder/1 1
-Wiemar/3
-wiener/1 1
-wienie/1 1
-Wiesel/3
-Wiesenthal/3
-wife/2 1766
-wifeless 1
-wifely/34 1
-wife 1
-wig/92 1
-wigeon/1 1
-wigging 1
-Wiggins
-wiggle/28 1
-wiggler/1 1
-wiggles/89 1
-wiggly/34 1
-wight/18 1
-wiglet/1 1
-Wigner/3
-wigwag/92 1
-wigwam/1 1
-Wii/3
-wiki/3
-Wikipedia/3
-wikis
-Wilberforce
-Wilbert/3
-Wilbur/3
-Wilburn/3
-Wilcox/3
-wild/135 1
-Wilda/3
-wildcat/403 1
-wildcatter/1 1
-Wilde
-wildebeest/1 1
-Wilder
-wilderness/3
-wildernesses
-wilder 1
-wildfire/1 1
-wildflower/1 1
-wildfowl/2 1
-wildlife/2 1
-wile/28 1
-Wiles
-Wiley/3
-Wilford/3
-Wilfred/3
-Wilfredo/3
-wilfulness
-wilfulness's
-Wilhelm/3
-Wilhelmina/3
-Wilkerson/3
-Wilkes
-Wilkins
-Wilkinson/3
-Will/3
-will/519 1767
-Willa/3
-Willamette/3
-Willard
-Willemstad
-willful/16 1
-William/10 1
-Williamson
-Willie/3
-willie/58 1
-willies's
-willing/21 1
-Willis
-williwaw/1 1
-willow/18 1
-willowy/34 1
-willpower/2 1
-Wilma/3
-Wilmer/3
-Wilmington/2 1
-Wilson/2 1
-Wilsonian
-wilt/23 1
-Wilton/2 1
-wily/49 1
-Willy/3
-willy/258 1
-Wimbledon/3
-wimp/23 1
-wimpish 1
-wimple/28 1
-wimpling 1
-wimpy/34 1
-Wimsey/3
-win/442 1768
-wince/28 1
-winch/22 1
-Winchell/3
-Winchester/10 1
-wincing 1
-wind/23 1769
-windbag/1 1
-windblown 1
-windbreak/1 1
-windbreaker/1 1
-Windbreaker 1
-windburn/173 1
-windcheater/10 1
-windchill/2 1
-winded 1
-winder/1 1
-Windex/3
-windfall/1 1
-windflower/1 1
-Windhoek
-winding/1 1
-windjammer/1 1
-windlass/40 1
-windless 1
-windmill/23 1
-window/23 1
-windowless 1
-windowpane/1 1
-Windows
-windowsill/1 1
-windpipe/1 1
-windproof 1
-windrow/18 1
-windscreen/1 1
-windshield/1 1
-windsock/1 1
-Windsor/1 1
-windstorm/1 1
-windsurf/11 1
-windsurfer/1 1
-windsurfing/2 1
-windswept 1
-windup/1 1
-Windward/3
-windward/2 1
-windy/50 1
-wine/28 1
-wineglass/4 1
-winegrower/1 1
-winemaker/1 1
-winery/15 1
-Winesap/2 1
-wineskin 1
-Winfred/3
-Winfrey/3
-wing/23 1
-wingding/1 1
-winged 1
-winger/10 1
-wingless 1
-winglike 1
-wingspan/1 1
-wingspread/1 1
-wingtip/1 1
-winier 1770
-winiest 1770
-Winifred/3
-wink/23 1
-winker/1 1
-winking 1
-Winkle/3
-winkle/28 1
-winkling 1
-winnable
-Winnebago/2 1
-winner/1 1
-Winnie 1
-winning/30 1
-Winnipeg/2 1
-winnow/5 1
-winnower/1 1
-winnowing 1
-wino/1 1
-winsome/27 1
-Winston/3
-winter/23 1
-wintergreen/2 1
-winterize/6 1
-Winters
-wintertime/2 1
-winter 1
-wintery/34 1
-Winthrop/3
-wintry/34 1
-winy/34 1
-wipe/28 1
-wiper/1 1
-wiping 1
-wire/139 1
-wired/10 1
-wirehair/1 1
-wireless/40 1
-wirer 1
-wiretap/47 1
-wiretapper/1 1
-wiretapping/2 1
-wiriness/3
-wiring/2 1
-wiry/34 1
-Wis
-Wisc
-Wisconsin/2 1
-Wisconsinite/1 1
-wisdom/2 1
-Wise/3
-wise/576 1
-wiseacre/1 1
-wisecrack/23 1
-wiseguy/10 1
-wish/22 1
-wishbone/1 1
-wisher/1 1
-wishful/8 1
-wishing 1
-wisp/18 1
-wispy/34 1
-wistaria/1 1
-wisteria/1 1
-wistful/16 1
-wist 1
-wit/577 1771
-witch/22 1
-witchcraft/2 1
-witchdoctor
-witchdoctors
-witchery/2 1
-witching 1
-with/241 1
-withal 1
-withdraw/301 1772
-withdrawal/1 1
-withdrawing 1
-withdrawn 1
-withdrew 1773
-withe/28 1
-wither/11 1
-withered 1
-withering/191 1
-withers's
-withheld 1774
-withhold/121 1775
-withholding/2 1
-within/2 1
-without 1
-withstand/121 1776
-withstood 1777
-witless/16 1
-witness/7 1
-witness's
-Witt/3
-witted 1
-witter/11 1
-Wittgenstein/2 1
-witticism/1 1
-witting/8 1
-Witwatersrand
-witty/50 1
-wive/6 1
-wives 1778
-wiz/2 1
-wizard/30 1
-wizardry/2 1
-wizened
-wk
-wkly
-Wm/3
-WNW/2 1
-woad/2 1
-wobble/28 1
-wobbler 1
-wobbliness/3
-wobbling 1
-wobbly/34 1
-Wobegon/3
-Wodehouse/3
-wodge/10 1
-woe/1 1
-woebegone
-woeful/85 1
-wog/10 1
-wok/1 1
-woken 1779
-woke 1779
-wold/1 1
-Wolf
-wolf/578 1
-Wolfe
-Wolff
-Wolfgang/3
-wolfhound/1 1
-wolfing 1
-wolfish/8 1
-wolfram/2 1
-Wollongong
-Wollstonecraft/3
-Wolsey
-Wolverhampton
-wolverine/1 1
-woman/2 1780
-womanhood/2 1
-womanish 1
-womanize/6 1
-womanizer/1 1
-womankind/2 1
-womanlike/2 1
-womanly/49 1
-woman 1
-womb/1 1
-wombat/1 1
-womble/10 1
-womenfolk/130 1
-women 1781
-won/2 1
-Wonder
-wonder/23 1
-Wonderbra/2 1
-wonderful/16 1
-wondering/8 1
-wonderland/1 1
-wonderment/2 1
-wondrous/8 1
-Wong/3
-wonk/1 1
-wonky/34 1
-won 1782
-won't
-wont/173 1
-wonted 1
-wonton/1 1
-won 1
-wont 1
-woo/11 1
-Wood
-wood/185 1
-Woodard/3
-woodbine/2 1
-woodblock/1 1
-woodcarver/1 1
-woodcarving/1 1
-woodchuck/1 1
-woodcock/1 1
-woodcraft/2 1
-woodcut/128 1
-woodcutter/1 1
-woodcutting/2 1
-wooden/21 1
-Woodhull/3
-woodland/1 1
-woodlice
-woodlot/1 1
-woodlouse 1
-woodman/2 1783
-woodmen 1784
-woodpecker/1 1
-woodpile/1 1
-Woodrow/3
-Woods
-woodshed/18 1
-woodsiness/3
-woodsman/2 1785
-woodsmen 1786
-woodsmoke
-Woodstock/3
-woodsy/34 1
-wood 1
-Woodward/3
-woodwind/1 1
-woodwork/2 1
-woodworker/1 1
-woodworking/2 1
-woodworm/10 1
-woody/286 1
-wooer/1 1
-woof/23 1
-woofer/1 1
-wooing 1
-wool/1 1
-woolen/1 1
-Woolf
-woolgathering/2 1
-woolie/41 1
-wooliness
-Woolite/3
-woollies
-Woolongong/3
-Woolworth
-wooly/34 1
-woolly/49 1
-woolly's
-wooly's
-Wooster/3
-Wooten/3
-woozy/50 1
-wop/579 1
-Worcester/1 1
-Worcestershire
-word/23 1
-wordage/2 1
-wordbook/1 1
-wording/1 1
-wordless/8 1
-wordplay/2 1
-wordsmith/10 1
-Wordsworth/2 1
-wordy/50 1
-wore 1787
-work/580 1788
-workability 1
-workable 1
-workaday
-workaholic/1 1
-workaround/10 1
-workbasket/10 1
-workbench/4 1
-workbook/1 1
-workday/1 1
-worker/1 1
-workfare/2 1
-workforce/1 1
-workhorse/1 1
-workhouse/1 1
-working/130 1
-workingman/2 1789
-workingmen 1790
-workingwoman/2 1791
-workingwomen 1792
-workload/1 1
-Workman/3
-workman/2 1793
-workmanlike
-workmanship/2 1
-workmate/10 1
-workmen 1794
-workout/1 1
-workpeople
-workpiece/10 1
-workplace/1 1
-workroom/1 1
-worksheet/1 1
-workshop/1 1
-workshy
-workspace 1
-workstation/1 1
-worktable/1 1
-worktop/10 1
-workup/1 1
-workweek/1 1
-world/581 1
-worldly/140 1
-worldview/1 1
-worldwide 1
-worm/23 1
-wormhole/1 1
-Worms
-wormwood/2 1
-wormy/34 1
-worn 1787
-worried/8 1
-worrier/1 1
-worriment/2 1
-worrisome
-worry/56 1
-worrying/191 1
-worrywart/1 1
-worse/2 1
-worsen/11 1
-worse 1795
-worship/23 1
-worshiper/1 1
-worshipful 1
-worst/23 1
-worsted/2 1
-worst 1795
-wort/2 1
-worth/2 1
-worthless/16 1
-worth 1
-worthwhile 1
-worthy/221 1
-wost 1796
-Wotan/2 1
-wotcha
-wot 1796
-would/58 1
-wouldn't
-wouldst 1797
-would 1797
-would've
-wound/78 1
-wounded 1
-wounder 1
-wounding 1
-wound 1798
-woven 1799
-wove 1799
-Wovoka/3
-wow/23 1
-Wozniak/3
-Wozzeck/3
-WP
-wpm 1
-wrack/23 1
-wraith/1 1
-Wrangell/3
-wrangle/28 1
-wrangler/1 1
-wrangling/10 1
-wrap/296 1
-wraparound/1 1
-wrapper/1 1
-wrapping/1 1
-wrasse/1 1
-wrath/2 1
-wrathful/8 1
-wrath 1
-wreak/11 1
-wreath/23 1
-wreathe/6 1
-wreck/23 1
-wreckage/2 1
-wrecker/1 1
-wrecking 1
-wren/1 1
-wrench/22 1
-wrenching 1
-Wren 1
-wrest/23 1
-wrestle/28 1
-wrestler/1 1
-wrestling/2 1
-wretch/4 1
-wretched/21 1
-wriggle/28 1
-wriggler/1 1
-wriggling 1
-wriggly/34 1
-Wright
-wright/1 1
-Wrigley/3
-wring/86 1800
-wringer/1 1
-wringing 1
-wrinkle/28 1
-wrinkled 1
-wrinklies
-wrinkly/34 1
-wrinkly's
-wrist/1 1
-wristband/1 1
-wristwatch/4 1
-writ/1 1
-writable
-write/90 1801
-writer/1 1
-writeup 1
-writhe/28 1
-writhing 1
-writing/1 1
-Wroclaw/2 1
-wrong/52 1
-wrongdoer/1 1
-wrongdoing/1 1
-wronger 1
-wrongful/16 1
-wrongheaded/16 1
-wrote 1802
-wroth 1
-wrought 1803
-wrung 1804
-wry/21 1
-WSW/2 1
-wt
-Wu/2 1
-Wuhan
-wunderkind/10 1
-Wurlitzer/3
-wurst/1 1
-wuss/4 1
-wussy/42 1
-WV
-WW
-WWI
-WWII
-WWW/2 1
-WY
-Wyatt
-Wycherley/3
-Wycliffe/3
-Wyeth
-Wylie/3
-Wynn/3
-Wyo
-Wyoming/2 1
-Wyomingite/1 1
-WYSIWYG
-X/4 1
-Xanadu 1
-Xanthippe 1
-Xavier
-xci
-xcii
-xciv
-xcix
-xcvi
-xcvii
-Xe/1 1
-XEmacs/3
-Xenakis/3
-Xenia/3
-xenon/2 1
-xenophobe/1 1
-xenophobia/2 1
-xenophobic
-Xenophon
-xerographic 1
-xerography/2 1
-Xerox/205 1
-xerox/4 1
-Xerox/4 1
-xerox/7 1
-Xerxes
-Xhosa/2 1
-xi/1 1
-Xi'an
-Xian/1 1
-Xiaoping/3
-xiii 1
-xii 1
-Ximenes
-Xingu/3
-Xiongnu/3
-xi 1
-xiv 1
-xix 1
-XL/2 1
-Xmas/4 1
-XML
-Xochipilli/3
-xor
-xref
-xreffed
-xreffing
-xrefs
-XS
-XSS
-xterm/2 1
-x 1
-Xuzhou/3
-xviii 1
-xvii 1
-xvi 1
-xv 1
-xxiii 1
-xxii 1
-xxi 1
-xxiv 1
-xxix 1
-XXL
-xx 1
-xxviii 1
-xxvii 1
-xxvi 1
-xxv 1
-xxxi
-xxxii
-xxxiii
-xxxiv
-xxxix
-xxx 1
-xxxv
-xxxvi
-xxxvii
-xxxviii
-xylem/2 1
-xylene 1
-xylophone/1 1
-xylophonist/1 1
-y/166 1
-Y/2 1
-Yacc/3
-yacht/23 1
-yachting/2 1
-yachtsman/2 1805
-yachtsmen 1806
-yachtswoman/2 1807
-yachtswomen 1808
-yack/23 1
-yahoo/1 1
-Yahoo/2 1
-Yahtzee/3
-Yahveh/2 1
-Yahweh/2 1
-yak/64 1
-Yakima 1
-Yakut/2 1
-Yakutsk
-Yale/2 1
-y'all
-Yalow/3
-Yalta/2 1
-Yalu/2 1
-yam/1 1
-Yamagata/3
-Yamaha/3
-yammer/23 1
-yammerer/1 1
-yammering 1
-Yamoussoukro
-Yang
-yang/2 1
-Yangon/2 1
-Yangtze/2 1
-yank/1 1
-Yank/1 1
-yank/11 1
-Yankee/1 1
-Yaobang/3
-Yaounde/2 1
-yap/47 1
-Yaqui 1
-yard/18 1
-yardage/1 1
-yardarm/1 1
-yardman/2 1809
-yardmaster/1 1
-yardmen 1810
-yardstick/1 1
-Yaren
-yarmelke/1 1
-yarmulke/1 1
-yarn/18 1
-Yaroslavl
-yarrow/2 1
-yashmak/10 1
-ya 1811
-Yataro/3
-Yates
-yaw/185 1
-yawl/18 1
-yawn/23 1
-yawner/1 1
-yawningly
-yawning 1
-Yb/2 1
-yd
-ye/582 1
-yea/1 1
-Yeager/3
-yeah/1 1
-year/1 1
-yearbook/1 1
-yearlies
-yearling/1 1
-yearlong 1
-yearly's
-yearly 1
-yearn/11 1
-yearning/30 1
-yeast/18 1
-yeasty/34 1
-Yeats/2 1
-yea 1
-yegg/1 1
-Yekaterinburg
-yell/23 1
-yelling 1
-yellow/165 1
-yellowhammer/10 1
-yellowish
-Yellowknife
-Yellowstone/2 1
-yellowy 1
-yelp/23 1
-yelping 1
-Yeltsin
-Yemen/2 1
-Yemeni/1 1
-Yemenite 1
-yen/18 1
-Yenisei/2 1
-yeoman/2 1812
-yeomanry/2 1
-yeoman 1
-yeomen 1813
-yep/1 1
-Yerevan
-Yerkes/3
-yes/541 1
-Yesenia/3
-yeshiva/1 1
-yeshivah/2 1
-yesterday/1 1
-yesteryear/2 1
-yeti/1 1
-yet 1
-Yevtushenko/3
-yew/1 1
-Yggdrasil
-yid/10 1
-Yiddish/2 1
-yield/23 1
-yielding/10 1
-yikes
-yin/2 1
-yip/47 1
-yipe 1
-yippee 1
-YMCA
-YMHA
-Ymir/2 1
-YMMV
-yo
-yob/10 1
-yobbo/10 1
-Yoda/3
-yodel/23 1
-yodeler/1 1
-yodeling 1
-yoga/2 1
-yoghourt/1 1
-yoghurt/1 1
-yogi/1 1
-yogic 1
-yogin/1 1
-yogurt/1 1
-yoke/28 1
-yokel/1 1
-yoking 1
-Yoknapatawpha/3
-Yoko/3
-Yokohama
-Yolanda/3
-yolk/1 1
-yolked 1
-yonder 1
-Yong/3
-Yonkers
-yonks
-yon 1814
-yore/2 1
-York/2 1
-yorker/10 1
-Yorkie 1
-Yorkshire/1 1
-Yorktown/2 1
-york 1
-Yoruba/2 1
-Yosemite/2 1
-Yossarian/3
-you/1 1
-you'd
-you'll
-Young
-young/583 1
-younger 1
-youngish 1
-youngster/1 1
-Youngstown
-your/10 1
-you're
-yourself/338 1
-your 1
-youth/1 1
-youthful/16 1
-YouTube/3
-you've
-yowl/23 1
-yowling 1
-yow 1
-Ypres/2 1
-Ypsilanti
-yr/10 1
-YT
-ytterbium/2 1
-yttrium/2 1
-Yuan/3
-yuan/2 1
-Yucatan/2 1
-yucca/1 1
-yuck/23 1
-yucky/34 1
-Yugo
-Yugoslav/1 1
-Yugoslavia/2 1
-Yugoslavian/1 1
-yuk/64 1
-yukky 1
-Yukon/2 1
-Yule/1 1
-yule/2 1
-Yuletide/1 1
-yuletide/2 1
-Yuma/1 1
-yummy/34 1
-yum 1814
-Yunnan/2 1
-yup/1 1
-yuppie/1 1
-yuppify/31 1
-yuppy/15 1
-yup 1
-Yuri/3
-yurt/1 1
-Yves/3
-Yvette/3
-Yvonne/3
-YWCA
-YWHA
-z
-Z/2 1
-Zachariah/3
-Zachary/3
-Zachery/3
-Zagreb/2 1
-Zaire/2 1
-Zairian 1
-Zambezi/2 1
-Zambia/2 1
-Zambian/1 1
-Zamboni 1
-Zamenhof/3
-Zamora
-Zane/3
-Zanuck/3
-Zanzibar/2 1
-zany/584 1
-zap/47 1
-Zapata
-Zaporozhye
-Zapotec 1
-Zappa/3
-zapper/1 1
-zappy 1
-Zara/3
-Zarathustra/2 1
-zeal/2 1
-zealot/1 1
-zealotry/2 1
-zealous/16 1
-Zebedee
-zebra/1 1
-zebras 1
-zebu/1 1
-Zechariah
-zed/1 1
-Zedekiah/3
-Zedong/3
-Zeffirelli/3
-zeitgeist/1 1
-Zeke/3
-Zelig
-Zelma/3
-Zen/1 1
-zen/192 1
-Zenger/3
-zenith/1 1
-Zeno/2 1
-zeolites
-Zephaniah
-zephyr/1 1
-Zephyrus
-zeppelin/1 1
-Zeppelin 1
-zero/272 1
-zeroth
-zero 1
-Zest/3
-zest/18 1
-zestful/16 1
-zesty/34 1
-zeta/1 1
-zeugma 1
-Zeus/2 1
-Zhdanov
-Zhengzhou
-Zhivago/3
-Zhukov
-Zibo/3
-Ziegfeld
-Ziegler/3
-zigamorph/10 1
-zigzag/92 1
-Ziggy/3
-zilch/2 1
-zillion/1 1
-Zimbabwe/2 1
-Zimbabwean/1 1
-Zimmerman/3
-zinc/64 1
-zine/10 1
-zinfandel/2 1
-Zinfandel/2 1
-zing/23 1
-zinger/1 1
-zingy/34 1
-zinnia/1 1
-Zion/1 1
-Zionism/1 1
-Zionist/1 1
-zip/47 1
-Ziploc 1
-zipper/23 1
-zippy/34 1
-zircon/1 1
-zirconium/2 1
-zit/1 1
-zither/1 1
-zloty/15 1
-Zn/2 1
-zodiac/1 1
-zodiacal
-Zoe/3
-Zola/2 1
-Zollverein
-Zoloft
-Zomba/2 1
-zombi/1 1
-zombie/1 1
-zonal/8 1
-zone/28 1
-zoning/2 1
-zonked
-zoo/1 1
-zookeeper/1 1
-zoological/8 1
-zoologist/1 1
-zoology/2 1
-zoom/23 1
-zoophyte/1 1
-zoophytic 1
-zorch/7 1
-Zorn
-Zoroaster/2 1
-Zoroastrian/1 1
-Zoroastrianism/1 1
-Zorro/3
-Zosma/3
-zounds 1
-Zr/2 1
-Zubenelgenubi/3
-Zubeneschamali/3
-zucchini/1 1
-zugzwang 1
-Zukor/3
-Zulu/1 1
-Zululand
-Zuni 1
-Zurich/2 1
-zwieback/2 1
-Zwingli/3
-Zworykin
-zydeco/2 1
-zygote/1 1
-zygotic 1
-zymurgy/2 1
-Zyrtec/3
-Zyuganov/3
-Zzz
-Zs
-Zsigmondy
-0/585
-0th/586
-1/587
-1st/588
-1th/589
-2/585
-2nd/588
-2th/589
-3/585
-3rd/588
-3th/589
-4/585
-4th/586
-5/585
-5th/586
-6/585
-6th/586
-7/585
-7th/586
-8/585
-8th/586
-9/585
-9th/586
-10s/586
-20s/586
-30s/586
-40s/586
-50s/586
-60s/586
-70s/586
-80s/586
-90s/586
-100s/586
-200s/586
-300s/586
-400s/586
-500s/586
-600s/586
-700s/586
-800s/586
-900s/586
-1000s/586
-2000s/586
-'10s
-'20s
-'30s
-'40s
-'50s
-'60s
-'70s
-'80s
-'90s
-10's/586
-20's/586
-30's/586
-40's/586
-50's/586
-60's/586
-70's/586
-80's/586
-90's/586
-100's/586
-200's/586
-300's/586
-400's/586
-500's/586
-600's/586
-700's/586
-800's/586
-900's/586
-1000's/586
-2000's/586
-'10's
-'20's
-'30's
-'40's
-'50's
-'60's
-'70's
-'80's
-'90's
diff --git a/vendor/plugins/.gitignore b/vendor/plugins/.gitignore
deleted file mode 100644
index e69de29..0000000
--- a/vendor/plugins/.gitignore
+++ /dev/null
diff --git a/vendor/plugins/.gitkeep b/vendor/plugins/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/vendor/plugins/.gitkeep
+++ /dev/null
diff --git a/web/packs/account.js b/web/packs/account.js
new file mode 100644
index 0000000..a9825fb
--- /dev/null
+++ b/web/packs/account.js
@@ -0,0 +1,81 @@
+
+// Base64 to ArrayBuffer
+function bufferDecode(value) {
+ return Uint8Array.from(atob(value), c => c.charCodeAt(0));
+}
+
+// ArrayBuffer to URLBase64
+function bufferEncode(value) {
+ return btoa(String.fromCharCode.apply(null, new Uint8Array(value)))
+ .replace(/\+/g, "-")
+ .replace(/\//g, "_")
+ .replace(/=/g, "");;
+}
+
+function registerUser() {
+
+ authname = $("#webauthn-name").val();
+ authname = authname.substring(0, 20);
+ authname = escape(authname);
+
+ $.get(
+ '/account/2fa/webauthn/register/begin',
+ null,
+ function (data) {
+ return data
+ },
+ 'json')
+ .then((credentialCreationOptions) => {
+ console.log(credentialCreationOptions)
+ credentialCreationOptions.publicKey.challenge = bufferDecode(credentialCreationOptions.publicKey.challenge);
+ credentialCreationOptions.publicKey.user.id = bufferDecode(credentialCreationOptions.publicKey.user.id);
+ if (credentialCreationOptions.publicKey.excludeCredentials) {
+ for (var i = 0; i < credentialCreationOptions.publicKey.excludeCredentials.length; i++) {
+ credentialCreationOptions.publicKey.excludeCredentials[i].id = bufferDecode(credentialCreationOptions.publicKey.excludeCredentials[i].id);
+ }
+ }
+
+ return navigator.credentials.create({
+ publicKey: credentialCreationOptions.publicKey
+ })
+ })
+ .then((credential) => {
+ console.log(credential)
+ let attestationObject = credential.response.attestationObject;
+ let clientDataJSON = credential.response.clientDataJSON;
+ let rawId = credential.rawId;
+
+ $.post(
+ '/account/2fa/webauthn/register/finish?name=' + authname,
+ JSON.stringify({
+ id: credential.id,
+ rawId: bufferEncode(rawId),
+ type: credential.type,
+ response: {
+ attestationObject: bufferEncode(attestationObject),
+ clientDataJSON: bufferEncode(clientDataJSON),
+ },
+ }),
+ function (data) {
+ return data
+ },
+ 'json')
+ })
+ .then((success) => {
+ // successfully registered
+ return
+ })
+ .catch((error) => {
+ // failed to register
+ console.log(error)
+ })
+}
+
+
+$( "#register-webauthn" ).click(function() {
+ if($("#webauthn-name").val().length == 0){
+ alert("Please provide a non-empty Authenticator Name");
+ }else{
+ registerUser();
+ }
+});
diff --git a/web/packs/admin.js b/web/packs/admin.js
new file mode 100644
index 0000000..f536b42
--- /dev/null
+++ b/web/packs/admin.js
@@ -0,0 +1,60 @@
+
+$( "#addUser" ).click(function() {
+
+ if($("#newNick").val() == "" || $("#newName").val() == "" || $("#newEmail").val() == ""){
+ if($("#newNick").val() == ""){
+ $("#newNick").addClass("is-invalid");
+ }
+ if($("#newName").val() == ""){
+ $("#newName").addClass("is-invalid");
+ }
+ if($("#newEmail").val() == ""){
+ $("#newEmail").addClass("is-invalid");
+ }
+ return;
+ }
+
+ var newNick = $("#newNick").val();
+ var newName = $("#newName").val();
+ var newEmail = $("#newEmail").val();
+
+ var newUser = '<tr>\n' +
+ ' <td>\n' +
+ ' <span class="my-1 badge badge-secondary float-left mr-2" style="background: none;border: 1px solid grey;">\n' +
+ ' <i class="fa fa-user mr-1" aria-hidden="true" style="font-size: 0.8rem;color: grey;"></i>\n' +
+ ' <span class="text-uppercase" style="color:grey;">User</span>\n' +
+ ' </span>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <input name="userId" type="text" value="-1" hidden/>\n' +
+ ' <input name="userNick" class="form-control form-control-sm" value="' + newNick + '" style="max-width: 150px;"/>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <input name="userName" class="form-control form-control-sm" value="' + newName + '" style="max-width: 150px;"/>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <input name="userEmail" class="form-control form-control-sm" value="' + newEmail + '" style="max-width: 150px;"/>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <i class="my-2 fa fa-times" style="color: darkred;" aria-hidden="true"></i>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <i class="my-2 fa fa-times" style="color: darkred;" aria-hidden="true"></i>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <i class="my-2 ml-2 fa fa-check" style="color: green;" aria-hidden="true"></i>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <input name="userForce2FA" class="m-2" type="checkbox" value="-1" />\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <input name="userActive" class="m-2" type="checkbox" value="-1" checked/>\n' +
+ ' </td>\n' +
+ ' <td>\n' +
+ ' <button type="button" class="float-right my-1 py-0 btn btn-outline-secondary btn-sm">Actions</button>\n' +
+ ' </td>\n' +
+ ' </tr>'
+
+ $("#userList").append(newUser);
+ $("#addUserForm").hide();
+});
diff --git a/web/packs/application.js b/web/packs/application.js
new file mode 100644
index 0000000..95200ea
--- /dev/null
+++ b/web/packs/application.js
@@ -0,0 +1,69 @@
+import "core-js/stable";
+import "regenerator-runtime/runtime";
+require("turbolinks").start();
+import 'bootstrap';
+
+
+window.dataTables = [];
+window.RequestsDataTables = [];
+window.DraftsDataTables = [];
+window.ArchivesDataTables = [];
+window.AllDataTables = [];
+
+require( 'datatables.net' )( window, $ );
+require( 'datatables.net-bs4' )( window, $ );
+require( 'datatables.net-buttons' )( window, $ );
+require( 'datatables.net-buttons-bs4/js/buttons.bootstrap4.min' )( window, $ );
+require('datatables.net-buttons/js/buttons.colVis.js')( window, $ );
+
+import requests from './src/javascript/requests';
+import all from './src/javascript/all';
+import drafts from './src/javascript/drafts';
+import archive from './src/javascript/archive';
+import cvetool from './src/javascript/cvetool';
+
+document.addEventListener("turbolinks:load", () => {
+ requests.initDatatable();
+ drafts.initDatatable();
+ archive.initDatatable();
+ cvetool.initDatatable();
+ all.initDatatable();
+});
+
+document.addEventListener("turbolinks:before-cache", () => {
+ requests.destroyDatatable();
+ drafts.destroyDatatable();
+ archive.destroyDatatable();
+ cvetool.destroyDatatable();
+ all.destroyDatatable();
+});
+
+
+// double shift press
+
+var delta = 500;
+var lastKeypressTime = 0;
+function KeyHandler(event) {
+ if ( event.ctrlKey ){
+ var thisKeypressTime = new Date();
+ if ( thisKeypressTime - lastKeypressTime <= delta ) {
+ doDoubleKeypress();
+ thisKeypressTime = 0;
+ }
+ lastKeypressTime = thisKeypressTime;
+ }
+}
+
+function doDoubleKeypress() {
+ if($('#large-quicksearch').length){
+ $('#large-quicksearch').val('');
+ $('#large-quicksearch').focus();
+ }else if($('#quicksearch').length){
+ $('#quicksearch').val('');
+ $('#quicksearch').focus();
+ }
+}
+
+// keyboard navigation is disabled for now
+//document.addEventListener('keydown', KeyHandler);
+
diff --git a/web/packs/edit.js b/web/packs/edit.js
new file mode 100644
index 0000000..7c47dd7
--- /dev/null
+++ b/web/packs/edit.js
@@ -0,0 +1,235 @@
+function registerDeleteReferenceButtons(){
+ $('.btn-delete-reference').on('click', function(event){
+ $(this).parent().parent().parent().remove();
+ });
+}
+
+function registerDeleteBugButtons(){
+ $('.btn-delete-bug').on('click', function(event){
+ $(this).parent().parent().parent().remove();
+ });
+}
+
+function registerDeletePackageButtons(){
+ $('.btn-delete-package').on('click', function(event){
+ $(this).parent().parent().parent().parent().remove();
+ });
+}
+
+registerDeleteBugButtons();
+registerDeleteReferenceButtons();
+registerDeletePackageButtons();
+
+$('.btn-add-bug').on('click', function(event){
+
+ var newBugId = $("#new_bug_id").val();
+
+ if(newBugId == "") {
+ return;
+ }
+
+ var newBug = '<div class="col-sm-12 mt-2">' +
+ '<div class="row" style="margin-bottom:2px;">' +
+ '<div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">' +
+ '<small style="font-size: 12px;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="bugs" class="form-control" type="text" value="' + newBugId + '" style="max-width: 75px;height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</small>' +
+ '</div>' +
+ '<div class="col py-1" style="color:#292929;padding-left:10px;">' +
+ '<small style="font-size: 12px;">TODO...</small>' +
+ '</div>' +
+ '<small style="font-size: 12px;margin-top: 2px;">' +
+ '<button type="button" class="btn btn-outline-danger mr-3 py-0 btn-delete-bug" type="text" style="height: 25px;display: inline-block">Delete</button>' +
+ '</small>' +
+ '</div>' +
+ '</div>';
+
+ $("#bugs-list").append(newBug);
+
+ registerDeleteBugButtons();
+});
+
+
+$('.btn-add-reference').on('click', function(event){
+
+ var newReferenceTitle = $("#new_reference_title").val();
+ var newReferenceURL = $("#new_reference_url").val();
+
+ if(newReferenceTitle == "" || newReferenceURL == "") {
+ return;
+ }
+
+ var newReference = '<div class="col-sm-12 mt-2">' +
+ '<div class="row" style="margin-bottom:2px;">' +
+ '<div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">' +
+ '<small style="font-size: 12px;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="reference_title" class="form-control" type="text" value="' + newReferenceTitle + '" style="max-width: 125px;height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</small>' +
+ '</div>' +
+ '<div class="col" style="color:#292929;padding-left:10px;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="reference_url" class="form-control" type="text" value="' + newReferenceURL + '" style="height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<small style="font-size: 12px;margin-top: 2px;">' +
+ '<button type="button" class="btn btn-outline-danger btn-delete-reference mr-3 py-0" type="text" style="height: 25px;display: inline-block">Delete</button>' +
+ '</small>' +
+ '</div>' +
+ '</div>';
+
+ $("#reference_list").append(newReference);
+
+ registerDeleteReferenceButtons();
+});
+
+
+$('.btn-add-vulnerable-package').on('click', function(event){
+
+ var addVulnerablePackageId = $("#add-vulnerable-package-atom").val();
+ var addVulnerablePackageIdentifier = $("#add-vulnerable-package-identifier").val();
+ var addVulnerablePackageVersion = $("#add-vulnerable-package-version").val();
+ var addVulnerablePackageSlot = $("#add-vulnerable-package-slot").val();
+ var addVulnerablePackageArch = $("#add-vulnerable-package-arch").val();
+ var addVulnerablePackageAuto = $("#add-vulnerable-package-auto").val();
+
+ if(addVulnerablePackageId == "" || addVulnerablePackageIdentifier == "" || addVulnerablePackageVersion == "" || addVulnerablePackageSlot == "" || addVulnerablePackageArch == "" || addVulnerablePackageAuto == "") {
+ return;
+ }
+
+ var newPackage = '<div class="col-12 mt-2">' +
+ '<div class="row">' +
+ '<div class="col-md-auto" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_vulnerable" value="true" hidden />' +
+ '<input name="package_atom" class="form-control" type="text" value="' + addVulnerablePackageId + '" style="width:150px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<select name="package_identifier" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">' +
+ '<option value=">=" ' + (addVulnerablePackageIdentifier == ">=" ? 'selected' : '') + '>&gt;=</option>' +
+ '<option value=">" ' + (addVulnerablePackageIdentifier == ">" ? 'selected' : '') + '>&gt; </option>' +
+ '<option value="*>=" ' + (addVulnerablePackageIdentifier == "*>=" ? 'selected' : '') + '>*&gt;=&nbsp;&nbsp;&nbsp; </option>' +
+ '<option value="*>" ' + (addVulnerablePackageIdentifier == "*>" ? 'selected' : '') + '>*&gt; </option>' +
+ '<option value="<=" ' + (addVulnerablePackageIdentifier == "<=" ? 'selected' : '') + '>&lt;= </option>' +
+ '<option value="<" ' + (addVulnerablePackageIdentifier == "<" ? 'selected' : '') + '>&lt; </option>' +
+ '<option value="*<=" ' + (addVulnerablePackageIdentifier == "*<=" ? 'selected' : '') + '>*&lt;= </option>' +
+ '<option value="*<" ' + (addVulnerablePackageIdentifier == "*<" ? 'selected' : '') + '>*&lt; </option>' +
+ '<option value="=" ' + (addVulnerablePackageIdentifier == "=" ? 'selected' : '') + '>= </option>' +
+ '</select>' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_version" class="form-control" type="text" value="' + addVulnerablePackageVersion + '" style="width: 80px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_slot" class="form-control" type="text" value="' + addVulnerablePackageSlot + '" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_arch" class="form-control" type="text" value="' + addVulnerablePackageArch + '" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<select name="package_auto" class="custom-select" id="inputGroupSelect01" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">' +
+ '<option value="yes" ' + (addVulnerablePackageAuto == "true" ? 'selected' : '') + '>yes&nbsp;&nbsp;&nbsp; </option>' +
+ '<option value="no" ' + (addVulnerablePackageAuto == "false" ? 'selected' : '') + '>no</option>' +
+ '</select>' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<button type="button" class="btn btn-outline-danger btn-delete-package" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block">-</button>' +
+ '</small>' +
+ '</div>' +
+ '</div>' +
+ '</div>';
+
+ $("#vulnerable_package_list").append(newPackage);
+
+ registerDeletePackageButtons();
+});
+
+
+
+$('.btn-add-unaffected-package').on('click', function(event){
+
+ var addVulnerablePackageId = $("#add-unaffected-package-atom").val();
+ var addVulnerablePackageIdentifier = $("#add-unaffected-package-identifier").val();
+ var addVulnerablePackageVersion = $("#add-unaffected-package-version").val();
+ var addVulnerablePackageSlot = $("#add-unaffected-package-slot").val();
+ var addVulnerablePackageArch = $("#add-unaffected-package-arch").val();
+ var addVulnerablePackageAuto = $("#add-unaffected-package-auto").val();
+
+ if(addVulnerablePackageId == "" || addVulnerablePackageIdentifier == "" || addVulnerablePackageVersion == "" || addVulnerablePackageSlot == "" || addVulnerablePackageArch == "" || addVulnerablePackageAuto == "") {
+ return;
+ }
+
+ var newPackage = '<div class="col-12 mt-2">' +
+ '<div class="row">' +
+ '<div class="col-md-auto" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_vulnerable" value="false" hidden />' +
+ '<input name="package_atom" class="form-control" type="text" value="' + addVulnerablePackageId + '" style="width:150px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<select name="package_identifier" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">' +
+ '<option value=">=" ' + (addVulnerablePackageIdentifier == ">=" ? 'selected' : '') + '>&gt;=</option>' +
+ '<option value=">" ' + (addVulnerablePackageIdentifier == ">" ? 'selected' : '') + '>&gt; </option>' +
+ '<option value="*>=" ' + (addVulnerablePackageIdentifier == "*>=" ? 'selected' : '') + '>*&gt;=&nbsp;&nbsp;&nbsp; </option>' +
+ '<option value="*>" ' + (addVulnerablePackageIdentifier == "*>" ? 'selected' : '') + '>*&gt; </option>' +
+ '<option value="<=" ' + (addVulnerablePackageIdentifier == "<=" ? 'selected' : '') + '>&lt;= </option>' +
+ '<option value="<" ' + (addVulnerablePackageIdentifier == "<" ? 'selected' : '') + '>&lt; </option>' +
+ '<option value="*<=" ' + (addVulnerablePackageIdentifier == "*<=" ? 'selected' : '') + '>*&lt;= </option>' +
+ '<option value="*<" ' + (addVulnerablePackageIdentifier == "*<" ? 'selected' : '') + '>*&lt; </option>' +
+ '<option value="=" ' + (addVulnerablePackageIdentifier == "=" ? 'selected' : '') + '>= </option>' +
+ '</select>' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_version" class="form-control" type="text" value="' + addVulnerablePackageVersion + '" style="width: 80px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_slot" class="form-control" type="text" value="' + addVulnerablePackageSlot + '" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<input name="package_arch" class="form-control" type="text" value="' + addVulnerablePackageArch + '" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<select name="package_auto" class="custom-select" id="inputGroupSelect01" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">' +
+ '<option value="yes" ' + (addVulnerablePackageAuto == "true" ? 'selected' : '') + '>yes&nbsp;&nbsp;&nbsp; </option>' +
+ '<option value="no" ' + (addVulnerablePackageAuto == "false" ? 'selected' : '') + '>no</option>' +
+ '</select>' +
+ '</small>' +
+ '</div>' +
+ '<div class="col-md-auto pl-0" style="color:#292929;">' +
+ '<small style="font-size: 12px;">' +
+ '<button type="button" class="btn btn-outline-danger btn-delete-package" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block">-</button>' +
+ '</small>' +
+ '</div>' +
+ '</div>' +
+ '</div>';
+
+ $("#unaffected_package_list").append(newPackage);
+
+ registerDeletePackageButtons();
+});
+
diff --git a/web/packs/glsa.js b/web/packs/glsa.js
new file mode 100644
index 0000000..0490db0
--- /dev/null
+++ b/web/packs/glsa.js
@@ -0,0 +1,114 @@
+
+$( "#save-new-glsa-comment" ).click(function() {
+ var glsaid = $("#glsa-id").html();
+ var comment = $('#comment').val();
+ $('#comment').val(" ");
+ $('#comment').focusout();
+
+ commentGLSA(glsaid, comment, "comment");
+
+});
+
+$( "#save-new-glsa-approve" ).click(function() {
+ var glsaid = $("#glsa-id").html();
+ var comment = $('#comment').val();
+ $('#comment').val(" ");
+ $('#comment').focusout();
+
+ commentGLSA(glsaid, comment, "approve");
+
+});
+
+$( "#save-new-glsa-decline" ).click(function() {
+ var glsaid = $("#glsa-id").html();
+ var comment = $('#comment').val();
+ $('#comment').val(" ");
+ $('#comment').focusout();
+
+ commentGLSA(glsaid, comment, "decline");
+
+});
+
+function commentGLSA(glsaid, comment, commentType){
+
+ $.post(
+ '/glsa/comment/add',
+ {
+ glsaid: glsaid,
+ comment: comment,
+ commentType: commentType,
+ },
+ function(data) {
+
+ if(data != "err") {
+
+
+
+ console.log("hi");
+ console.log(data);
+ var comment = JSON.parse(data);
+ var commentDate = comment.Date.split("T")[0] + ' ' + comment.Date.split("T")[1].split(".")[0] + ' UTC';
+ var background = "";
+ var hint = "";
+ if(comment.Type == "approve"){
+ background = "background:#DFF0D8;";
+ hint = '<b class="mr-2">Approved: </b>';
+ } else if(comment.Type == "decline"){
+ background = "background:#F2DEDE;";
+ hint = '<b class="mr-2">Declined: </b>';
+ }
+
+ var newComment = '<div class="col-12 mt-3">' +
+ '<div id="c0" class="card" style="padding:0px;' + background +'">' +
+ '<div class="card-header" style="' + background + '">' +
+ '<div class="row">' +
+ '<div class="col-sm-8">' +
+ '<div class="row">' +
+ '<div class="col-sm-12">' +
+ '<span style="color:#000!important;">' +
+ '<span class="vcard"><a class="email" href="mailto:' + comment.User + '"> <b class="text-dark">' + comment.User + '</b></a></span>' +
+ '</span>' +
+ '<span class="ml-2">' +
+ '<span class="badge badge-secondary" title="' + comment.UserBadge.Description + '" style="background: none;border: 1px solid ' + comment.UserBadge.Color + ';">' +
+ '<span class="text-capitalize" style="color: ' + comment.UserBadge.Color + ';">' + comment.UserBadge.Name + '</span>' +
+ '</span>' +
+ '</span>' +
+ '</div>' +
+ '<div class="col-sm-12">' +
+ '<span style="color:#505050; font-weight: normal;margin-left:2px;">' +
+ commentDate +
+ '</span>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="col-sm-4">' +
+ '<div>' +
+ '<a href="#" class="btn btn-default btn-xs float-right" style="background:transparent;color:#505050;border:none;"><i class="fa fa-compress" aria-hidden="true"></i></a>' +
+ '<a class="btn btn-default btn-xs float-right" href="#add_comment" style="background:transparent;color:#505050;border:none;"><i class="fa fa-reply" aria-hidden="true"></i></a>' +
+ '<a href="#" class="btn btn-default btn-xs float-right" style="background:transparent;color:#505050;border:none;"><i class="fa fa-tag" aria-hidden="true"></i></a>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '</div>' +
+ '<div class="card-body">' +
+ hint +
+ comment.Message +
+ '</div>' +
+ '</div>' +
+ '</div>';
+
+ $('#comments-section').append(newComment);
+
+ }
+ return
+ });
+}
+
+
+$('#btn-delete-glsa').on('click', function(event){
+ var glsaid = $("#glsa-id").html();
+ $.get( "/glsa/delete/" + glsaid, function( data ) {
+ document.location.href = "/";
+ });
+});
+
diff --git a/web/packs/newglsa.js b/web/packs/newglsa.js
new file mode 100644
index 0000000..8b15ef8
--- /dev/null
+++ b/web/packs/newglsa.js
@@ -0,0 +1,58 @@
+
+var BUGZILLA_URL = 'https://bugs.gentoo.org';
+
+$( "#bugs" ).on('textInput input', refreshBugs);
+
+function refreshBugs(){
+ $("#bug-refresh-ok").hide();
+ $("#bug-refresh-failed").hide();
+ $("#bug-spinner").show();
+
+ var bugIds = $("#bugs").val();
+
+ console.log(BUGZILLA_URL + "/rest/bug?id=" + bugIds);
+
+ // validate data
+ var valid = true;
+ bugIds.split(",").forEach(function(bugID) {
+ if( bugIds == "" || isNaN(bugID) || !(bugID.length == 0 || bugID.length == 6 || bugID.length == 7) ){
+ $( "#bug-spinner" ).hide();
+ $( "#bug-refresh-failed" ).show();
+ valid = false;
+ }
+ });
+
+ if(valid){
+ $.getJSON( BUGZILLA_URL + "/rest/bug?id=" + bugIds, function( data ) {
+
+ if(data.bugs.length != bugIds.split(",").length){
+ $( "#bug-spinner" ).hide();
+ $( "#bug-refresh-failed" ).show();
+ return
+ }
+
+ bugReady = true;
+ title = "";
+ data.bugs.forEach(function(bug) {
+ title = title == "" ? bug.summary : title;
+ bugReady = bugReady && bug.whiteboard.includes("[glsa");
+ });
+
+ if(bugReady){
+ $(".badge-notbugready").hide();
+ $(".badge-bugready").show();
+ } else {
+ $(".badge-bugready").hide();
+ $(".badge-notbugready").show();
+ }
+
+ if($("#title").val() == ""){
+ $("#title").val(title);
+ }
+
+ $("#bug-spinner").hide();
+ $("#bug-refresh-ok").show();
+
+ });
+ }
+}
diff --git a/web/packs/src/javascript/all.js b/web/packs/src/javascript/all.js
new file mode 100644
index 0000000..715e472
--- /dev/null
+++ b/web/packs/src/javascript/all.js
@@ -0,0 +1,37 @@
+
+function initDatatable(){
+ if (window.AllDataTables.length === 0 && $('.all-data-table').length !== 0) {
+ $('.all-data-table').each((_, element) => {
+
+ var table = $(element).DataTable( {
+ "order": [[ 0, "desc" ]],
+ "paging": true,
+ "ordering": true,
+ "searching": true,
+ "info": true,
+ "lengthChange": false,
+ "language": {
+ "emptyTable": "Currently there are no glsas available. -- Start with filling one."
+ }
+ });
+
+ window.AllDataTables.push(table);
+
+ // Add event listener for opening and closing details
+ $('#table_id tbody').on('click', 'td', function () {
+ var tr = $(this).closest('tr');
+ var row = table.row( tr );
+ Turbolinks.visit("/glsa/" + row.data()[0]);
+ } );
+
+ });
+ }
+}
+
+function destroyDatatable() {
+ while (window.AllDataTables.length !== 0) {
+ window.AllDataTables.pop().destroy();
+ }
+}
+
+export default {initDatatable, destroyDatatable}
diff --git a/web/packs/src/javascript/archive.js b/web/packs/src/javascript/archive.js
new file mode 100644
index 0000000..088aa6b
--- /dev/null
+++ b/web/packs/src/javascript/archive.js
@@ -0,0 +1,42 @@
+
+function initDatatable(){
+ if (window.ArchivesDataTables.length === 0 && $('.archives-data-table').length !== 0) {
+ $('.archives-data-table').each((_, element) => {
+
+ var table = $(element).DataTable( {
+ "order": [[ 0, "desc" ]],
+ "paging": true,
+ "ordering": true,
+ "searching": true,
+ "info": true,
+ "lengthChange": false,
+ "language": {
+ "emptyTable": "Currently there are no GLSAs available. -- Start with releasing one."
+ },
+ "columnDefs": [
+ {
+ "targets": 'hide',
+ "visible": false
+ }],
+ });
+
+ window.ArchivesDataTables.push(table);
+
+ // Add event listener for opening and closing details
+ $('#table_id tbody').on('click', 'td', function () {
+ var tr = $(this).closest('tr');
+ var row = table.row( tr );
+ Turbolinks.visit("/glsa/" + row.data()[0]);
+ } );
+
+ });
+ }
+}
+
+function destroyDatatable(){
+ while (window.ArchivesDataTables.length !== 0) {
+ window.ArchivesDataTables.pop().destroy();
+ }
+}
+
+export default {initDatatable, destroyDatatable}
diff --git a/web/packs/src/javascript/cvetool.js b/web/packs/src/javascript/cvetool.js
new file mode 100644
index 0000000..6158714
--- /dev/null
+++ b/web/packs/src/javascript/cvetool.js
@@ -0,0 +1,535 @@
+
+var BUGZILLA_URL = 'https://bugs.gentoo.org';
+
+
+function destroyDatatable(){
+ while (window.dataTables.length !== 0) {
+ window.dataTables.pop().destroy();
+ }
+}
+
+
+function initDatatable(){
+ if (window.dataTables.length === 0 && $('.data-table').length !== 0) {
+ $('.data-table').each((_, element) => {
+
+ var table = $(element).DataTable( {
+ "processing": true,
+ "serverSide": true,
+ "ajax": "/cve/data",
+ "order": [[ 0, "desc" ]],
+ "columnDefs": [
+ {
+ "render": function ( data, type, row ) {
+ return '<b>' + data + '</b>'
+ },
+ "targets" : 'render-bold',
+ },
+ {
+ "render": function ( data, type, row ) {
+ var bugs = ' <i>no assigned bugs</i>';
+ if(data!='' && JSON.parse(data) != null){
+ bugs = "";
+ JSON.parse(data).forEach(function(bug) {
+ bugs = bugs + bug.id + ",";
+ });
+ }
+ return bugs;
+ },
+ "targets" : 'render-bug',
+ },
+ {
+ "targets" : 'no-sort',
+ "orderable": false,
+ },
+ {
+ "render": function ( data, type, row ) {
+ return renderState(data, row[0])
+ },
+ "targets" : 'render-state',
+ },
+ {
+ "render": function ( data, type, row ) {
+ if(data == "0.0"){
+ return '<span class="badge badge-secondary">None</span>'
+ }else if(parseFloat(data) < 4.0) {
+ return '<span class="badge badge-success">' + data + '</span>'
+ }else if(parseFloat(data) < 7.0) {
+ return '<span class="badge badge-warning">' + data + '</span>'
+ }else if(parseFloat(data) < 9.0) {
+ return '<span class="badge badge-danger">' + data + '</span>'
+ }else if(parseFloat(data) < 10.0) {
+ return '<span class="badge badge-danger">' + data + '</span>'
+ }
+ return
+
+ },
+ "targets" : 'render-basescore',
+ },
+ {
+ "targets": 'hide',
+ "visible": false
+ }],
+ buttons: [
+ {
+ extend: 'colvis',
+ columns: ':not(.noVis)',
+ text: 'Columns',
+ className: 'btn-sm btn-outline-secondary colvis-btn'
+ },
+ {
+ text: 'Fullscreen',
+ className: 'btn-sm btn-outline-secondary colvis-btn fullscreen-btn',
+ action: function ( e, dt, node, config ) {
+ if(window.location.href.includes("fullscreen")){
+ Turbolinks.visit("/cve/tool");
+ } else {
+ Turbolinks.visit("/cve/tool/fullscreen");
+ }
+ }
+ },
+ {
+ text: 'State',
+ className: 'btn-sm btn-outline-secondary float-left colvis-btn mr-2 dropdown-toggle view-filter-state'
+ }
+ ],
+ "initComplete": function( settings, json ) {
+
+ $('#table_id_length').append( "<span class='ml-4'> Show </span>" );
+ table.buttons().container()
+ .appendTo( $('#table_id_length') );
+ $('.buttons-colvis').removeClass("btn-secondary");
+
+ $('#table_id_length').append( "<span class='ml-4'> Toggle </span>" );
+ $('.fullscreen-btn').appendTo( $('#table_id_length') );
+
+
+ $('#table_id_filter').prepend( '<div id="filterByStateDropdown" class="dropdown"> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> <button id="filterByStateNew" class="dropdown-item"><span class="badge badge-danger state">New</span></button> <button id="filterByStateAssigned" class="dropdown-item"><span class="badge badge-success state">Assigned</span></button> <button id="filterByStateNFU" class="dropdown-item"><span class="badge badge-info state">NFU</span></button> <button id="filterByStateLater" class="dropdown-item"><span class="badge badge-warning state">Later</span></button> <button id="filterByStateInvalid" class="dropdown-item"><span class="badge badge-dark state">Invalid</span></button> <div class="dropdown-divider"></div> <button id="filterByStateAll" class="dropdown-item">All</button> </div> </div>' );
+ $('#table_id_filter').prepend( "<span class='m-1 float-left'> Filter by </span>" );
+ $('.view-filter-state').prependTo( $('#filterByStateDropdown') );
+ document.querySelector(".view-filter-state").setAttribute('data-toggle', 'dropdown');
+
+ $("#filterByStateNew").on('click', function () {
+ $('.view-filter-state').text("New");
+ table.columns( 10 ).search( "New" ).draw();
+ });
+
+ $("#filterByStateAssigned").on('click', function () {
+ $('.view-filter-state').text("Assigned");
+ table.columns( 10 ).search( "Assigned" ).draw();
+ });
+
+ $("#filterByStateNFU").on('click', function () {
+ $('.view-filter-state').text("NFU");
+ table.columns( 10 ).search( "NFU" ).draw();
+ });
+
+ $("#filterByStateLater").on('click', function () {
+ $('.view-filter-state').text("Later");
+ table.columns( 10 ).search( "Later" ).draw();
+ });
+
+ $("#filterByStateInvalid").on('click', function () {
+ $('.view-filter-state').text("Invalid");
+ table.columns( 10 ).search( "Invalid" ).draw();
+ });
+
+ $("#filterByStateAll").on('click', function () {
+ $('.view-filter-state').text("State");
+ table.columns( 10 ).search( "" ).draw();
+ });
+
+ },
+
+ });
+
+ window.dataTables.push(table);
+
+ // Add event listener for opening and closing details
+ $('#table_id tbody').on('click', 'td', function () {
+ var tr = $(this).closest('tr');
+ var row = table.row( tr );
+
+ if ( row.child.isShown() ) {
+ // This row is already open - close it
+ row.child.hide();
+ tr.removeClass('shown');
+ }
+ else {
+ // Open this row
+ row.child( format(row.data()) ).show();
+ tr.addClass('shown');
+
+ registerCommentListener();
+
+ registerAssignBugListener();
+
+ registerChangeStateListener();
+
+ }
+ } );
+
+ });
+ }
+}
+
+function renderState( d, cveid ) {
+ if(d == "New"){
+ return '<span data-cveid="' + cveid + '" class="badge badge-danger state">' + d + '</span>'
+ }else if(d == "Assigned") {
+ return '<span data-cveid="' + cveid + '" class="badge badge-success state">' + d + '</span>'
+ }else if(d == "NFU") {
+ return '<span data-cveid="' + cveid + '" class="badge badge-info state">' + d + '</span>'
+ }else if(d == "Later") {
+ return '<span data-cveid="' + cveid + '" class="badge badge-warning state">' + d + '</span>'
+ }else if(d == "Invalid") {
+ return '<span data-cveid="' + cveid + '" class="badge badge-dark state">' + d + '</span>'
+ }else{
+ return '<span data-cveid="' + cveid + '" class="badge badge-primary state">' + d + '</span>'
+ }
+ return d
+}
+
+function format ( d ) {
+
+ var bugs = ' <i>no assigned bugs</i>';
+ if(d[3]!='' && JSON.parse(d[3]) != null){
+
+ bugs = "";
+
+ JSON.parse(d[3]).forEach(function(bug) {
+ bugs = bugs + bug.id + ",";
+ });
+
+ }
+
+ var packages = ' <i>no assigned packages</i>';
+ if(d[2]!=''){
+ packages = d[2];
+ }
+
+ var comments = '<div class="col-12 text-center mb-3"> <i>- no comments yet -</i> </div>';
+ if(d[7]!='null') {
+ console.log("CommentsObject");
+ console.log(d[7]);
+ console.log(JSON.parse(d[7]));
+
+ var commentsObjects = JSON.parse(d[7]);
+ comments = '';
+ commentsObjects.forEach(function (comment, index) {
+ var commentDate = '<small class="text-muted">' + comment.Date.split("T")[0] + ' ' + comment.Date.split("T")[1].split(".")[0] + ' UTC</small>';
+ comments = comments + '<div class="col-3 text-right mb-3"><b>' + comment.User + '</b><br/>' + commentDate + '</div><div class="col-9 mb-3"><div class="card" style="background: none;"><div class="card-body">' + comment.Message + '</div></div></div>';
+ });
+ }
+
+ var bugs_cards = '<div class="col-12 text-center mb-3"> <i>- no assigned bugs yet -</i> </div>';
+ if(d[3]!='' && JSON.parse(d[3]) != null) {
+
+ bugs_cards = '';
+
+ JSON.parse(d[3]).forEach(function(bug) {
+ var newBug = '<div class="col-3 text-right mb-3"><b> Bug ' + bug.id + '</b></div><div class="col-9 mb-3"><div class="card" style="background: none;"><div class="card-body pt-2"><span class="bug-title" data-cveid="' + d[0] + '" data-bugid="' + bug.id + '">' + escapeHtml(bug.summary) + '</span><div class="row"><div class="col-6"><small>Alias: </small><small class="bug-alias" data-cveid="' + d[0] + '" data-bugid="' + bug.id + '">' + bug.alias.join(", ") + '</small><br/><small>Status: </small><small class="bug-status" data-cveid="' + d[0] + '" data-bugid="' + bug.id + '">' + escapeHtml(bug.status) + '</small></div><div class="col-6"><small>Whiteboard: </small><small class="bug-whiteboard" data-cveid="' + d[0] + '" data-bugid="' + bug.id + '">' + escapeHtml(bug.whiteboard) + '</small><br/><small>Created: </small><small class="bug-created" data-cveid="' + d[0] + '" data-bugid="' + bug.id + '">' + escapeHtml(bug.creation_time) + '</small></div></div></div></div></div>';
+ bugs_cards = bugs_cards + newBug;
+ });
+
+ }
+
+ var changes = '<i>no changes yet</i>';
+
+ // `d` is the original data object for the row
+ return '<div class="container px-0">' +
+ '<div class="row py-2">' +
+ '<div class="col-7"><h4><b>Details of ' + d[0] + '</b></h4></div><div class="col-5"></div>' +
+ '<div class="col-7">' +
+ '<span>' + d[1] + '</span>' +
+ '<div data-cveid="' + d[0] + '" class="row bugs-section mt-4">' +
+ bugs_cards +
+ '</div>' +
+ '<div data-cveid="' + d[0] + '" class="row new-bug-row" style="display: none;">' +
+ '<div class="col-3 text-right"><b>New Bug</b></div>'+
+ '<div class="col-9"><textarea data-cveid="' + d[0] + '" class="form-control new-bug" id="exampleFormControlTextarea1" rows="3" placeholder="Add a bug to ' + d[0] + '"></textarea></div>'+
+ '<div class="col-12 mt-2 mb-3"><button data-cveid="' + d[0] + '" type="button" class="btn-save-new-bug float-right btn btn-sm btn-outline-success">Save</button><button data-cveid="' + d[0] + '" type="button" class="mr-2 float-right btn btn-sm btn-outline-danger btn-cancel-new-bug">Cancel</button></div>' +
+ '</div>'+
+ '<div data-cveid="' + d[0] + '" class="row assign-bug-row" style="display: none;">' +
+ '<div class="col-3 text-right"><b>Assign Bug</b></div>'+
+ '<div class="col-9"><input type="text" data-cveid="' + d[0] + '" class="form-control assign-bug" maxlength="6" placeholder="Bug ID"/></div>'+
+ '<div class="col-12 mt-2 mb-3"><button data-cveid="' + d[0] + '" type="button" class="btn-save-assign-bug float-right btn btn-sm btn-outline-success">Save</button><button data-cveid="' + d[0] + '" type="button" class="mr-2 float-right btn btn-sm btn-outline-danger btn-cancel-assign-bug">Cancel</button></div>' +
+ '</div>'+
+ '<div class="row pb-4">' +
+ (window.userCanAssignBug ? '<div class="col-12 mb-3"><button type="button" data-cveid="' + d[0] + '" class="trigger-assign-bug float-right btn btn-sm btn-outline-primary">Assign Bug</button><button type="button" data-cveid="' + d[0] + '" class="trigger-new-bug mr-2 float-right btn btn-sm btn-outline-primary" disabled>Create New Bug</button></div>' : '') +
+ '</div>'+
+ // '<hr/>' +
+ '<div data-cveid="' + d[0] + '" class="row comments-section pb-1 mt-4">' +
+ // '<div class="col-12 mb-2"><b>Comments</b></div>' +
+ comments +
+ '</div>' +
+ '<div data-cveid="' + d[0] + '" class="row new-comment-row" style="display: none;">' +
+ '<div class="col-3 text-right"><b>New Comment</b></div>'+
+ '<div class="col-9"><textarea data-cveid="' + d[0] + '" class="form-control new-comment" id="exampleFormControlTextarea1" rows="3" placeholder="Add a comment to ' + d[0] + '"></textarea></div>'+
+ '<div class="col-12 mt-2 mb-3"><button data-cveid="' + d[0] + '" type="button" class="save-new-comment float-right btn btn-sm btn-outline-success">Save</button><button data-cveid="' + d[0] + '" type="button" class="mr-2 float-right btn btn-sm btn-outline-danger btn-cancel-comment">Cancel</button></div>' +
+ '</div>'+
+ '<div class="row pb-4">' +
+ (window.userCanComment ? '<div class="col-12 mb-3"><button type="button" data-cveid="' + d[0] + '" class="trigger-new-comment float-right btn btn-sm btn-outline-primary">Add New Comment</button></div>' : '') +
+ '</div>'+
+ '</div>'+
+ '<div class="col-5">' +
+ '<table class="w-100 float-right" cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
+ '<tr><td><b>State:</b></td><td>'+ renderState(d[10], d[0]) + ( (window.userCanChangeState && d[10] != 'Assigned') ? '<div style="display: inline-block;" class="float-right"><a class="btn btn-sm btn-link p-0" data-toggle="collapse" href="#collapseExample-' + d[0] + '" role="button" aria-expanded="false" aria-controls="collapseExample"> change </a></div>' : '') + '</td></tr>'+
+ '<tr><td data-cveid="' + d[0] + '" class="change-state-form collapse" id="collapseExample-' + d[0] +'" colspan="2" style="border-top: none;"><div class="row"><div class="col-7"><input data-cveid="' + d[0] + '" class="change-state-reason form-control form-control-sm" type="text" placeholder="reason (required)" /></div> <div class="col-5"> <button data-cveid="' + d[0] + '" type="button" class="change-state-invalid my-1 btn btn-sm btn-outline-dark float-right mr-2 py-0 px-1">Invalid</button> <button data-cveid="' + d[0] + '" type="button" class="change-state-later my-1 btn btn-sm btn-outline-warning float-right mr-2 py-0 px-1">Later</button> <button data-cveid="' + d[0] + '" type="button" class="change-state-nfu my-1 btn btn-sm btn-outline-info float-right mr-2 py-0 px-1">NFU</button></div></div> </td></tr>' +
+ '<tr><td><b>Last Modified:</b></td><td>'+ d[8] + '</td></tr>'+
+ '<tr><td><b>Published:</b></td><td>'+ d[9] + '</td></tr>'+
+ '<tr><td><b>Base Score:</b></td><td>'+ d[4] + '</td></tr>'+
+ '<tr><td><b>Impact:</b></td><td>'+ d[5] + '</td></tr>'+
+ '<tr><td><b>Bug(s):</b></td><td>'+ bugs + '</td></tr>'+
+ '<tr><td><b>Package(s):</b></td><td>'+ packages + '</td></tr>'+
+ '<tr><td><b>Reference(s):</b></td><td>'+ d[6] + '</td></tr>'+
+ // '<tr><td><b>Comments:</b></td><td>'+ d[7] + '</td></tr>'+
+ // '<tr><td><b>Changelog:</b></td><td>'+ changes + '</td></tr>'+
+ '</table>'+
+ '</div>'+
+ '</div>'+
+ '</div>';
+}
+
+
+$( "#disable-twofactor-notice" ).click(function() {
+ $("#twofactor-notice").hide();
+ $.get( "/account/2fa/notice/disable", function( data ) {
+ console.log("Disabled 2FA Notice.")
+ });
+});
+
+
+function registerCommentListener(){
+
+ $( ".trigger-new-comment" ).click(function() {
+ $('.new-comment-row[data-cveid="' + $(this).data( "cveid" ) + '"]').show();
+ $('.trigger-new-comment[data-cveid="' + $(this).data( "cveid" ) + '"]').hide();
+ });
+
+ $( ".btn-cancel-comment" ).click(function() {
+ $('.new-comment-row[data-cveid="' + $(this).data( "cveid" ) + '"]').hide();
+ $('.trigger-new-comment[data-cveid="' + $(this).data( "cveid" ) + '"]').show();
+ });
+
+ $( ".save-new-comment" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ var comment = $('textarea.new-comment[data-cveid="' + cveid + '"]').val();
+ console.log('textarea:');
+ console.log();
+
+
+ $.post(
+ '/cve/comment/add',
+ {
+ cveid: cveid,
+ comment: comment,
+ },
+ function(data) {
+
+ if(data != "err") {
+ console.log("hi");
+ console.log(data);
+ var comment = JSON.parse(data);
+ var commentDate = '<small class="text-muted">' + comment.Date.split("T")[0] + ' ' + comment.Date.split("T")[1].split(".")[0] + ' UTC</small>';
+ var newComment = '<div class="col-3 text-right mb-3"><b>' + comment.User + '</b><br/>' + commentDate + '</div><div class="col-9 mb-3"><div class="card" style="background: none;"><div class="card-body">' + comment.Message + '</div></div></div>';
+ $('.comments-section[data-cveid="' + cveid + '"]').append(newComment);
+ }
+ return
+ });
+ });
+}
+
+function registerAssignBugListener(){
+
+
+ $( ".trigger-assign-bug" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ showAssignBugForm(cveid);
+ });
+
+ $( ".btn-cancel-assign-bug" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ hideAssignBugForm(cveid);
+ });
+
+ $( ".btn-save-assign-bug" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ var bugid = $('input.assign-bug[data-cveid="' + cveid + '"]').val();
+
+ assignBug(cveid, bugid);
+ hideAssignBugForm(cveid);
+ });
+}
+
+function showAssignBugForm(cveid){
+ $('.assign-bug-row[data-cveid="' + cveid + '"]').show();
+ $('.trigger-assign-bug[data-cveid="' + cveid + '"]').hide();
+ $('.trigger-new-bug[data-cveid="' + cveid + '"]').hide();
+}
+
+function hideAssignBugForm(cveid) {
+ $('.assign-bug-row[data-cveid="' + cveid + '"]').hide();
+ $('.trigger-assign-bug[data-cveid="' + cveid + '"]').show();
+ $('.trigger-new-bug[data-cveid="' + cveid + '"]').show();
+}
+
+
+function assignBug(cveid, bugid){
+
+ $.post(
+ '/cve/bug/assign',
+ {
+ cveid: cveid,
+ bugid: bugid,
+ },
+ function(data) {
+ if(data != "err") {
+ console.log("hi");
+ console.log(data);
+
+ if(data == "ok"){
+
+ setStateToAssigned(cveid);
+
+ var newBug = '<div class="col-3 text-right mb-3"><b> Bug ' + bugid + '</b></div><div class="col-9 mb-3"><div class="card" style="background: none;"><div class="card-body pt-2"><span class="bug-title" data-cveid="' + cveid + '" data-bugid="' + bugid + '" >Loading...</span><br/><small>Alias: </small><small class="bug-alias" data-cveid="' + cveid + '" data-bugid="' + bugid + '"></small><br/><small>Status: </small><small class="bug-status" data-cveid="' + cveid + '" data-bugid="' + bugid + '"></small><br/><small>Resolution: </small><small class="bug-resolution" data-cveid="' + cveid + '" data-bugid="' + bugid + '"></small><br/><small>Whiteboard: </small><small class="bug-whiteboard" data-cveid="' + cveid + '" data-bugid="' + bugid + '"></small><br/><small>Created: </small><small class="bug-created" data-cveid="' + cveid + '" data-bugid="' + bugid + '"></small><br/><small>Last Update: </small><small class="bug-last-update" data-cveid="' + cveid + '" data-bugid="' + bugid + '"></small></div></div></div>';
+ $('.bugs-section[data-cveid="' + cveid + '"]').append(newBug);
+
+ updateBugInformation(cveid, bugid);
+ }
+
+ }
+ });
+}
+
+
+function registerChangeStateListener(){
+
+ $( ".change-state-nfu" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ var reason = $('.change-state-reason[data-cveid="' + cveid + '"]').val();
+ if(reason != "") {
+ changeState(cveid, reason, "NFU");
+ $("#collapseExample-" + cveid).removeClass('show');
+ }else{
+ $('.change-state-reason[data-cveid="' + cveid + '"]').addClass('is-invalid');
+ }
+ });
+
+ $( ".change-state-invalid" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ var reason = $('.change-state-reason[data-cveid="' + cveid + '"]').val();
+ if(reason != "") {
+ changeState(cveid, reason, "Invalid");
+ $("#collapseExample-" + cveid).removeClass('show');
+ }else{
+ $('.change-state-reason[data-cveid="' + cveid + '"]').addClass('is-invalid');
+ }
+ });
+
+ $( ".change-state-later" ).click(function() {
+ var cveid = $(this).data( "cveid" );
+ var reason = $('.change-state-reason[data-cveid="' + cveid + '"]').val();
+ if(reason != ""){
+ changeState(cveid, reason, "Later");
+ $("#collapseExample-" + cveid).removeClass('show');
+ }else{
+ $('.change-state-reason[data-cveid="' + cveid + '"]').addClass('is-invalid');
+ }
+ });
+}
+
+function changeState(cveid, reason, newState){
+
+ $.post(
+ '/cve/state/change',
+ {
+ cveid: cveid,
+ newstate: newState,
+ reason: reason,
+ },
+ function(data) {
+ if(data != "err") {
+ console.log("hi");
+ console.log(data);
+
+ // change state
+ setStateTo(cveid, newState);
+
+ // add comment
+ var comment = JSON.parse(data);
+ var commentDate = '<small class="text-muted">' + comment.Date.split("T")[0] + ' ' + comment.Date.split("T")[1].split(".")[0] + ' UTC</small>';
+ var newComment = '<div class="col-3 text-right mb-3"><b>' + comment.User + '</b><br/>' + commentDate + '</div><div class="col-9 mb-3"><div class="card" style="background: none;"><div class="card-body">' + escapeHtml(comment.Message) + '</div></div></div>';
+ $('.comments-section[data-cveid="' + cveid + '"]').append(newComment);
+
+ }
+ });
+}
+
+
+function setStateToAssigned(cveid) {
+ setStateTo(cveid, "Assigned");
+}
+
+function setStateTo(cveid, newState) {
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-primary');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-secondary');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-success');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-danger');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-warning');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-info');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-light');
+ $('.state[data-cveid="' + cveid + '"]').removeClass('badge-dark');
+
+ if(newState == "New"){
+ $('.state[data-cveid="' + cveid + '"]').addClass('badge-danger');
+ } else if(newState == "Assigned"){
+ $('.state[data-cveid="' + cveid + '"]').addClass('badge-success');
+ } else if(newState == "NFU"){
+ $('.state[data-cveid="' + cveid + '"]').addClass('badge-info');
+ } else if(newState == "Later"){
+ $('.state[data-cveid="' + cveid + '"]').addClass('badge-warning');
+ } else if(newState == "Invalid"){
+ $('.state[data-cveid="' + cveid + '"]').addClass('badge-dark');
+ } else {
+ $('.state[data-cveid="' + cveid + '"]').addClass('badge-primary');
+ }
+
+ $('.state[data-cveid="' + cveid + '"]').html(newState);
+}
+
+
+function updateBugInformation(cveid, bugid){
+ $.getJSON( BUGZILLA_URL + "/rest/bug?id=" + bugid, function( data ) {
+ console.log(data.bugs[0]);
+
+ console.log(escapeHtml(data.bugs[0].alias.join(", ")));
+ console.log(escapeHtml(data.bugs[0].status));
+ console.log(escapeHtml(data.bugs[0].resolution));
+ console.log(escapeHtml(data.bugs[0].whiteboard));
+ console.log(escapeHtml(data.bugs[0]['creation_time']));
+ console.log(escapeHtml(data.bugs[0]['last_change_time']));
+
+ $('.bug-title[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html(escapeHtml(data.bugs[0].summary));
+
+ $('.bug-alias[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html('<i>' + escapeHtml(data.bugs[0].alias.join(", ")) + '</i>');
+ $('.bug-status[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html('<i>' + escapeHtml(data.bugs[0].status) + '</i>');
+ $('.bug-resolution[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html('<i>' + escapeHtml(data.bugs[0].resolution) + '</i>');
+ $('.bug-whiteboard[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html('<i>' + escapeHtml(data.bugs[0].whiteboard) + '</i>');
+ $('.bug-created[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html('<i>' + escapeHtml(data.bugs[0]['creation_time']) + '</i>');
+ $('.bug-last-update[data-cveid="' + cveid + '"][data-bugid="' + bugid + '"]').html('<i>' + escapeHtml(data.bugs[0]['last_change_time']) + '</i>');
+
+ });
+}
+
+
+function escapeHtml(unsafe) {
+ return unsafe
+ .replace(/&/g, "&amp;")
+ .replace(/</g, "&lt;")
+ .replace(/>/g, "&gt;")
+ .replace(/"/g, "&quot;")
+ .replace(/'/g, "&#039;");
+}
+
+export default {initDatatable, destroyDatatable}
diff --git a/web/packs/src/javascript/drafts.js b/web/packs/src/javascript/drafts.js
new file mode 100644
index 0000000..0430b15
--- /dev/null
+++ b/web/packs/src/javascript/drafts.js
@@ -0,0 +1,38 @@
+
+
+function initDatatable(){
+ if (window.DraftsDataTables.length === 0 && $('.drafts-data-table').length !== 0) {
+ $('.drafts-data-table').each((_, element) => {
+
+ var table = $(element).DataTable( {
+ "order": [[ 0, "desc" ]],
+ "paging": true,
+ "ordering": true,
+ "searching": true,
+ "info": true,
+ "lengthChange": false,
+ "language": {
+ "emptyTable": "Currently there are no drafts available. -- Start with creating one."
+ }
+ });
+
+ window.DraftsDataTables.push(table);
+
+ // Add event listener for opening and closing details
+ $('#table_id tbody').on('click', 'td', function () {
+ var tr = $(this).closest('tr');
+ var row = table.row( tr );
+ Turbolinks.visit("/glsa/" + row.data()[0]);
+ } );
+
+ });
+ }
+}
+
+function destroyDatatable(){
+ while (window.DraftsDataTables.length !== 0) {
+ window.DraftsDataTables.pop().destroy();
+ }
+}
+
+export default {initDatatable, destroyDatatable}
diff --git a/web/packs/src/javascript/requests.js b/web/packs/src/javascript/requests.js
new file mode 100644
index 0000000..75a4a6a
--- /dev/null
+++ b/web/packs/src/javascript/requests.js
@@ -0,0 +1,37 @@
+
+function initDatatable(){
+ if (window.RequestsDataTables.length === 0 && $('.requests-data-table').length !== 0) {
+ $('.requests-data-table').each((_, element) => {
+
+ var table = $(element).DataTable( {
+ "order": [[ 0, "desc" ]],
+ "paging": true,
+ "ordering": true,
+ "searching": true,
+ "info": true,
+ "lengthChange": false,
+ "language": {
+ "emptyTable": "Currently there are no requests available. -- Start with filling one."
+ }
+ });
+
+ window.RequestsDataTables.push(table);
+
+ // Add event listener for opening and closing details
+ $('#table_id tbody').on('click', 'td', function () {
+ var tr = $(this).closest('tr');
+ var row = table.row( tr );
+ Turbolinks.visit("/glsa/" + row.data()[0]);
+ } );
+
+ });
+ }
+}
+
+function destroyDatatable() {
+ while (window.RequestsDataTables.length !== 0) {
+ window.RequestsDataTables.pop().destroy();
+ }
+}
+
+export default {initDatatable, destroyDatatable}
diff --git a/web/packs/src/stylesheets/application.scss b/web/packs/src/stylesheets/application.scss
new file mode 100644
index 0000000..8d97498
--- /dev/null
+++ b/web/packs/src/stylesheets/application.scss
@@ -0,0 +1,11 @@
+@import "~@gentoo/tyrian/dist/tyrian";
+@import "~@gentoo/tyrian/dist/components/searchbars";
+
+@import "~datatables.net-bs4/css/dataTables.bootstrap4";
+@import "~datatables.net-buttons-bs4/css/buttons.bootstrap4";
+
+@import "~taucharts/dist/taucharts";
+@import "~taucharts/dist/plugins/tooltip";
+//@import "~taucharts/dist/taucharts";
+
+@import "index";
diff --git a/web/packs/src/stylesheets/index.scss b/web/packs/src/stylesheets/index.scss
new file mode 100644
index 0000000..39fa518
--- /dev/null
+++ b/web/packs/src/stylesheets/index.scss
@@ -0,0 +1,27 @@
+.navigation_link {
+ color: #777;
+ font-style: italic;
+}
+
+.comment_tab {
+ border-top: none;
+ border-left: none;
+ border-right: none;
+ font-size: 13px;
+ display: table-cell;
+ padding: 2px 1em;
+ cursor: pointer;
+ background: transparent;
+}
+
+.active_comment_tab {
+ background: transparent;
+ border-bottom: 4px solid #54487a;
+ color: #54487a;
+}
+
+
+.index_page_icon {
+ color: #54487A;
+ text-align: center;
+}
diff --git a/web/packs/statistics.js b/web/packs/statistics.js
new file mode 100644
index 0000000..43f9a27
--- /dev/null
+++ b/web/packs/statistics.js
@@ -0,0 +1,15 @@
+
+Taucharts = require( 'taucharts' );
+require( 'taucharts/dist/plugins/tooltip' );
+
+
+
+var chart = new Taucharts.Chart({
+ type: 'horizontal-stacked-bar',
+ y: 'type',
+ x: 'count',
+ color: 'stage',
+ plugins: [Taucharts.api.plugins.get('tooltip')()],
+ data: window.CHART_DATA,
+});
+chart.renderTo('#bar');
diff --git a/web/packs/stylesheets.js b/web/packs/stylesheets.js
new file mode 100644
index 0000000..07a767b
--- /dev/null
+++ b/web/packs/stylesheets.js
@@ -0,0 +1 @@
+import './src/stylesheets/application.scss';
diff --git a/web/templates/about/about.tmpl b/web/templates/about/about.tmpl
new file mode 100644
index 0000000..8f22826
--- /dev/null
+++ b/web/templates/about/about.tmpl
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>About GLSAMaker</h1>
+
+ <div class="px-5 py-3">
+
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+
+ <p>Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.</p>
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+</body>
+</html>
diff --git a/web/templates/about/aboutCLI.tmpl b/web/templates/about/aboutCLI.tmpl
new file mode 100644
index 0000000..beef42a
--- /dev/null
+++ b/web/templates/about/aboutCLI.tmpl
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+ <h1>About the Command Line Tool</h1>
+
+ <div class="px-5 py-3">
+
+ <div class="alert alert-info" role="alert">
+ The command line tool is coming soon.
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+</body>
+</html>
diff --git a/web/templates/about/aboutSearch.tmpl b/web/templates/about/aboutSearch.tmpl
new file mode 100644
index 0000000..0c6c9f4
--- /dev/null
+++ b/web/templates/about/aboutSearch.tmpl
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>About the Search</h1>
+
+ <div class="px-5 py-3">
+
+ The search search can be used to for navigating through the GLSAMaker. The following types of search queries are supported
+
+ <h3 class="mt-4">Navigate to pages</h3>
+ <ul class="mt-3">
+ <li><b>#home</b> will navigate to '/'</li>
+ <li><b>#dashboard</b> will navigate to '/dashboard'</li>
+ <li><b>#new</b> will navigate to '/new'</li>
+ <li><b>#cvetool</b> will navigate to '/cve/tool'</li>
+ <li><b>#requests</b> will navigate to '/requests'</li>
+ <li><b>#drafts</b> will navigate to '/drafts'</li>
+ <li><b>#all</b> will navigate to '/all'</li>
+ <li><b>#archive</b> will navigate to '/archive'</li>
+ <li><b>#about</b> will navigate to '/about'</li>
+ <li><b>#admin</b> will navigate to '/admin'</li>
+ <li><b>#password</b> will navigate to '/account/password'</li>
+ <li><b>#2fa</b> will navigate to '/account/2fa'</li>
+ <li><b>#statistics</b> will navigate to '/statistics'</li>
+ <li><b>#logout</b> will navigate to '/logout'</li>
+ <li><b>#bugzilla</b> will navigate to 'https://bugs.gentoo.org'</li>
+ </ul>
+
+ <h3 class="mt-4">Navigate to GLSAs</h3>
+
+ <ul class="mt-3">
+ <li><b>numeric value</b> will navigate to '/glsa/#id'</li>
+ </ul>
+
+ <h3 class="mt-4">Search for GLSAs</h3>
+
+ <ul class="mt-3">
+ <li><b>search string</b> will search for GLSAs in the following fields:
+ <ul class="">
+ <li>title</li>
+ <li>type</li>
+ <li>synopsis</li>
+ <li>description</li>
+ <li>workaround</li>
+ <li>resolution</li>
+ <li>keyword</li>
+ <li>background</li>
+ </ul>
+ </li>
+ </ul>
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+</body>
+</html>
diff --git a/web/templates/account/2fa.tmpl b/web/templates/account/2fa.tmpl
new file mode 100644
index 0000000..dcb38a5
--- /dev/null
+++ b/web/templates/account/2fa.tmpl
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+
+<div id="2fa-overview" class="container">
+ <div class="row mb-5">
+ <div class="col-12">
+ <h1>Two Factor Authentication</h1>
+ </div>
+
+ {{ if .User.Force2FA }}
+ {{ if .User.IsUsingTOTP }}
+ {{ else if .User.IsUsingWebAuthn }}
+ {{ else }}
+ <div class="col-12 mt-2">
+ <div class="alert alert-warning" role="alert">
+ Sorry, but you have to enable 2FA for your account before you can continue.
+ </div>
+ </div>
+ {{end}}
+ {{end}}
+
+ <div class="col-12 px-5 mt-5">
+
+ <h2>Time-based One-time Passwords{{ if .User.IsUsingTOTP }} <small><span class="ml-2 badge badge-success">active</span></small>{{end}}</h2>
+
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>
+
+ </div>
+
+ <div class="col-12 px-5" id="totp-dialog">
+ <div class="card mx-auto" style="max-width: 500px;background: none;">
+ <div class="card-body">
+
+ <div class="row">
+ <div class="col-6">
+ <img src="data:image/png;base64,{{ .QRcode }}" width="100%" />
+ </div>
+ <div class="col-6">
+ <p id="token-description" class="mt-4"><small>Please scan the qr-code and enter the six-digit code shown in your Authenticator app.</small></p>
+ <input id="token" name="token" class="form-control" type="text" style="background: #FAFAFA;" placeholder="123 456"/>
+ <button id="token-btn" class="btn btn-primary float-right mt-3" onclick="verifyTOTPToken();">Verify</button>
+
+ <style>
+
+ .correct-totp {
+ border: green solid 1px;
+ color: green;
+ }
+
+ .false-totp {
+ border: red solid 1px;
+ color: red;
+ }
+
+ </style>
+
+ <script>
+
+ function verifyTOTPToken(){
+ var xhttp = new XMLHttpRequest();
+ xhttp.onreadystatechange = function() {
+ if (this.readyState == 4 && this.status == 200) {
+ if(this.responseText == "true"){
+ document.getElementById("token").classList.remove("false-totp");
+ document.getElementById("token").classList.add("correct-totp");
+ document.getElementById("token-description").classList.add("text-success");
+ document.getElementById("token-description").classList.remove("text-danger");
+ }else{
+ document.getElementById("token").classList.remove("correct-totp");
+ document.getElementById("token").classList.add("false-totp");
+ document.getElementById("token-description").classList.remove("text-success");
+ document.getElementById("token-description").classList.add("text-danger");
+ }
+ }
+ };
+ xhttp.open("POST", "/account/2fa/totp/verify", true);
+ xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+ xhttp.send("token=" + document.getElementById("token").value);
+ }
+ </script>
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+
+ {{ if .User.IsUsingTOTP }}
+ <div class="col-12 px-5 text-right">
+ <a class="btn btn-outline-danger" href="/account/2fa/totp/disable">Disable</a>
+ </div>
+ {{ else }}
+ <div class="col-12 px-5 text-right">
+ <a class="btn btn-outline-success" href="/account/2fa/totp/activate">Activate</a>
+ </div>
+ {{ end }}
+
+ <div class="col-12 px-5 py-3"><hr/></div>
+
+
+
+ <div class="col-12 px-5">
+
+ <h2>WebAuthn{{ if .User.IsUsingWebAuthn }} <small><span class="ml-2 badge badge-success">active</span></small>{{end}}</h2>
+ <!-- div: not set up yet -->
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>
+
+ </div>
+
+
+ <div class="col-12 px-5" id="totp-dialog">
+ <div class="card mx-auto" style="max-width: 500px;background: none;">
+ <div class="card-body" style="min-height: 220px;">
+
+ <div class="row">
+
+ {{ if .User.WebauthnCredentials }}
+ <div class="col-6">
+ <div class="list-group list-group-flush" style="background: none;">
+ {{range .User.WebauthnCredentials}}
+ <a class="list-group-item list-group-item-action flex-column align-items-start" style="background: none;">
+ <h4 class="mb-1"><i class="fa fa-shield" aria-hidden="true"></i> {{CredentialName $.User .}}</h4>
+ <small class="text-muted">ID: {{ WebAuthnID . }}</small>
+ </a>
+ {{end}}
+ </div>
+ </div>
+ {{ else }}
+ <div class="col-6 text-center">
+ <i class="fa fa-exclamation-circle mt-4" aria-hidden="true" style="font-size: 120px;"></i>
+ <h3>No Authenticators present.</h3>
+ </div>
+ {{ end }}
+
+ <div class="col-6">
+ <p id="token-description" class="mt-2"><small>Click on the button below to add a new authenticator.</small></p>
+ <input id="webauthn-name" name="token" class="form-control" maxlength="20" type="text" style="background: #FAFAFA;" placeholder="Authenticator Name"/>
+
+ <button id="register-webauthn" class="btn btn-primary float-right mt-4">Add New</button>
+ {{ if .User.WebauthnCredentials }}
+ <button class="btn btn-outline-danger float-right mt-4 mr-2">Delete All</button>
+ {{ end }}
+
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+
+
+ {{ if .User.IsUsingWebAuthn }}
+ <div class="col-12 px-5 mt-3 text-right">
+ <a class="btn btn-outline-danger" href="/account/2fa/webauthn/disable">Disable</a>
+ </div>
+ {{ else }}
+ <div class="col-12 px-5 mt-3 text-right">
+ <a class="btn btn-outline-success" href="/account/2fa/webauthn/activate">Activate</a>
+ </div>
+ {{ end }}
+
+ </div>
+
+
+
+
+
+
+</div>
+
+
+{{template "footer" .}}
+
+<script src="/assets/account.js"></script>
+
+
+</body>
+</html>
diff --git a/web/templates/account/password/forcedchange.tmpl b/web/templates/account/password/forcedchange.tmpl
new file mode 100644
index 0000000..d80b874
--- /dev/null
+++ b/web/templates/account/password/forcedchange.tmpl
@@ -0,0 +1,98 @@
+{{define "forcedPasswordChange"}}
+
+ <!DOCTYPE html>
+ <html lang="en">
+
+ <head>
+ <title>Gentoo Security</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#54487a">
+ <meta name="description" content="Gentoo CVE Tool">
+
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+
+ <link rel="icon" href="https://packages.gentoo.org/favicon.ico" type="image/x-icon">
+ </head>
+
+ <body style="border-top: none;background: #fff;">
+
+ <div class="container vh-100 d-flex">
+ <div class="row flex-grow-1">
+ <div class="col-12 d-flex align-items-center">
+
+ <div class="row w-100">
+
+ <div class="col-12 align-items-center">
+ <div class="card border-grey mx-auto" style="max-width: 430px;border-color: lightgrey!important;">
+ <div class="card-body">
+ <div class="text-center" style="margin-top:10px;margin-bottom:20px;">
+ <object data="https://www.gentoo.org/assets/img/logo/gentoo-signet.svg" type="image/svg+xml" style="max-width: 80px;">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux logo">
+ </object>
+ <h4 class="mt-2">Change your Password</h4>
+ </div>
+
+ <div class="text-left" style="padding-left: 1.25rem;padding-right: 1.25rem;">
+ Sorry, but you have to change your password, before you can continue.
+ </div>
+
+ <form action="/account/password" method="POST">
+ <div class="card mx-auto" style="max-width: 600px;background: none;border: none;">
+ <div class="card-body">
+ <input name="oldPassword" class="my-2" type="password" style="width: 100%;" placeholder="Old Password"/>
+ <input name="newPassword" class="my-2" type="password" style="width: 100%;" placeholder="New Password"/>
+ <input name="confirmedNewPassword" class="my-2" type="password" style="width: 100%;" placeholder="Confirm New Password"/>
+ <button type="submit" class="mt-2 float-right btn btn-primary" style="border-color: #54487A!important;background-color: #54487A!important;"> Change </button>
+ </div>
+ </div>
+ </form>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12 mt-3 align-items-center">
+ <div class="card border-0 text-right text-muted mx-auto" style="max-width: 430px;">
+ <span class="" style="font-size: 80%;">
+ <a class="mr-4 text-muted" style="text-decoration: none;" data-toggle="collapse" href="#create-new-account-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">New Account</a>
+ <a class="text-muted" style="text-decoration: none;" data-toggle="collapse" href="#reset-password-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Reset Password</a>
+ </span>
+
+
+
+ <div class="card-body">
+ <div class="collapse mt-2" id="create-new-account-notice">
+ <div class="card card-body border-0 p-0">
+ <small>To create a new account, please contact the security team and request access.</small>
+ </div>
+ </div>
+
+ <div class="collapse mt-2" id="reset-password-notice">
+ <div class="card card-body border-0 p-0">
+ <small>In case you've forgotten your password, please contact the security team and ask an admin to reset your password.</small>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+
+
+ </div>
+ </div>
+
+
+ <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+
+
+ </body>
+ </html>
+
+{{end}}
diff --git a/web/templates/account/password/normalchange.tmpl b/web/templates/account/password/normalchange.tmpl
new file mode 100644
index 0000000..48b35bd
--- /dev/null
+++ b/web/templates/account/password/normalchange.tmpl
@@ -0,0 +1,45 @@
+{{define "normalPasswordChange"}}
+
+ <!DOCTYPE html>
+ <html lang="en">
+ {{template "head"}}
+ <body>
+ {{template "header" .}}
+
+
+ <div id="2fa-overview" class="container">
+ <div class="row mb-5">
+ <div class="col-12">
+ <h1>Change your password</h1>
+ </div>
+
+ {{if .Message}}
+ <div class="col-12">
+ <div class="alert alert-{{if .Success}}success{{else}}danger{{end}}" role="alert">
+ {{.Message}}
+ </div>
+ </div>
+ {{end}}
+
+ <div class="col-12 mt-4 px-5" id="totp-dialog">
+ <form action="/account/password" method="POST">
+ <div class="card mx-auto" style="max-width: 600px;background: none;border: none;">
+ <div class="card-body">
+ <input name="oldPassword" class="my-2" type="password" style="width: 100%;" placeholder="Old Password"/>
+ <input name="newPassword" class="my-2" type="password" style="width: 100%;" placeholder="New Password"/>
+ <input name="confirmedNewPassword" class="my-2" type="password" style="width: 100%;" placeholder="Confirm New Password"/>
+ <button type="submit" class="mt-2 float-right btn btn-primary"> Change </button>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+
+
+ {{template "footer" .}}
+
+ </body>
+ </html>
+
+{{end}}
diff --git a/web/templates/account/password/password.tmpl b/web/templates/account/password/password.tmpl
new file mode 100644
index 0000000..5f996c9
--- /dev/null
+++ b/web/templates/account/password/password.tmpl
@@ -0,0 +1,5 @@
+{{if .User.ForcePasswordRotation}}
+ {{template "forcedPasswordChange" .}}
+{{else}}
+ {{template "normalPasswordChange" .}}
+{{end}}
diff --git a/web/templates/admin/components/global.tmpl b/web/templates/admin/components/global.tmpl
new file mode 100644
index 0000000..c0a5fe0
--- /dev/null
+++ b/web/templates/admin/components/global.tmpl
@@ -0,0 +1,45 @@
+{{define "viewGlobal"}}
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <i class="fa fa-caret-right" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Global 2FA Settings (coming soon)
+ <i class="fa fa-pencil float-right mt-1 text-muted d-none" aria-hidden="true" style="margin-right:5px;"></i>
+ </div>
+ <div class="card-body d-none">
+ <div class="row">
+ <div class="col-sm-6 text-muted">
+ Force 2FA to login (coming soon)
+ <i class="fa fa-times float-right mr-3 p-1" style="color: darkred;" aria-hidden="true"></i>
+ </div>
+ <div class="col-sm-6 text-muted">
+ Force 2FA to release GLSA (coming soon)
+ <i class="fa fa-times float-right mr-3 p-1" style="color: darkred;" aria-hidden="true"></i>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+{{end}}
+
+{{define "editGlobal"}}
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Global 2FA Settings
+ <i class="fa fa-pencil float-right mt-1" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i>
+ </div>
+ <div class="card-body">
+ <div class="row">
+ <div class="col-sm-6">
+ Force 2FA to login
+ <i class="fa fa-times float-right mr-3 p-1" style="color: darkred;" aria-hidden="true"></i>
+ </div>
+ <div class="col-sm-6 text-muted">
+ Force 2FA to release GLSA (coming soon)
+ <i class="fa fa-times float-right mr-3 p-1" style="color: darkred;" aria-hidden="true"></i>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+{{end}}
diff --git a/web/templates/admin/components/permissions.tmpl b/web/templates/admin/components/permissions.tmpl
new file mode 100644
index 0000000..32b7dc6
--- /dev/null
+++ b/web/templates/admin/components/permissions.tmpl
@@ -0,0 +1,424 @@
+{{define "viewPermissions"}}
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');" style="outline : none;text-decoration: none;color:#000;" data-toggle="collapse" href="#collapsePermissionSettings"><i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> User Permissions</a>
+ <a href="/admin/edit/permissions"><i class="fa fa-pencil float-right mt-1" aria-hidden="true" style="margin-right:5px;cursor: pointer;color:black;"></i></a>
+ </div>
+ <div class="card-body collapse show" id="collapsePermissionSettings">
+ <table class="table table-striped">
+ <thead>
+ <tr>
+ <td style="border-top:none;"></td>
+ <th colspan="11" class="border-0">GLSA</th>
+ <th colspan="6" class="border-0">CVE</th>
+ <th colspan="4" class="border-0">Admin</th>
+ </tr>
+ <tr>
+ <th>User</th>
+ <!-- GLSA Permissions -->
+ <th title="View GLSAs">
+ <i class="fa fa-eye" aria-hidden="true"></i>
+ </th>
+ <th title="Manually trigger an update of the Bug data">
+ <i class="fa fa-refresh" aria-hidden="true"></i>
+ </th>
+ <th title="Add comments to GLSAs">
+ <i class="fa fa-commenting-o" aria-hidden="true"></i>
+ </th>
+ <th title="Add GLSAs">
+ <i class="fa fa-plus" aria-hidden="true"></i>
+ </th>
+ <th title="Edit GLSAs">
+ <i class="fa fa-pencil" aria-hidden="true"></i>
+ </th>
+ <th title="Delete GLSAs">
+ <i class="fa fa-trash-o" aria-hidden="true"></i>
+ </th>
+ <th title="Approve GLSAs">
+ <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
+ </th>
+ <th title="Approve own GLSAs">
+ <i class="fa fa-thumbs-up" aria-hidden="true"></i>
+ </th>
+ <th title="Decline GLSAs">
+ <i class="fa fa-thumbs-o-down" aria-hidden="true"></i>
+ </th>
+ <th title="Release GLSAs">
+ <i class="fa fa-paper-plane-o" aria-hidden="true"></i>
+ </th>
+ <th title="View confidential GLSAs">
+ <i class="fa fa-user-secret" aria-hidden="true"></i>
+ </th>
+ <!-- CVE Permissions -->
+ <th title="View the CVETool">
+ <i class="fa fa-eye" aria-hidden="true"></i>
+ </th>
+ <th title="Manually trigger an update of the CVE data">
+ <i class="fa fa-refresh" aria-hidden="true"></i>
+ </th>
+ <th title="Add comments to CVEs">
+ <i class="fa fa-commenting-o" aria-hidden="true"></i>
+ </th>
+ <th title="Add packages to CVEs">
+ <i class="fa fa-hdd-o" aria-hidden="true"></i>
+ </th>
+ <th title="Change the State of CVEs">
+ <i class="fa fa-random" aria-hidden="true"></i>
+ </th>
+ <th title="Assign and Create Bugs using the CVETool">
+ <i class="fa fa-bug" aria-hidden="true"></i>
+ </th>
+ <!-- Admin Permissions -->
+ <th title="View Admin Area">
+ <i class="fa fa-eye" aria-hidden="true"></i>
+ </th>
+ <th title="Manage Templates">
+ <i class="fa fa-files-o" aria-hidden="true"></i>
+ </th>
+ <th title="Manage Global Settings">
+ <i class="fa fa-globe" aria-hidden="true"></i>
+ </th>
+ <th title="Manage Users">
+ <i class="fa fa-users" aria-hidden="true"></i>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{range .Users}}
+ <tr>
+ <td>{{.Email}}</td>
+ <!-- GLSA Permissions -->
+ <td>
+ {{if .Permissions.Glsa.View}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.UpdateBugs}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Comment}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Create}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Edit}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Delete}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Approve}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.ApproveOwnGlsa}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Decline}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Release}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Glsa.Confidential}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <!-- CVE Permissions -->
+ <td>
+ {{if .Permissions.CVETool.View}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.CVETool.UpdateCVEs}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.CVETool.Comment}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.CVETool.AddPackage}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.CVETool.ChangeState}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.CVETool.AssignBug}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <!-- Admin Permissions -->
+ <td>
+ {{if .Permissions.Admin.View}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Admin.CreateTemplates}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Admin.GlobalSettings}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Permissions.Admin.ManageUsers}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ </tr>
+ {{end}}
+
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+{{end}}
+
+
+
+{{define "editPermissions"}}
+ <div class="col-12 mt-4">
+ <form action="/admin/edit/permissions" method="post">
+ <input value="1" name="edit" hidden />
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> User Permissions
+ <button type="submit" class="btn btn-sm p-0 float-right"><i class="fa fa-save float-right mt-1" aria-hidden="true" style="margin-right:5px;cursor: pointer;color:black;"></i></button>
+ </div>
+ <div class="card-body">
+ <table class="table">
+ <thead>
+ <tr>
+ <td style="border-top:none;"></td>
+ <th colspan="11" class="border-0">GLSA</th>
+ <th colspan="6" class="border-0">CVE</th>
+ <th colspan="4" class="border-0">Admin</th>
+ </tr>
+ <tr>
+ <th>User</th>
+ <!-- GLSA Permissions -->
+ <th title="View GLSAs">
+ <i class="fa fa-eye" aria-hidden="true"></i>
+ </th>
+ <th title="Manually trigger an update of the Bug data">
+ <i class="fa fa-refresh" aria-hidden="true"></i>
+ </th>
+ <th title="Add comments to GLSAs">
+ <i class="fa fa-commenting-o" aria-hidden="true"></i>
+ </th>
+ <th title="Add GLSAs">
+ <i class="fa fa-plus" aria-hidden="true"></i>
+ </th>
+ <th title="Edit GLSAs">
+ <i class="fa fa-pencil" aria-hidden="true"></i>
+ </th>
+ <th title="Delete GLSAs">
+ <i class="fa fa-trash-o" aria-hidden="true"></i>
+ </th>
+ <th title="Approve GLSAs">
+ <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
+ </th>
+ <th title="Approve own GLSAs">
+ <i class="fa fa-thumbs-up" aria-hidden="true"></i>
+ </th>
+ <th title="Decline GLSAs">
+ <i class="fa fa-thumbs-o-down" aria-hidden="true"></i>
+ </th>
+ <th title="Release GLSAs">
+ <i class="fa fa-paper-plane-o" aria-hidden="true"></i>
+ </th>
+ <th title="View confidential GLSAs">
+ <i class="fa fa-user-secret" aria-hidden="true"></i>
+ </th>
+ <!-- CVE Permissions -->
+ <th title="View the CVETool">
+ <i class="fa fa-eye" aria-hidden="true"></i>
+ </th>
+ <th title="Manually trigger an update of the CVE data">
+ <i class="fa fa-refresh" aria-hidden="true"></i>
+ </th>
+ <th title="Add comments to CVEs">
+ <i class="fa fa-commenting-o" aria-hidden="true"></i>
+ </th>
+ <th title="Add packages to CVEs">
+ <i class="fa fa-hdd-o" aria-hidden="true"></i>
+ </th>
+ <th title="Change the State of CVEs">
+ <i class="fa fa-random" aria-hidden="true"></i>
+ </th>
+ <th title="Assign and Create Bugs using the CVETool">
+ <i class="fa fa-bug" aria-hidden="true"></i>
+ </th>
+ <!-- Admin Permissions -->
+ <th title="View Admin Area">
+ <i class="fa fa-eye" aria-hidden="true"></i>
+ </th>
+ <th title="Manage Templates">
+ <i class="fa fa-files-o" aria-hidden="true"></i>
+ </th>
+ <th title="Manage Global Settings">
+ <i class="fa fa-globe" aria-hidden="true"></i>
+ </th>
+ <th title="Manage Users">
+ <i class="fa fa-users" aria-hidden="true"></i>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ {{range .Users}}
+ <tr>
+ <td>
+ <input name="user" type="text" value="{{.Id}}" hidden/>
+ {{.Email}}
+ </td>
+ <!-- GLSA Permissions -->
+ <td>
+ <input name="glsa-view" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.View}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-updateBugs" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.UpdateBugs}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-comment" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Comment}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-create" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Create}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-edit" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Edit}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-delete" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Delete}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-approve" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Approve}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-approveOwnGlsa" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.ApproveOwnGlsa}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-decline" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Decline}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-release" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Release}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="glsa-confidential" type="checkbox" value="{{.Id}}" {{if .Permissions.Glsa.Confidential}}checked{{end}}/>
+ </td>
+ <!-- CVE Permissions -->
+ <td>
+ <input name="cve-view" type="checkbox" value="{{.Id}}" {{if .Permissions.CVETool.View}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="cve-updateCVEs" type="checkbox" value="{{.Id}}" {{if .Permissions.CVETool.UpdateCVEs}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="cve-comment" type="checkbox" value="{{.Id}}" {{if .Permissions.CVETool.Comment}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="cve-addPackage" type="checkbox" value="{{.Id}}" {{if .Permissions.CVETool.AddPackage}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="cve-changeState" type="checkbox" value="{{.Id}}" {{if .Permissions.CVETool.ChangeState}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="cve-assignBug" type="checkbox" value="{{.Id}}" {{if .Permissions.CVETool.AssignBug}}checked{{end}}/>
+ </td>
+ <!-- Admin Permissions -->
+ <td>
+ <input name="admin-view" type="checkbox" value="{{.Id}}" {{if .Permissions.Admin.View}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="admin-createTemplates" type="checkbox" value="{{.Id}}" {{if .Permissions.Admin.CreateTemplates}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="admin-globalSettings" type="checkbox" value="{{.Id}}" {{if .Permissions.Admin.GlobalSettings}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="admin-manageUsers" type="checkbox" value="{{.Id}}" {{if .Permissions.Admin.ManageUsers}}checked{{end}}/>
+ </td>
+ </tr>
+ {{end}}
+
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </form>
+ </div>
+{{end}}
+
diff --git a/web/templates/admin/components/templates.tmpl b/web/templates/admin/components/templates.tmpl
new file mode 100644
index 0000000..470b229
--- /dev/null
+++ b/web/templates/admin/components/templates.tmpl
@@ -0,0 +1,10 @@
+{{define "viewTemplates"}}
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <i class="fa fa-caret-right" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Template Management (coming soon)
+ <i class="fa fa-pencil float-right mt-1 text-muted d-none" aria-hidden="true" style="margin-right:5px;"></i>
+ </div>
+ </div>
+ </div>
+{{end}}
diff --git a/web/templates/admin/components/users.tmpl b/web/templates/admin/components/users.tmpl
new file mode 100644
index 0000000..b7b2e87
--- /dev/null
+++ b/web/templates/admin/components/users.tmpl
@@ -0,0 +1,226 @@
+
+{{define "viewUsers"}}
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');" style="outline : none;text-decoration: none;color:#000;" data-toggle="collapse" href="#collapseUserSettings"><i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> User Management</a>
+ <a href="/admin/edit/users"><i class="fa fa-pencil float-right mt-1" aria-hidden="true" style="margin-right:5px;cursor: pointer;color:black;"></i></a>
+ </div>
+ <div class="card-body collapse show" id="collapseUserSettings">
+ <table class="table">
+ <thead>
+ <tr>
+ <th class="border-0" title="Badge of the user">Badge</th>
+ <th class="border-0" title="Nickname of the user">Nick</th>
+ <th class="border-0" title="Full name of the user">Name</th>
+ <th class="border-0" title="E-Mail address of the user">Email</th>
+ <th class="border-0" title="Does the user use TOTP?">TOTP</th>
+ <th class="border-0" title="Does the user use WebAuthn?">WebAuthn</th>
+ <th class="border-0" title="User is forced to rotate the password at the next login">Rotate Password</th>
+ <th class="border-0" title="User is forced to use either TOTP or WebAuthn">Force 2FA</th>
+ <th class="border-0" title="Is the user-account active? If disabled ">Active</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{range .Users}}
+ <tr>
+ <td>
+
+ <span class="badge badge-secondary float-left mr-2" style="background: none;border: 1px solid {{.Badge.Color}};">
+ <i class="fa fa-user mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{.Badge.Color}};"></i>
+ <span class="text-uppercase" style="color:{{.Badge.Color}};">{{.Badge.Name}}</span>
+ </span>
+
+ </td>
+ <td>{{.Nick}}</td>
+ <td>{{.Name}}</td>
+ <td>{{.Email}}</td>
+ <td>
+ {{if .IsUsingTOTP}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .IsUsingWebAuthn}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .ForcePasswordRotation}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .Force2FA}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if not .Disabled}}
+ <i class="fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ </tr>
+ {{end}}
+ </tbody>
+ </table>
+
+ {{if .NewUserNick}}
+ <div class="alert alert-success" role="alert">
+ The User <i>{{.NewUserNick}}</i> has been successfully created. The temporary password <i>{{.NewUserPassword}}</i> has been generated for this account. The user has to change the password during the next login.
+ </div>
+ {{end}}
+
+ </div>
+ </div>
+ </div>
+
+{{end}}
+
+
+
+{{define "editUsers"}}
+
+ <div class="col-12 mt-4">
+ <form action="/admin/edit/users" method="post">
+ <input value="1" name="edit" hidden />
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> User Management
+ <a href="/admin"><i class="fa fa-times float-right mt-1" aria-hidden="true" style="margin-right:5px;cursor: pointer;color:black;"></i></a>
+ <button type="submit" class="btn btn-sm mr-1 p-0 float-right"><i class="fa fa-save float-right mt-1" aria-hidden="true" style="margin-right:5px;cursor: pointer;color:black;"></i></button>
+ </div>
+ <div class="card-body">
+ <table class="table">
+ <thead>
+ <tr>
+ <th class="border-0" title="Badge of the user">Badge</th>
+ <th class="border-0" title="Nickname of the user">Nick</th>
+ <th class="border-0" title="Full name of the user">Name</th>
+ <th class="border-0" title="E-Mail address of the user">Email</th>
+ <th class="border-0" title="Does the user use TOTP?">TOTP</th>
+ <th class="border-0" title="Does the user use WebAuthn?">WebAuthn</th>
+ <th class="border-0" title="User is forced to rotate the password at the next login">Rotate Password</th>
+ <th class="border-0" title="User is forced to use either TOTP or WebAuthn">Force 2FA</th>
+ <th class="border-0" title="Is the user-account active? If disabled ">Active</th>
+ <th class="border-0"></th>
+ </tr>
+ </thead>
+ <tbody id="userList">
+ {{range .Users}}
+ <tr>
+ <td>
+ <span class="my-1 badge badge-secondary float-left mr-2" style="background: none;border: 1px solid {{.Badge.Color}};">
+ <i class="fa fa-user mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{.Badge.Color}};"></i>
+ <span class="text-uppercase" style="color:{{.Badge.Color}};">{{.Badge.Name}}</span>
+ </span>
+ </td>
+ <td>
+ <input name="userId" type="text" value="{{.Id}}" hidden/>
+ <input name="userNick" class="form-control form-control-sm" value="{{.Nick}}" style="max-width: 150px;"/>
+ </td>
+ <td>
+ <input name="userName" class="form-control form-control-sm" value="{{.Name}}" style="max-width: 150px;"/>
+ </td>
+ <td>
+ <input name="userEmail" class="form-control form-control-sm" value="{{.Email}}" style="max-width: 150px;"/>
+ </td>
+ <td>
+ {{if .IsUsingTOTP}}
+ <i class="my-2 fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="my-2 fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ {{if .IsUsingWebAuthn}}
+ <i class="my-2 fa fa-check" style="color: green;" aria-hidden="true"></i>
+ {{else}}
+ <i class="my-2 fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ {{end}}
+ </td>
+ <td>
+ <input name="userPasswordRotation" class="m-2" type="checkbox" value="{{.Id}}" {{if .ForcePasswordRotation}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="userForce2FA" class="m-2" type="checkbox" value="{{.Id}}" {{if .Force2FA}}checked{{end}}/>
+ </td>
+ <td>
+ <input name="userActive" class="m-2" type="checkbox" value="{{.Id}}" {{if not .Disabled}}checked{{end}}/>
+ </td>
+ <td>
+
+
+ <div class="dropdown">
+
+ <button type="button" class="float-right my-1 py-0 btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Actions</button>
+
+ <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
+ <a class="dropdown-item" href="/admin/edit/password/reset/{{.Id}}">Reset Password</a>
+ </div>
+ </div>
+
+
+ </td>
+ </tr>
+ {{end}}
+
+ </tbody>
+
+ <tbody id="addUserForm" class="border-0 pt-2">
+ <tr>
+ <td>
+ <span class="badge badge-secondary float-left mr-2" style="background: none;border: 1px solid grey;">
+ <i class="fa fa-user mr-1" aria-hidden="true" style="font-size: 0.8rem;color: grey;"></i>
+ <span class="text-uppercase" style="color:grey;">user</span>
+ </span>
+ </td>
+ <td>
+ <input id="newNick" class="form-control form-control-sm" placeholder="nickname" value="" style="max-width: 150px;"/>
+ </td>
+ <td>
+ <input id="newName" class="form-control form-control-sm" placeholder="full name" value="" style="max-width: 150px;"/>
+ </td>
+ <td>
+ <input id="newEmail" class="form-control form-control-sm" placeholder="email" value="" style="max-width: 150px;"/>
+ </td>
+ <td>
+ <i class="my-2 fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ </td>
+ <td>
+ <i class="my-2 fa fa-times" style="color: darkred;" aria-hidden="true"></i>
+ </td>
+ <td>
+ <input class="m-2" type="checkbox" checked disabled/>
+ </td>
+ <td>
+ <input class="m-2" type="checkbox"/>
+ </td>
+ <td>
+ <input class="m-2" type="checkbox" />
+ </td>
+ <td>
+ <button id="addUser" type="button" class="float-right my-1 py-0 btn btn-outline-success btn-sm">Add</button>
+ </td>
+ </tr>
+ </tbody>
+
+ </table>
+ </div>
+ </div>
+ </form>
+ </div>
+
+{{end}}
+
diff --git a/web/templates/admin/edit/permissions.tmpl b/web/templates/admin/edit/permissions.tmpl
new file mode 100644
index 0000000..c25d2ea
--- /dev/null
+++ b/web/templates/admin/edit/permissions.tmpl
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Admin Area</h1>
+
+ <div class="row">
+
+ {{template "viewGlobal"}}
+
+ {{template "viewUsers" .}}
+
+ {{template "editPermissions" .}}
+
+ {{template "viewTemplates"}}
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/admin/edit/users.tmpl b/web/templates/admin/edit/users.tmpl
new file mode 100644
index 0000000..68b1b8e
--- /dev/null
+++ b/web/templates/admin/edit/users.tmpl
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Admin Area</h1>
+
+ <div class="row">
+
+ {{template "viewGlobal"}}
+
+ {{template "editUsers" .}}
+
+ {{template "viewPermissions" .}}
+
+ {{template "viewTemplates"}}
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+<script src="/assets/admin.js"></script>
+
+</body>
+</html>
diff --git a/web/templates/admin/passwordreset.tmpl b/web/templates/admin/passwordreset.tmpl
new file mode 100644
index 0000000..9b386f0
--- /dev/null
+++ b/web/templates/admin/passwordreset.tmpl
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Reset Password of {{.UserNick}}?</h1>
+
+ <div class="row">
+
+ <div class="mx-auto">
+ <form action="/admin/edit/password/reset/{{.UserId}}" method="POST">
+ <a href="/admin" class="btn btn-outline-danger">No</a>
+ <button type="submit" class="btn btn-success">Yes</button>
+ </form>
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/admin/view.tmpl b/web/templates/admin/view.tmpl
new file mode 100644
index 0000000..2b32fdc
--- /dev/null
+++ b/web/templates/admin/view.tmpl
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Admin Area</h1>
+
+ <div class="row">
+
+ {{if .User.Permissions.Admin.GlobalSettings}}
+ {{template "viewGlobal"}}
+ {{end}}
+
+ {{if .User.Permissions.Admin.ManageUsers}}
+ {{template "viewUsers" .}}
+ {{template "viewPermissions" .}}
+ {{end}}
+
+ {{if .User.Permissions.Admin.CreateTemplates}}
+ {{template "viewTemplates"}}
+ {{end}}
+
+ </div>
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/all/all.tmpl b/web/templates/all/all.tmpl
new file mode 100644
index 0000000..1280ea4
--- /dev/null
+++ b/web/templates/all/all.tmpl
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<style>
+ td:hover {
+ cursor: pointer;
+ }
+</style>
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>All</h1>
+
+ <table id="table_id" class="all-data-table table table-hover">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Type</th>
+ <th>Title</th>
+ <th>Requester</th>
+ <th>Date</th>
+ <th>Bug Ready</th>
+ <th>Approved</th>
+ <th>Workflow</th>
+ <th>Permissions</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ {{ range .All}}
+ <tr>
+ <td>{{.Id}}</td>
+ <td><span class="badge {{if eq .Type "request"}}badge-danger{{else if eq .Type "draft"}}badge-warning{{else}}badge-success{{end}} text-capitalize">{{.Type}}</span></td>
+ <td>{{.Title}}</td>
+ <td>{{.Creator.Nick}}</td>
+ <td>{{.Created}}</td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Status.BugReady }}green{{else}}darkred{{end}};">{{if .Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Status.Approval}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Status.WorkflowStatus "own"}}fa-user{{else if eq .Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Status.WorkflowStatus}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+ </td>
+ </tr>
+ {{end}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/archive/archive.tmpl b/web/templates/archive/archive.tmpl
new file mode 100644
index 0000000..8550d1e
--- /dev/null
+++ b/web/templates/archive/archive.tmpl
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Released GLSAs</h1>
+
+ <table id="table_id" class="archives-data-table table table-hover">
+ <thead>
+ <tr>
+ <th class="hide">ID</th>
+ <th>GLSA ID</th>
+ <th>Title</th>
+ <th>Requester</th>
+ <th>Date</th>
+ <th>State</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ {{ range .GLSAs}}
+ <tr>
+ <td>{{.Id}}</td>
+ <td>{{.Alias}}</td>
+ <td>{{.Title}}</td>
+ <td>{{.Creator.Nick}}</td>
+ <td>{{.Created}}</td>
+ <td>
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Status.WorkflowStatus "own"}}fa-user{{else if eq .Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Status.WorkflowStatus}}</span>
+ </span>
+
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Status.Approval}}</span>
+ </span>
+
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Status.BugReady }}green{{else}}darkred{{end}};">{{if .Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+ </td>
+ </tr>
+ {{end}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+<script src="assets/archive.js"></script>
+
+</body>
+</html>
diff --git a/web/templates/authentication/accessDenied.tmpl b/web/templates/authentication/accessDenied.tmpl
new file mode 100644
index 0000000..a6042ec
--- /dev/null
+++ b/web/templates/authentication/accessDenied.tmpl
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5 text-center pt-5 ">
+
+ <div class="mt-4"></div>
+
+ <i style="font-size: 1000%;" class="fa fa-lock mt-5" aria-hidden="true"></i>
+
+ <h1 class="font-weight-bolder mt-4">- ACCESS DENIED -</h1>
+
+ <h1 style="font-size: 200%; max-width:500px; " class="mx-auto">Sorry, you are missing the necessary rights to access this page.</h1>
+
+
+
+</div>
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/authentication/login.tmpl b/web/templates/authentication/login.tmpl
new file mode 100644
index 0000000..b7ec356
--- /dev/null
+++ b/web/templates/authentication/login.tmpl
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Gentoo Security</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#54487a">
+ <meta name="description" content="Gentoo CVE Tool">
+
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+
+ <link rel="icon" href="https://packages.gentoo.org/favicon.ico" type="image/x-icon">
+</head>
+
+<body style="border-top: none;background: #fff;">
+
+<div class="container vh-100 d-flex">
+ <div class="row flex-grow-1">
+ <div class="col-12 d-flex align-items-center">
+
+ <div class="row w-100">
+
+ <div class="col-12 align-items-center">
+ <div class="card border-grey mx-auto" style="max-width: 430px;border-color: lightgrey!important;">
+ <div class="card-body">
+ <div class="text-center" style="margin-top:10px;margin-bottom:20px;">
+ <object data="https://www.gentoo.org/assets/img/logo/gentoo-signet.svg" type="image/svg+xml" style="max-width: 80px;">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux logo">
+ </object>
+ </div>
+
+ <form name="login" action="/login" method="POST">
+
+ <div class="row">
+ <div class="col-12" style="padding-bottom:20px!important;padding-left:50px!important;padding-right:50px!important;">
+ <label for="username" class="d-none">Username:</label>
+ <input style="border-top: none;border-left: none; border-right: none; border-radius: 0px;" placeholder="Username" size="35" id="username" name="username" class="form-control" type="text" autofocus="" required="">
+ </div>
+ <div class="col-12" style="padding-bottom:20px!important;padding-left:50px!important;padding-right:50px!important;">
+ <label for="password" class="d-none">Password:</label>
+ <input style="border-top: none;border-left: none; border-right: none; border-radius: 0px;" type="password" size="35" id="password" name="password" placeholder="Password" class="form-control" required="">
+ </div>
+ <div class="col-12" style="padding-bottom:20px!important;padding-left:50px!important;padding-right:50px!important;">
+ <input type="checkbox" id="restrictlogin" name="restrictlogin" checked="checked">
+ <small class="text-muted">Restrict this session to this IP address
+ (using this option improves security)</small>
+ </div>
+ <div class="col-12">
+ <input style="display: none;" name="cameFrom" id="cameFrom" value="{{ .CameFrom }}" />
+ </div>
+
+
+ <div class="col-12 mt-3" style="padding-bottom:10px; padding-right:50px; padding-left:50px; width:100%;">
+ <div class="text-right"style="width:100%;">
+ <input type="submit" class="btn btn-primary" name="GoAheadAndLogIn" style="border-color: #54487A!important;background-color: #54487A!important;" value="Log in" id="log_in">
+ </div>
+ </div>
+
+ <div class="col-12 d-none" style="padding-right:50px; padding-left: 50px; width:100%;">
+ <hr>
+ </div>
+ </div>
+
+
+ </form>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12 mt-3 align-items-center">
+ <div class="card border-0 text-right text-muted mx-auto" style="max-width: 430px;">
+ <span class="" style="font-size: 80%;">
+ <a class="mr-4 text-muted" style="text-decoration: none;" data-toggle="collapse" href="#create-new-account-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">New Account</a>
+ <a class="text-muted" style="text-decoration: none;" data-toggle="collapse" href="#reset-password-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Reset Password</a>
+ </span>
+
+
+
+ <div class="card-body">
+ <div class="collapse mt-2" id="create-new-account-notice">
+ <div class="card card-body border-0 p-0">
+ <small>To create a new account, please contact the security team and request access.</small>
+ </div>
+ </div>
+
+ <div class="collapse mt-2" id="reset-password-notice">
+ <div class="card card-body border-0 p-0">
+ <small>In case you've forgotten your password, please contact the security team and ask an admin to reset your password.</small>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+
+
+ </div>
+</div>
+
+
+<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+
+
+</body>
+</html>
diff --git a/web/templates/authentication/totp.tmpl b/web/templates/authentication/totp.tmpl
new file mode 100644
index 0000000..ea1871c
--- /dev/null
+++ b/web/templates/authentication/totp.tmpl
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Gentoo Security</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#54487a">
+ <meta name="description" content="Gentoo CVE Tool">
+
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+
+ <link rel="icon" href="https://packages.gentoo.org/favicon.ico" type="image/x-icon">
+</head>
+
+<body style="border-top: none;background: #fff;">
+
+<div class="container vh-100 d-flex">
+ <div class="row flex-grow-1">
+ <div class="col-12 d-flex align-items-center">
+
+ <div class="row w-100">
+
+ <div class="col-12 align-items-center">
+ <div class="card border-grey mx-auto" style="max-width: 430px;border-color: lightgrey!important;">
+ <div class="card-body">
+ <div class="text-center" style="margin-top:10px;margin-bottom:20px;">
+ <object data="https://www.gentoo.org/assets/img/logo/gentoo-signet.svg" type="image/svg+xml" style="max-width: 80px;">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux logo">
+ </object>
+ <h4 class="mt-2">TOTP Login</h4>
+ </div>
+
+ <form name="login" action="/login/2fa/totp" method="POST">
+
+ <div class="row mt-5 pt-3">
+ <div class="col-12" style="padding-bottom:20px!important;padding-left:80px!important;padding-right:80px!important;">
+ <input placeholder="One-time Password" type="text" maxlength="6" size="35" id="token" name="token" class="form-control" required="">
+ </div>
+
+ <input style="display: none;" name="cameFrom" id="cameFrom" value="{{ .CameFrom }}" />
+
+ </div>
+
+ <div class="text-right mt-3" style="width:100%;">
+ <input type="submit" class="btn btn-primary" style="border-color: #54487A!important;background-color: #54487A!important;" name="GoAheadAndLogIn" value="Log in" id="log_in">
+ </div>
+ </form>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12 mt-3 align-items-center">
+ <div class="card border-0 text-right text-muted mx-auto" style="max-width: 430px;">
+ <span class="" style="font-size: 80%;">
+ <a class="mr-4 text-muted" style="text-decoration: none;" data-toggle="collapse" href="#help-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Help</a>
+ <a class="text-muted" style="text-decoration: none;" data-toggle="collapse" href="#reset-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Lost my Authenticators</a>
+ </span>
+
+
+
+ <div class="card-body">
+ <div class="collapse mt-2" id="help-notice">
+ <div class="card card-body border-0 p-0">
+ <small>You've activated 2FA using TOTP for your account. Please use one of your registered Authenticators to generate a TOTP and log in.</small>
+ </div>
+ </div>
+
+ <div class="collapse mt-2" id="reset-notice">
+ <div class="card card-body border-0 p-0">
+ <small>In case you lost all authenticators that you have registered, please contact the security team and ask an admin to temporarly disabled WebAuthn for your account.</small>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+
+
+ </div>
+</div>
+
+<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+
+
+</body>
+</html>
diff --git a/web/templates/authentication/webauthn.tmpl b/web/templates/authentication/webauthn.tmpl
new file mode 100644
index 0000000..03a92f8
--- /dev/null
+++ b/web/templates/authentication/webauthn.tmpl
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+ <title>Gentoo Security</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#54487a">
+ <meta name="description" content="Gentoo CVE Tool">
+
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
+
+ <link rel="icon" href="https://packages.gentoo.org/favicon.ico" type="image/x-icon">
+</head>
+
+<body style="border-top: none;background: #fff;">
+
+<div class="container vh-100 d-flex">
+ <div class="row flex-grow-1">
+ <div class="col-12 d-flex align-items-center">
+
+ <div class="row w-100">
+
+ <div class="col-12 align-items-center">
+ <div class="card border-grey mx-auto" style="max-width: 430px;border-color: lightgrey!important;">
+ <div class="card-body">
+ <div class="text-center" style="margin-top:10px;margin-bottom:20px;">
+ <object data="https://www.gentoo.org/assets/img/logo/gentoo-signet.svg" type="image/svg+xml" style="max-width: 80px;">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux logo">
+ </object>
+ <h4 class="mt-2">WebAuthn Login</h4>
+ </div>
+
+ <div id="result-success" class="alert alert-success" role="alert" style="margin-left:40px!important;margin-right:40px!important;display:none;">
+ Successfully authenticated.
+ </div>
+
+ <div id="result-error" class="alert alert-danger" role="alert" style="margin-left:40px!important;margin-right:40px!important;display:none;">
+ Error during the authentication.
+ </div>
+
+ <table class="mb-5 mt-5">
+ <tbody>
+ <tr>
+ <td id="authentication-notice" style="padding-bottom:10px!important;padding-left:20px!important;padding-right:20px!important;">
+ <span>2FA using WebAuthn is activated. Please use your authenticator to log in.</span>
+ </td>
+ </tr>
+
+ <input style="display: none;" name="cameFrom" id="cameFrom" value="{{ .CameFrom }}" />
+
+ </tbody>
+ </table>
+
+
+ <div id="start-btn" class="text-right" style="width:100%;">
+ <button class="btn btn-primary" style="border-color: #54487A!important;background-color: #54487A!important;" onclick="document.getElementById('start-btn').style.display='none';loginUser();">Start</button>
+ </div>
+
+ <div id="continue-btn" class="text-right" style="width:100%;display: none;">
+ <a href="/" class="btn btn-outline-success">Continue</a>
+ </div>
+
+ <div id="retry-btn" class="text-right" style="width:100%;display: none;">
+ <button class="btn btn-outline-danger" onclick="document.getElementById('start-btn').style.display='none';loginUser();">Retry</button>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12 mt-3 align-items-center">
+ <div class="card border-0 text-right text-muted mx-auto" style="max-width: 430px;">
+ <span class="" style="font-size: 80%;">
+ <a class="mr-4 text-muted" style="text-decoration: none;" data-toggle="collapse" href="#help-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Help</a>
+ <a class="text-muted" style="text-decoration: none;" data-toggle="collapse" href="#reset-notice" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Lost my Authenticators</a>
+ </span>
+
+
+
+ <div class="card-body">
+ <div class="collapse mt-2" id="help-notice">
+ <div class="card card-body border-0 p-0">
+ <small>You've activated 2FA using WebAuthn for your account. Please use one of your registered Authenticators (such as security keys) to log in.</small>
+ </div>
+ </div>
+
+ <div class="collapse mt-2" id="reset-notice">
+ <div class="card card-body border-0 p-0">
+ <small>In case you lost all authenticators that you have registered, please contact the security team and ask an admin to temporarly disabled WebAuthn for your account.</small>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+
+
+ </div>
+</div>
+
+
+<script
+ src="https://code.jquery.com/jquery-3.4.1.min.js"
+ integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
+ crossorigin="anonymous"></script>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
+<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
+
+
+<script>
+
+ // Base64 to ArrayBuffer
+ function bufferDecode(value) {
+ return Uint8Array.from(atob(value), c => c.charCodeAt(0));
+ }
+
+ // ArrayBuffer to URLBase64
+ function bufferEncode(value) {
+ return btoa(String.fromCharCode.apply(null, new Uint8Array(value)))
+ .replace(/\+/g, "-")
+ .replace(/\//g, "_")
+ .replace(/=/g, "");
+ }
+
+
+ function loginUser() {
+ $.post(
+ '/login/2fa/webauthn/begin',
+ JSON.stringify({
+ cameFrom: {{ .CameFrom }},
+ restrictlogin: "on",
+ }),
+ function (data) {
+ return data
+ },
+ 'json')
+ .then((credentialRequestOptions) => {
+ //alert("First step done");
+ console.log(credentialRequestOptions);
+ credentialRequestOptions.publicKey.challenge = bufferDecode(credentialRequestOptions.publicKey.challenge);
+ credentialRequestOptions.publicKey.allowCredentials.forEach(function (listItem) {
+ listItem.id = bufferDecode(listItem.id)
+ });
+
+ return navigator.credentials.get({
+ publicKey: credentialRequestOptions.publicKey
+ })
+ })
+ .then((assertion) => {
+ //alert("Second step done");
+ console.log(assertion);
+ let authData = assertion.response.authenticatorData;
+ let clientDataJSON = assertion.response.clientDataJSON;
+ let rawId = assertion.rawId;
+ let sig = assertion.response.signature;
+ let userHandle = assertion.response.userHandle;
+
+ $.post(
+ '/login/2fa/webauthn/finish',
+ JSON.stringify({
+ cameFrom: {{ .CameFrom }},
+ restrictlogin: "on",
+ id: assertion.id,
+ rawId: bufferEncode(rawId),
+ type: assertion.type,
+ response: {
+ authenticatorData: bufferEncode(authData),
+ clientDataJSON: bufferEncode(clientDataJSON),
+ signature: bufferEncode(sig),
+ userHandle: bufferEncode(userHandle),
+ },
+ }),
+ function (data) {
+ return data
+ },
+ 'json')
+ })
+ .then((success) => {
+ document.getElementById('authentication-notice').style.display='none';
+ document.getElementById('retry-btn').style.display='none';
+ document.getElementById('result-success').style.display='block';
+ document.getElementById('result-error').style.display='none';
+ document.getElementById('continue-btn').style.display='inline-block';
+ return
+ })
+ .catch((error) => {
+ document.getElementById('authentication-notice').style.display='none';
+ document.getElementById('result-success').style.display='none';
+ document.getElementById('result-error').style.display='block';
+ document.getElementById('retry-btn').style.display='inline-block';
+ return
+ })
+ }
+
+</script>
+
+
+</body>
+</html>
diff --git a/web/templates/dashboard/dashboard.tmpl b/web/templates/dashboard/dashboard.tmpl
new file mode 100644
index 0000000..d77fd73
--- /dev/null
+++ b/web/templates/dashboard/dashboard.tmpl
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<style>
+ #bar > svg{
+ display:block;
+ }
+ #bar{
+ width:100%;
+ height:180px;
+ margin:0;
+ padding: 0;
+ }
+</style>
+
+<div class="container mb-5">
+
+
+ <h1>Dashboard</h1>
+ <hr/>
+
+ <div class="row mt-2 pb-3 d-none"><div class="col-12"><hr/></div></div>
+
+ <div class="row mt-4">
+ <div class="col-xs-12 col-md-6">
+ <h2>Requests & Drafts <small class="text-muted" style="font-size: 16px;">recently created</small></h2>
+ <table class="table table frontpage-table">
+
+ <tbody>
+
+ {{range .GLSAs}}
+ <tr>
+ <td class="text-left"><span class="badge {{if eq .Type "request"}}badge-danger{{else if eq .Type "draft"}}badge-warning{{else}}badge-success{{end}} text-capitalize">{{.Type}}</span></td>
+ <td><a href="/glsa/{{.Id}}" rel="nofollow" title="{{.Title}}">{{.Title}}</a></td>
+ <td class="frontpage-table-planet-author">{{.Creator.Nick}}</td>
+ </tr>
+ {{end}}
+
+ </tbody></table>
+ </div>
+ <div class="col-xs-12 col-md-6">
+ <h2>Recent Statistics <small class="text-muted" style="font-size: 16px;">from our <a href="/statistics">Statistics Page</a></small></h2>
+ <div id="bar"></div>
+ </div>
+ </div>
+
+ <div class="row mt-4">
+ <div class="col-xs-12 col-md-6">
+ <h2>Recent CVEs <small class="text-muted" style="font-size: 16px;">view more at the <a href="/cve/tool">CVE Tool</a></small></h2>
+ <table class="table frontpage-table">
+
+ <tbody>
+
+ {{range .CVEs}}
+ <tr>
+ <td class="frontpage-table-planet-author">{{.Id}}</td>
+ <td style="max-height: 30px; overflow-y: hidden; display: block;text-overflow: ellipsis;"><a href="#" rel="nofollow" title="{{.Description}}">{{.Description}}</a></td>
+ <td class="frontpage-table-planet-author">{{.LastModifiedDate}}</td>
+ </tr>
+ {{end}}
+
+ </tbody></table>
+ </div>
+ <div class="col-xs-12 col-md-6">
+ <h2>Recent Comments <small class="text-muted" style="font-size: 16px;"> on <a href="/all">GLSAs</a> and <a href="/cve/tool">CVEs</a></small></h2>
+ <table class="table ">
+
+ <tbody>
+
+ {{range .Comments}}
+ <tr>
+ <td>
+ {{if .GlsaId}}
+ <span class="badge badge-{{if eq .Type "approve"}}success{{else if eq .Type "decline"}}danger{{else}}primary{{end}}">
+ GLSA <span class="text-capitalize">{{if eq .Type "approve"}}{{.Type}}{{else if eq .Type "decline"}}{{.Type}}{{else}}{{end}}</span>
+ </span>
+ {{else}}
+ <span class="badge badge-info">
+ CVE
+ </span>
+ {{end}}
+ </td>
+ <td>
+ <a href="{{if .GlsaId}}/glsa/{{.GlsaId}}{{end}}">{{.Message}}</a>
+ </td>
+ <td class="text-right">
+ {{.User}}
+ </td>
+ <td class="text-right">
+ {{.Date}}
+ </td>
+ </tr>
+ {{end}}
+
+ </tbody></table>
+ </div>
+ </div>
+
+
+</div>
+
+
+
+{{template "footer" .}}
+
+
+<script>
+ window.CHART_DATA = [
+ {
+ type: 'GLSAs',
+ stage: 'request',
+ count: {{.StatisticsData.Requests}},
+ },
+ {
+ type: 'GLSAs',
+ stage: 'draft',
+ count: {{.StatisticsData.Drafts}},
+ },
+ {
+ type: 'GLSAs',
+ stage: 'glsa',
+ count: {{.StatisticsData.Glsas}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'New',
+ count: {{.StatisticsData.New}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'Assigned',
+ count: {{.StatisticsData.Assigned}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'Later',
+ count: {{.StatisticsData.Later}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'NFU',
+ count: {{.StatisticsData.NFU}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'Invalid',
+ count: {{.StatisticsData.Invalid}},
+ }
+ ];
+</script>
+
+<script src="/assets/statistics.js"></script>
+
+</body>
+</html>
diff --git a/web/templates/drafts/drafts.tmpl b/web/templates/drafts/drafts.tmpl
new file mode 100644
index 0000000..e0e5c10
--- /dev/null
+++ b/web/templates/drafts/drafts.tmpl
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<style>
+ td:hover {
+ cursor: pointer;
+ }
+</style>
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Drafts</h1>
+
+ <table id="table_id" class="drafts-data-table table table-hover">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Title</th>
+ <th>Requester</th>
+ <th>Date</th>
+ <th>Bug Ready</th>
+ <th>Approved</th>
+ <th>Workflow</th>
+ <th>Permissions</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ {{ range .Drafts}}
+ <tr>
+ <td>{{.Id}}</td>
+ <td>{{.Title}}</td>
+ <td>{{.Creator.Nick}}</td>
+ <td>{{.Created}}</td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Status.BugReady }}green{{else}}darkred{{end}};">{{if .Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Status.Approval}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Status.WorkflowStatus "own"}}fa-user{{else if eq .Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Status.WorkflowStatus}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+ </td>
+ </tr>
+ {{end}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div>
+
+
+{{template "footer" .}}
+
+<script src="assets/drafts.js"></script>
+
+</body>
+</html>
diff --git a/web/templates/glsa/edit.tmpl b/web/templates/glsa/edit.tmpl
new file mode 100644
index 0000000..4318d86
--- /dev/null
+++ b/web/templates/glsa/edit.tmpl
@@ -0,0 +1,768 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<form id="glsa_edit" action="/glsa/edit/{{.Glsa.Id}}" method="POST">
+
+ <div class="container mb-5 mt-2">
+ <div class="row">
+
+
+ <div class="col-sm-12" style="margin-bottom:10px;">
+ <small>
+ <div class="navigation">
+ <a href="/all"><b>GLSA List:</b></a>
+
+ ({{.Glsa.Id}} of {{.GlsaCount}})
+ &nbsp;&nbsp;
+ {{ if eq 1 .Glsa.Id }}
+ <span class="navigation_link"><i class="fa fa-angle-double-left" aria-hidden="true"></i> First</span>
+ {{else}}
+ <a href="/glsa/1" class="navigation_link" style="font-style: normal;"><i class="fa fa-angle-double-left" aria-hidden="true"></i> First</a>
+ {{end}}
+
+ {{ if eq (prevGLSA .Glsa.Id 1) .Glsa.Id }}
+ <span class="navigation_link"><i class="fa fa-angle-left" aria-hidden="true"></i> Prev</span>
+ {{else}}
+ <a href="/glsa/{{prevGLSA .Glsa.Id .GlsaCount}}" class="navigation_link" style="font-style: normal;"><i class="fa fa-angle-left" aria-hidden="true"></i> Prev</a>
+ {{end}}
+ &nbsp;
+ {{ if eq (nextGLSA .Glsa.Id .GlsaCount) .Glsa.Id }}
+ <span class="navigation_link">Next <i class="fa fa-angle-right" aria-hidden="true"></i></span>
+ {{else}}
+ <a href="/glsa/{{nextGLSA .Glsa.Id .GlsaCount}}" class="navigation_link" style="font-style: normal;">Next <i class="fa fa-angle-right" aria-hidden="true"></i></a>
+ {{end}}
+
+ {{ if eq .GlsaCount .Glsa.Id }}
+ <span class="navigation_link" style="">Last <i class="fa fa-angle-double-right" aria-hidden="true"></i></span>
+ {{else}}
+ <a href="/glsa/{{.GlsaCount}}" class="navigation_link" style="font-style: normal;">Last <i class="fa fa-angle-double-right" aria-hidden="true"></i></a>
+ {{end}}
+
+
+ <button type="submit" class="float-right btn btn-success btn-sm">Save GLSA</button>
+
+ <a href="/glsa/{{.Glsa.Id}}" class="float-right btn btn-outline-danger btn-sm" style="margin-right:5px;">Cancel</a>
+
+
+ </div>
+ </small>
+ </div>
+
+ <div class="col-12 mt-2">
+
+
+ <div class="card">
+ <div class="card-body">
+ <div class="row">
+
+ <div class="col-sm-12">
+ <span class="badge {{if eq .Glsa.Type "request"}}badge-danger{{else if eq .Glsa.Type "draft"}}badge-warning{{else}}badge-success{{end}} text-capitalize">{{.Glsa.Type}}</span>
+ <a style="color:#000000;" href="/glsa/{{.Glsa.Id}}">GLSA <span id="glsa-id">{{.Glsa.Id}}</span></a>
+
+ <span id="summary_container">
+ <small style="margin-left:5px;color:#505152;">Created: {{.Glsa.Created}}</small>
+ <small style="margin-left:5px;color:#505152;">Updated: {{.Glsa.Updated}}</small>
+ </span>
+
+
+
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Glsa.Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Glsa.Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Glsa.Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Glsa.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Glsa.Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Glsa.Status.WorkflowStatus "commented" }}blue{{else if eq .Glsa.Status.WorkflowStatus "own"}}green{{else if eq .Glsa.Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Glsa.Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Glsa.Status.WorkflowStatus "own"}}fa-user{{else if eq .Glsa.Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Glsa.Status.WorkflowStatus "commented" }}blue{{else if eq .Glsa.Status.WorkflowStatus "own"}}green{{else if eq .Glsa.Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Glsa.Status.WorkflowStatus "commented" }}blue{{else if eq .Glsa.Status.WorkflowStatus "own"}}green{{else if eq .Glsa.Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Glsa.Status.WorkflowStatus}}</span>
+ </span>
+
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Glsa.Status.Approval "declined" }}darkred{{else if eq .Glsa.Status.Approval "approved"}}green{{else if eq .Glsa.Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Glsa.Status.Approval "declined" }}darkred{{else if eq .Glsa.Status.Approval "approved"}}green{{else if eq .Glsa.Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Glsa.Status.Approval "declined" }}darkred{{else if eq .Glsa.Status.Approval "approved"}}green{{else if eq .Glsa.Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Glsa.Status.Approval}}</span>
+ </span>
+
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Glsa.Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Glsa.Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Glsa.Status.BugReady }}green{{else}}darkred{{end}};">{{if .Glsa.Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+
+
+
+ </div>
+
+ <div class="col-sm-12">
+ <h1 style="font-size: 20px;margin-top:10px;margin-bottom:4px;"><span id="short_desc_nonedit_display">
+ <input class="form-control p-2" type="text" name="title" value="{{.Glsa.Title}}" style="font-weight: 800; font-size: large; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </span></h1>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="col-12 mt-4">
+
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseMetadata" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Metadata</a>
+ </div>
+ <div class="card-body collapse show" id="collapseMetadata">
+ <div class="row">
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-unlock" aria-hidden="true"></i> Permission:</small>
+ <small style="font-size: 12px;">
+ <select name="permission" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value="public" {{if eq .Glsa.Permission "public"}}selected{{end}}>public</option>
+ <option value="confidential" {{if eq .Glsa.Permission "confidential"}}selected{{end}}>confidential</option>
+ </select>
+ </small>
+ </div>
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-address-card" aria-hidden="true"></i> Access: </small>
+ <small style="font-size: 12px;">
+ <select name="access" class="custom-select" style="display: inline-block;max-width: 150px;height: 30px;padding: .25rem .5rem;">
+ <option value="local" {{if eq .Glsa.Access "local"}}selected{{end}}>local</option>
+ <option value="remote" {{if eq .Glsa.Access "remote"}}selected{{end}}>remote</option>
+ <option value="local,remote" {{if eq .Glsa.Access "local,remote"}}selected{{end}}>local, remote</option>
+ </select>
+ </small>
+ </div>
+
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-balance-scale" aria-hidden="true"></i> Severity: </small>
+ <small style="font-size: 12px;">
+ <select name="severity" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value="low" {{if eq .Glsa.Severity "low"}}selected{{end}}>low</option>
+ <option value="normal" {{if eq .Glsa.Severity "normal"}}selected{{end}}>normal</option>
+ <option value="high" {{if eq .Glsa.Severity "high"}}selected{{end}}>high</option>
+ </select>
+ </small>
+ </div>
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-tag" aria-hidden="true"></i> Keyword:</small>
+ <small style="font-size: 12px;">
+ <input name="keyword" class="form-control" type="text" value="{{.Glsa.Keyword}}" style="max-width: 150px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseOverview" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Overview</a>
+ </div>
+ <div class="card-body collapse show" id="collapseOverview">
+ <div class="row">
+
+ <div class="col-sm-12">
+ <div class="row" style="margin-bottom:2px;">
+ <div class="col-md-auto align-h-right" style="min-width: 125px;padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-sticky-note-o" aria-hidden="true"></i> Synopsis:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;">
+ <input name="synopsis" class="form-control" type="text" value="{{.Glsa.Synopsis}}" style="height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-sm-12">
+ <div class="row mt-3" style="margin-bottom:2px;">
+ <div class="col-6" style="margin-bottom:2px;">
+ <div class="row">
+ <div class="col-md-auto align-h-right" style="min-width: 125px; padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-file-text-o" aria-hidden="true"></i> Description:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;">
+ <textarea name="description" style="" rows="3" onfocusin="this.rows=5" onfocusout="this.rows=3" class="form-control">{{.Glsa.Description}}</textarea>
+ </small>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-6">
+ <div class="row">
+ <div class="col-md-auto" style="min-width: 125px; padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-medkit" aria-hidden="true"></i> Workaround:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <textarea name="workaround" rows="3" onfocusin="this.rows=5" onfocusout="this.rows=3" class="form-control">{{.Glsa.Workaround}}</textarea>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12">
+ <div class="row mt-3 equal">
+ <div class="col-6">
+ <div class="row">
+ <div class="col-md-auto" style="min-width: 125px; padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-bullseye" aria-hidden="true"></i> Impact:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <textarea name="impact" rows="3" onfocusin="this.rows=5" onfocusout="this.rows=3" class="form-control">{{.Glsa.Impact}}</textarea>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-6">
+ <div class="row" style="padding-right:0px;color:#505050;">
+ <div class="col-md-auto align-h-right" style="min-width: 125px;padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-align-right" aria-hidden="true"></i> Background:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <textarea name="background" rows="3" onfocusin="this.rows=5" onfocusout="this.rows=3" class="form-control">{{.Glsa.Background}}</textarea>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseResolution" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Resolution</a>
+ </div>
+ <div class="card-body collapse show" id="collapseResolution">
+ <textarea name="resolution" rows="7" onfocusin="this.rows=10" onfocusout="this.rows=7" class="form-control">{{.Glsa.Resolution}}</textarea>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapsePackages" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Packages</a>
+ </div>
+ <div class="card-body collapse show" id="collapsePackages">
+ <div class="row">
+
+ <div class="col-sm-6">
+ <div class="row">
+ <div class="col-12 align-h-right mb-2" style="padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-times-circle-o" aria-hidden="true"></i> Vulnerable:</small>
+ </div>
+ </div>
+
+ <div id="vulnerable_package_list" class="row">
+ {{ range .Glsa.Packages}}
+ {{ if .Affected}}
+ <div class="col-12">
+ <div class="row">
+ <div class="col-md-auto" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_vulnerable" value="true" hidden />
+ <input name="package_atom" class="form-control" type="text" value="{{.Atom}}" style="width:150px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select name="package_identifier" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value=">=" {{if eq .Identifier ">="}}selected{{end}}>&gt;=</option>
+ <option value=">" {{if eq .Identifier ">"}}selected{{end}}>&gt; </option>
+ <option value="*>=" {{if eq .Identifier "*>="}}selected{{end}}>*&gt;=&nbsp;&nbsp;&nbsp; </option>
+ <option value="*>" {{if eq .Identifier "*>"}}selected{{end}}>*&gt; </option>
+ <option value="<=" {{if eq .Identifier "<="}}selected{{end}}>&lt;= </option>
+ <option value="<" {{if eq .Identifier "<"}}selected{{end}}>&lt; </option>
+ <option value="*<=" {{if eq .Identifier "*<="}}selected{{end}}>*&lt;= </option>
+ <option value="*<" {{if eq .Identifier "*<"}}selected{{end}}>*&lt; </option>
+ <option value=">=" {{if eq .Identifier "="}}selected{{end}}>= </option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_version" class="form-control" type="text" value="{{ .Version }}" style="width: 80px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_slot" class="form-control" type="text" value="{{ .Slot }}" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_arch" class="form-control" type="text" value="{{ .Arch }}" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select name="package_auto" class="custom-select" id="inputGroupSelect01" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value="yes" {{if .Auto}}selected{{end}}>yes&nbsp;&nbsp;&nbsp; </option>
+ <option value="no" {{if not .Auto}}selected{{end}}>no</option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <button type="button" class="btn btn-outline-danger btn-delete-package" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block">-</button>
+ </small>
+ </div>
+ </div>
+ </div>
+ {{end}}
+ {{end}}
+ </div>
+
+ <div class="row mt-2"><div class="col-12"><hr/></div></div>
+
+
+ <div class="row mt-2">
+ <div class="col-md-auto" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-vulnerable-package-atom" class="form-control" type="text" placeholder="add new package" style="width:150px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select id="add-vulnerable-package-identifier" class="custom-select" id="inputGroupSelect01" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value=">=" selected>&gt;=</option>
+ <option value=">">&gt; </option>
+ <option value="*>=">*&gt;=&nbsp;&nbsp;&nbsp; </option>
+ <option value="*>">*&gt; </option>
+ <option value="<=">&lt;= </option>
+ <option value="<">&lt; </option>
+ <option value="*<=">*&lt;= </option>
+ <option value="*<">*&lt; </option>
+ <option value="=">= </option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-vulnerable-package-version" class="form-control" type="text" placeholder="version" style="width: 80px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-vulnerable-package-slot" class="form-control" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-vulnerable-package-arch" class="form-control" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select id="add-vulnerable-package-auto" class="custom-select" id="inputGroupSelect01" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value="true" selected>yes&nbsp;&nbsp;&nbsp; </option>
+ <option value="false">no</option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <button type="button" class="btn btn-outline-success btn-add-vulnerable-package" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block">+</button>
+ </small>
+ </div>
+ </div>
+
+ </div>
+
+ <div class="col-sm-6">
+
+ <div class="row">
+ <div class="col-12 mb-2" style="padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-shield" aria-hidden="true"></i> Unaffected:</small>
+ </div>
+ </div>
+
+ <div id="unaffected_package_list" class="row">
+ {{ range .Glsa.Packages}}
+ {{ if not .Affected}}
+
+ <div class="col-12">
+ <div class="row">
+ <div class="col-md-auto" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_vulnerable" type="text" value="false" hidden />
+ <input name="package_atom" class="form-control" type="text" value="{{.Atom}}" style="width:150px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select name="package_identifier" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value=">=" {{if eq .Identifier ">="}}selected{{end}}>&gt;=</option>
+ <option value=">" {{if eq .Identifier ">"}}selected{{end}}>&gt; </option>
+ <option value="*>=" {{if eq .Identifier "*>="}}selected{{end}}>*&gt;=&nbsp;&nbsp;&nbsp; </option>
+ <option value="*>" {{if eq .Identifier "*>"}}selected{{end}}>*&gt; </option>
+ <option value="<=" {{if eq .Identifier "<="}}selected{{end}}>&lt;= </option>
+ <option value="<" {{if eq .Identifier "<"}}selected{{end}}>&lt; </option>
+ <option value="*<=" {{if eq .Identifier "*<="}}selected{{end}}>*&lt;= </option>
+ <option value="*<" {{if eq .Identifier "*<"}}selected{{end}}>*&lt; </option>
+ <option value=">=" {{if eq .Identifier "="}}selected{{end}}>= </option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_version" class="form-control" type="text" value="{{.Version}}" style="width: 80px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_slot" class="form-control" type="text" value="{{.Slot}}" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input name="package_arch" class="form-control" type="text" value="{{.Arch}}" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select name="package_auto" class="custom-select" id="inputGroupSelect01" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value="yes" {{if .Auto}}selected{{end}}>yes&nbsp;&nbsp;&nbsp; </option>
+ <option value="no" {{if not .Auto}}selected{{end}}>no</option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <button type="button" class="btn btn-outline-danger btn-delete-package" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block">-</button>
+ </small>
+ </div>
+ </div>
+ </div>
+
+ {{end}}
+ {{end}}
+ </div>
+
+ <div class="row mt-2"><div class="col-12"><hr/></div></div>
+
+ <div class="row mt-2">
+ <div class="col-md-auto" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-unaffected-package-atom" class="form-control" type="text" placeholder="add new package" style="width:150px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select id="add-unaffected-package-identifier" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value=">=" selected>&gt;=</option>
+ <option value=">">&gt; </option>
+ <option value="*>=">*&gt;=&nbsp;&nbsp;&nbsp; </option>
+ <option value="*>">*&gt; </option>
+ <option value="<=">&lt;= </option>
+ <option value="<">&lt; </option>
+ <option value="*<=">*&lt;= </option>
+ <option value="*<">*&lt; </option>
+ <option value="=">= </option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-unaffected-package-version" class="form-control" type="text" placeholder="version" style="width: 80px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-unaffected-package-slot" class="form-control" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <input id="add-unaffected-package-arch" class="form-control" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <select id="add-unaffected-package-auto" class="custom-select" style="display: inline-block;max-width: 100px;height: 30px;padding: .25rem .5rem;">
+ <option value="1" selected>yes&nbsp;&nbsp;&nbsp; </option>
+ <option value="1">no</option>
+ </select>
+ </small>
+ </div>
+ <div class="col-md-auto pl-0" style="color:#292929;">
+ <small style="font-size: 12px;">
+ <button type="button" class="btn btn-outline-success btn-add-unaffected-package" type="text" placeholder="*" style="width: 30px; height: 30px;padding: .25rem .5rem;display: inline-block">+</button>
+ </small>
+ </div>
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="col-6 px-0">
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseBugs" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Bugs</a>
+ </div>
+ <div class="card-body collapse show" id="collapseBugs">
+ <div id="bugs-list" class="row">
+
+ {{ range $key, $value := .Glsa.Bugs }}
+
+ <div class="col-sm-12 {{if ne $key 0}}mt-2{{end}}">
+ <div class="row" style="margin-bottom:2px;">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small style="font-size: 12px;">
+
+ <small style="font-size: 12px;">
+ <input name="bugs" class="form-control" type="text" value="{{$value.Id}}" style="max-width: 75px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+
+ </small>
+ </div>
+ <div class="col py-1" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;">{{$value.Summary}}</small>
+
+ </div>
+
+ <small style="font-size: 12px;margin-top: 2px;">
+ <button type="button" class="btn btn-outline-danger mr-3 py-0 btn-delete-bug" type="text" style="height: 25px;display: inline-block">Delete</button>
+ </small>
+ </div>
+ </div>
+
+ {{ end }}
+
+ </div>
+
+ <div class="row">
+ <div class="col-sm-12"><hr/></div>
+
+ <div class="col-sm-12">
+
+ <div class="row equal">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small style="font-size: 12px;">
+
+ <small style="font-size: 12px;">
+ <input class="form-control" type="text" id="new_bug_id" placeholder="bug id" style="max-width: 75px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </small>
+ </div>
+ <div class="col py-1" style="color:#292929;padding-left:10px;">
+ <small class="text-muted" style="font-size: 12px;">Enter a bug id to add a new bug</small>
+ </div>
+ <small style="font-size: 12px;margin-top: 2px;">
+ <button type="button" class="btn btn-outline-success btn-add-bug mr-3 py-0" type="text" style="height: 25px;display: inline-block">Add</button>
+ </small>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ <div class="col-6 px-0">
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseReferences" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> References</a>
+ </div>
+ <div class="card-body collapse show" id="collapseReferences">
+ <div id="reference_list" class="row">
+
+ {{ range $key, $value := .Glsa.References }}
+
+ <div class="col-sm-12 {{if ne $key 0}}mt-2{{end}}">
+ <div class="row" style="margin-bottom:2px;">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small style="font-size: 12px;">
+
+ <small style="font-size: 12px;">
+ <input name="reference_title" class="form-control" type="text" value="{{$value.Title}}" style="max-width: 125px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+
+ </small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;">
+ <input name="reference_url" class="form-control" type="text" value="{{$value.URL}}" style="height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </div>
+ <small style="font-size: 12px;margin-top: 2px;">
+ <button type="button" class="btn btn-outline-danger btn-delete-reference mr-3 py-0" type="text" style="height: 25px;display: inline-block">Delete</button>
+ </small>
+ </div>
+ </div>
+
+ {{ end }}
+ </div>
+
+ <div class="row">
+
+ <div class="col-sm-12"><hr/></div>
+
+ <div class="col-sm-12">
+
+ <div class="row equal">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small style="font-size: 12px;">
+ <small style="font-size: 12px;">
+ <input id="new_reference_title" class="form-control" type="text" placeholder="CVE ID" style="max-width: 125px;height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+ </small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <small class="text-muted" style="font-size: 12px;">
+
+ <input id="new_reference_url" class="form-control" type="text" placeholder="Reference URL" style="height: 30px;padding: .25rem .5rem;display: inline-block" />
+ </small>
+
+
+ </div>
+ <small style="font-size: 12px;margin-top: 2px;">
+ <button type="button" class="btn btn-outline-success btn-add-reference mr-3 py-0" type="text" style="height: 25px;display: inline-block">Add</button>
+ </small>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+ {{if .User.Permissions.Glsa.Comment}}
+ <div class="col-12 mt-3"><hr/></div>
+ {{else if .Glsa.Comments}}
+ <div class="col-12 mt-3"><hr/></div>
+ {{end}}
+
+ <div class="col-12">
+ <div id="comments-section" class="row">
+
+ {{ range .Glsa.Comments}}
+
+ <div class="col-12 mt-3">
+ <div id="c0" class="card" style="padding:0px;{{if eq .Type "approve"}}background:#DFF0D8;{{else if eq .Type "decline"}}background:#F2DEDE;{{end}}">
+ <div class="card-header" style="{{if eq .Type "approve"}}background:#DFF0D8;{{else if eq .Type "decline"}}background:#F2DEDE;{{end}}">
+ <div class="row">
+ <div class="col-sm-8">
+ <div class="row">
+ <div class="col-sm-12">
+ <span style="color:#000!important;">
+ <span class="vcard"><a class="email" href="mailto:max@magorsch.de" title="Max Magorsch <max@magorsch.de>"> <b class="text-dark">{{.User}}</b></a></span>
+ </span>
+ <span class="ml-2">
+
+ <span class="badge badge-secondary" title="{{.UserBadge.Description}}" style="background: none;border: 1px solid {{.UserBadge.Color}};">
+ <span class="text-capitalize" style="color: {{.UserBadge.Color}};">{{.UserBadge.Name}}</span>
+ </span>
+ </span>
+ </div>
+ <div class="col-sm-12">
+ <span style="color:#505050; font-weight: normal;margin-left:2px;">
+ {{.Date}}
+ </span>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-sm-4">
+ <div>
+ <a href="#" class="btn btn-default btn-xs float-right" style="background:transparent;color:#505050;border:none;"><i class="fa fa-compress" aria-hidden="true"></i></a>
+ <a class="btn btn-default btn-xs float-right" href="#add_comment" style="background:transparent;color:#505050;border:none;"><i class="fa fa-reply" aria-hidden="true"></i></a>
+ <a href="#" class="btn btn-default btn-xs float-right" style="background:transparent;color:#505050;border:none;"><i class="fa fa-tag" aria-hidden="true"></i></a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="card-body">
+ {{if eq .Type "approve"}}<b class="mr-2">Approved: </b>{{else if eq .Type "decline"}}<b class="mr-2">Declined: </b>{{end}}
+ {{.Message}}
+ </div>
+ </div>
+ </div>
+
+ {{end}}
+
+ </div>
+ </div>
+
+
+ {{if .User.Permissions.Glsa.Comment}}
+ <div class="col-12 mt-4">
+ <div id="add_comment">
+ <label class="" for="comment" accesskey="c"><b>Add Comment</b></label>
+ <div class="row">
+ <div class="col-12">
+ <div id="comment_tabs" role="tablist">
+ <div id="comment_tab" class="comment_tab active_comment_tab" role="tab" aria-selected="true">Comment</div>
+ <div id="comment_preview_tab" class="comment_tab" role="tab" aria-selected="false">Preview</div>
+ </div>
+ <textarea name="comment" id="comment" class="form-control comment-textarea" rows="10" cols="60" onfocusout="this.rows=10" onfocus="this.rows=15"></textarea>
+ <br><div class="knob-buttons">
+ {{if .User.Permissions.Glsa.Approve}}
+ {{if eq .Glsa.CreatorId .User.Id}}
+ {{if .User.Permissions.Glsa.ApproveOwnGlsa}}
+ <input class="btn btn-outline-success btn-sm float-right mr-2" type="button" value="Approve" id="save-new-glsa-approve">
+ {{end}}
+ {{else}}
+ <input class="btn btn-outline-success btn-sm float-right mr-2" type="button" value="Approve" id="save-new-glsa-approve">
+ {{end}}
+ {{end}}
+ {{if .User.Permissions.Glsa.Decline}}
+ <input class="btn btn-outline-danger btn-sm float-right mr-2" type="button" value="Decline" id="save-new-glsa-decline">
+ {{end}}
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{end}}
+
+
+ </div>
+ </div>
+
+</form>
+
+
+
+<script src="/assets/glsa.js"></script>
+<script src="/assets/edit.js"></script>
+
+
+{{template "footer" .}}
+
+</body>
+</html>
diff --git a/web/templates/glsa/show.tmpl b/web/templates/glsa/show.tmpl
new file mode 100644
index 0000000..c9a9591
--- /dev/null
+++ b/web/templates/glsa/show.tmpl
@@ -0,0 +1,495 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5 mt-2">
+ <div class="row">
+
+
+ <div class="col-sm-12" style="margin-bottom:10px;">
+ <small>
+ <div class="navigation">
+ <a href="/all"><b>GLSA List:</b></a>
+
+ ({{.Glsa.Id}} of {{.GlsaCount}})
+ &nbsp;&nbsp;
+
+ {{ if eq 1 .Glsa.Id }}
+ <span class="navigation_link"><i class="fa fa-angle-double-left" aria-hidden="true"></i> First</span>
+ {{else}}
+ <a href="/glsa/1" class="navigation_link" style="font-style: normal;"><i class="fa fa-angle-double-left" aria-hidden="true"></i> First</a>
+ {{end}}
+
+ {{ if eq (prevGLSA .Glsa.Id 1) .Glsa.Id }}
+ <span class="navigation_link"><i class="fa fa-angle-left" aria-hidden="true"></i> Prev</span>
+ {{else}}
+ <a href="/glsa/{{prevGLSA .Glsa.Id 1}}" class="navigation_link" style="font-style: normal;"><i class="fa fa-angle-left" aria-hidden="true"></i> Prev</a>
+ {{end}}
+ &nbsp;
+ {{ if eq (nextGLSA .Glsa.Id .GlsaCount) .Glsa.Id }}
+ <span class="navigation_link">Next <i class="fa fa-angle-right" aria-hidden="true"></i></span>
+ {{else}}
+ <a href="/glsa/{{nextGLSA .Glsa.Id .GlsaCount}}" class="navigation_link" style="font-style: normal;">Next <i class="fa fa-angle-right" aria-hidden="true"></i></a>
+ {{end}}
+
+ {{ if eq .GlsaCount .Glsa.Id }}
+ <span class="navigation_link" style="">Last <i class="fa fa-angle-double-right" aria-hidden="true"></i></span>
+ {{else}}
+ <a href="/glsa/{{.GlsaCount}}" class="navigation_link" style="font-style: normal;">Last <i class="fa fa-angle-double-right" aria-hidden="true"></i></a>
+ {{end}}
+
+ <a href="/glsa/edit/{{.Glsa.Id}}" class="float-right btn btn-primary btn-sm">Edit GLSA</a>
+
+ {{if .User.Permissions.Glsa.Release}}
+ {{if eq .Glsa.Type "draft"}}
+ {{if .Glsa.Status.BugReady }}
+ {{if eq .Glsa.Status.Approval "approved"}}
+ <a href="/glsa/release/{{.Glsa.Id}}" class="float-right btn btn-outline-success btn-sm" style="margin-right:5px;">Release advisory</a>
+ {{end}}
+ {{end}}
+ {{end}}
+ {{end}}
+
+ {{if .User.Permissions.Glsa.Delete}}
+ <button type="button" id="btn-delete-glsa" class="float-right btn btn-outline-danger btn-sm" style="margin-right:5px;">Delete</button>
+ {{end}}
+
+ <button onclick="window.scrollTo(0,document.body.scrollHeight);" class="float-right btn btn-outline-secondary btn-sm" style="margin-right:5px;">Bottom <i class="fa fa-long-arrow-down" aria-hidden="true"></i>
+ </button>
+
+
+
+
+ </div>
+ </small>
+ </div>
+
+ <div class="col-12 mt-2">
+
+
+ <div class="card">
+ <div class="card-body">
+ <div class="row">
+
+ <div class="col-sm-12">
+ <span class="badge {{if eq .Glsa.Type "request"}}badge-danger{{else if eq .Glsa.Type "draft"}}badge-warning{{else}}badge-success{{end}} text-capitalize">{{.Glsa.Type}}</span>
+ &nbsp;<a style="color:#000000;" href="/glsa/{{.Glsa.Id}}">GLSA <span id="glsa-id">{{.Glsa.Id}}</span></a>
+
+ <span id="summary_container">
+ <small style="margin-left:5px;color:#505152;">Created: {{.Glsa.Created}}</small>
+ <small style="margin-left:5px;color:#505152;">Updated: {{.Glsa.Updated}}</small>
+ </span>
+
+
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Glsa.Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Glsa.Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Glsa.Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Glsa.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Glsa.Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Glsa.Status.WorkflowStatus "commented" }}blue{{else if eq .Glsa.Status.WorkflowStatus "own"}}green{{else if eq .Glsa.Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Glsa.Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Glsa.Status.WorkflowStatus "own"}}fa-user{{else if eq .Glsa.Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Glsa.Status.WorkflowStatus "commented" }}blue{{else if eq .Glsa.Status.WorkflowStatus "own"}}green{{else if eq .Glsa.Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Glsa.Status.WorkflowStatus "commented" }}blue{{else if eq .Glsa.Status.WorkflowStatus "own"}}green{{else if eq .Glsa.Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Glsa.Status.WorkflowStatus}}</span>
+ </span>
+
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Glsa.Status.Approval "declined" }}darkred{{else if eq .Glsa.Status.Approval "approved"}}green{{else if eq .Glsa.Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Glsa.Status.Approval "declined" }}darkred{{else if eq .Glsa.Status.Approval "approved"}}green{{else if eq .Glsa.Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Glsa.Status.Approval "declined" }}darkred{{else if eq .Glsa.Status.Approval "approved"}}green{{else if eq .Glsa.Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Glsa.Status.Approval}}</span>
+ </span>
+
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Glsa.Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Glsa.Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Glsa.Status.BugReady }}green{{else}}darkred{{end}};">{{if .Glsa.Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+
+
+ </div>
+
+ <div class="col-sm-12">
+ <h1 style="font-size: 20px;margin-top:10px;margin-bottom:4px;"><span id="short_desc_nonedit_display">{{.Glsa.Title}} </span></h1>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="col-12 mt-4">
+
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseMetadata" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Metadata</a>
+ </div>
+ <div class="card-body collapse show" id="collapseMetadata">
+ <div class="row">
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-unlock" aria-hidden="true"></i> Permission:</small>
+ <span style="">{{.Glsa.Permission}}</span>
+ </div>
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-address-card" aria-hidden="true"></i> Access: </small>
+ <span style="">{{.Glsa.Access}}</span>
+ </div>
+
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-balance-scale" aria-hidden="true"></i> Severity: </small>
+ <span style="">{{.Glsa.Severity}}</span>
+ </div>
+ <div class="col-sm-3">
+ <small class="mr-2 text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-tag" aria-hidden="true"></i> Keyword:</small>
+ <span style="">{{.Glsa.Keyword}}</span>
+ </div>
+
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseOverview" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Overview</a>
+ </div>
+ <div class="card-body collapse show" id="collapseOverview">
+ <div class="row">
+
+ <div class="col-sm-12">
+
+ <div class="row" style="margin-bottom:2px;">
+ <div class="col-md-auto align-h-right" style="min-width: 125px;padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-sticky-note-o" aria-hidden="true"></i> Synopsis:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ {{.Glsa.Synopsis}}
+ </div>
+ </div>
+ </div>
+
+ <div class="col-sm-12">
+ <div class="row mt-3" style="margin-bottom:2px;">
+ <div class="col-6" style="margin-bottom:2px;">
+ <div class="row">
+ <div class="col-md-auto align-h-right" style="min-width: 125px; padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-file-text-o" aria-hidden="true"></i> Description:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <span>{{.Glsa.Description}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-6">
+ <div class="row">
+ <div class="col-md-auto" style="min-width: 125px; padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-medkit" aria-hidden="true"></i> Workaround:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <span>{{.Glsa.Workaround}}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12">
+ <div class="row mt-3 equal">
+ <div class="col-6">
+ <div class="row">
+ <div class="col-md-auto" style="min-width: 125px; padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-bullseye" aria-hidden="true"></i> Impact:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <span>{{.Glsa.Impact}}</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-6">
+ <div class="row" style="padding-right:0px;color:#505050;">
+ <div class="col-md-auto align-h-right" style="min-width: 125px;padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-align-right" aria-hidden="true"></i> Background:</small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <span>{{.Glsa.Background}}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseResolution" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Resolution</a>
+ </div>
+ <div class="card-body collapse show" id="collapseResolution">
+ {{ if .Glsa.Resolution}}
+ {{ .Glsa.Resolution}}
+ {{else}}
+ <div class="w-100 text-center"><i>- no resolution yet -</i></div>
+ {{end}}
+
+ </div>
+ </div>
+ </div>
+
+
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapsePackages" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Packages</a>
+ </div>
+ <div class="card-body collapse show" id="collapsePackages">
+ {{ if .Glsa.Resolution}}
+ <div class="row">
+
+ <div class="col-sm-6">
+
+ {{ range .Glsa.Packages}}
+ {{ if .Affected}}
+
+ <div class="row" style="margin-bottom:2px;">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-times-circle-o" aria-hidden="true"></i> Vulnerable:</small>
+ </div>
+
+ <div class="col pl-3" style="color:#292929;padding-left:10px;">
+ <span style="font-size: 12px;"> {{.Identifier}}{{.Atom}}-{{.Version}}:{{.Slot}} on {{.Arch}} (auto: {{.Auto}})</span>
+ </div>
+ </div>
+
+ {{end}}
+ {{end}}
+
+ </div>
+
+ <div class="col-sm-6">
+ {{ range .Glsa.Packages}}
+ {{ if not .Affected}}
+ <div class="row equal">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small class="text-uppercase text-muted" style="font-size: 12px;"><i class="fa fa-shield" aria-hidden="true"></i> Unaffected:</small>
+ </div>
+ <div class="col pl-3" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;"> {{.Identifier}}{{.Atom}}-{{.Version}}:{{.Slot}} on {{.Arch}} (auto: {{.Auto}}) </small>
+ </div>
+ </div>
+ {{end}}
+ {{end}}
+
+ </div>
+
+ </div>
+ {{else}}
+ <div class="w-100 text-center"><i>- no packages yet -</i></div>
+ {{end}}
+ </div>
+ </div>
+ </div>
+
+
+ <div class="col-6 px-0">
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseBugs" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> Bugs</a>
+ </div>
+ <div class="card-body collapse show" id="collapseBugs">
+ {{ if .Glsa.Bugs}}
+ <div class="row">
+
+ {{ range .Glsa.Bugs}}
+
+ <div class="col-sm-12">
+ <div class="row" style="margin-bottom:2px;">
+ <div class="col-sm-2 align-h-right" style="padding-right:0px;color:#505050;">
+ <small style="font-size: 12px;" title="{{if bugIsReady .}}bug is ready{{else}}bug is not ready{{end}}">
+
+ <svg class="mb-1" style="width:18px;height:18px" viewBox="0 0 24 24">
+ <path fill="{{if bugIsReady .}}green{{else}}grey{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span style="color:{{if bugIsReady .}}green{{end}};">{{.Id}}</span>:</small>
+ </div>
+ <div class="col-sm-10" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;">{{.Summary}}</small>
+ </div>
+ </div>
+ </div>
+
+ {{end}}
+
+ </div>
+ {{else}}
+ <div class="w-100 text-center"><i>- no bugs yet -</i></div>
+ {{end}}
+ </div>
+ </div>
+ </div>
+
+ </div>
+ <div class="col-6 px-0">
+
+ <div class="col-12 mt-4">
+ <div class="card">
+ <div class="card-header" style="padding-left: 8px; padding-right: 8px; padding-top: 4px; padding-bottom: 4px;font-weight:bold;font-size:13px;">
+ <a data-toggle="collapse" href="#collapseReferences" style="outline : none;text-decoration: none;color:#000;" onclick="this.getElementsByTagName('i')[0].classList.toggle('fa-caret-down');this.getElementsByTagName('i')[0].classList.toggle('fa-caret-right');">
+ <i class="fa fa-caret-down" aria-hidden="true" style="margin-right:5px;cursor: pointer"></i> References</a>
+ </div>
+ <div class="card-body collapse show" id="collapseReferences">
+ {{ if .Glsa.References}}
+ <div class="row">
+
+ {{ range .Glsa.References}}
+
+ <div class="col-sm-12" style="height: 25px;">
+ <div class="row">
+ <div class="col-md-auto align-h-right" style="padding-right:0px;color:#505050;">
+ <small style="font-size: 12px;">
+
+ <small style="font-size: 12px;">
+ <i class="fa fa-fire" aria-hidden="true"></i>
+ {{.Title}}
+ </small>
+
+ </small>
+ </div>
+ <div class="col" style="color:#292929;padding-left:10px;">
+ <small style="font-size: 12px;"> {{.URL}} </small>
+ </div>
+ </div>
+ </div>
+
+ {{end}}
+
+
+ </div>
+ {{else}}
+ <div class="w-100 text-center"><i>- no references yet -</i></div>
+ {{end}}
+ </div>
+ </div>
+ </div>
+
+ </div>
+
+
+ {{if .User.Permissions.Glsa.Comment}}
+ <div class="col-12 mt-3"><hr/></div>
+ {{else if .Glsa.Comments}}
+ <div class="col-12 mt-3"><hr/></div>
+ {{end}}
+
+ <div class="col-12">
+ <div id="comments-section" class="row">
+
+ {{ range .Glsa.Comments}}
+
+ <div class="col-12 mt-3">
+ <div id="c0" class="card" style="padding:0px;{{if eq .Type "approve"}}background:#DFF0D8;{{else if eq .Type "decline"}}background:#F2DEDE;{{end}}">
+ <div class="card-header" style="{{if eq .Type "approve"}}background:#DFF0D8;{{else if eq .Type "decline"}}background:#F2DEDE;{{end}}">
+ <div class="row">
+ <div class="col-sm-8">
+ <div class="row">
+ <div class="col-sm-12">
+ <span style="color:#000!important;">
+ <span class="vcard"><a class="email" href="mailto:max@magorsch.de" title="Max Magorsch <max@magorsch.de>"> <b class="text-dark">{{.User}}</b></a></span>
+ </span>
+ <span class="ml-2">
+
+ <span class="badge badge-secondary" title="{{.UserBadge.Description}}" style="background: none;border: 1px solid {{.UserBadge.Color}};">
+ <span class="text-capitalize" style="color: {{.UserBadge.Color}};">{{.UserBadge.Name}}</span>
+ </span>
+ </span>
+ </div>
+ <div class="col-sm-12">
+ <span style="color:#505050; font-weight: normal;margin-left:2px;">
+ {{.Date}}
+ </span>
+ </div>
+ </div>
+ </div>
+
+ <div class="col-sm-4">
+ <div>
+ <a href="#" class="btn btn-default btn-xs float-right" style="background:transparent;color:#505050;border:none;"><i class="fa fa-compress" aria-hidden="true"></i></a>
+ <a class="btn btn-default btn-xs float-right" href="#add_comment" style="background:transparent;color:#505050;border:none;"><i class="fa fa-reply" aria-hidden="true"></i></a>
+ <a href="#" class="btn btn-default btn-xs float-right" style="background:transparent;color:#505050;border:none;"><i class="fa fa-tag" aria-hidden="true"></i></a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="card-body">
+ {{if eq .Type "approve"}}<b class="mr-2">Approved: </b>{{else if eq .Type "decline"}}<b class="mr-2">Declined: </b>{{end}}
+ {{.Message}}
+ </div>
+ </div>
+ </div>
+
+ {{end}}
+
+ </div>
+ </div>
+
+ {{if .User.Permissions.Glsa.Comment}}
+ <div class="col-12 mt-4">
+ <div id="add_comment">
+ <label class="" for="comment" accesskey="c"><b>Add Comment</b></label>
+ <div class="row">
+ <div class="col-12">
+ <div id="comment_tabs" role="tablist">
+ <div id="comment_tab" class="comment_tab active_comment_tab" role="tab" aria-selected="true">Comment</div>
+ <div id="comment_preview_tab" class="comment_tab" role="tab" aria-selected="false">Preview</div>
+ </div>
+ <textarea name="comment" id="comment" class="form-control comment-textarea" rows="10" cols="60" onfocusout="this.rows=10" onfocus="this.rows=15"></textarea>
+ <br><div class="knob-buttons">
+ <input class="btn btn-outline-primary btn-sm float-right" type="button" value="Add Comment" id="save-new-glsa-comment">
+ {{if .User.Permissions.Glsa.Approve}}
+ {{if eq .Glsa.CreatorId .User.Id}}
+ {{if .User.Permissions.Glsa.ApproveOwnGlsa}}
+ <input class="btn btn-outline-success btn-sm float-right mr-2" type="button" value="Approve" id="save-new-glsa-approve">
+ {{end}}
+ {{else}}
+ <input class="btn btn-outline-success btn-sm float-right mr-2" type="button" value="Approve" id="save-new-glsa-approve">
+ {{end}}
+ {{end}}
+ {{if .User.Permissions.Glsa.Decline}}
+ <input class="btn btn-outline-danger btn-sm float-right mr-2" type="button" value="Decline" id="save-new-glsa-decline">
+ {{end}}
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{end}}
+
+ </div>
+</div>
+
+<script src="/assets/glsa.js"></script>
+
+
+{{template "footer" .}}
+
+</body>
+</html>
diff --git a/web/templates/home/home.tmpl b/web/templates/home/home.tmpl
new file mode 100644
index 0000000..433be8a
--- /dev/null
+++ b/web/templates/home/home.tmpl
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+
+ {{ if .User.Show2FANotice }}
+ <div id="twofactor-notice" class="alert alert-warning pb-4" role="alert" style="background-color: #FCF8E3;">
+ <i class="fa fa-times float-right" onclick="document.getElementById('twofactor-notice').style.display = 'none';" style="cursor: pointer;" aria-hidden="true"></i>
+
+ <small><h4>You are currently <u>not</u> using any Two-Factor-Authentication.</h4> The GLSAMaker offers the ability to protect certain operations (such as the login or releasing an advisory) by using WebAuthn (e.g. Security Keys) and Time-based one-time password (e.g. Google Authenticator).
+ <br/>
+ <span class="float-right"> <a id="disable-twofactor-notice" href="#" class="mr-1">Don't show again</a> &ndash; <a class="ml-1" href="/account/2fa">2FA Settings</a></span>
+ </small>
+ </div>
+ {{ end }}
+
+
+ <div class="row mt-2">
+ <div class="col-12">
+
+
+ <div id="page-index">
+
+ <div class="jumbotron">
+ <h2 class="site-welcome stick-top" style="font-family: Bitter,'Open Sans',sans-serif; font-size: 2.5em;text-align: center;margin-bottom: 1em;">Welcome to Gentoo's GLSAMaker</h2>
+ <div>
+ <form action="/search" method="get">
+
+ <div class="row">
+ <div class="col-lg-12">
+ <div class="input-group">
+ <input id="large-quicksearch" name="q" class="form-control" title="Quick Search" placeholder="Enter a glsa or cve # or some search terms" autofocus="" required="">
+ <div class="btn-group">
+ <a href="page.cgi?id=quicksearch.html" title="Quick Search help" class="btn btn-outline-secondary" style="background: #fff;border-color:#ced4da;border-top-left-radius: 0px;border-bottom-left-radius: 0px;" type="button"><span class="fa fa-question"></span></a>
+ <button id="find" type="submit" class="btn btn-outline-secondary" style="background: #fff;border-color:#ced4da;" value="Quick Search">Search</button>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ </form>
+
+ <ul class="additional_links" style="display: none;">
+ </ul>
+ </div><br>
+ <small class="text-muted">The GLSAMaker supports different queries to navigate and search. Have look at the <a href="/about/search">documentation</a>.<br>
+ The GLSAMaker can be used either by using this website or by using the corresponding <a href="/about/cli">command line tool</a>.</small>
+
+ </div>
+ </div>
+
+
+ </div>
+ </div>
+
+ <!----------- page content ---------------->
+
+
+ <div class="bz_common_actions">
+
+ <div class="row" style="width:80%; margin: 0 auto;">
+
+ <div class="col-lg-3" style="cursor:pointer;">
+ <a href="/new">
+ <div class="row index_page_icon" style="height: 170px; width: 145px; margin: 0 auto">
+ <div class="col-12">
+ <i class="fa fa-file-text" aria-hidden="true" style="font-size:100px;"></i>
+ </div>
+ <div class="col-12 mt-0" style="margin-top: 15px;">
+ File a Request
+ </div>
+ </div>
+ </a>
+ </div>
+
+ <div class="col-lg-3" style="cursor:pointer;">
+ <a href="/dashboard">
+ <div class="row index_page_icon" style="height: 170px; width: 145px; margin: 0 auto">
+ <div class="col-12">
+ <i class="fa fa-tachometer" aria-hidden="true" style="font-size:100px;"></i>
+ </div>
+ <div class="col-12 mt-0" style="margin-top: 15px;">
+ Dashboard
+ </div>
+ </div>
+ </a>
+ </div>
+
+
+ <div class="col-lg-3" onclick="" style="cursor:pointer;">
+ <a href="/cve/tool">
+ <div class="row index_page_icon" style="height: 170px; width: 145px; margin: 0 auto">
+ <div class="col-12">
+ <i class="fa fa-table" aria-hidden="true" style="font-size:100px;"></i>
+ </div>
+ <div class="col-12 mt-0" style="margin-top: 15px;">
+ CVE Tool
+ </div>
+ </div>
+ </a>
+ </div>
+
+ <div class="col-lg-3" style="cursor:pointer;">
+ <a href="/statistics">
+ <div class="row index_page_icon" style="height: 170px; width: 145px; margin: 0 auto">
+ <div class="col-12">
+ <i class="fa fa-bar-chart" aria-hidden="true" style="font-size:100px;"></i>
+ </div>
+ <div class="col-12 mt-0" style="margin-top: 15px;">
+ Statistics
+ </div>
+ </div>
+ </a>
+ </div>
+ </div>
+
+ <br><br><br><br><br>
+ <ul style="display: none">
+ <li>
+ <a id="enter_bug" href="enter_bug.cgi"><span>File a Bug</span></a>
+
+
+ </li>
+ <li>
+ <a id="query" href="query.cgi"><span>Search</span></a>
+ </li>
+ <li>
+ <a id="account" href="userprefs.cgi"><span>User Preferences</span></a>
+ </li>
+ <li>
+ <a id="help" href="https://bugzilla.readthedocs.org/en/5.0/using/index.html"><span>Documentation</span></a>
+ </li>
+ </ul>
+ </div>
+
+
+</div>
+
+
+<div id="TwoFactorModal" class="modal" tabindex="-1" role="dialog">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title">Modal title</h5>
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </div>
+ <div class="modal-body">
+ <p>Modal body text goes here.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary">Save changes</button>
+ <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+{{template "footer" .}}
+
+</body>
+</html>
diff --git a/web/templates/index/show.tmpl b/web/templates/index/show.tmpl
new file mode 100644
index 0000000..265ac2f
--- /dev/null
+++ b/web/templates/index/show.tmpl
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<style>
+
+ .colvis-btn {
+ background: white !important;
+ border: 1px solid #ced4da;
+ color: #495057;
+ }
+
+ .colvis-btn:hover {
+ background: white !important;
+ border: 1px solid #ced4da;
+ color: #495057;
+ }
+
+ .dt-button-collection > .dropdown-menu {
+ background: #54487A;
+ }
+
+ .buttons-columnVisibility:not(.active) {
+ background: white!important;
+ color: black!important;
+ }
+
+ td:hover {
+ cursor: pointer;
+ }
+
+ tr:not(.even):not(.odd), tr[role=row]:not(.even):not(.odd){
+ background: none!important;
+ }
+
+ .collapsing {
+ transition: none !important;
+ }
+
+
+</style>
+
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+ <table id="table_id" class="data-table table table-striped table-hover">
+ <thead>
+ <tr>
+ <th class="render-bold noVis">ID</th>
+ <th class="no-sort">Description</th>
+ <th class="hide no-sort">Packages</th>
+ <th class="hide no-sort render-bug">Bugs</th>
+ <th class="no-sort">BaseScore</th>
+ <th class="hide no-sort">Impact</th>
+ <th class="hide no-sort">References</th>
+ <th class="hide no-sort">Comments</th>
+ <th>LastModifiedDate</th>
+ <th class="hide">PublishedDate</th>
+ <th class="render-state">State</th>
+ <th class="hide noVis">Changelog</th>
+ </tr>
+ </thead>
+ </table>
+
+ </div>
+ </div>
+</div>
+
+{{template "footer" .}}
+
+
+<script>
+ window.userCanComment = "{{.User.Permissions.CVETool.Comment}}" == "true";
+ window.userCanChangeState = "{{.User.Permissions.CVETool.ChangeState}}" == "true";
+ window.userCanAssignBug = "{{.User.Permissions.CVETool.AssignBug}}" == "true";
+ window.userCanAddPackage = "{{.User.Permissions.CVETool.AddPackage}}" == "true";
+</script>
+
+
+</body>
+</html>
diff --git a/web/templates/index/showFullscreen.tmpl b/web/templates/index/showFullscreen.tmpl
new file mode 100644
index 0000000..e996e3f
--- /dev/null
+++ b/web/templates/index/showFullscreen.tmpl
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body style="overflow-x: hidden;border-top: none;">
+
+<style>
+
+ .colvis-btn {
+ background: white !important;
+ border: 1px solid #ced4da;
+ color: #495057;
+ }
+
+ .colvis-btn:hover {
+ background: white !important;
+ border: 1px solid #ced4da;
+ color: #495057;
+ }
+
+ .dt-button-collection > .dropdown-menu {
+ background: #54487A;
+ }
+
+ .buttons-columnVisibility:not(.active) {
+ background: white!important;
+ color: black!important;
+ }
+
+ td:hover {
+ cursor: pointer;
+ }
+
+ tr:not(.even):not(.odd), tr[role=row]:not(.even):not(.odd){
+ background: none!important;
+ }
+
+ .collapsing {
+ transition: none !important;
+ }
+
+
+</style>
+
+
+<div class="container-fluid mb-5">
+ <div class="row mt-3">
+ <div class="col-12">
+
+ <table id="table_id" class="data-table table table-striped table-hover">
+ <thead>
+ <tr>
+ <th class="render-bold noVis">ID</th>
+ <th class="no-sort">Description</th>
+ <th class="no-sort">Packages</th>
+ <th class="no-sort render-bug">Bugs</th>
+ <th class="no-sort">BaseScore</th>
+ <th class="no-sort">Impact</th>
+ <th class="no-sort">References</th>
+ <th class="hide no-sort">Comments</th>
+ <th class="">LastModifiedDate</th>
+ <th class="">PublishedDate</th>
+ <th class="render-state">State</th>
+ <th class="hide noVis">Changelog</th>
+ </tr>
+ </thead>
+ </table>
+
+ </div>
+ </div>
+</div>
+
+<script>
+ window.userCanComment = "{{.User.Permissions.CVETool.Comment}}" == "true";
+ window.userCanChangeState = "{{.User.Permissions.CVETool.ChangeState}}" == "true";
+ window.userCanAssignBug = "{{.User.Permissions.CVETool.AssignBug}}" == "true";
+ window.userCanAddPackage = "{{.User.Permissions.CVETool.AddPackage}}" == "true";
+</script>
+
+</body>
+</html>
diff --git a/web/templates/layout/footer.tmpl b/web/templates/layout/footer.tmpl
new file mode 100644
index 0000000..bdf2510
--- /dev/null
+++ b/web/templates/layout/footer.tmpl
@@ -0,0 +1,50 @@
+{{define "footer"}}
+ <footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-12 offset-md-2 col-md-7">
+ <h3 class="footerhead">Gentoo GLSAMaker</h3>
+ <div class="row">
+ <div class="col-xs-12 col-md-4">
+ <span class="kk-group-header">Bug Data as current of</span><br/>{{ .Application.LastBugUpdate.Format "Jan 02, 2006 15:04:05 UTC" }}<br/>
+ {{if .User.Permissions.Glsa.UpdateBugs}}
+ <a href="/glsa/bugs/update">Trigger an update</a>
+ {{end}}
+ </div>
+ <div class="col-xs-12 col-md-4">
+ <span class="kk-group-header">CVE Data as current of</span><br/>{{ .Application.LastCVEUpdate.Format "Jan 02, 2006 15:04:05 UTC" }}<br/>
+ {{if .User.Permissions.CVETool.UpdateCVEs}}
+ <a href="/cve/update">Trigger an update</a>
+ {{end}}
+ </div>
+ <div class="col-xs-12 col-md-4">
+ </div>
+ </div>
+ </div>
+ <div class="col-12 col-md-3">
+ <h3 class="footerhead">Questions or comments?</h3>
+ Please feel free to <a href="https://www.gentoo.org/inside-gentoo/contact/">contact us</a>.
+ <p class="mt-2">{{ .Application.Version }}</p>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-2 col-sm-3 col-md-2">
+ <ul class="footerlinks three-icons">
+ <li><a href="https://twitter.com/gentoo" title="@Gentoo on Twitter"><span class="fa fa-twitter fa-fw"></span></a></li>
+ <li><a href="https://www.facebook.com/gentoo.org" title="Gentoo on Facebook"><span class="fa fa-facebook fa-fw"></span></a></li>
+ <li><a href="https://www.reddit.com/r/Gentoo/" title="Gentoo on Reddit"><span class="fa fa-reddit-alien fa-fw"></span></a></li>
+ </ul>
+ </div>
+ <div class="col-10 col-sm-9 col-md-10">
+ <strong>&copy; 2001&ndash;2020 Gentoo Foundation, Inc.</strong><br>
+ <small>
+ Gentoo is a trademark of the Gentoo Foundation, Inc.
+ The contents of this document, unless otherwise expressly stated, are licensed under the
+ <a href="https://creativecommons.org/licenses/by-sa/4.0/" rel="license">CC-BY-SA-4.0</a> license.
+ The <a href="https://www.gentoo.org/inside-gentoo/foundation/name-logo-guidelines.html">Gentoo Name and Logo Usage Guidelines</a> apply.
+ </small>
+ </div>
+ </div>
+ </div>
+ </footer>
+{{end}}
diff --git a/web/templates/layout/head.tmpl b/web/templates/layout/head.tmpl
new file mode 100644
index 0000000..e92511b
--- /dev/null
+++ b/web/templates/layout/head.tmpl
@@ -0,0 +1,12 @@
+{{define "head"}}
+ <head>
+ <title>Gentoo GLSAMaker</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#54487a">
+ <meta name="description" content="Gentoo CVE Tool">
+ <script src="/assets/stylesheets.js"></script>
+ <script src="/assets/application.js"></script>
+ <link rel="icon" href="https://packages.gentoo.org/favicon.ico" type="image/x-icon">
+ </head>
+{{end}}
diff --git a/web/templates/layout/header.tmpl b/web/templates/layout/header.tmpl
new file mode 100644
index 0000000..571a58b
--- /dev/null
+++ b/web/templates/layout/header.tmpl
@@ -0,0 +1,6 @@
+{{define "header"}}
+ <header>
+ {{template "sitetitle"}}
+ {{template "tyrian-navbar" .}}
+ </header>
+{{end}}
diff --git a/web/templates/layout/sitetitle.tmpl b/web/templates/layout/sitetitle.tmpl
new file mode 100644
index 0000000..bce61c7
--- /dev/null
+++ b/web/templates/layout/sitetitle.tmpl
@@ -0,0 +1,37 @@
+{{define "sitetitle"}}
+ <div class="site-title">
+ <div class="container">
+ <div class="row justify-content-between">
+ <div class="logo">
+ <a href="/" title="Back to the homepage" class="site-logo">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo" srcset="https://assets.gentoo.org/tyrian/site-logo.svg">
+ </a>
+ <span class="site-label">Security</span>
+ </div>
+ <div class="site-title-buttons">
+ <div class="btn-group btn-group-sm">
+ <a href="https://get.gentoo.org/" role="button" class="btn get-gentoo"><span class="fa fa-fw fa-download"></span> <strong>Get Gentoo!</strong></a>
+ <div class="btn-group btn-group-sm">
+ <a class="btn gentoo-org-sites dropdown-toggle" data-toggle="dropdown" data-target="#" href="#">
+ <span class="fa fa-fw fa-map-o"></span> <span class="d-none d-sm-inline">gentoo.org sites</span> <span class="caret"></span>
+ </a>
+ <div class="dropdown-menu dropdown-menu-right">
+ <a class="dropdown-item" href="https://www.gentoo.org/" title="Main Gentoo website"><span class="fa fa-home fa-fw"></span> gentoo.org</a>
+ <a class="dropdown-item" href="https://wiki.gentoo.org/" title="Find and contribute documentation"><span class="fa fa-file-text-o fa-fw"></span> Wiki</a>
+ <a class="dropdown-item" href="https://bugs.gentoo.org/" title="Report issues and find common issues"><span class="fa fa-bug fa-fw"></span> Bugs</a>
+ <a class="dropdown-item" href="https://forums.gentoo.org/" title="Discuss with the community"><span class="fa fa-comments-o fa-fw"></span> Forums</a>
+ <a class="dropdown-item" href="https://packages.gentoo.org/" title="Find software for your Gentoo"><span class="fa fa-hdd-o fa-fw"></span> Packages</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="https://planet.gentoo.org/" title="Find out what's going on in the developer community"><span class="fa fa-rss fa-fw"></span> Planet</a>
+ <a class="dropdown-item" href="https://archives.gentoo.org/" title="Read up on past discussions"><span class="fa fa-archive fa-fw"></span> Archives</a>
+ <a class="dropdown-item" href="https://sources.gentoo.org/" title="Browse our source code"><span class="fa fa-code fa-fw"></span> Sources</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="https://infra-status.gentoo.org/" title="Get updates on the services provided by Gentoo"><span class="fa fa-server fa-fw"></span> Infra Status</a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+{{end}}
diff --git a/web/templates/layout/tyriannav.tmpl b/web/templates/layout/tyriannav.tmpl
new file mode 100644
index 0000000..c53f671
--- /dev/null
+++ b/web/templates/layout/tyriannav.tmpl
@@ -0,0 +1,72 @@
+{{define "tyrian-navbar"}}
+ <nav class="tyrian-navbar navbar navbar-dark navbar-expand-lg bg-primary" role="navigation">
+ <div class="container">
+ <div class="navbar-header">
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-main-collapse" aria-controls="navbar-main-collapse" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ </div>
+ <div class="collapse navbar-collapse navbar-main-collapse" id="navbar-main-collapse">
+ <ul class="navbar-nav mr-auto">
+
+ <li class="nav-item {{ if (eq .Page "home")}}active{{end}}"><a class="nav-link" href="/">Home</a></li>
+ <li class="nav-item {{ if (eq .Page "new")}}active{{end}}"><a class="nav-link" href="/new">New</a></li>
+ <li class="nav-item {{ if (eq .Page "requests")}}active{{end}}"><a class="nav-link" href="/requests">Requests</a></li>
+ <li class="nav-item {{ if (eq .Page "drafts")}}active{{end}}"><a class="nav-link" href="/drafts">Drafts</a></li>
+ <li class="nav-item {{ if (eq .Page "cvetool")}}active{{end}}"><a class="nav-link" href="/cve/tool">CVETool</a></li>
+ <li class="nav-item {{ if (eq .Page "dashboard")}}active{{end}}"><a class="nav-link" href="/dashboard">Dashboard</a></li>
+
+ <li class="nav-item dropdown">
+ <a class="nav-link" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <i class="fa fa-angle-double-right" aria-hidden="true"></i>
+ </a>
+ <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+ <a class="dropdown-item" href="/archive">Archive</a>
+ <a class="dropdown-item" href="/all">All</a>
+ <a class="dropdown-item" href="/statistics">Statistics</a>
+ <a class="dropdown-item" href="/about">About</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" target="_blank" rel="noopener noreferrer" href="https://bugs.gentoo.org">Bugzilla <span class="fa fa-fw fa-external-link-square" style="color:#000;" title="This link will leave www.gentoo.org."></span></a>
+ </div>
+ </li>
+
+ </ul>
+
+
+ <form class="form-inline ml-auto inlinesearch" role="search" action="/search" method="get">
+
+ <div id="" class="input-group">
+
+ <div class="input-group-prepend">
+ <span class="input-group-text" id="basic-addon1"><i class="fa fa-search" aria-hidden="true"></i></span>
+ </div>
+
+ <input id="quicksearch" class="form-control" type="text" name="q" type="text" placeholder="Quick Search" aria-label="Quick Search">
+ </div>
+
+ </form>
+
+ <ul class="navbar-nav">
+ {{if .User.Permissions.Admin.View}}
+ <li class="nav-item"><a class="nav-link" href="/admin">
+ <span class="fa fa-gears" aria-hidden="true"></span>
+ </a>
+ </li>
+ {{end}}
+ <li class="nav-item dropdown">
+ <a class="nav-link" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <span class="fa fa-user" aria-label="Personal tools"></span>
+ </a>
+ <div class="dropdown-menu" aria-labelledby="navbarDropdown">
+ <a class="dropdown-item" href="/account/password">Password</a>
+ <a class="dropdown-item" href="/account/2fa">2FA</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="/logout">Logout</a>
+ </div>
+ </li>
+ </ul>
+
+ </div>
+ </div>
+ </nav>
+{{end}}
diff --git a/web/templates/new/new.tmpl b/web/templates/new/new.tmpl
new file mode 100644
index 0000000..b6ff274
--- /dev/null
+++ b/web/templates/new/new.tmpl
@@ -0,0 +1,282 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+ <h2 class="ml-1 mb-4">New GLSA request </h2>
+
+ <div class="card px-2 mx-1">
+ <div class="card-body">
+
+ <form action="/new" method="POST">
+
+
+ <div class="col-sm-12 pr-0">
+ <span class="badge badge-danger badge-request">Request</span>
+ <span class="badge badge-warning badge-draft" style="display: none;">Draft</span>
+ &nbsp;<a style="color:#000000;" href="">GLSA {{.NewID}}</a>
+
+ <span id="summary_container">
+ <small style="margin-left:5px;color:#505152;">Created: 2020-04-08 16:05 UTC</small>
+ </span>
+
+
+
+ <span class="badge badge-secondary float-right badge-public" style="background: none;border: 1px solid green;">
+ <i class="fa fa-globe mr-1" aria-hidden="true" style="font-size: 0.8rem;color: green;"></i>
+ <span class="" style="color:green;">PUBLIC</span>
+ </span>
+
+ <span class="badge badge-secondary float-right badge-confidential" style="background: none;border: 1px solid black;display: none;">
+ <i class="fa fa-user-secret mr-1" aria-hidden="true" style="font-size: 0.8rem;color: black;"></i>
+ <span class="text-uppercase" style="color:black;">Confidential</span>
+ </span>
+
+
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid green;">
+ <i class="fa fa-user mr-1" aria-hidden="true" style="font-size: 0.8rem;color: green;"></i>
+ <span class="" style="color:green;">OWN</span>
+ </span>
+
+ <span class="badge badge-secondary badge-nocomment float-right mr-2" style="background: none;border: 1px solid grey;">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: grey;"></i>
+ <span class="" style="color:grey;">NONE</span>
+ </span>
+
+ <span class="badge badge-secondary badge-comment float-right mr-2" style="background: none;border: 1px solid orange;display: none;">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: orange;"></i>
+ <span class="text-uppercase" style="color:orange;">Comment</span>
+ </span>
+
+
+ <span class="badge badge-secondary badge-notbugready float-right mr-2" style="background: none;border: 1px solid darkred;padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="darkred" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:darkred;">NOT READY</span>
+ </span>
+
+ <span class="badge badge-secondary badge-bugready float-right mr-2" style="background: none;border: 1px solid green;padding-top:4px!important;padding-bottom:1.6px;display: none;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="green" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:green;">READY</span>
+ </span>
+
+
+ </div>
+
+ <div class="col-sm-12">
+ <h1 style="font-size: 20px;margin-top:10px;margin-bottom:4px;"><span id="short_desc_nonedit_display">
+ New Gentoo Linux Security Advisories Request
+ </span></h1>
+ </div>
+
+
+ <style>
+ .advanced-fields {
+ color: grey;
+ }
+ </style>
+
+
+
+ <div class="row mt-5">
+ <div class="col-2 text-right">
+ <b>Bugs</b><br/>
+ <small>Please enter the relevant bug ID(s), separate more than one bug with a comma.</small>
+ </div>
+ <div class="col-10">
+ <input id="bugs" name="bugs" type="text" class="form-control" style="display:inline-block;max-width: 200px;background: none;"/>
+ <i id="bug-spinner" class="fa fa-lg fa-refresh fa-spin ml-3" style="display: none;" aria-hidden="true"></i>
+ <i id="bug-refresh-ok" class="fa fa-lg fa-check ml-3" style="display: none;color: green;" aria-hidden="true"></i>
+ <i id="bug-refresh-failed" class="fa fa-lg fa-times ml-3" style="display: none;color: darkred;" aria-hidden="true"></i>
+ </div>
+ </div>
+
+ <div class="row mt-4">
+ <div class="col-2 text-right">
+ <b>Title</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea id="title" name="title" rows="5" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="synopsisField">
+ <div class="col-2 text-right">
+ <b>Synopsis</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <input id="synopsis" name="synopsis" class="form-control" style="max-width: 600px;background: none;" />
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="sescriptionField">
+ <div class="col-2 text-right">
+ <b>Description</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea oninput="this.value != '' ? [document.querySelector('.badge-draft').style.display = 'inline-block',document.querySelector('.badge-request').style.display = 'none'] : [document.querySelector('.badge-draft').style.display = 'none',document.querySelector('.badge-request').style.display = 'inline-block'] ; " id="description" name="description" rows="3" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="workaroundField">
+ <div class="col-2 text-right">
+ <b>Workaround</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea id="workaround" name="workaround" rows="3" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="impactField">
+ <div class="col-2 text-right">
+ <b>Impact</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea id="impact" name="impact" rows="3" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="backgroundField">
+ <div class="col-2 text-right">
+ <b>Background</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea id="background" name="background" rows="3" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="resolutionField">
+ <div class="col-2 text-right">
+ <b>Resolution</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea id="resolution" name="resolution" rows="3" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+
+ <div class="row mt-4">
+ <div class="col-2 text-right">
+ <b>References</b>
+ </div>
+ <div class="col-10">
+ <div class="form-check">
+ <input id="importReferences3" name="importReferences3" type="checkbox" class="form-check-input">
+ <label class="form-check-label py-1" for="exampleCheck1"> Don't import any references</label>
+ </div>
+ <div class="form-check">
+ <input id="importReferences" name="importReferences" type="checkbox" class="form-check-input">
+ <label class="form-check-label py-1" for="exampleCheck1"> Import CVEs from linked bugs</label>
+ </div>
+ <div class="form-check">
+ <input id="importReferences2" name="importReferences2" type="checkbox" class="form-check-input">
+ <label class="form-check-label py-1" for="exampleCheck1"> Import CVEs from linked bugs and all references from the CVEs</label>
+ </div>
+ </div>
+ </div>
+
+ <div class="row mt-4">
+ <div class="col-2 text-right">
+ <b>Permissions</b><br/>
+ <small>Mark this request as public or confidental.</small>
+ </div>
+ <div class="col-10">
+ <select onchange="this.value == 'confidential' ? [document.querySelector('.badge-public').style.display = 'none', document.querySelector('.badge-confidential').style.display = 'block'] : [document.querySelector('.badge-public').style.display = 'block', document.querySelector('.badge-confidential').style.display = 'none']; " class="custom-select" id="permissions" name="permissions" style="max-width: 200px;" required>
+ <option selected value="public">public</option>
+ <option value="confidential">confidental</option>
+ </select>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="accessField">
+ <div class="col-2 text-right">
+ <b>Access</b><br/>
+ <small>Mark this request as public or confidental.</small>
+ </div>
+ <div class="col-10">
+ <select class="custom-select" id="access" name="access" style="max-width: 200px;" required>
+ <option value="local">local</option>
+ <option selected value="remote">remote</option>
+ <option value="local,remote">local, remote</option>
+ </select>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="severityField">
+ <div class="col-2 text-right">
+ <b>Severity</b><br/>
+ <small>Mark this request as public or confidental.</small>
+ </div>
+ <div class="col-10">
+ <select class="custom-select" id="severity" name="severity" style="max-width: 200px;" required>
+ <option value="low">low</option>
+ <option selected value="normal">normal</option>
+ <option value="high">high</option>
+ </select>
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="keywordField">
+ <div class="col-2 text-right">
+ <b>Keyword</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <input id="keyword" name="keyword" class="form-control" style="max-width: 300px;background: none;" />
+ </div>
+ </div>
+
+ <div class="row mt-4 collapse advanced-fields" id="comment">
+ <div class="col-2 text-right">
+ <b>Comment</b><br/>
+ <small>Either take the suggested title or enter a new custom one.</small>
+ </div>
+ <div class="col-10">
+ <textarea oninput="this.value != '' ? [document.querySelector('.badge-comment').style.display = 'inline-block',document.querySelector('.badge-nocomment').style.display = 'none'] : [document.querySelector('.badge-comment').style.display = 'none',document.querySelector('.badge-nocomment').style.display = 'inline-block'] ; " id="comment" name="comment" rows="3" class="form-control" style="max-width: 600px;background: none;"></textarea>
+ </div>
+ </div>
+
+ <hr class="mt-4"/>
+
+ <div class="row mt-4">
+ <div class="col-2 text-right"></div>
+ <div class="col-10">
+ <button type="submit" class="btn btn-primary float-right"> File Request <i class="fa fa-angle-double-right ml-1" aria-hidden="true"></i></button>
+ <button onclick="this.innerHTML = this.innerHTML == 'Advanced Mode' ? 'Simple Mode' : 'Advanced Mode';" class="btn btn-outline-secondary float-right mr-3" type="button" data-toggle="collapse" data-target=".advanced-fields" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Advanced Mode</button>
+
+ </div>
+ </div>
+
+ </form>
+
+ </div>
+ </div>
+
+
+
+ </div>
+ </div>
+</div>
+
+
+{{template "footer" .}}
+
+<script src="/assets/newglsa.js"></script>
+
+</body>
+</html>
diff --git a/web/templates/requests/requests.tmpl b/web/templates/requests/requests.tmpl
new file mode 100644
index 0000000..7a9c8a3
--- /dev/null
+++ b/web/templates/requests/requests.tmpl
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<style>
+ td:hover {
+ cursor: pointer;
+ }
+</style>
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Requests</h1>
+
+ <table id="table_id" class="requests-data-table table table-hover">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Title</th>
+ <th>Requester</th>
+ <th>Date</th>
+ <th>Bug Ready</th>
+ <th>Approved</th>
+ <th>Workflow</th>
+ <th>Permissions</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ {{ range .Requests}}
+ <tr>
+ <td>{{.Id}}</td>
+ <td>{{.Title}}</td>
+ <td>{{.Creator.Nick}}</td>
+ <td>{{.Created}}</td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Status.BugReady }}green{{else}}darkred{{end}};">{{if .Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Status.Approval}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Status.WorkflowStatus "own"}}fa-user{{else if eq .Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Status.WorkflowStatus}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+ </td>
+ </tr>
+ {{end}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/search/search.tmpl b/web/templates/search/search.tmpl
new file mode 100644
index 0000000..6a71c06
--- /dev/null
+++ b/web/templates/search/search.tmpl
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<style>
+ td:hover {
+ cursor: pointer;
+ }
+</style>
+
+<div class="container mb-5">
+ <div class="row">
+ <div class="col-12">
+
+
+ <h1>Search Results for: "{{.SearchQuery}}"</h1>
+
+ <table id="table_id" class="requests-data-table table table-hover">
+ <thead>
+ <tr>
+ <th>ID</th>
+ <th>Title</th>
+ <th>Requester</th>
+ <th>Date</th>
+ <th>Bug Ready</th>
+ <th>Approved</th>
+ <th>Workflow</th>
+ <th>Permissions</th>
+ </tr>
+ </thead>
+ <tbody>
+
+ {{ range .GLSAs}}
+ <tr>
+ <td>{{.Id}}</td>
+ <td>{{.Title}}</td>
+ <td>{{.Creator.Nick}}</td>
+ <td>{{.Created}}</td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if .Status.BugReady }}green{{else}}darkred{{end}};padding-top:4px!important;padding-bottom:1.6px;">
+ <svg class="" style="width:13px;height:13px" viewBox="0 0 24 24">
+ <path fill="{{if .Status.BugReady }}green{{else}}darkred{{end}}" d="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0 0,1 12,19A4,4 0 0,1 8,15V11A4,4 0 0,1 12,7A4,4 0 0,1 16,11V15M14,10V12H10V10H14M10,14H14V16H10V14Z" />
+ </svg>
+ <span class="" style="color:{{if .Status.BugReady }}green{{else}}darkred{{end}};">{{if .Status.BugReady }}READY{{else}}NOT READY{{end}}</span>
+ </span>
+
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">
+ <i class="fa fa-circle mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.Approval "declined" }}darkred{{else if eq .Status.Approval "approved"}}green{{else if eq .Status.Approval "comments"}}orange{{else}}grey{{end}};">{{.Status.Approval}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-danger float-right mr-2" style="background: none;border: 1px solid {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">
+ <i class="fa {{if eq .Status.WorkflowStatus "commented" }}fa-comments-o{{else if eq .Status.WorkflowStatus "own"}}fa-user{{else if eq .Status.WorkflowStatus "approved"}}fa-check-circle-o{{else}}fa-times-circle{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};"></i>
+ <span class="text-uppercase" style="color:{{if eq .Status.WorkflowStatus "commented" }}blue{{else if eq .Status.WorkflowStatus "own"}}green{{else if eq .Status.WorkflowStatus "approved"}}green{{else}}darkred{{end}};">{{.Status.WorkflowStatus}}</span>
+ </span>
+ </td>
+ <td>
+ <span class="badge badge-secondary float-right" style="background: none;border: 1px solid {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">
+ <i class="fa {{ if eq .Status.Permission "public"}}fa-globe{{else}}fa-user-secret{{end}} mr-1" aria-hidden="true" style="font-size: 0.8rem;color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};"></i>
+ <span style="color: {{ if eq .Status.Permission "public"}}green{{else}}black{{end}};">{{ if eq .Status.Permission "public"}}PUBLIC{{else}}CONFIDENTAL{{end}}</span>
+ </span>
+ </td>
+ </tr>
+ {{end}}
+ </tbody>
+ </table>
+
+
+ </div>
+ </div>
+</div>
+
+
+
+{{template "footer" .}}
+
+
+</body>
+</html>
diff --git a/web/templates/statistics/statistics.tmpl b/web/templates/statistics/statistics.tmpl
new file mode 100644
index 0000000..134e7e0
--- /dev/null
+++ b/web/templates/statistics/statistics.tmpl
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<html lang="en">
+{{template "head"}}
+<body>
+{{template "header" .}}
+
+<div class="container mb-5">
+
+
+ <h1 class="mb-4">
+ Statistics<br/>
+ <small class="text-muted" style="font-size: 70%;">Stay tuned, this is just a first placeholder. More is coming soon.</small>
+ </h1>
+
+
+ <style>
+ #bar > svg{
+ display:block;
+ }
+ #bar{
+ width:100%;
+ height:400px;
+ margin:0;
+ padding: 0;
+ }
+ </style>
+
+ <div class="col-12">
+
+ <div id="bar"></div>
+
+ </div>
+
+
+
+</div>
+
+
+{{template "footer" .}}
+
+<script>
+ window.CHART_DATA = [
+ {
+ type: 'GLSAs',
+ stage: 'request',
+ count: {{.Data.Requests}},
+ },
+ {
+ type: 'GLSAs',
+ stage: 'draft',
+ count: {{.Data.Drafts}},
+ },
+ {
+ type: 'GLSAs',
+ stage: 'glsa',
+ count: {{.Data.Glsas}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'New',
+ count: {{.Data.New}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'Assigned',
+ count: {{.Data.Assigned}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'Later',
+ count: {{.Data.Later}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'NFU',
+ count: {{.Data.NFU}},
+ },
+ {
+ type: 'CVEs',
+ stage: 'Invalid',
+ count: {{.Data.Invalid}},
+ }
+ ];
+</script>
+
+<script src="/assets/statistics.js"></script>
+
+</body>
+</html>
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 0000000..dc4a6c6
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,90 @@
+const webpack = require('webpack');
+const path = require('path');
+
+module.exports = {
+ entry: {
+ stylesheets: './web/packs/stylesheets.js',
+ application: './web/packs/application.js',
+ account: './web/packs/account.js',
+ edit: './web/packs/edit.js',
+ glsa: './web/packs/glsa.js',
+ newglsa: './web/packs/newglsa.js',
+ statistics: './web/packs/statistics.js',
+ admin: './web/packs/admin.js',
+ },
+ output: {
+ path: path.resolve(__dirname, 'assets'),
+ filename: '[name].js',
+ },
+ plugins: [
+ require('postcss-import')
+ ],
+ module: {
+ rules: [
+ {
+ test: /\.css$/i,
+ use: [
+ // Creates `style` nodes from JS strings
+ 'style-loader',
+ // Translates CSS into CommonJS
+ {
+ loader: 'css-loader',
+ },{
+ loader: 'resolve-url-loader',
+ },
+ ],
+ },
+ {
+ test: /\.s[ac]ss$/i,
+ use: [
+ // Creates `style` nodes from JS strings
+ 'style-loader',
+ // Translates CSS into CommonJS
+ {
+ loader: 'css-loader',
+ },{
+ loader: 'resolve-url-loader',
+ },
+ // Compiles Sass to CSS
+ {
+ loader: 'sass-loader',
+ options: {
+ sourceMap: true,
+ }
+ },
+ ],
+ },
+ {
+ test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
+ use: [
+ {
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]',
+ publicPath: '/assets'
+ }
+ }
+ ]
+ },
+ {
+ test: /datatables\.net(?!.*[.]css$).*/,
+ loader: 'imports-loader?define=>false'
+ }
+ ],
+ },
+ plugins: [
+ new webpack.ProvidePlugin({
+ $: 'jquery',
+ jQuery: 'jquery',
+ 'window.jQuery': 'jquery',
+ 'window.$': 'jquery',
+ 'windows.jQuery': 'jquery',
+ tether: 'tether',
+ Tether: 'tether',
+ 'window.Tether': 'tether',
+ Popper: ['popper.js', 'default'],
+ 'window.Tether': 'tether',
+ Modal: 'exports-loader?Modal!bootstrap/js/dist/modal',
+ }),
+ ],
+};