yowl 0.4.pre

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 (108) hide show
  1. data/CHANGES +15 -0
  2. data/INSTALL-MACOSX.md +107 -0
  3. data/README.md +92 -0
  4. data/Rakefile +76 -0
  5. data/bin/yowl +14 -0
  6. data/examples/introduction.html +5 -0
  7. data/lib/yowl/association.rb +66 -0
  8. data/lib/yowl/class.rb +296 -0
  9. data/lib/yowl/generator.rb +96 -0
  10. data/lib/yowl/import.rb +62 -0
  11. data/lib/yowl/individual.rb +398 -0
  12. data/lib/yowl/individual_association.rb +80 -0
  13. data/lib/yowl/ontology.rb +197 -0
  14. data/lib/yowl/options.rb +116 -0
  15. data/lib/yowl/optionsparser.rb +75 -0
  16. data/lib/yowl/person.rb +26 -0
  17. data/lib/yowl/property.rb +190 -0
  18. data/lib/yowl/repository.rb +100 -0
  19. data/lib/yowl/schema.rb +519 -0
  20. data/lib/yowl/template/css/jquery.ui.all.css +11 -0
  21. data/lib/yowl/template/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  22. data/lib/yowl/template/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  23. data/lib/yowl/template/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  24. data/lib/yowl/template/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  25. data/lib/yowl/template/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  26. data/lib/yowl/template/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  27. data/lib/yowl/template/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  28. data/lib/yowl/template/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  29. data/lib/yowl/template/css/smoothness/images/ui-icons_222222_256x240.png +0 -0
  30. data/lib/yowl/template/css/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  31. data/lib/yowl/template/css/smoothness/images/ui-icons_454545_256x240.png +0 -0
  32. data/lib/yowl/template/css/smoothness/images/ui-icons_888888_256x240.png +0 -0
  33. data/lib/yowl/template/css/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  34. data/lib/yowl/template/css/smoothness/jquery-ui-1.8.23.custom.css +563 -0
  35. data/lib/yowl/template/css/yowl.css +414 -0
  36. data/lib/yowl/template/import-diagram.erb +29 -0
  37. data/lib/yowl/template/index.erb +56 -0
  38. data/lib/yowl/template/js/jquery-1.7.2.min.js +4 -0
  39. data/lib/yowl/template/js/jquery-ui-1.8.23.custom.min.js +125 -0
  40. data/lib/yowl/template/js/jquery.ui.accordion.js +611 -0
  41. data/lib/yowl/template/js/yowl.js +72 -0
  42. data/lib/yowl/template/ontology.erb +598 -0
  43. data/lib/yowl/template/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  44. data/lib/yowl/template/themes/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  45. data/lib/yowl/template/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  46. data/lib/yowl/template/themes/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  47. data/lib/yowl/template/themes/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  48. data/lib/yowl/template/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  49. data/lib/yowl/template/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  50. data/lib/yowl/template/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  51. data/lib/yowl/template/themes/base/images/ui-icons_222222_256x240.png +0 -0
  52. data/lib/yowl/template/themes/base/images/ui-icons_2e83ff_256x240.png +0 -0
  53. data/lib/yowl/template/themes/base/images/ui-icons_454545_256x240.png +0 -0
  54. data/lib/yowl/template/themes/base/images/ui-icons_888888_256x240.png +0 -0
  55. data/lib/yowl/template/themes/base/images/ui-icons_cd0a0a_256x240.png +0 -0
  56. data/lib/yowl/template/themes/base/jquery.ui.accordion.css +19 -0
  57. data/lib/yowl/template/themes/base/jquery.ui.all.css +11 -0
  58. data/lib/yowl/template/themes/base/jquery.ui.autocomplete.css +53 -0
  59. data/lib/yowl/template/themes/base/jquery.ui.base.css +11 -0
  60. data/lib/yowl/template/themes/base/jquery.ui.button.css +38 -0
  61. data/lib/yowl/template/themes/base/jquery.ui.core.css +38 -0
  62. data/lib/yowl/template/themes/base/jquery.ui.datepicker.css +66 -0
  63. data/lib/yowl/template/themes/base/jquery.ui.dialog.css +21 -0
  64. data/lib/yowl/template/themes/base/jquery.ui.progressbar.css +11 -0
  65. data/lib/yowl/template/themes/base/jquery.ui.resizable.css +20 -0
  66. data/lib/yowl/template/themes/base/jquery.ui.selectable.css +10 -0
  67. data/lib/yowl/template/themes/base/jquery.ui.slider.css +24 -0
  68. data/lib/yowl/template/themes/base/jquery.ui.tabs.css +18 -0
  69. data/lib/yowl/template/themes/base/jquery.ui.theme.css +247 -0
  70. data/lib/yowl/template/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  71. data/lib/yowl/template/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  72. data/lib/yowl/template/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  73. data/lib/yowl/template/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  74. data/lib/yowl/template/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  75. data/lib/yowl/template/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  76. data/lib/yowl/template/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  77. data/lib/yowl/template/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  78. data/lib/yowl/template/themes/smoothness/images/ui-icons_222222_256x240.png +0 -0
  79. data/lib/yowl/template/themes/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  80. data/lib/yowl/template/themes/smoothness/images/ui-icons_454545_256x240.png +0 -0
  81. data/lib/yowl/template/themes/smoothness/images/ui-icons_888888_256x240.png +0 -0
  82. data/lib/yowl/template/themes/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  83. data/lib/yowl/template/themes/smoothness/jquery-ui-1.8.23.custom.css +563 -0
  84. data/lib/yowl/template/themes/smoothness/jquery.ui.accordion.css +19 -0
  85. data/lib/yowl/template/themes/smoothness/jquery.ui.all.css +11 -0
  86. data/lib/yowl/template/themes/smoothness/jquery.ui.autocomplete.css +53 -0
  87. data/lib/yowl/template/themes/smoothness/jquery.ui.base.css +11 -0
  88. data/lib/yowl/template/themes/smoothness/jquery.ui.button.css +38 -0
  89. data/lib/yowl/template/themes/smoothness/jquery.ui.core.css +38 -0
  90. data/lib/yowl/template/themes/smoothness/jquery.ui.datepicker.css +66 -0
  91. data/lib/yowl/template/themes/smoothness/jquery.ui.dialog.css +21 -0
  92. data/lib/yowl/template/themes/smoothness/jquery.ui.progressbar.css +11 -0
  93. data/lib/yowl/template/themes/smoothness/jquery.ui.resizable.css +20 -0
  94. data/lib/yowl/template/themes/smoothness/jquery.ui.selectable.css +10 -0
  95. data/lib/yowl/template/themes/smoothness/jquery.ui.slider.css +24 -0
  96. data/lib/yowl/template/themes/smoothness/jquery.ui.tabs.css +18 -0
  97. data/lib/yowl/template/themes/smoothness/jquery.ui.theme.css +249 -0
  98. data/lib/yowl/util.rb +221 -0
  99. data/lib/yowl/version.rb +3 -0
  100. data/lib/yowl.rb +42 -0
  101. data/test/input/base-with-comments.ttl +163 -0
  102. data/test/input/base.ttl +221 -0
  103. data/test/input/empty.ttl +8 -0
  104. data/test/input/example.ttl +73 -0
  105. data/test/test_example_ttl.rb +62 -0
  106. data/test/test_yowl.rb +4 -0
  107. data/test/testcases.md +24 -0
  108. metadata +311 -0
@@ -0,0 +1,611 @@
1
+ /*!
2
+ * jQuery UI Accordion 1.8.23
3
+ *
4
+ * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Accordion
9
+ *
10
+ * Depends:
11
+ * jquery.ui.core.js
12
+ * jquery.ui.widget.js
13
+ */
14
+ (function( $, undefined ) {
15
+
16
+ $.widget( "ui.accordion", {
17
+ options: {
18
+ active: 0,
19
+ animated: "slide",
20
+ autoHeight: true,
21
+ clearStyle: false,
22
+ collapsible: false,
23
+ event: "click",
24
+ fillSpace: false,
25
+ header: "> li > :first-child,> :not(li):even",
26
+ icons: {
27
+ header: "ui-icon-triangle-1-e",
28
+ headerSelected: "ui-icon-triangle-1-s"
29
+ },
30
+ navigation: false,
31
+ navigationFilter: function() {
32
+ return this.href.toLowerCase && this.href.toLowerCase() === location.href.toLowerCase();
33
+ }
34
+ },
35
+
36
+ _create: function() {
37
+ var self = this,
38
+ options = self.options;
39
+
40
+ self.running = 0;
41
+
42
+ self.element
43
+ .addClass( "ui-accordion ui-widget ui-helper-reset" )
44
+ // in lack of child-selectors in CSS
45
+ // we need to mark top-LIs in a UL-accordion for some IE-fix
46
+ .children( "li" )
47
+ .addClass( "ui-accordion-li-fix" );
48
+
49
+ self.headers = self.element.find( options.header )
50
+ .addClass( "ui-accordion-header ui-helper-reset ui-state-default ui-corner-all" )
51
+ .bind( "mouseenter.accordion", function() {
52
+ if ( options.disabled ) {
53
+ return;
54
+ }
55
+ $( this ).addClass( "ui-state-hover" );
56
+ })
57
+ .bind( "mouseleave.accordion", function() {
58
+ if ( options.disabled ) {
59
+ return;
60
+ }
61
+ $( this ).removeClass( "ui-state-hover" );
62
+ })
63
+ .bind( "focus.accordion", function() {
64
+ if ( options.disabled ) {
65
+ return;
66
+ }
67
+ $( this ).addClass( "ui-state-focus" );
68
+ })
69
+ .bind( "blur.accordion", function() {
70
+ if ( options.disabled ) {
71
+ return;
72
+ }
73
+ $( this ).removeClass( "ui-state-focus" );
74
+ });
75
+
76
+ self.headers.next()
77
+ .addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" );
78
+
79
+ if ( options.navigation ) {
80
+ var current = self.element.find( "a" ).filter( options.navigationFilter ).eq( 0 );
81
+ if ( current.length ) {
82
+ var header = current.closest( ".ui-accordion-header" );
83
+ if ( header.length ) {
84
+ // anchor within header
85
+ self.active = header;
86
+ } else {
87
+ // anchor within content
88
+ self.active = current.closest( ".ui-accordion-content" ).prev();
89
+ }
90
+ }
91
+ }
92
+
93
+ self.active = self._findActive( self.active || options.active )
94
+ .addClass( "ui-state-default ui-state-active" )
95
+ .toggleClass( "ui-corner-all" )
96
+ .toggleClass( "ui-corner-top" );
97
+ self.active.next().addClass( "ui-accordion-content-active" );
98
+
99
+ self._createIcons();
100
+ self.resize();
101
+
102
+ // ARIA
103
+ self.element.attr( "role", "tablist" );
104
+
105
+ self.headers
106
+ .attr( "role", "tab" )
107
+ .bind( "keydown.accordion", function( event ) {
108
+ return self._keydown( event );
109
+ })
110
+ .next()
111
+ .attr( "role", "tabpanel" );
112
+
113
+ self.headers
114
+ .not( self.active || "" )
115
+ .attr({
116
+ "aria-expanded": "false",
117
+ "aria-selected": "false",
118
+ tabIndex: -1
119
+ })
120
+ .next()
121
+ .hide();
122
+
123
+ // make sure at least one header is in the tab order
124
+ if ( !self.active.length ) {
125
+ self.headers.eq( 0 ).attr( "tabIndex", 0 );
126
+ } else {
127
+ self.active
128
+ .attr({
129
+ "aria-expanded": "true",
130
+ "aria-selected": "true",
131
+ tabIndex: 0
132
+ });
133
+ }
134
+
135
+ // only need links in tab order for Safari
136
+ if ( !$.browser.safari ) {
137
+ self.headers.find( "a" ).attr( "tabIndex", -1 );
138
+ }
139
+
140
+ if ( options.event ) {
141
+ self.headers.bind( options.event.split(" ").join(".accordion ") + ".accordion", function(event) {
142
+ self._clickHandler.call( self, event, this );
143
+ event.preventDefault();
144
+ });
145
+ }
146
+ },
147
+
148
+ _createIcons: function() {
149
+ var options = this.options;
150
+ if ( options.icons ) {
151
+ $( "<span></span>" )
152
+ .addClass( "ui-icon " + options.icons.header )
153
+ .prependTo( this.headers );
154
+ this.active.children( ".ui-icon" )
155
+ .toggleClass(options.icons.header)
156
+ .toggleClass(options.icons.headerSelected);
157
+ this.element.addClass( "ui-accordion-icons" );
158
+ }
159
+ },
160
+
161
+ _destroyIcons: function() {
162
+ this.headers.children( ".ui-icon" ).remove();
163
+ this.element.removeClass( "ui-accordion-icons" );
164
+ },
165
+
166
+ destroy: function() {
167
+ var options = this.options;
168
+
169
+ this.element
170
+ .removeClass( "ui-accordion ui-widget ui-helper-reset" )
171
+ .removeAttr( "role" );
172
+
173
+ this.headers
174
+ .unbind( ".accordion" )
175
+ .removeClass( "ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
176
+ .removeAttr( "role" )
177
+ .removeAttr( "aria-expanded" )
178
+ .removeAttr( "aria-selected" )
179
+ .removeAttr( "tabIndex" );
180
+
181
+ this.headers.find( "a" ).removeAttr( "tabIndex" );
182
+ this._destroyIcons();
183
+ var contents = this.headers.next()
184
+ .css( "display", "" )
185
+ .removeAttr( "role" )
186
+ .removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled" );
187
+ if ( options.autoHeight || options.fillHeight ) {
188
+ contents.css( "height", "" );
189
+ }
190
+
191
+ return $.Widget.prototype.destroy.call( this );
192
+ },
193
+
194
+ _setOption: function( key, value ) {
195
+ $.Widget.prototype._setOption.apply( this, arguments );
196
+
197
+ if ( key == "active" ) {
198
+ this.activate( value );
199
+ }
200
+ if ( key == "icons" ) {
201
+ this._destroyIcons();
202
+ if ( value ) {
203
+ this._createIcons();
204
+ }
205
+ }
206
+ // #5332 - opacity doesn't cascade to positioned elements in IE
207
+ // so we need to add the disabled class to the headers and panels
208
+ if ( key == "disabled" ) {
209
+ this.headers.add(this.headers.next())
210
+ [ value ? "addClass" : "removeClass" ](
211
+ "ui-accordion-disabled ui-state-disabled" );
212
+ }
213
+ },
214
+
215
+ _keydown: function( event ) {
216
+ if ( this.options.disabled || event.altKey || event.ctrlKey ) {
217
+ return;
218
+ }
219
+
220
+ var keyCode = $.ui.keyCode,
221
+ length = this.headers.length,
222
+ currentIndex = this.headers.index( event.target ),
223
+ toFocus = false;
224
+
225
+ switch ( event.keyCode ) {
226
+ case keyCode.RIGHT:
227
+ case keyCode.DOWN:
228
+ toFocus = this.headers[ ( currentIndex + 1 ) % length ];
229
+ break;
230
+ case keyCode.LEFT:
231
+ case keyCode.UP:
232
+ toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
233
+ break;
234
+ case keyCode.SPACE:
235
+ case keyCode.ENTER:
236
+ this._clickHandler( { target: event.target }, event.target );
237
+ event.preventDefault();
238
+ }
239
+
240
+ if ( toFocus ) {
241
+ $( event.target ).attr( "tabIndex", -1 );
242
+ $( toFocus ).attr( "tabIndex", 0 );
243
+ toFocus.focus();
244
+ return false;
245
+ }
246
+
247
+ return true;
248
+ },
249
+
250
+ resize: function() {
251
+ var options = this.options,
252
+ maxHeight;
253
+
254
+ if ( options.fillSpace ) {
255
+ if ( $.browser.msie ) {
256
+ var defOverflow = this.element.parent().css( "overflow" );
257
+ this.element.parent().css( "overflow", "hidden");
258
+ }
259
+ maxHeight = this.element.parent().height();
260
+ if ($.browser.msie) {
261
+ this.element.parent().css( "overflow", defOverflow );
262
+ }
263
+
264
+ this.headers.each(function() {
265
+ maxHeight -= $( this ).outerHeight( true );
266
+ });
267
+
268
+ this.headers.next()
269
+ .each(function() {
270
+ $( this ).height( Math.max( 0, maxHeight -
271
+ $( this ).innerHeight() + $( this ).height() ) );
272
+ })
273
+ .css( "overflow", "auto" );
274
+ } else if ( options.autoHeight ) {
275
+ maxHeight = 0;
276
+ this.headers.next()
277
+ .each(function() {
278
+ maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
279
+ })
280
+ .height( maxHeight );
281
+ }
282
+
283
+ return this;
284
+ },
285
+
286
+ activate: function( index ) {
287
+ // TODO this gets called on init, changing the option without an explicit call for that
288
+ this.options.active = index;
289
+ // call clickHandler with custom event
290
+ var active = this._findActive( index )[ 0 ];
291
+ this._clickHandler( { target: active }, active );
292
+
293
+ return this;
294
+ },
295
+
296
+ _findActive: function( selector ) {
297
+ return selector
298
+ ? typeof selector === "number"
299
+ ? this.headers.filter( ":eq(" + selector + ")" )
300
+ : this.headers.not( this.headers.not( selector ) )
301
+ : selector === false
302
+ ? $( [] )
303
+ : this.headers.filter( ":eq(0)" );
304
+ },
305
+
306
+ // TODO isn't event.target enough? why the separate target argument?
307
+ _clickHandler: function( event, target ) {
308
+ var options = this.options;
309
+ if ( options.disabled ) {
310
+ return;
311
+ }
312
+
313
+ // called only when using activate(false) to close all parts programmatically
314
+ if ( !event.target ) {
315
+ if ( !options.collapsible ) {
316
+ return;
317
+ }
318
+ this.active
319
+ .removeClass( "ui-state-active ui-corner-top" )
320
+ .addClass( "ui-state-default ui-corner-all" )
321
+ .children( ".ui-icon" )
322
+ .removeClass( options.icons.headerSelected )
323
+ .addClass( options.icons.header );
324
+ this.active.next().addClass( "ui-accordion-content-active" );
325
+ var toHide = this.active.next(),
326
+ data = {
327
+ options: options,
328
+ newHeader: $( [] ),
329
+ oldHeader: options.active,
330
+ newContent: $( [] ),
331
+ oldContent: toHide
332
+ },
333
+ toShow = ( this.active = $( [] ) );
334
+ this._toggle( toShow, toHide, data );
335
+ return;
336
+ }
337
+
338
+ // get the click target
339
+ var clicked = $( event.currentTarget || target ),
340
+ clickedIsActive = clicked[0] === this.active[0];
341
+
342
+ // TODO the option is changed, is that correct?
343
+ // TODO if it is correct, shouldn't that happen after determining that the click is valid?
344
+ options.active = options.collapsible && clickedIsActive ?
345
+ false :
346
+ this.headers.index( clicked );
347
+
348
+ // if animations are still active, or the active header is the target, ignore click
349
+ if ( this.running || ( !options.collapsible && clickedIsActive ) ) {
350
+ return;
351
+ }
352
+
353
+ // find elements to show and hide
354
+ var active = this.active,
355
+ toShow = clicked.next(),
356
+ toHide = this.active.next(),
357
+ data = {
358
+ options: options,
359
+ newHeader: clickedIsActive && options.collapsible ? $([]) : clicked,
360
+ oldHeader: this.active,
361
+ newContent: clickedIsActive && options.collapsible ? $([]) : toShow,
362
+ oldContent: toHide
363
+ },
364
+ down = this.headers.index( this.active[0] ) > this.headers.index( clicked[0] );
365
+
366
+ // when the call to ._toggle() comes after the class changes
367
+ // it causes a very odd bug in IE 8 (see #6720)
368
+ this.active = clickedIsActive ? $([]) : clicked;
369
+ this._toggle( toShow, toHide, data, clickedIsActive, down );
370
+
371
+ // switch classes
372
+ active
373
+ .removeClass( "ui-state-active ui-corner-top" )
374
+ .addClass( "ui-state-default ui-corner-all" )
375
+ .children( ".ui-icon" )
376
+ .removeClass( options.icons.headerSelected )
377
+ .addClass( options.icons.header );
378
+ if ( !clickedIsActive ) {
379
+ clicked
380
+ .removeClass( "ui-state-default ui-corner-all" )
381
+ .addClass( "ui-state-active ui-corner-top" )
382
+ .children( ".ui-icon" )
383
+ .removeClass( options.icons.header )
384
+ .addClass( options.icons.headerSelected );
385
+ clicked
386
+ .next()
387
+ .addClass( "ui-accordion-content-active" );
388
+ }
389
+
390
+ return;
391
+ },
392
+
393
+ _toggle: function( toShow, toHide, data, clickedIsActive, down ) {
394
+ var self = this,
395
+ options = self.options;
396
+
397
+ self.toShow = toShow;
398
+ self.toHide = toHide;
399
+ self.data = data;
400
+
401
+ var complete = function() {
402
+ if ( !self ) {
403
+ return;
404
+ }
405
+ return self._completed.apply( self, arguments );
406
+ };
407
+
408
+ // trigger changestart event
409
+ self._trigger( "changestart", null, self.data );
410
+
411
+ // count elements to animate
412
+ self.running = toHide.size() === 0 ? toShow.size() : toHide.size();
413
+
414
+ if ( options.animated ) {
415
+ var animOptions = {};
416
+
417
+ if ( options.collapsible && clickedIsActive ) {
418
+ animOptions = {
419
+ toShow: $( [] ),
420
+ toHide: toHide,
421
+ complete: complete,
422
+ down: down,
423
+ autoHeight: options.autoHeight || options.fillSpace
424
+ };
425
+ } else {
426
+ animOptions = {
427
+ toShow: toShow,
428
+ toHide: toHide,
429
+ complete: complete,
430
+ down: down,
431
+ autoHeight: options.autoHeight || options.fillSpace
432
+ };
433
+ }
434
+
435
+ if ( !options.proxied ) {
436
+ options.proxied = options.animated;
437
+ }
438
+
439
+ if ( !options.proxiedDuration ) {
440
+ options.proxiedDuration = options.duration;
441
+ }
442
+
443
+ options.animated = $.isFunction( options.proxied ) ?
444
+ options.proxied( animOptions ) :
445
+ options.proxied;
446
+
447
+ options.duration = $.isFunction( options.proxiedDuration ) ?
448
+ options.proxiedDuration( animOptions ) :
449
+ options.proxiedDuration;
450
+
451
+ var animations = $.ui.accordion.animations,
452
+ duration = options.duration,
453
+ easing = options.animated;
454
+
455
+ if ( easing && !animations[ easing ] && !$.easing[ easing ] ) {
456
+ easing = "slide";
457
+ }
458
+ if ( !animations[ easing ] ) {
459
+ animations[ easing ] = function( options ) {
460
+ this.slide( options, {
461
+ easing: easing,
462
+ duration: duration || 700
463
+ });
464
+ };
465
+ }
466
+
467
+ animations[ easing ]( animOptions );
468
+ } else {
469
+ if ( options.collapsible && clickedIsActive ) {
470
+ toShow.toggle();
471
+ } else {
472
+ toHide.hide();
473
+ toShow.show();
474
+ }
475
+
476
+ complete( true );
477
+ }
478
+
479
+ // TODO assert that the blur and focus triggers are really necessary, remove otherwise
480
+ toHide.prev()
481
+ .attr({
482
+ "aria-expanded": "false",
483
+ "aria-selected": "false",
484
+ tabIndex: -1
485
+ })
486
+ .blur();
487
+ toShow.prev()
488
+ .attr({
489
+ "aria-expanded": "true",
490
+ "aria-selected": "true",
491
+ tabIndex: 0
492
+ })
493
+ .focus();
494
+ },
495
+
496
+ _completed: function( cancel ) {
497
+ this.running = cancel ? 0 : --this.running;
498
+ if ( this.running ) {
499
+ return;
500
+ }
501
+
502
+ if ( this.options.clearStyle ) {
503
+ this.toShow.add( this.toHide ).css({
504
+ height: "",
505
+ overflow: ""
506
+ });
507
+ }
508
+
509
+ // other classes are removed before the animation; this one needs to stay until completed
510
+ this.toHide.removeClass( "ui-accordion-content-active" );
511
+ // Work around for rendering bug in IE (#5421)
512
+ if ( this.toHide.length ) {
513
+ this.toHide.parent()[0].className = this.toHide.parent()[0].className;
514
+ }
515
+
516
+ this._trigger( "change", null, this.data );
517
+ }
518
+ });
519
+
520
+ $.extend( $.ui.accordion, {
521
+ version: "1.8.23",
522
+ animations: {
523
+ slide: function( options, additions ) {
524
+ options = $.extend({
525
+ easing: "swing",
526
+ duration: 300
527
+ }, options, additions );
528
+ if ( !options.toHide.size() ) {
529
+ options.toShow.animate({
530
+ height: "show",
531
+ paddingTop: "show",
532
+ paddingBottom: "show"
533
+ }, options );
534
+ return;
535
+ }
536
+ if ( !options.toShow.size() ) {
537
+ options.toHide.animate({
538
+ height: "hide",
539
+ paddingTop: "hide",
540
+ paddingBottom: "hide"
541
+ }, options );
542
+ return;
543
+ }
544
+ var overflow = options.toShow.css( "overflow" ),
545
+ percentDone = 0,
546
+ showProps = {},
547
+ hideProps = {},
548
+ fxAttrs = [ "height", "paddingTop", "paddingBottom" ],
549
+ originalWidth;
550
+ // fix width before calculating height of hidden element
551
+ var s = options.toShow;
552
+ originalWidth = s[0].style.width;
553
+ s.width( s.parent().width()
554
+ - parseFloat( s.css( "paddingLeft" ) )
555
+ - parseFloat( s.css( "paddingRight" ) )
556
+ - ( parseFloat( s.css( "borderLeftWidth" ) ) || 0 )
557
+ - ( parseFloat( s.css( "borderRightWidth" ) ) || 0 ) );
558
+
559
+ $.each( fxAttrs, function( i, prop ) {
560
+ hideProps[ prop ] = "hide";
561
+
562
+ var parts = ( "" + $.css( options.toShow[0], prop ) ).match( /^([\d+-.]+)(.*)$/ );
563
+ showProps[ prop ] = {
564
+ value: parts[ 1 ],
565
+ unit: parts[ 2 ] || "px"
566
+ };
567
+ });
568
+ options.toShow.css({ height: 0, overflow: "hidden" }).show();
569
+ options.toHide
570
+ .filter( ":hidden" )
571
+ .each( options.complete )
572
+ .end()
573
+ .filter( ":visible" )
574
+ .animate( hideProps, {
575
+ step: function( now, settings ) {
576
+ // only calculate the percent when animating height
577
+ // IE gets very inconsistent results when animating elements
578
+ // with small values, which is common for padding
579
+ if ( settings.prop == "height" ) {
580
+ percentDone = ( settings.end - settings.start === 0 ) ? 0 :
581
+ ( settings.now - settings.start ) / ( settings.end - settings.start );
582
+ }
583
+
584
+ options.toShow[ 0 ].style[ settings.prop ] =
585
+ ( percentDone * showProps[ settings.prop ].value )
586
+ + showProps[ settings.prop ].unit;
587
+ },
588
+ duration: options.duration,
589
+ easing: options.easing,
590
+ complete: function() {
591
+ if ( !options.autoHeight ) {
592
+ options.toShow.css( "height", "" );
593
+ }
594
+ options.toShow.css({
595
+ width: originalWidth,
596
+ overflow: overflow
597
+ });
598
+ options.complete();
599
+ }
600
+ });
601
+ },
602
+ bounceslide: function( options ) {
603
+ this.slide( options, {
604
+ easing: options.down ? "easeOutBounce" : "swing",
605
+ duration: options.down ? 1000 : 200
606
+ });
607
+ }
608
+ }
609
+ });
610
+
611
+ })( jQuery );
@@ -0,0 +1,72 @@
1
+
2
+
3
+ $(document).ready(function(){
4
+
5
+ //Get the selected tab, and it's URL.
6
+ var selection = $('#tabs ul li a[href$="#content"]');
7
+ var selection_url = selection.attr('href')
8
+ .replace('#content', '');
9
+
10
+ //Replace the #content href.
11
+ selection.attr('href', '#content');
12
+
13
+ //Create the tabs widget, and select the proper tab.
14
+ $('#tabs').tabs({
15
+ selected: selection.parent().index(),
16
+ });
17
+
18
+ //Make each tab a link by setting the href attribute.
19
+ $('#tabs ul li a').each(function(){
20
+ var url = $.data(this, 'load.tabs');
21
+ if(url) {
22
+ $(this).attr('href', url);
23
+ }
24
+ else {
25
+ $(this).attr('href', selection_url);
26
+ }
27
+ });
28
+
29
+ //Make sure the selected tab also behaves like a link.
30
+ $('#tabs ul li.ui-tabs-selected a').click(function(){
31
+ location.href = $(this).attr('href');
32
+ return false;
33
+ }).css('cursor', 'pointer');
34
+
35
+ $("div.accordion").accordion({
36
+ autoHeight: false,
37
+ navigation: true
38
+ });
39
+
40
+ $("table.overview").styleTable();
41
+ });
42
+
43
+ (function ($) {
44
+ $.fn.styleTable = function (options) {
45
+ var defaults = {
46
+ css: 'styleTable'
47
+ };
48
+ options = $.extend(defaults, options);
49
+
50
+ return this.each(function () {
51
+
52
+ input = $(this);
53
+ input.addClass(options.css);
54
+
55
+ input.find("tr").live('mouseover mouseout', function (event) {
56
+ if (event.type == 'mouseover') {
57
+ $(this).children("td").addClass("ui-state-hover");
58
+ } else {
59
+ $(this).children("td").removeClass("ui-state-hover");
60
+ }
61
+ });
62
+
63
+ input.find("th").addClass("ui-state-default");
64
+ input.find("td").addClass("ui-widget-content");
65
+
66
+ input.find("tr").each(function () {
67
+ $(this).children("td:not(:first)").addClass("first");
68
+ $(this).children("th:not(:first)").addClass("first");
69
+ });
70
+ });
71
+ };
72
+ })(jQuery);