A small Slim application for returning a list of pages in a MediaWiki category, ordered by Dale-Chall readability scores.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
2.9 KiB

  1. <?php
  2. use OOUI\WikimediaUITheme;
  3. OOUI\Theme::setSingleton( new WikimediaUITheme() );
  4. OOUI\Element::setDefaultDir( 'ltr' );
  5. // Create form elements
  6. $catInput = new OOUI\TextInputWidget( [
  7. 'infusable' => true,
  8. 'name' => 'cat',
  9. 'placeholder' => 'Category name'
  10. ] );
  11. if ( isset($cat) && strlen($cat) ) {
  12. $catInput->setValue( $cat );
  13. }
  14. $submit = new OOUI\ButtonInputWidget( [
  15. 'infusable' => true,
  16. 'label' => 'Submit',
  17. 'type' => 'submit'
  18. ] );
  19. $fieldset = new OOUI\FieldsetLayout( [
  20. 'infusable' => true,
  21. 'label' => 'Find readability of first ~50 pages in Wikipedia category:',
  22. 'classes' => [ "container" ]
  23. ] );
  24. $fieldset->addItems( [
  25. new OOUI\FieldLayout( $catInput, [
  26. 'infusable' => true,
  27. 'align' => 'left'
  28. ] ),
  29. new OOUI\FieldLayout( $submit )
  30. ] );
  31. $form = new OOUI\FormLayout( [
  32. 'infusable' => true,
  33. 'items' => [ $fieldset ],
  34. 'action' => '/category',
  35. 'method' => 'get',
  36. 'id' => 'category-form'
  37. ] );
  38. ?>
  39. <!DOCTYPE html>
  40. <html lang="en">
  41. <head>
  42. <meta charset="utf-8"/>
  43. <title>Readability of Wikipedia Pages by Category</title>
  44. <link href="/oojs-ui-dist/oojs-ui-wikimediaui.css" rel="stylesheet" type="text/css">
  45. <link href="/oojs-ui-dist/oojs-ui-images-wikimediaui.css" rel="stylesheet" type="text/css">
  46. <script src="/jquery-dist/jquery.min.js"></script>
  47. <script src="/oojs-dist/oojs.min.js"></script>
  48. <script src="/oojs-ui-dist/oojs-ui.min.js"></script>
  49. <script src="/oojs-ui-dist/oojs-ui-wikimediaui.min.js"></script>
  50. <script>
  51. $( document ).ready(function() {
  52. var myForm = OO.ui.infuse( 'category-form' );
  53. // Ask for JSON specifically:
  54. myForm.addItems( [
  55. new OO.ui.HiddenInputWidget( {
  56. name: 'type',
  57. value: 'json',
  58. } )
  59. ] );
  60. myForm.on( 'submit', function () {
  61. $.get( '/category', myForm.$element.serialize() ).done( function( result ) {
  62. var table = $( '<table id=pagelist><thead><tr><th>Page Name</th> <th>Dale-Chall Readability Score</th></tr></thead></table>' );
  63. if ( $( '#pagelist' ).length ) {
  64. $( '#pagelist' ).replaceWith( table );
  65. } else {
  66. $( 'body' ).append( table );
  67. }
  68. $( result.pageList ).each( function ( index, values ) {
  69. var title = values[ 0 ];
  70. var readability = values[ 2 ];
  71. var row = $( '<tr>' )
  72. .append( $( '<td>' ).text( title ) )
  73. .append( $( '<td>' ).text( readability ) );
  74. table.append( row );
  75. });
  76. });
  77. } );
  78. });
  79. </script>
  80. <style>
  81. body {
  82. max-width: 38em;
  83. margin-left: auto;
  84. margin-right: auto;
  85. }
  86. </style>
  87. </head>
  88. <body>
  89. <?php echo $form; ?>
  90. <?php
  91. $td = function ( $content ) {
  92. return '<td>' . htmlspecialchars( $content ) . '</td>';
  93. };
  94. // If we've got a $pageList, go ahead and render it as a table. This is
  95. // only going to happen in the situation where a client doesn't have JS
  96. // enabled.
  97. if ( isset( $pageList ) ) {
  98. echo '<table>';
  99. echo '<tr> <th>Page Name</th> <th>Dale-Chall Readability Score</th> </tr>';
  100. foreach ( $pageList as $page ) {
  101. echo '<tr>', $td( $page[0] ), $td( $page[2] ), '</tr>';
  102. }
  103. echo '</table>';
  104. }
  105. ?>
  106. </body>
  107. </html>