sdoc 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
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);