sdoc 1.0.0.rc2 → 1.0.0.rc3

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Rakefile +1 -0
  4. data/lib/rdoc/generator/template/rails/_context.rhtml +216 -0
  5. data/lib/rdoc/generator/template/rails/_head.rhtml +6 -0
  6. data/lib/rdoc/generator/template/rails/class.rhtml +50 -0
  7. data/lib/rdoc/generator/template/rails/file.rhtml +35 -0
  8. data/lib/rdoc/generator/template/rails/index.rhtml +11 -0
  9. data/lib/rdoc/generator/template/rails/resources/apple-touch-icon.png +0 -0
  10. data/lib/rdoc/generator/template/rails/resources/css/github.css +123 -0
  11. data/lib/rdoc/generator/template/rails/resources/css/main.css +363 -0
  12. data/lib/rdoc/generator/template/rails/resources/css/panel.css +360 -0
  13. data/lib/rdoc/generator/template/rails/resources/css/reset.css +48 -0
  14. data/lib/rdoc/generator/template/rails/resources/favicon.ico +0 -0
  15. data/lib/rdoc/generator/template/rails/resources/i/arrow-down.svg +8 -0
  16. data/lib/rdoc/generator/template/rails/resources/i/arrow-right.svg +8 -0
  17. data/lib/rdoc/generator/template/rails/resources/i/search.svg +12 -0
  18. data/lib/rdoc/generator/template/rails/resources/i/tree_bg.svg +8 -0
  19. data/lib/rdoc/generator/template/rails/resources/js/highlight.pack.js +1 -0
  20. data/lib/rdoc/generator/template/rails/resources/js/jquery-1.3.2.min.js +19 -0
  21. data/lib/rdoc/generator/template/rails/resources/js/main.js +25 -0
  22. data/lib/rdoc/generator/template/rails/resources/js/searchdoc.js +465 -0
  23. data/lib/rdoc/generator/template/rails/resources/panel/index.html +47 -0
  24. data/lib/rdoc/generator/template/rails/search_index.rhtml +8 -0
  25. data/lib/rdoc/generator/template/sdoc/_head.rhtml +0 -1
  26. data/lib/rdoc/generator/template/sdoc/class.rhtml +13 -0
  27. data/lib/rdoc/generator/template/sdoc/resources/css/main.css +11 -1
  28. data/lib/rdoc/generator/template/sdoc/resources/js/main.js +7 -1
  29. data/lib/rdoc/generator/template/sdoc/resources/js/searchdoc.js +21 -2
  30. data/lib/sdoc/helpers.rb +22 -0
  31. data/lib/sdoc/version.rb +1 -1
  32. data/spec/helpers_spec.rb +30 -0
  33. metadata +7 -7
  34. data/lib/rdoc/generator/template/sdoc/resources/js/jquery-effect.js +0 -593
@@ -0,0 +1,47 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>search index</title>
5
+ <link rel="stylesheet" href="../css/reset.css" type="text/css" media="screen" charset="utf-8" />
6
+ <link rel="stylesheet" href="../css/panel.css" type="text/css" media="screen" charset="utf-8" />
7
+ <script src="../js/search_index.js" type="text/javascript" charset="utf-8"></script>
8
+ <script src="../js/searcher.js" type="text/javascript" charset="utf-8"></script>
9
+ <script src="tree.js" type="text/javascript" charset="utf-8"></script>
10
+ <script src="../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
11
+ <script src="../js/searchdoc.js" type="text/javascript" charset="utf-8"></script>
12
+ <script type="text/javascript" charset="utf-8">
13
+ $(function() {
14
+ $('#links').hide();
15
+ var panel = new Searchdoc.Panel($('#panel'), search_data, tree, top.frames[1]);
16
+ $('#search').focus();
17
+
18
+ var s = window.parent.location.search.match(/\?q=([^&]+)/);
19
+ if (s) {
20
+ s = decodeURIComponent(s[1]).replace(/\+/g, ' ');
21
+ if (s.length > 0) {
22
+ $('#search').val(s);
23
+ panel.search(s, true);
24
+ }
25
+ }
26
+ })
27
+ </script>
28
+ </head>
29
+
30
+ <body>
31
+ <div class="panel panel_tree" id="panel">
32
+ <div class="header">
33
+ <input type="text" placeholder="Search for a class, method, ..." autosave="searchdoc" results="10" id="search" autocomplete="off" />
34
+ </div>
35
+ <div class="tree">
36
+ <ul>
37
+ </ul>
38
+ </div>
39
+ <div class="result">
40
+ <ul>
41
+ </ul>
42
+ </div>
43
+ </div>
44
+ <a href="links.html" id="links">index</a>
45
+ </body>
46
+
47
+ </html>
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>File index</head>
3
+ <body>
4
+ <% @files.each do |file| %>
5
+ <a href="../<%= file.path %>"><%= file.relative_name %></a>
6
+ <% end %>
7
+ </body>
8
+ </html>
@@ -2,6 +2,5 @@
2
2
  <link rel="stylesheet" href="<%= "#{rel_prefix}/css/main.css" %>" type="text/css" media="screen" />
3
3
  <link rel="stylesheet" href="<%= "#{rel_prefix}/css/github.css" %>" type="text/css" media="screen" />
4
4
  <script src="<%= "#{rel_prefix}/js/jquery-1.3.2.min.js" %>" type="text/javascript" charset="utf-8"></script>
5
- <script src="<%= "#{rel_prefix}/js/jquery-effect.js" %>" type="text/javascript" charset="utf-8"></script>
6
5
  <script src="<%= "#{rel_prefix}/js/main.js" %>" type="text/javascript" charset="utf-8"></script>
7
6
  <script src="<%= "#{rel_prefix}/js/highlight.pack.js" %>" type="text/javascript" charset="utf-8"></script>
@@ -6,6 +6,19 @@
6
6
  <title><%= h klass.full_name %></title>
7
7
  <meta http-equiv="Content-Type" content="text/html; charset=<%= @options.charset %>" />
8
8
  <%= include_template '_head.rhtml', {:rel_prefix => rel_prefix} %>
9
+
10
+ <meta property="og:title" value="<%= klass.full_name %>">
11
+
12
+ <% unless (description = klass.description).empty? %>
13
+ <% human_desc = truncate(strip_tags(description.gsub("\n", " ").strip)) %>
14
+ <meta name="description" content="<%= human_desc %>">
15
+ <meta property="og:description" content="<%= human_desc %>">
16
+ <% end %>
17
+
18
+ <meta name="keywords" content="<%= klass.full_name %> class">
19
+ <% unless klass.method_list.empty? %>
20
+ <meta name="keywords" content="<%= klass.method_list.map(&:name).join(", ") %>">
21
+ <% end %>
9
22
  </head>
10
23
 
11
24
  <body>
@@ -128,7 +128,7 @@ li
128
128
  margin-bottom: 0;
129
129
  }
130
130
 
131
- pre
131
+ pre
132
132
  {
133
133
  margin-bottom: 1em;
134
134
  }
@@ -321,3 +321,13 @@ tt {
321
321
  .ruby-number {
322
322
  color: #40A070;
323
323
  }
324
+
325
+ @keyframes highlight {
326
+ from { background-color: yellow; }
327
+ to { background-color: white; }
328
+ }
329
+
330
+ .highlight {
331
+ animation-name: highlight;
332
+ animation-duration: 1s;
333
+ }
@@ -11,7 +11,13 @@ function toggleSource(id) {
11
11
  window.highlight = function(url) {
12
12
  var hash = url.match(/#([^#]+)$/);
13
13
  if (hash) {
14
- $('a[name=' + hash[1] + ']').parent().effect('highlight', {}, 'slow');
14
+ var parent = document.querySelector('a[name=' + hash[1] + ']').parentElement;
15
+
16
+ parent.classList.add('highlight');
17
+
18
+ setTimeout(function() {
19
+ parent.classList.remove('highlight');
20
+ }, 1000);
15
21
  }
16
22
  };
17
23
 
@@ -245,10 +245,10 @@ Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() {
245
245
  html += '</a>';
246
246
  html += '<p>';
247
247
  if (typeof badge != 'undefined') {
248
- html += '<span class="badge badge_' + (badge % 6 + 1) + '">' + escapeHTML(this.data.badges[badge] || 'unknown') + '</span>';
248
+ html += '<span class="badge badge_' + (badge % 6 + 1) + '">' + stripHTML(this.data.badges[badge] || 'unknown') + '</span>';
249
249
  }
250
250
  html += hlt(result.namespace) + '</p>';
251
- if (result.snippet) html += '<p class="snippet">' + escapeHTML(result.snippet.replace(/^<p>/, '')) + '</p>';
251
+ if (result.snippet) html += '<p class="snippet">' + stripHTML(result.snippet.replace(/^<p>/, '')) + '</p>';
252
252
  li.innerHTML = html;
253
253
  jQuery.data(li, 'path', result.path);
254
254
  return li;
@@ -264,6 +264,25 @@ Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() {
264
264
  });
265
265
  }
266
266
 
267
+ function stripHTML(html) {
268
+ var in_tag = false;
269
+ var output = "";
270
+
271
+ for (var i = 0; i < html.length; i++) {
272
+ if (html[i] == '<'){
273
+ in_tag = true;
274
+ } else if (html[i] == '>') {
275
+ in_tag = false;
276
+ i++;
277
+ }
278
+
279
+ if (!in_tag && i < html.length)
280
+ output += html[i];
281
+ }
282
+
283
+ return output;
284
+ }
285
+
267
286
  });
268
287
 
269
288
  // tree.js ------------------------------------------------
@@ -15,6 +15,28 @@ module SDoc::Helpers
15
15
  yield group unless group[:methods].size == 0
16
16
  end
17
17
 
18
+ # Strips out HTML tags from a given string.
19
+ #
20
+ # Example:
21
+ #
22
+ # strip_tags("<strong>Hello world</strong>") => "Hello world"
23
+ def strip_tags(text)
24
+ text.gsub(/\<\/?[a-zA-Z\s"\.\/\=]+\>/, "")
25
+ end
26
+
27
+ # Truncates a given string. It tries to take whole sentences to have
28
+ # a meaningful description for SEO tags.
29
+ #
30
+ # The only available option is +:length+ which defaults to 200.
31
+ def truncate(text, options = {})
32
+ if text
33
+ length = options.fetch(:length, 200)
34
+ stop = text.rindex(".", length - 1) || length
35
+
36
+ "#{text[0, stop]}."
37
+ end
38
+ end
39
+
18
40
  protected
19
41
  def group_name name
20
42
  if match = name.match(/^([a-z])/i)
@@ -1,3 +1,3 @@
1
1
  module SDoc
2
- VERSION = '1.0.0.rc2'
2
+ VERSION = '1.0.0.rc3'
3
3
  end
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe SDoc::Helpers do
4
+ before :each do
5
+ @helpers = Class.new do
6
+ include SDoc::Helpers
7
+ end.new
8
+ end
9
+
10
+ describe "#strip_tags" do
11
+ it "should strip out HTML tags from the given string" do
12
+ strings = [
13
+ [ %(<strong>Hello world</strong>), "Hello world" ],
14
+ [ %(<a href="Streams.html">Streams</a> are great), "Streams are great" ],
15
+ [ %(<a href="../Base.html">Base</a>), "Base" ],
16
+ [ %(Some<br>\ntext), "Some\ntext" ]
17
+ ]
18
+
19
+ strings.each do |(html, stripped)|
20
+ @helpers.strip_tags(html).must_equal stripped
21
+ end
22
+ end
23
+ end
24
+
25
+ describe "#truncate" do
26
+ it "should truncate the given text around a given length" do
27
+ @helpers.truncate("Hello world", length: 5).must_equal "Hello."
28
+ end
29
+ end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sdoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc2
4
+ version: 1.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Kolesnikov
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2017-04-23 00:00:00.000000000 Z
14
+ date: 2017-08-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rdoc
@@ -58,12 +58,12 @@ files:
58
58
  - lib/rdoc/generator/template/rails/resources/css/panel.css
59
59
  - lib/rdoc/generator/template/rails/resources/css/reset.css
60
60
  - lib/rdoc/generator/template/rails/resources/favicon.ico
61
- - lib/rdoc/generator/template/rails/resources/i/arrows.png
62
- - lib/rdoc/generator/template/rails/resources/i/results_bg.png
63
- - lib/rdoc/generator/template/rails/resources/i/tree_bg.png
61
+ - lib/rdoc/generator/template/rails/resources/i/arrow-down.svg
62
+ - lib/rdoc/generator/template/rails/resources/i/arrow-right.svg
63
+ - lib/rdoc/generator/template/rails/resources/i/search.svg
64
+ - lib/rdoc/generator/template/rails/resources/i/tree_bg.svg
64
65
  - lib/rdoc/generator/template/rails/resources/js/highlight.pack.js
65
66
  - lib/rdoc/generator/template/rails/resources/js/jquery-1.3.2.min.js
66
- - lib/rdoc/generator/template/rails/resources/js/jquery-effect.js
67
67
  - lib/rdoc/generator/template/rails/resources/js/main.js
68
68
  - lib/rdoc/generator/template/rails/resources/js/searchdoc.js
69
69
  - lib/rdoc/generator/template/rails/resources/panel/index.html
@@ -84,7 +84,6 @@ files:
84
84
  - lib/rdoc/generator/template/sdoc/resources/i/tree_bg.png
85
85
  - lib/rdoc/generator/template/sdoc/resources/js/highlight.pack.js
86
86
  - lib/rdoc/generator/template/sdoc/resources/js/jquery-1.3.2.min.js
87
- - lib/rdoc/generator/template/sdoc/resources/js/jquery-effect.js
88
87
  - lib/rdoc/generator/template/sdoc/resources/js/main.js
89
88
  - lib/rdoc/generator/template/sdoc/resources/js/searchdoc.js
90
89
  - lib/rdoc/generator/template/sdoc/resources/panel/index.html
@@ -97,6 +96,7 @@ files:
97
96
  - lib/sdoc/templatable.rb
98
97
  - lib/sdoc/version.rb
99
98
  - sdoc.gemspec
99
+ - spec/helpers_spec.rb
100
100
  - spec/rdoc_generator_spec.rb
101
101
  - spec/spec_helper.rb
102
102
  homepage: https://github.com/zzak/sdoc
@@ -1,593 +0,0 @@
1
- /*
2
- * jQuery UI Effects 1.6rc6
3
- *
4
- * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
5
- * Dual licensed under the MIT (MIT-LICENSE.txt)
6
- * and GPL (GPL-LICENSE.txt) licenses.
7
- *
8
- * http://docs.jquery.com/UI/Effects/
9
- */
10
- ;(function($) {
11
-
12
- $.effects = $.effects || {}; //Add the 'effects' scope
13
-
14
- $.extend($.effects, {
15
- version: "1.6rc6",
16
-
17
- // Saves a set of properties in a data storage
18
- save: function(element, set) {
19
- for(var i=0; i < set.length; i++) {
20
- if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
21
- }
22
- },
23
-
24
- // Restores a set of previously saved properties from a data storage
25
- restore: function(element, set) {
26
- for(var i=0; i < set.length; i++) {
27
- if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
28
- }
29
- },
30
-
31
- setMode: function(el, mode) {
32
- if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
33
- return mode;
34
- },
35
-
36
- getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
37
- // this should be a little more flexible in the future to handle a string & hash
38
- var y, x;
39
- switch (origin[0]) {
40
- case 'top': y = 0; break;
41
- case 'middle': y = 0.5; break;
42
- case 'bottom': y = 1; break;
43
- default: y = origin[0] / original.height;
44
- };
45
- switch (origin[1]) {
46
- case 'left': x = 0; break;
47
- case 'center': x = 0.5; break;
48
- case 'right': x = 1; break;
49
- default: x = origin[1] / original.width;
50
- };
51
- return {x: x, y: y};
52
- },
53
-
54
- // Wraps the element around a wrapper that copies position properties
55
- createWrapper: function(element) {
56
-
57
- //if the element is already wrapped, return it
58
- if (element.parent().is('.ui-effects-wrapper'))
59
- return element.parent();
60
-
61
- //Cache width,height and float properties of the element, and create a wrapper around it
62
- var props = { width: element.outerWidth(true), height: element.outerHeight(true), 'float': element.css('float') };
63
- element.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');
64
- var wrapper = element.parent();
65
-
66
- //Transfer the positioning of the element to the wrapper
67
- if (element.css('position') == 'static') {
68
- wrapper.css({ position: 'relative' });
69
- element.css({ position: 'relative'} );
70
- } else {
71
- var top = element.css('top'); if(isNaN(parseInt(top,10))) top = 'auto';
72
- var left = element.css('left'); if(isNaN(parseInt(left,10))) left = 'auto';
73
- wrapper.css({ position: element.css('position'), top: top, left: left, zIndex: element.css('z-index') }).show();
74
- element.css({position: 'relative', top: 0, left: 0 });
75
- }
76
-
77
- wrapper.css(props);
78
- return wrapper;
79
- },
80
-
81
- removeWrapper: function(element) {
82
- if (element.parent().is('.ui-effects-wrapper'))
83
- return element.parent().replaceWith(element);
84
- return element;
85
- },
86
-
87
- setTransition: function(element, list, factor, value) {
88
- value = value || {};
89
- $.each(list, function(i, x){
90
- unit = element.cssUnit(x);
91
- if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
92
- });
93
- return value;
94
- },
95
-
96
- //Base function to animate from one class to another in a seamless transition
97
- animateClass: function(value, duration, easing, callback) {
98
-
99
- var cb = (typeof easing == "function" ? easing : (callback ? callback : null));
100
- var ea = (typeof easing == "string" ? easing : null);
101
-
102
- return this.each(function() {
103
-
104
- var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || '';
105
- if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */
106
- if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; }
107
-
108
- //Let's get a style offset
109
- var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
110
- if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove);
111
- var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
112
- if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove);
113
-
114
- // The main function to form the object for animation
115
- for(var n in newStyle) {
116
- if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */
117
- && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */
118
- && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */
119
- && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */
120
- && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */
121
- ) offset[n] = newStyle[n];
122
- }
123
-
124
- that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object
125
- // Change style attribute back to original. For stupid IE, we need to clear the damn object.
126
- if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr);
127
- if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove);
128
- if(cb) cb.apply(this, arguments);
129
- });
130
-
131
- });
132
- }
133
- });
134
-
135
-
136
- function _normalizeArguments(a, m) {
137
-
138
- var o = a[1] && a[1].constructor == Object ? a[1] : {}; if(m) o.mode = m;
139
- var speed = a[1] && a[1].constructor != Object ? a[1] : o.duration; //either comes from options.duration or the second argument
140
- speed = $.fx.off ? 0 : typeof speed === "number" ? speed : $.fx.speeds[speed] || $.fx.speeds._default;
141
- var callback = o.callback || ( $.isFunction(a[2]) && a[2] ) || ( $.isFunction(a[3]) && a[3] );
142
-
143
- return [a[0], o, speed, callback];
144
-
145
- }
146
-
147
- //Extend the methods of jQuery
148
- $.fn.extend({
149
-
150
- //Save old methods
151
- _show: $.fn.show,
152
- _hide: $.fn.hide,
153
- __toggle: $.fn.toggle,
154
- _addClass: $.fn.addClass,
155
- _removeClass: $.fn.removeClass,
156
- _toggleClass: $.fn.toggleClass,
157
-
158
- // New effect methods
159
- effect: function(fx, options, speed, callback) {
160
- return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: options || {}, duration: speed, callback: callback }) : null;
161
- },
162
-
163
- show: function() {
164
- if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
165
- return this._show.apply(this, arguments);
166
- else {
167
- return this.effect.apply(this, _normalizeArguments(arguments, 'show'));
168
- }
169
- },
170
-
171
- hide: function() {
172
- if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
173
- return this._hide.apply(this, arguments);
174
- else {
175
- return this.effect.apply(this, _normalizeArguments(arguments, 'hide'));
176
- }
177
- },
178
-
179
- toggle: function(){
180
- if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])) || (arguments[0].constructor == Function))
181
- return this.__toggle.apply(this, arguments);
182
- else {
183
- return this.effect.apply(this, _normalizeArguments(arguments, 'toggle'));
184
- }
185
- },
186
-
187
- addClass: function(classNames, speed, easing, callback) {
188
- return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
189
- },
190
- removeClass: function(classNames,speed,easing,callback) {
191
- return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
192
- },
193
- toggleClass: function(classNames,speed,easing,callback) {
194
- return ( (typeof speed !== "boolean") && speed ) ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames, speed);
195
- },
196
- morph: function(remove,add,speed,easing,callback) {
197
- return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
198
- },
199
- switchClass: function() {
200
- return this.morph.apply(this, arguments);
201
- },
202
-
203
- // helper functions
204
- cssUnit: function(key) {
205
- var style = this.css(key), val = [];
206
- $.each( ['em','px','%','pt'], function(i, unit){
207
- if(style.indexOf(unit) > 0)
208
- val = [parseFloat(style), unit];
209
- });
210
- return val;
211
- }
212
- });
213
-
214
- /*
215
- * jQuery Color Animations
216
- * Copyright 2007 John Resig
217
- * Released under the MIT and GPL licenses.
218
- */
219
-
220
- // We override the animation for all of these color styles
221
- $.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
222
- $.fx.step[attr] = function(fx) {
223
- if ( fx.state == 0 ) {
224
- fx.start = getColor( fx.elem, attr );
225
- fx.end = getRGB( fx.end );
226
- }
227
-
228
- fx.elem.style[attr] = "rgb(" + [
229
- Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0],10), 255), 0),
230
- Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1],10), 255), 0),
231
- Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2],10), 255), 0)
232
- ].join(",") + ")";
233
- };
234
- });
235
-
236
- // Color Conversion functions from highlightFade
237
- // By Blair Mitchelmore
238
- // http://jquery.offput.ca/highlightFade/
239
-
240
- // Parse strings looking for color tuples [255,255,255]
241
- function getRGB(color) {
242
- var result;
243
-
244
- // Check if we're already dealing with an array of colors
245
- if ( color && color.constructor == Array && color.length == 3 )
246
- return color;
247
-
248
- // Look for rgb(num,num,num)
249
- if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
250
- return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
251
-
252
- // Look for rgb(num%,num%,num%)
253
- if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
254
- return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
255
-
256
- // Look for #a0b1c2
257
- if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
258
- return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
259
-
260
- // Look for #fff
261
- if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
262
- return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
263
-
264
- // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
265
- if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
266
- return colors['transparent'];
267
-
268
- // Otherwise, we're most likely dealing with a named color
269
- return colors[$.trim(color).toLowerCase()];
270
- }
271
-
272
- function getColor(elem, attr) {
273
- var color;
274
-
275
- do {
276
- color = $.curCSS(elem, attr);
277
-
278
- // Keep going until we find an element that has color, or we hit the body
279
- if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
280
- break;
281
-
282
- attr = "backgroundColor";
283
- } while ( elem = elem.parentNode );
284
-
285
- return getRGB(color);
286
- };
287
-
288
- // Some named colors to work with
289
- // From Interface by Stefan Petre
290
- // http://interface.eyecon.ro/
291
-
292
- var colors = {
293
- aqua:[0,255,255],
294
- azure:[240,255,255],
295
- beige:[245,245,220],
296
- black:[0,0,0],
297
- blue:[0,0,255],
298
- brown:[165,42,42],
299
- cyan:[0,255,255],
300
- darkblue:[0,0,139],
301
- darkcyan:[0,139,139],
302
- darkgrey:[169,169,169],
303
- darkgreen:[0,100,0],
304
- darkkhaki:[189,183,107],
305
- darkmagenta:[139,0,139],
306
- darkolivegreen:[85,107,47],
307
- darkorange:[255,140,0],
308
- darkorchid:[153,50,204],
309
- darkred:[139,0,0],
310
- darksalmon:[233,150,122],
311
- darkviolet:[148,0,211],
312
- fuchsia:[255,0,255],
313
- gold:[255,215,0],
314
- green:[0,128,0],
315
- indigo:[75,0,130],
316
- khaki:[240,230,140],
317
- lightblue:[173,216,230],
318
- lightcyan:[224,255,255],
319
- lightgreen:[144,238,144],
320
- lightgrey:[211,211,211],
321
- lightpink:[255,182,193],
322
- lightyellow:[255,255,224],
323
- lime:[0,255,0],
324
- magenta:[255,0,255],
325
- maroon:[128,0,0],
326
- navy:[0,0,128],
327
- olive:[128,128,0],
328
- orange:[255,165,0],
329
- pink:[255,192,203],
330
- purple:[128,0,128],
331
- violet:[128,0,128],
332
- red:[255,0,0],
333
- silver:[192,192,192],
334
- white:[255,255,255],
335
- yellow:[255,255,0],
336
- transparent: [255,255,255]
337
- };
338
-
339
- /*
340
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
341
- *
342
- * Uses the built in easing capabilities added In jQuery 1.1
343
- * to offer multiple easing options
344
- *
345
- * TERMS OF USE - jQuery Easing
346
- *
347
- * Open source under the BSD License.
348
- *
349
- * Copyright 2008 George McGinley Smith
350
- * All rights reserved.
351
- *
352
- * Redistribution and use in source and binary forms, with or without modification,
353
- * are permitted provided that the following conditions are met:
354
- *
355
- * Redistributions of source code must retain the above copyright notice, this list of
356
- * conditions and the following disclaimer.
357
- * Redistributions in binary form must reproduce the above copyright notice, this list
358
- * of conditions and the following disclaimer in the documentation and/or other materials
359
- * provided with the distribution.
360
- *
361
- * Neither the name of the author nor the names of contributors may be used to endorse
362
- * or promote products derived from this software without specific prior written permission.
363
- *
364
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
365
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
366
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
367
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
368
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
369
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
370
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
371
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
372
- * OF THE POSSIBILITY OF SUCH DAMAGE.
373
- *
374
- */
375
-
376
- // t: current time, b: begInnIng value, c: change In value, d: duration
377
- $.easing.jswing = $.easing.swing;
378
-
379
- $.extend($.easing,
380
- {
381
- def: 'easeOutQuad',
382
- swing: function (x, t, b, c, d) {
383
- //alert($.easing.default);
384
- return $.easing[$.easing.def](x, t, b, c, d);
385
- },
386
- easeInQuad: function (x, t, b, c, d) {
387
- return c*(t/=d)*t + b;
388
- },
389
- easeOutQuad: function (x, t, b, c, d) {
390
- return -c *(t/=d)*(t-2) + b;
391
- },
392
- easeInOutQuad: function (x, t, b, c, d) {
393
- if ((t/=d/2) < 1) return c/2*t*t + b;
394
- return -c/2 * ((--t)*(t-2) - 1) + b;
395
- },
396
- easeInCubic: function (x, t, b, c, d) {
397
- return c*(t/=d)*t*t + b;
398
- },
399
- easeOutCubic: function (x, t, b, c, d) {
400
- return c*((t=t/d-1)*t*t + 1) + b;
401
- },
402
- easeInOutCubic: function (x, t, b, c, d) {
403
- if ((t/=d/2) < 1) return c/2*t*t*t + b;
404
- return c/2*((t-=2)*t*t + 2) + b;
405
- },
406
- easeInQuart: function (x, t, b, c, d) {
407
- return c*(t/=d)*t*t*t + b;
408
- },
409
- easeOutQuart: function (x, t, b, c, d) {
410
- return -c * ((t=t/d-1)*t*t*t - 1) + b;
411
- },
412
- easeInOutQuart: function (x, t, b, c, d) {
413
- if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
414
- return -c/2 * ((t-=2)*t*t*t - 2) + b;
415
- },
416
- easeInQuint: function (x, t, b, c, d) {
417
- return c*(t/=d)*t*t*t*t + b;
418
- },
419
- easeOutQuint: function (x, t, b, c, d) {
420
- return c*((t=t/d-1)*t*t*t*t + 1) + b;
421
- },
422
- easeInOutQuint: function (x, t, b, c, d) {
423
- if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
424
- return c/2*((t-=2)*t*t*t*t + 2) + b;
425
- },
426
- easeInSine: function (x, t, b, c, d) {
427
- return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
428
- },
429
- easeOutSine: function (x, t, b, c, d) {
430
- return c * Math.sin(t/d * (Math.PI/2)) + b;
431
- },
432
- easeInOutSine: function (x, t, b, c, d) {
433
- return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
434
- },
435
- easeInExpo: function (x, t, b, c, d) {
436
- return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
437
- },
438
- easeOutExpo: function (x, t, b, c, d) {
439
- return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
440
- },
441
- easeInOutExpo: function (x, t, b, c, d) {
442
- if (t==0) return b;
443
- if (t==d) return b+c;
444
- if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
445
- return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
446
- },
447
- easeInCirc: function (x, t, b, c, d) {
448
- return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
449
- },
450
- easeOutCirc: function (x, t, b, c, d) {
451
- return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
452
- },
453
- easeInOutCirc: function (x, t, b, c, d) {
454
- if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
455
- return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
456
- },
457
- easeInElastic: function (x, t, b, c, d) {
458
- var s=1.70158;var p=0;var a=c;
459
- if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
460
- if (a < Math.abs(c)) { a=c; var s=p/4; }
461
- else var s = p/(2*Math.PI) * Math.asin (c/a);
462
- return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
463
- },
464
- easeOutElastic: function (x, t, b, c, d) {
465
- var s=1.70158;var p=0;var a=c;
466
- if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
467
- if (a < Math.abs(c)) { a=c; var s=p/4; }
468
- else var s = p/(2*Math.PI) * Math.asin (c/a);
469
- return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
470
- },
471
- easeInOutElastic: function (x, t, b, c, d) {
472
- var s=1.70158;var p=0;var a=c;
473
- if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
474
- if (a < Math.abs(c)) { a=c; var s=p/4; }
475
- else var s = p/(2*Math.PI) * Math.asin (c/a);
476
- if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
477
- return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
478
- },
479
- easeInBack: function (x, t, b, c, d, s) {
480
- if (s == undefined) s = 1.70158;
481
- return c*(t/=d)*t*((s+1)*t - s) + b;
482
- },
483
- easeOutBack: function (x, t, b, c, d, s) {
484
- if (s == undefined) s = 1.70158;
485
- return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
486
- },
487
- easeInOutBack: function (x, t, b, c, d, s) {
488
- if (s == undefined) s = 1.70158;
489
- if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
490
- return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
491
- },
492
- easeInBounce: function (x, t, b, c, d) {
493
- return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
494
- },
495
- easeOutBounce: function (x, t, b, c, d) {
496
- if ((t/=d) < (1/2.75)) {
497
- return c*(7.5625*t*t) + b;
498
- } else if (t < (2/2.75)) {
499
- return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
500
- } else if (t < (2.5/2.75)) {
501
- return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
502
- } else {
503
- return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
504
- }
505
- },
506
- easeInOutBounce: function (x, t, b, c, d) {
507
- if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
508
- return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
509
- }
510
- });
511
- /*
512
- *
513
- * TERMS OF USE - EASING EQUATIONS
514
- *
515
- * Open source under the BSD License.
516
- *
517
- * Copyright 2001 Robert Penner
518
- * All rights reserved.
519
- *
520
- * Redistribution and use in source and binary forms, with or without modification,
521
- * are permitted provided that the following conditions are met:
522
- *
523
- * Redistributions of source code must retain the above copyright notice, this list of
524
- * conditions and the following disclaimer.
525
- * Redistributions in binary form must reproduce the above copyright notice, this list
526
- * of conditions and the following disclaimer in the documentation and/or other materials
527
- * provided with the distribution.
528
- *
529
- * Neither the name of the author nor the names of contributors may be used to endorse
530
- * or promote products derived from this software without specific prior written permission.
531
- *
532
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
533
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
534
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
535
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
536
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
537
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
538
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
539
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
540
- * OF THE POSSIBILITY OF SUCH DAMAGE.
541
- *
542
- */
543
-
544
- })(jQuery);
545
-
546
- /*
547
- * jQuery UI Effects Highlight 1.6rc6
548
- *
549
- * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
550
- * Dual licensed under the MIT (MIT-LICENSE.txt)
551
- * and GPL (GPL-LICENSE.txt) licenses.
552
- *
553
- * http://docs.jquery.com/UI/Effects/Highlight
554
- *
555
- * Depends:
556
- * effects.core.js
557
- */
558
- (function($) {
559
-
560
- $.effects.highlight = function(o) {
561
-
562
- return this.queue(function() {
563
-
564
- // Create element
565
- var el = $(this), props = ['backgroundImage','backgroundColor','opacity'];
566
-
567
- // Set options
568
- var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode
569
- var color = o.options.color || "#ffff99"; // Default highlight color
570
- var oldColor = el.css("backgroundColor");
571
-
572
- // Adjust
573
- $.effects.save(el, props); el.show(); // Save & Show
574
- el.css({backgroundImage: 'none', backgroundColor: color}); // Shift
575
-
576
- // Animation
577
- var animation = {backgroundColor: oldColor };
578
- if (mode == "hide") animation['opacity'] = 0;
579
-
580
- // Animate
581
- el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() {
582
- if(mode == "hide") el.hide();
583
- $.effects.restore(el, props);
584
- if (mode == "show" && $.browser.msie) this.style.removeAttribute('filter');
585
- if(o.callback) o.callback.apply(this, arguments);
586
- el.dequeue();
587
- }});
588
-
589
- });
590
-
591
- };
592
-
593
- })(jQuery);