// ============================================================ // Purpose : Board directory handling // Contributors : 8n-tech // ============================================================ ;( function( window, $, undefined ) { var boardlist = { options : { $boardlist : false, // Selectors for finding and binding elements. selector : { 'boardlist' : "#boardlist", 'board-head' : ".board-list-head", 'board-body' : ".board-list-tbody", 'board-loading' : ".board-list-loading", 'search' : "#search-form", 'search-lang' : "#search-lang-input", 'search-sfw' : "#search-sfw-input", 'search-tag' : "#search-tag-input", 'search-title' : "#search-title-input", 'search-submit' : "#search-submit", }, // HTML Templates for dynamic construction template : { // Board row item 'board-row' : "", // Individual cell definitions 'board-cell-meta' : "", 'board-cell-uri' : "", 'board-cell-title' : "", 'board-cell-pph' : "", 'board-cell-max' : "", 'board-cell-unique' : "", 'board-cell-tags' : "", // Content wrapper // Used to help constrain contents to their . 'board-content-wrap' : "
", // Tagging 'board-datum-tags' : "" } }, bind : { form : function() { var selectors = boardlist.options.selector; var $search = $( selectors['search'] ), $searchLang = $( selectors['search-lang'] ), $searchSfw = $( selectors['search-sfw'] ), $searchTag = $( selectors['search-tag'] ), $searchTitle = $( selectors['search-title'] ), $searchSubmit = $( selectors['search-submit'] ); var searchForms = { 'boardlist' : boardlist.$boardlist, 'search' : $search, 'searchLang' : $searchLang, 'searchSfw' : $searchSfw, 'searchTag' : $searchTag, 'searchTitle' : $searchTitle, 'searchSubmit' : $searchSubmit }; if ($search.length > 0) { // Bind form events. $search.on( 'submit', searchForms, boardlist.events.searchSubmit ); $searchSubmit.on( 'click', searchForms, boardlist.events.searchSubmit ); } } }, build : { boardlist : function(data) { boardlist.build.boards(data['boards']); boardlist.build.tags(data['tags']); }, boards : function(data) { // 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'] ); $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 ); } ); if( index >= 100 ) return false; $row.appendTo( $body ); } ); }, tags : function(data) { } }, events : { searchSubmit : function(event) { event.preventDefault(); var $boardlist = event.data.boardlist, $boardbody = $( boardlist.options.selector['board-body'], $boardlist ), $boardload = $( boardlist.options.selector['board-loading'], $boardlist ); $boardbody.html(""); $boardload.show(); $.get( "/board-search.php", { 'lang' : event.data.searchLang.val(), 'tags' : event.data.searchTag.val(), //'time' : event.data.searchTag.val(), 'title' : event.data.searchTitle.val(), 'sfw' : event.data.searchSfw.prop('checked') ? 1 : 0 }, function(data) { $boardload.hide(); boardlist.build.boardlist( $.parseJSON(data) ); } ); return false; } }, init : function( target ) { if (typeof target !== "string") { target = boardlist.options.selector.boardlist; } var $target = $(target); if ($target.length > 0 ) { boardlist.$boardlist = $target; boardlist.bind.form(); } } }; // Tie to the vichan object. if (typeof window.vichan === "undefined") { window.vichan = {}; } window.vichan.boardlist = boardlist; // Initialize the boardlist when the document is ready. $( document ).on( 'ready', window.vichan.boardlist.init ); // Run it now if we're already ready. if (document.readyState === 'complete') { window.vichan.boardlist.init(); } } )( window, jQuery );