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.locale }} |
+ |
{{ board['title'] }} |
{{board['pph']}} |
{{board['posts_total']}} |
|