repertoire-faceting 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/FAQ +23 -17
  3. data/INSTALL +52 -84
  4. data/LICENSE +1 -1
  5. data/README +213 -34
  6. data/TODO +20 -7
  7. data/ext/Makefile +24 -14
  8. data/ext/README.faceting +51 -0
  9. data/ext/bytea/bytea.sql +173 -0
  10. data/ext/bytea/faceting_bytea.control +6 -0
  11. data/ext/common/util.sql +35 -0
  12. data/ext/faceting--0.6.0.sql +251 -0
  13. data/ext/faceting_bytea--0.6.0.sql +207 -0
  14. data/ext/faceting_varbit--0.6.0.sql +198 -0
  15. data/ext/signature/faceting.control +6 -0
  16. data/ext/signature/signature.c +740 -0
  17. data/ext/{signature.o → signature/signature.o} +0 -0
  18. data/ext/{signature.so → signature/signature.so} +0 -0
  19. data/ext/signature/signature.sql +217 -0
  20. data/ext/varbit/faceting_varbit.control +7 -0
  21. data/ext/varbit/varbit.sql +164 -0
  22. data/{public → lib/assets}/images/repertoire-faceting/proportional_symbol.png +0 -0
  23. data/{public → lib/assets}/images/repertoire-faceting/spinner_sm.gif +0 -0
  24. data/{public → lib/assets}/javascripts/rep.faceting/context.js +2 -2
  25. data/{public → lib/assets}/javascripts/rep.faceting/ext/earth_facet.js +2 -4
  26. data/{public → lib/assets}/javascripts/rep.faceting/facet.js +1 -1
  27. data/{public → lib/assets}/javascripts/rep.faceting/facet_widget.js +3 -8
  28. data/{public → lib/assets}/javascripts/rep.faceting/nested_facet.js +1 -1
  29. data/{public → lib/assets}/javascripts/rep.faceting/results.js +1 -1
  30. data/{public → lib/assets}/javascripts/rep.faceting.js +5 -1
  31. data/{public → lib/assets}/javascripts/rep.protovis-facets.js +3 -3
  32. data/lib/assets/javascripts/rep.widgets/events.js +51 -0
  33. data/lib/assets/javascripts/rep.widgets/global.js +50 -0
  34. data/lib/assets/javascripts/rep.widgets/model.js +159 -0
  35. data/lib/assets/javascripts/rep.widgets/widget.js +213 -0
  36. data/lib/assets/javascripts/rep.widgets.js +14 -0
  37. data/{public → lib/assets}/stylesheets/rep.faceting.css +1 -1
  38. data/lib/repertoire-faceting/adapters/postgresql_adapter.rb +107 -48
  39. data/lib/repertoire-faceting/facets/abstract_facet.rb +43 -27
  40. data/lib/repertoire-faceting/facets/basic_facet.rb +23 -22
  41. data/lib/repertoire-faceting/facets/nested_facet.rb +50 -27
  42. data/lib/repertoire-faceting/model.rb +101 -65
  43. data/lib/repertoire-faceting/rails/engine.rb +8 -0
  44. data/lib/repertoire-faceting/rails/postgresql_adapter.rb +0 -1
  45. data/lib/repertoire-faceting/rails/relation.rb +0 -1
  46. data/lib/repertoire-faceting/railtie.rb +0 -1
  47. data/lib/repertoire-faceting/relation/calculations.rb +7 -2
  48. data/lib/repertoire-faceting/relation/query_methods.rb +17 -4
  49. data/lib/repertoire-faceting/routing.rb +2 -5
  50. data/lib/repertoire-faceting/tasks/all.rake +5 -4
  51. data/lib/repertoire-faceting/tasks/client.rake +2 -5
  52. data/lib/repertoire-faceting/version.rb +1 -1
  53. data/lib/repertoire-faceting.rb +2 -4
  54. data/{public → vendor/assets}/javascripts/google-earth-extensions.js +0 -0
  55. data/{public → vendor/assets}/javascripts/protovis.js +0 -0
  56. metadata +78 -78
  57. data/ext/README.signature +0 -33
  58. data/ext/signature.c +0 -740
  59. data/ext/signature.sql +0 -342
  60. data/ext/signature.sql.IN +0 -342
  61. data/ext/uninstall_signature.sql +0 -4
  62. data/ext/uninstall_signature.sql.IN +0 -4
  63. data/lib/repertoire-faceting/adapters/abstract_adapter.rb +0 -18
  64. data/lib/repertoire-faceting/relation/spawn_methods.rb +0 -26
@@ -0,0 +1,217 @@
1
+ -- ============================================================================
2
+ -- Faceting API implementing bitmap indices using a custom C datatype and
3
+ -- associated functions.
4
+ --
5
+ -- This API is to be preferred in all situations where it is possible to
6
+ -- build and install the datatype (requires superuser access to PostgreSQL)
7
+ --
8
+ -- Christopher York
9
+ -- MIT Hyperstudio
10
+ -- February 2014
11
+ -- ============================================================================
12
+
13
+ -- complain if script is sourced in psql, rather than via CREATE EXTENSION
14
+ \echo Use "CREATE EXTENSION faceting" to load this the default faceting API.\quit
15
+
16
+ -- functions for bitmap indices using datatype written in C
17
+
18
+ CREATE TYPE @extschema@.signature;
19
+
20
+ -- basic i/o functions for signatures
21
+
22
+ CREATE FUNCTION @extschema@.sig_in(cstring)
23
+ RETURNS signature
24
+ AS 'signature.so', 'sig_in'
25
+ LANGUAGE C STRICT;
26
+
27
+ CREATE FUNCTION @extschema@.sig_out(signature)
28
+ RETURNS cstring
29
+ AS 'signature.so', 'sig_out'
30
+ LANGUAGE C STRICT;
31
+
32
+ -- signature postgresql type
33
+
34
+ CREATE TYPE @extschema@.signature (
35
+ INTERNALLENGTH = VARIABLE,
36
+ INPUT = sig_in,
37
+ OUTPUT = sig_out,
38
+ STORAGE = extended
39
+ );
40
+
41
+ -- functions for signatures
42
+
43
+ CREATE FUNCTION @extschema@.sig_resize( signature, INT )
44
+ RETURNS signature
45
+ AS 'signature.so', 'sig_resize'
46
+ LANGUAGE C STRICT IMMUTABLE;
47
+
48
+ CREATE FUNCTION @extschema@.sig_set( signature, INT, INT )
49
+ RETURNS signature
50
+ AS 'signature.so', 'sig_set'
51
+ LANGUAGE C STRICT IMMUTABLE;
52
+
53
+ CREATE FUNCTION @extschema@.sig_set( signature, INT )
54
+ RETURNS signature
55
+ AS 'signature.so', 'sig_set'
56
+ LANGUAGE C STRICT IMMUTABLE;
57
+
58
+ CREATE FUNCTION @extschema@.sig_get( signature, INT )
59
+ RETURNS INT
60
+ AS 'signature.so', 'sig_get'
61
+ LANGUAGE C STRICT IMMUTABLE;
62
+
63
+ CREATE FUNCTION @extschema@.sig_length( signature )
64
+ RETURNS INT
65
+ AS 'signature.so', 'sig_length'
66
+ LANGUAGE C STRICT IMMUTABLE;
67
+
68
+ CREATE FUNCTION @extschema@.sig_min( signature )
69
+ RETURNS INT
70
+ AS 'signature.so', 'sig_min'
71
+ LANGUAGE C STRICT IMMUTABLE;
72
+
73
+ CREATE FUNCTION @extschema@.sig_and( signature, signature )
74
+ RETURNS signature
75
+ AS 'signature.so', 'sig_and'
76
+ LANGUAGE C STRICT IMMUTABLE;
77
+
78
+ CREATE FUNCTION @extschema@.sig_or( signature, signature )
79
+ RETURNS signature
80
+ AS 'signature.so', 'sig_or'
81
+ LANGUAGE C STRICT IMMUTABLE;
82
+
83
+ CREATE FUNCTION @extschema@.sig_xor( signature )
84
+ RETURNS signature
85
+ AS 'signature.so', 'sig_xor'
86
+ LANGUAGE C STRICT IMMUTABLE;
87
+
88
+ CREATE FUNCTION @extschema@.count( signature )
89
+ RETURNS INT
90
+ AS 'signature.so', 'count'
91
+ LANGUAGE C STRICT IMMUTABLE;
92
+
93
+ CREATE FUNCTION @extschema@.contains( signature, INT )
94
+ RETURNS BOOL
95
+ AS 'signature.so', 'contains'
96
+ LANGUAGE C STRICT IMMUTABLE;
97
+
98
+ CREATE FUNCTION @extschema@.members( signature )
99
+ RETURNS SETOF INT
100
+ AS 'signature.so', 'members'
101
+ LANGUAGE C STRICT IMMUTABLE;
102
+
103
+ CREATE FUNCTION @extschema@.sig_cmp( signature, signature )
104
+ RETURNS INT
105
+ AS 'signature.so', 'sig_cmp'
106
+ LANGUAGE C STRICT IMMUTABLE;
107
+
108
+ CREATE FUNCTION @extschema@.sig_lt( signature, signature )
109
+ RETURNS BOOL
110
+ AS 'signature.so', 'sig_lt'
111
+ LANGUAGE C STRICT IMMUTABLE;
112
+
113
+ CREATE FUNCTION @extschema@.sig_lte( signature, signature )
114
+ RETURNS BOOL
115
+ AS 'signature.so', 'sig_lte'
116
+ LANGUAGE C STRICT IMMUTABLE;
117
+
118
+ CREATE FUNCTION @extschema@.sig_eq( signature, signature )
119
+ RETURNS BOOL
120
+ AS 'signature.so', 'sig_eq'
121
+ LANGUAGE C STRICT IMMUTABLE;
122
+
123
+ CREATE FUNCTION @extschema@.sig_gt( signature, signature )
124
+ RETURNS BOOL
125
+ AS 'signature.so', 'sig_gt'
126
+ LANGUAGE C STRICT IMMUTABLE;
127
+
128
+ CREATE FUNCTION @extschema@.sig_gte( signature, signature )
129
+ RETURNS BOOL
130
+ AS 'signature.so', 'sig_gte'
131
+ LANGUAGE C STRICT IMMUTABLE;
132
+
133
+
134
+ -- operators for signatures
135
+
136
+ CREATE OPERATOR @extschema@.& (
137
+ leftarg = signature,
138
+ rightarg = signature,
139
+ procedure = @extschema@.sig_and,
140
+ commutator = &
141
+ );
142
+
143
+ CREATE OPERATOR @extschema@.| (
144
+ leftarg = signature,
145
+ rightarg = signature,
146
+ procedure = @extschema@.sig_or,
147
+ commutator = |
148
+ );
149
+
150
+ CREATE OPERATOR @extschema@.+ (
151
+ leftarg = signature,
152
+ rightarg = int,
153
+ procedure = @extschema@.sig_set
154
+ );
155
+
156
+ CREATE OPERATOR @extschema@.< (
157
+ leftarg = signature, rightarg = signature, procedure = sig_lt,
158
+ commutator = > , negator = >= ,
159
+ restrict = scalarltsel, join = scalarltjoinsel
160
+ );
161
+
162
+ CREATE OPERATOR @extschema@.<= (
163
+ leftarg = signature, rightarg = signature, procedure = sig_lte,
164
+ commutator = >= , negator = > ,
165
+ restrict = scalarltsel, join = scalarltjoinsel
166
+ );
167
+
168
+ CREATE OPERATOR @extschema@.= (
169
+ leftarg = signature, rightarg = signature, procedure = sig_eq,
170
+ commutator = = , negator = <> ,
171
+ restrict = eqsel, join = eqjoinsel
172
+ );
173
+
174
+ CREATE OPERATOR >= (
175
+ leftarg = signature, rightarg = signature, procedure = sig_gte,
176
+ commutator = <= , negator = < ,
177
+ restrict = scalargtsel, join = scalargtjoinsel
178
+ );
179
+
180
+ CREATE OPERATOR @extschema@.> (
181
+ leftarg = signature, rightarg = signature, procedure = sig_gt,
182
+ commutator = < , negator = <= ,
183
+ restrict = scalargtsel, join = scalargtjoinsel
184
+ );
185
+
186
+ -- index operator classes for signatures
187
+
188
+ CREATE OPERATOR CLASS @extschema@.signature_ops
189
+ DEFAULT FOR TYPE signature USING btree AS
190
+ OPERATOR 1 < ,
191
+ OPERATOR 2 <= ,
192
+ OPERATOR 3 = ,
193
+ OPERATOR 4 >= ,
194
+ OPERATOR 5 > ,
195
+ FUNCTION 1 sig_cmp(signature, signature);
196
+
197
+
198
+ -- aggregate functions for faceting
199
+
200
+ CREATE AGGREGATE @extschema@.collect( signature )
201
+ (
202
+ sfunc = @extschema@.sig_or,
203
+ stype = signature
204
+ );
205
+
206
+ CREATE AGGREGATE @extschema@.filter( signature )
207
+ (
208
+ sfunc = @extschema@.sig_and,
209
+ stype = signature
210
+ );
211
+
212
+ CREATE AGGREGATE @extschema@.signature( INT )
213
+ (
214
+ sfunc = @extschema@.sig_set,
215
+ stype = signature,
216
+ initcond = '0'
217
+ );
@@ -0,0 +1,7 @@
1
+ # Faceting PostgreSQL extension module
2
+
3
+ comment = 'API for faceted indexing and queries (based on builtin VARBIT bit strings)'
4
+ requires = plpgsql
5
+ superuser = false
6
+ default_version = '0.6.0'
7
+ schema = 'facet'
@@ -0,0 +1,164 @@
1
+ -- ============================================================================
2
+ -- Faceting API implementing bitmap indices using PostgreSQL's built-in VARBIT
3
+ -- type, processed using the built-in language pl/pgsql.
4
+ --
5
+ -- This API is suitable for deployment on any host, since it requires no
6
+ -- PostgreSQL extensions outside the default install.
7
+ --
8
+ -- However, performance is limited to around 30,000 items in practice (in part
9
+ -- because of unnecessary duplication of varbit values when pl/pgsql evaluates
10
+ -- the count function.)
11
+ --
12
+ -- The 'signature' C-based faceting API is preferable for any install where
13
+ -- you have superuser access to the database.
14
+ --
15
+ -- Christopher York
16
+ -- MIT Hyperstudio
17
+ -- February 2014
18
+ -- ============================================================================
19
+
20
+ CREATE FUNCTION @extschema@.sig_resize( sig VARBIT, bits INT ) RETURNS VARBIT AS $$
21
+ DECLARE
22
+ len INT;
23
+ BEGIN
24
+ len := length(sig);
25
+ IF bits > len THEN
26
+ RETURN sig || repeat('0', bits - len)::VARBIT;
27
+ ELSIF bits < len THEN
28
+ RETURN substring(sig FROM 1 FOR bits);
29
+ END IF;
30
+ RETURN sig;
31
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
32
+
33
+ CREATE FUNCTION @extschema@.sig_set( sig VARBIT, pos INT, val INT) RETURNS VARBIT AS $$
34
+ DECLARE
35
+ len INT;
36
+ BEGIN
37
+ len := length(sig);
38
+ IF pos >= len THEN
39
+ IF val > 0 THEN
40
+ RETURN set_bit(@extschema@.sig_resize(sig, pos+1), pos, 1);
41
+ ELSE
42
+ RETURN sig;
43
+ END IF;
44
+ ELSE
45
+ RETURN set_bit(sig, pos, val);
46
+ END IF;
47
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
48
+
49
+ CREATE FUNCTION @extschema@.sig_set( sig VARBIT, pos INT) RETURNS VARBIT AS $$
50
+ BEGIN
51
+ RETURN @extschema@.sig_set(sig, pos, 1);
52
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
53
+
54
+ CREATE FUNCTION @extschema@.sig_get( sig VARBIT, pos INT ) RETURNS INT AS $$
55
+ DECLARE
56
+ len INT;
57
+ BEGIN
58
+ len := length(sig);
59
+ IF pos >= len THEN
60
+ RETURN 0;
61
+ ELSE
62
+ RETURN get_bit(sig, pos);
63
+ END IF;
64
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
65
+
66
+ CREATE FUNCTION @extschema@.sig_length( sig VARBIT ) RETURNS INT AS $$
67
+ BEGIN
68
+ RETURN length(sig);
69
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
70
+
71
+ CREATE FUNCTION @extschema@.sig_min( sig VARBIT ) RETURNS INT AS $$
72
+ BEGIN
73
+ RETURN position('1' in sig) - 1;
74
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
75
+
76
+ CREATE FUNCTION @extschema@.sig_and( sig1 VARBIT, sig2 VARBIT ) RETURNS VARBIT AS $$
77
+ DECLARE
78
+ len INT;
79
+ BEGIN
80
+ len := GREATEST(length(sig1), length(sig2));
81
+ RETURN bitand(@extschema@.sig_resize(sig1, len), @extschema@.sig_resize(sig2, len)) ;
82
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
83
+
84
+ CREATE FUNCTION @extschema@.sig_or( sig1 VARBIT, sig2 VARBIT ) RETURNS VARBIT AS $$
85
+ DECLARE
86
+ len INT;
87
+ BEGIN
88
+ len := GREATEST(length(sig1), length(sig2));
89
+ RETURN bitor(@extschema@.sig_resize(sig1, len), @extschema@.sig_resize(sig2, len)) ;
90
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
91
+
92
+ CREATE FUNCTION @extschema@.sig_xor( sig1 VARBIT, sig2 VARBIT ) RETURNS VARBIT AS $$
93
+ DECLARE
94
+ len INT;
95
+ BEGIN
96
+ len := GREATEST(length(sig1), length(sig2));
97
+ RETURN bitxor(@extschema@.sig_resize(sig1, len), @extschema@.sig_resize(sig2, len)) ;
98
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
99
+
100
+ CREATE FUNCTION @extschema@.count( sig VARBIT ) RETURNS INT AS $$
101
+ BEGIN
102
+ -- This is, by any measure, horrific. However, it appears to be the only
103
+ -- way to use PostgreSQL built in functions to count bits in a bit string.
104
+ RETURN length(replace(sig::TEXT, '0', ''));
105
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
106
+
107
+ CREATE FUNCTION @extschema@.contains( sig VARBIT, pos INT ) RETURNS BOOL AS $$
108
+ BEGIN
109
+ RETURN @extschema@.sig_get(sig, pos) = 1;
110
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
111
+
112
+ CREATE FUNCTION @extschema@.members( sig VARBIT ) RETURNS SETOF INT AS $$
113
+ BEGIN
114
+ FOR i IN 0 .. length(sig) - 1 LOOP
115
+ IF @extschema@.contains(sig, i) THEN
116
+ RETURN NEXT i;
117
+ END IF;
118
+ END LOOP;
119
+ END $$ LANGUAGE plpgsql STRICT IMMUTABLE;
120
+
121
+
122
+ -- operators for faceting
123
+
124
+ CREATE OPERATOR @extschema@.& (
125
+ leftarg = VARBIT,
126
+ rightarg = VARBIT,
127
+ procedure = @extschema@.sig_and,
128
+ commutator = &
129
+ );
130
+
131
+ CREATE OPERATOR @extschema@.| (
132
+ leftarg = VARBIT,
133
+ rightarg = VARBIT,
134
+ procedure = @extschema@.sig_or,
135
+ commutator = |
136
+ );
137
+
138
+ CREATE OPERATOR @extschema@.+ (
139
+ leftarg = VARBIT,
140
+ rightarg = int,
141
+ procedure = @extschema@.sig_set
142
+ );
143
+
144
+
145
+ -- aggregate functions for faceting
146
+
147
+ CREATE AGGREGATE @extschema@.collect( VARBIT )
148
+ (
149
+ sfunc = @extschema@.sig_or,
150
+ stype = VARBIT
151
+ );
152
+
153
+ CREATE AGGREGATE @extschema@.filter( VARBIT )
154
+ (
155
+ sfunc = @extschema@.sig_and,
156
+ stype = VARBIT
157
+ );
158
+
159
+ CREATE AGGREGATE @extschema@.signature( INT )
160
+ (
161
+ sfunc = @extschema@.sig_set,
162
+ stype = VARBIT,
163
+ initcond = '0'
164
+ );
@@ -21,9 +21,9 @@
21
21
  * - hooks for managing custom data
22
22
  */
23
23
 
24
- //= require <jquery>
24
+ //= require jquery
25
25
 
26
- //= require <rep.widgets>
26
+ //= require rep.widgets
27
27
 
28
28
  repertoire.facet_context = function(context_name, state_fn, options) {
29
29
  var self = repertoire.model(options);
@@ -24,11 +24,9 @@
24
24
  * None are required.
25
25
  */
26
26
 
27
- //= require "../facet"
27
+ //= require ../facet
28
28
 
29
- //= provide "../../../images/repertoire-faceting/proportional_symbol.png"
30
-
31
- //= require <google-earth-extensions>
29
+ //= require google-earth-extensions
32
30
 
33
31
 
34
32
  // bootstrap Google Earth API
@@ -21,7 +21,7 @@
21
21
  * None are required.
22
22
  */
23
23
 
24
- //= require "facet_widget"
24
+ //= require ./facet_widget
25
25
 
26
26
 
27
27
  repertoire.facet = function($facet, options) {
@@ -28,15 +28,10 @@
28
28
  * See the documentation for these methods for more details.
29
29
  */
30
30
 
31
- //= require <jquery>
32
-
33
- //= require <rep.widgets>
34
-
35
- //= require "context"
36
-
37
- //= require "../../stylesheets/rep.faceting.css"
38
- //= provide "../../images/**/*"
31
+ //= require jquery
39
32
 
33
+ //= require rep.widgets
34
+ //= require ./context
40
35
 
41
36
  repertoire.facet_widget = function($widget, options) {
42
37
  var self = repertoire.widget($widget, options);
@@ -20,7 +20,7 @@
20
20
  * None are required.
21
21
  */
22
22
 
23
- //= require "facet_widget"
23
+ //= require ./facet_widget
24
24
 
25
25
  repertoire.nested_facet = function($facet, options) {
26
26
  // inherit complete facet-value-count widget behaviour
@@ -19,7 +19,7 @@
19
19
  * None are required.
20
20
  */
21
21
 
22
- //= require "facet_widget"
22
+ //= require ./facet_widget
23
23
 
24
24
 
25
25
  repertoire.results = function($results, options) {
@@ -42,4 +42,8 @@
42
42
  * TODO. can the css for this module be namespaced?
43
43
  */
44
44
 
45
- //= require "rep.faceting/*"
45
+ //= require ./rep.faceting/context
46
+ //= require ./rep.faceting/facet
47
+ //= require ./rep.faceting/facet_widget
48
+ //= require ./rep.faceting/nested_facet
49
+ //= require ./rep.faceting/results
@@ -13,9 +13,9 @@
13
13
  * since Safari doesn't support them.
14
14
  */
15
15
 
16
- //= require <jquery>
17
- //= require "rep.faceting"
18
- //= require "protovis"
16
+ //= require jquery
17
+ //= require ./rep.faceting
18
+ //= require protovis
19
19
 
20
20
  (function($) {
21
21
 
@@ -0,0 +1,51 @@
1
+ /*
2
+ * Repertoire abstract event model, for use with widget model
3
+ *
4
+ * Copyright (c) 2009 MIT Hyperstudio
5
+ * Christopher York, 11/2009
6
+ *
7
+ * Requires jquery 1.3.2+
8
+ * Support: Firefox 3+ & Safari 4+. IE emphatically not supported.
9
+ */
10
+
11
+ //
12
+ // Mixin that adds functionality for event listening to an arbitrary javascript object.
13
+ //
14
+ // API is the similar to jquery's bind, unbind, and trigger - except that events cannot be
15
+ // namespaced.
16
+ //
17
+ // N.B. This is not a true event dispatch system: there is no event object, just callbacks.
18
+ // Implementation may change.
19
+ //
20
+ repertoire.events = function(self, $proxy) {
21
+
22
+ var handlers = {};
23
+
24
+ // mimic jquery's event bind
25
+ self.bind = function(type, fn) {
26
+ if (!handlers[type])
27
+ handlers[type] = [];
28
+
29
+ handlers[type].push(fn);
30
+ };
31
+
32
+ // mimic jquery's event unbind
33
+ self.unbind = function(type, fn) {
34
+ if (handlers[type]) {
35
+ handlers[type] = jQuery.grep(handlers[type], function(h) {
36
+ return h !== fn;
37
+ });
38
+ }
39
+ };
40
+
41
+ // wrap jquery's event trigger
42
+ self.trigger = function(type, data) {
43
+ if (handlers[type]) {
44
+ jQuery.each(handlers[type], function() {
45
+ this.call(self);
46
+ })
47
+ }
48
+ };
49
+
50
+ return self;
51
+ };
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Repertoire abstract ajax widget
3
+ *
4
+ * Copyright (c) 2009 MIT Hyperstudio
5
+ * Christopher York, 09/2009
6
+ *
7
+ * Requires jquery 1.3.2+
8
+ * Support: Firefox 3+ & Safari 4+. IE emphatically not supported.
9
+ */
10
+
11
+ // claim a single global namespace, 'repertoire'
12
+ repertoire = {};
13
+
14
+ // Global defaults inherited by all widgets
15
+ //
16
+ // Options:
17
+ // path_prefix - prefix to add before all generated urls
18
+ //
19
+ repertoire.defaults = {
20
+ path_prefix: ''
21
+ };
22
+
23
+ //
24
+ // Generates a jquery plugin that attaches a widget instance to each matched element
25
+ // and exposes plugin defaults.
26
+ //
27
+ // N.B. This method is currently only in use in the faceting module, and may be deprecated.
28
+ //
29
+ // Usage:
30
+ // $.fn.my_widget = repertoire.plugin(my_widget);
31
+ // $.fn.my_widget.defaults = { /* widget option defaults */ };
32
+ //
33
+ repertoire.plugin = function(self) {
34
+ var fn = function(options) {
35
+ return this.each(function() {
36
+ var settings = $.extend({}, repertoire.defaults, fn.defaults, html_options($(this)), options);
37
+ self($(this), settings).initialize();
38
+ });
39
+ };
40
+ fn.defaults = { };
41
+ return fn;
42
+
43
+ // helper: default widget name and title options from dom
44
+ function html_options($elem) {
45
+ return {
46
+ name: $elem.attr('id'),
47
+ title: $elem.attr('title')
48
+ };
49
+ }
50
+ };