From 0347bf772d17dafc39fe044a0425627883b24fa1 Mon Sep 17 00:00:00 2001 From: 8n-tech <8n-tech@users.noreply.github.com> Date: Wed, 15 Apr 2015 22:02:11 +1000 Subject: [PATCH] - board-search.php Improved result limiting. - boards.php Passes omit information - js/board-directory.js Improved code organization. - js/board-directory.js Added NSFW icon. - js/board-directory.js Added basic locale handling. - js/board-directory.js Disabled submit button until JS is bound. Signed-off-by: 8n-tech <8n-tech@users.noreply.github.com> --- board-search.php | 10 ++- boards.php | 34 ++++---- js/board-directory.js | 125 ++++++++++++++++++++--------- static/infinity-small.gif | Bin 0 -> 6104 bytes templates/8chan/boards-search.html | 22 ++++- templates/8chan/boards-table.html | 7 +- 6 files changed, 138 insertions(+), 60 deletions(-) create mode 100644 static/infinity-small.gif diff --git a/board-search.php b/board-search.php index c156fffb..8aaa7245 100644 --- a/board-search.php +++ b/board-search.php @@ -28,6 +28,8 @@ $search = array( 'tags' => false, 'time' => ( (int)( time() / 3600 ) * 3600 ) - 3600, 'title' => false, + + 'index' => count( $_GET ) == 0, ); // Include NSFW boards? @@ -169,12 +171,18 @@ array_multisort( $response['boards'] ); +$boardLimit = $search['index'] ? 50 : 100; + +$response['omitted'] = $search['index'] ? 0 : count( $response['boards'] ) - $boardLimit; +$response['boards'] = array_splice( $response['boards'], 0, $boardLimit ); +$response['order'] = array_keys( $response['boards'] ); + // Get the top most popular tags. if (count($response['tags']) > 0) { // Sort by most active tags. arsort( $response['tags'] ); // Get the first n most active tags. - $response['tags'] = array_splice( $response['tags'], 0, 200 ); + $response['tags'] = array_splice( $response['tags'], 0, 100 ); // $tagLightest = end( array_keys( $response['tag'] ) ); } diff --git a/boards.php b/boards.php index 40a9e841..4234aefd 100644 --- a/boards.php +++ b/boards.php @@ -28,12 +28,13 @@ $boardQuery = prepare("SELECT COUNT(1) AS 'boards_total', SUM(indexed) AS 'board $boardQuery->execute() or error(db_error($tagQuery)); $boardResult = $boardQuery->fetchAll(PDO::FETCH_ASSOC)[0]; -$boards_total = number_format( $boardResult['boards_total'], 0 ); -$boards_public = number_format( $boardResult['boards_public'], 0 ); -$boards_hidden = number_format( $boardResult['boards_total'] - $boardResult['boards_public'], 0 ); +$boards_total = number_format( $boardResult['boards_total'], 0 ); +$boards_public = number_format( $boardResult['boards_public'], 0 ); +$boards_hidden = number_format( $boardResult['boards_total'] - $boardResult['boards_public'], 0 ); +$boards_omitted = (int) $searchJson['omitted']; -$posts_hour = number_format( fetchBoardActivity(), 0 ); -$posts_total = number_format( $boardResult['posts_total'], 0 ); +$posts_hour = number_format( fetchBoardActivity(), 0 ); +$posts_total = number_format( $boardResult['posts_total'], 0 ); /* Create and distribute page */ $config['additional_javascript'] = array( @@ -54,21 +55,22 @@ $tagsHTML = Element("8chan/boards-tags.html", array( ); $searchHTML = Element("8chan/boards-search.html", array( - "config" => $config, + "config" => $config, - "boards_total" => $boards_total, - "boards_public" => $boards_public, - "boards_hidden" => $boards_hidden, + "boards_total" => $boards_total, + "boards_public" => $boards_public, + "boards_hidden" => $boards_hidden, + "boards_omitted" => $boards_omitted, - "posts_hour" => $posts_hour, - "posts_total" => $posts_total, + "posts_hour" => $posts_hour, + "posts_total" => $posts_total, - "founding_date" => $founding_date, - "page_updated" => date('r'), - "uptime" => shell_exec('uptime -p'), + "founding_date" => $founding_date, + "page_updated" => date('r'), + "uptime" => shell_exec('uptime -p'), - "html_boards" => $boardsHTML, - "html_tags" => $tagsHTML + "html_boards" => $boardsHTML, + "html_tags" => $tagsHTML ) ); diff --git a/js/board-directory.js b/js/board-directory.js index d9858150..6fe7edee 100644 --- a/js/board-directory.js +++ b/js/board-directory.js @@ -34,17 +34,19 @@ 'board-cell-uri' : "", 'board-cell-title' : "", 'board-cell-pph' : "", - 'board-cell-max' : "", - 'board-cell-unique' : "", + 'board-cell-posts_total' : "", + 'board-cell-active' : "", 'board-cell-tags' : "", // Content wrapper // Used to help constrain contents to their . 'board-content-wrap' : "
", - - // Tagging - 'board-datum-tags' : "" + 'board-datum-lang' : "", + 'board-datum-uri' : "", + 'board-datum-sfw' : "", + 'board-datum-nsfw' : "", + 'board-datum-tags' : "" } }, @@ -73,59 +75,101 @@ if ($search.length > 0) { // Bind form events. $search.on( 'submit', searchForms, boardlist.events.searchSubmit ); - $searchSubmit.on( 'click', searchForms, boardlist.events.searchSubmit ); + $searchSubmit.prop( 'disabled', false ).on( 'click', searchForms, boardlist.events.searchSubmit ); } } }, build : { boardlist : function(data) { - boardlist.build.boards(data['boards']); + boardlist.build.boards(data['boards'], data['order']); boardlist.build.tags(data['tags']); }, - boards : function(data) { + boards : function(data, order) { // Find our head, columns, and body. var $head = $( boardlist.options.selector['board-head'], boardlist.$boardlist ), $cols = $("[data-column]", $head ), $body = $( boardlist.options.selector['board-body'], boardlist.$boardlist ); - $.each( data, function( index, row ) { - var $row = $( boardlist.options.template['board-row'] ); + $.each( order, function( index, uri ) { + var row = data[uri]; + $row = $( boardlist.options.template['board-row'] ); $cols.each( function( index, col ) { - var $col = $(col), - column = $col.attr('data-column'), - value = row[column] - $cell = $( boardlist.options.template['board-cell-' + column] ), - $wrap = $( boardlist.options.template['board-content-wrap'] ); - - if (value instanceof Array) { - if (typeof boardlist.options.template['board-datum-' + column] !== "undefined") { - $.each( value, function( index, singleValue ) { - $( boardlist.options.template['board-datum-' + column] ) - .text( singleValue ) - .appendTo( $wrap ); - } ); - } - else { - $wrap.text( value.join(" ") ); - } - } - else { - $wrap.text( value ); - } - - $wrap.appendTo( $cell ); - $cell.appendTo( $row ); + boardlist.build.board( row, col ).appendTo( $row ); } ); - - if( index >= 100 ) return false; + + if( index >= 100 ) return false; $row.appendTo( $body ); } ); + }, + board : function( row, col ) { + var $col = $(col), + column = $col.attr('data-column'), + value = row[column] + $cell = $( boardlist.options.template['board-cell-' + column] ), + $wrap = $( boardlist.options.template['board-content-wrap'] ); + if (typeof boardlist.build.boardcell[column] === "undefined") { + if (value instanceof Array) { + if (typeof boardlist.options.template['board-datum-' + column] !== "undefined") { + $.each( value, function( index, singleValue ) { + $( boardlist.options.template['board-datum-' + column] ) + .text( singleValue ) + .appendTo( $wrap ); + } ); + } + else { + $wrap.text( value.join(" ") ); + } + } + else { + $wrap.text( value ); + } + } + else { + var $content = boardlist.build.boardcell[column]( row, value ); + + if ($content instanceof jQuery) { + // We use .append() instead of .appendTo() as we do elsewhere + // because $content can be multiple elements. + $wrap.append( $content ); + } + else if (typeof $content === "string") { + $wrap.html( $content ); + } + else { + console.log("Special cell constructor returned a " + (typeof $content) + " that board-directory.js cannot interpret."); + } + } + + $wrap.appendTo( $cell ); + return $cell; + }, + boardcell : { + 'meta' : function( row, value ) { + return $( boardlist.options.template['board-datum-lang'] ).text( row['locale'] ); + }, + 'uri' : function( row, value ) { + var $link = $( boardlist.options.template['board-datum-uri'] ), + $sfw = $( boardlist.options.template['board-datum-' + (row['sfw'] == 1 ? "sfw" : "nsfw")] ); + + $link + .attr( 'href', "/"+row['uri']+"/" ) + .text( "/"+row['uri']+"/" ); + + // I decided against NSFW icons because it clutters the index. + // Blue briefcase = SFW. No briefcase = NSFW. Seems better. + if (row['sfw'] == 1) { + return $link[0].outerHTML + $sfw[0].outerHTML; + } + else { + return $link[0].outerHTML; + } + } }, tags : function(data) { @@ -168,10 +212,13 @@ target = boardlist.options.selector.boardlist; } - var $target = $(target); + var $boardlist = $(target); - if ($target.length > 0 ) { - boardlist.$boardlist = $target; + if ($boardlist.length > 0 ) { + $( boardlist.options.selector['board-loading'], $boardlist ).hide(); + + + boardlist.$boardlist = $boardlist; boardlist.bind.form(); } } diff --git a/static/infinity-small.gif b/static/infinity-small.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7a2978ea87b54c6a7d5402dfa92ddc29255b4ef GIT binary patch literal 6104 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 literal 0 HcmV?d00001 diff --git a/templates/8chan/boards-search.html b/templates/8chan/boards-search.html index 934403d9..39c3f4c2 100644 --- a/templates/8chan/boards-search.html +++ b/templates/8chan/boards-search.html @@ -39,6 +39,16 @@
+ +
@@ -65,14 +75,22 @@ {% trans %}Board{% endtrans %} {% trans %}Title{% endtrans %} {% trans %}PPH{% endtrans %} - {% trans %}Total posts{% endtrans %} - {% trans %}Active users{% endtrans %} + {% trans %}Total posts{% endtrans %} + {% trans %}Active users{% endtrans %} {% trans %}Tags{% endtrans %} {{html_boards}} + {% if boards_omitted > 0 %} + + + {{boards_omitted}} board{% if boards_omitted != 1 %}s were{% else %} was{% endif %} omitted. + + + {% endif %} + diff --git a/templates/8chan/boards-table.html b/templates/8chan/boards-table.html index f3451ae1..40f823bb 100644 --- a/templates/8chan/boards-table.html +++ b/templates/8chan/boards-table.html @@ -1,7 +1,10 @@ {% for board in boards %} - {{ board.img|raw }} {% if board['sfw'] %}{% else %}{% endif %} -
/{{board['uri']}}/{{lock|raw}}
+ {{ board.locale }} +
+ /{{board['uri']}}/ + {% if board['sfw'] %}{% endif %} +
{{ board['title'] }}
{{board['pph']}}
{{board['posts_total']}}