diff --git a/pkgs/plt-services/meta/pkg-index/official/static.rkt b/pkgs/plt-services/meta/pkg-index/official/static.rkt
index 0e70592971..1206ae918a 100644
--- a/pkgs/plt-services/meta/pkg-index/official/static.rkt
+++ b/pkgs/plt-services/meta/pkg-index/official/static.rkt
@@ -23,6 +23,8 @@
n]
[#f
#f]
+ [#t
+ #t]
[(? symbol? s)
(symbol->string s)]
[(? keyword? s)
@@ -48,10 +50,27 @@
(pkg-index/basic
(λ () pkg-list)
(λ (pkg-name)
- (define ht (file->value (build-path pkgs-path pkg-name)))
+ (define ht (file->value (build-path pkgs-path pkg-name)))
+
(hash-set* ht
'name pkg-name
'tags (hash-ref ht 'tags empty)
+ 'search-terms
+ (let* ([st (hasheq)]
+ [st (for/fold ([st st])
+ ([t (in-list (hash-ref ht 'tags empty))])
+ (hash-set st (string->symbol t) #t))]
+ [st (hash-set st (string->symbol (format "ring:~a" (hash-ref ht 'ring 2))) #t)]
+ [st (for/fold ([st st])
+ ([a (in-list (author->list (hash-ref ht 'author "")))])
+ (hash-set st (string->symbol (format "author:~a" a)) #t))]
+ [st (if (empty? (hash-ref ht 'tags empty))
+ (hash-set st ':no-tag: #t)
+ st)]
+ [st (if (hash-ref ht 'checksum-error #f)
+ (hash-set st ':error: #t)
+ st)])
+ st)
'authors (author->list (hash-ref ht 'author ""))))))
(define (url->request u)
diff --git a/pkgs/plt-services/meta/pkg-index/official/static/index.js b/pkgs/plt-services/meta/pkg-index/official/static/index.js
index cbaca5f0f0..8d5c11084f 100644
--- a/pkgs/plt-services/meta/pkg-index/official/static/index.js
+++ b/pkgs/plt-services/meta/pkg-index/official/static/index.js
@@ -6,13 +6,13 @@
// xxx manage packages
$( document ).ready(function() {
- var search_terms = [ "!main-tests", "!main-distribution" ];
+ var search_terms = { "!main-tests": true, "!main-distribution": true };
function addfilterlink ( text, term ) {
return [$('', { text: text,
href: "javascript:void(0)",
click: function () {
- search_terms.push(term);
+ search_terms[term] = true;
evaluate_search();
} } ),
" "
@@ -22,16 +22,59 @@ $( document ).ready(function() {
return [$('', { text: text,
href: "javascript:void(0)",
click: function () {
- search_terms = $.grep( search_terms, function (v) { return v != term } );
+ delete search_terms[term];
evaluate_search();
} } ),
" "
];
};
- $.getJSON( "/pkgs-all.json", function( resp ) {
+ function evaluate_search () {
+ $.each( $('#packages_table tr'), function (key, dom) {
+ var value = $(dom).data("obj");
+ var show = true;
+ var vterms = value['search-terms'];
+
+ $.each(search_terms,
+ function ( term, termv ) {
+ if ( term.charAt(0) == "!" ) {
+ if ( vterms[term.substring(1)] ) {
+ show = false;
+ }
+ } else {
+ if ( ! vterms[term] ) {
+ show = false;
+ }
+ }
+ });
+
+ if ( show ) {
+ $(dom).show();
+ } else {
+ $(dom).hide();
+ }
+
+ });
+
+ // xxx handle search button
+
+ // xxx update menu available
+ $("#search_menu").html("").append( $.map( search_terms, function ( term, i ) {
+ return removefilterlink ( i, i );
+ } ) );
+
+ $("#packages_table tr:visible:even").removeClass("even");
+ $("#packages_table tr:visible:odd").addClass("even");
+ };
+
+ function object_keys ( o ) {
var names = [];
- $.each(resp, function(key, value) { names.push(key) });
+ $.each(o, function(key, value) { names.push(key) });
+ return names;
+ }
+
+ $.getJSON( "/pkgs-all.json", function( resp ) {
+ var names = object_keys(resp);
var snames = names.sort(function(a,b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
})
@@ -63,54 +106,4 @@ $( document ).ready(function() {
evaluate_search();
});
-
- function evaluate_search_term( value, term ) {
- if ( term == ":error:") {
- return value['checksum-error'];
- } else if ( term == ":no-tag:") {
- return value['tags'].length == 0;
- } else if ( term.substring(0, 5) == "ring:") {
- return value['ring'] == term.substring(5);
- } else if ( term.substring(0, 7) == "author:") {
- return ($.inArray( term.substring(7), value['authors'] ) != -1);
- } else if ( term.charAt(0) == "!" ) {
- return ! evaluate_search_term( value, term.substring(1) );
- } else if ( $.inArray( term, value['tags']) != -1 ) {
- return true;
- } else {
- return false;
- }
- }
-
- function evaluate_search () {
- $.each( $('#packages_table tr'), function (key, dom) {
- var value = $(dom).data("obj");
- var show = true;
-
- for (termi in search_terms) {
- var term = search_terms[termi];
- if ( ! evaluate_search_term( value, term ) ) {
- show = false;
- }
- }
-
- if ( show ) {
- $(dom).show();
- } else {
- $(dom).hide();
- }
-
- });
-
- // xxx handle search button
-
- // xxx update menu available
- $("#search_menu").html("").append( $.map( search_terms, function ( term, i ) {
- return removefilterlink ( term, term );
- } ) );
-
- $("#packages_table tr:visible:even").removeClass("even");
- $("#packages_table tr:visible:odd").addClass("even");
- };
-
});