Commit ffafeb89632bc46eb1efe0782534f060d7d2be2a

Authored by AurelioAHeckert
1 parent d07e3bd1

ActionItem507: that is beault but no done

git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2138 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/views/blocks/profile_info.rhtml
... ... @@ -23,15 +23,29 @@
23 23 <% end %>
24 24 </ul>
25 25  
26   -<% if block.owner.person? %>
27   - <div class="adr">
28   - <%=
29   - [ [ profile.city, 'locality' ],
30   - [ profile.state, 'region' ],
31   - [ profile.country, 'country-name' ]
32   - ].map{ |s,c| s =~ /^\s*$/ ? nil : content_tag( 'span', s, :class => c ) }.compact.join ' - '
33   - %>
34   - </div>
  26 +<% if profile.respond_to? :city %>
  27 +<div class="adr">
  28 +<%=
  29 + [ [ profile.city, 'locality' ],
  30 + [ profile.state, 'region' ],
  31 + [ profile.country, 'country-name' ]
  32 + ].map{ |s,c| s =~ /^\s*$/ ? nil : content_tag( 'span', s, :class => c ) }.compact.join ' - '
  33 +%>
  34 +</div>
  35 +<% end %>
  36 +
  37 +<% if profile.class == Enterprise %>
  38 +<div class="product-categories">
  39 +<%=
  40 + profile.product_categories.map{ |c| c.size > 1 ? [c[0],c[1]] : nil }.
  41 + compact.uniq.map{ |c|
  42 + content_tag 'span',
  43 + content_tag( 'span', c.join(' &rarr; ') ),
  44 + :title => c[0] +' &rarr; '+ c[1],
  45 + :class => 'product_cat_' + (c[0]+'_'+c[1]).gsub( /\s/, '_' )
  46 + }.join "\n"
  47 +%>
  48 +</div>
35 49 <% end %>
36 50  
37 51 <div class="profile-info-options">
... ...
app/views/search/_display_results.rhtml
... ... @@ -17,7 +17,7 @@
17 17 <%= @names[name] %>
18 18 </h3>
19 19 <% end %>
20   - <%= link_to _('see more...'), params.merge(:action => 'index', :find_in => [ name ]), :class => 'see-more' %>
  20 + <%= link_to _('see all...'), params.merge(:action => 'index', :find_in => [ name ]), :class => 'see-more' %>
21 21 <% end %>
22 22 <% partial = partial_for_class results.first.class %>
23 23 <div class="search-results-innerbox search-results-type-<%= partial %> <%= 'common-profile-list-block' if partial == 'profile' %>">
... ...
app/views/search/_product_categories_menu.rhtml
1 1 <% if product_categories_menu %>
2   -<div id="product-categories-menu" class="product-search-filter">
3   -<ul>
4   - <% product_categories_menu.each do |cat, hits, childs| %>
5   - <li>
6   - <%= link_to (cat.name + "(#{hits})"), params.merge({:product_category => cat.id}) %>
7   - <% if !childs.blank? %>
8   - <ul>
9   - <% childs.each do |child, child_hits| %>
10   - <li> <%= link_to (child.name + "(#{child_hits})"), params.merge({:product_category => child.id}) %> </li>
11   - <% end %>
12   - </ul>
  2 +
  3 +<div id="product-categories-menu">
  4 + <ul>
  5 + <% if product_categories_menu.empty? %>
  6 + <li class="cat-empty"> <%= _('There is no sub-categories for %s.') % @product_category.name %> </li>
  7 + <% end %>
  8 + <% product_categories_menu.each do |cat, hits, childs| %>
  9 + <li class="cat-parent" onmouseover="prodCatMenuOver(this)" onmouseout="prodCatMenuOut(this)">
  10 + <%= link_to(
  11 + cat.name + " " + content_tag('small', "(#{hits})"),
  12 + params.merge({:product_category => cat.id})
  13 + ) %>
  14 + <% if !childs.blank? %>
  15 + <div>
  16 + <ul>
  17 + <% childs.each do |child, child_hits| %>
  18 + <li class="cat-child"> <%= link_to(
  19 + child.name + " " + content_tag('small', "(#{child_hits})"),
  20 + params.merge({:product_category => child.id})
  21 + ) %> </li>
  22 + <% end %>
  23 + </ul>
  24 + </div>
  25 + <% end %>
  26 + </li>
13 27 <% end %>
14   - </li>
15   - <% end %>
16   -</ul>
  28 + </ul>
17 29 </div>
  30 +
  31 +<script type="text/javascript">
  32 +
  33 +function prodCatMenuOver( li ) {
  34 + clearTimeout( li.timeout );
  35 + //if ( ! ( li.opened || li.opening ) ) {
  36 + if (
  37 + ( ! li.opened ) && ( ! li.opening ) &&
  38 + ( ( ! li.e ) || li.e.state == "finished" )
  39 + ) {
  40 + li.opening = true;
  41 + li.className = "cat-parent sub-opening";
  42 + li.subMenu.className = "opening";
  43 + li.e = Effect.BlindDown(li.subMenu);
  44 + li.e._finish = li.e.finish;
  45 + li.e.finish = function(){
  46 + this._finish();
  47 + this.element.li.closed = false;
  48 + this.element.li.opened = true;
  49 + this.element.li.opening = false;
  50 + this.element.className = "opened";
  51 + this.element.li.className = "cat-parent sub-opened";
  52 + }
  53 + li.closed = false;
  54 + }
  55 +}
  56 +
  57 +function prodCatMenuOut( li ) {
  58 + //if ( li.e.state == "finished" ) {
  59 + if (
  60 + ( ! li.closed ) && ( ! li.closeing ) &&
  61 + ( li.e.state == "finished" )
  62 + ) {
  63 + li.timeout = setTimeout( function () {
  64 + this.closeing = true;
  65 + this.className = "cat-parent sub-closeing";
  66 + this.subMenu.className = "closeing";
  67 + this.e = Effect.BlindUp(this.subMenu);
  68 + this.e._finish = this.e.finish;
  69 + this.e.finish = function(){
  70 + this._finish();
  71 + this.element.li.opened = false;
  72 + this.element.li.closed = true;
  73 + this.element.li.closeing = false;
  74 + this.element.className = "closed";
  75 + this.element.li.className = "cat-parent sub-closed";
  76 + }
  77 + }.bind(li), 200 );
  78 + } else {
  79 + li.timeout = setTimeout( li.onmouseout.bind(li), 200 );
  80 + }
  81 +}
  82 +
  83 +$$("#product-categories-menu ul div").each( function(subMenu){
  84 + var li = subMenu.parentNode;
  85 + subMenu.li = li;
  86 + li.subMenu = subMenu;
  87 + li.subMenu.style.display = "none";
  88 + li.closed = true;
  89 +})
  90 +
  91 +</script>
  92 +
18 93 <% end %>
19 94  
... ...
app/views/search/products.rhtml
... ... @@ -18,6 +18,10 @@
18 18  
19 19 <%= render :partial => 'search_form', :locals => { :form_title => _("Refine your search"), :simple_search => true } %>
20 20  
  21 +<% if @categories_menu %>
  22 +<div class="has_cat_list">
  23 +<% end %>
  24 +
21 25 <%= render :partial => 'product_categories_menu', :object => @categories_menu %>
22 26  
23 27 <div id="search-results" class="only-one-result-box">
... ... @@ -29,6 +33,10 @@
29 33 </div>
30 34 </div>
31 35  
  36 +<% if @categories_menu %>
  37 +</div><!-- class="has_cat_list" -->
  38 +<% end %>
  39 +
32 40 <%= will_paginate @results[:products], :id => 'products-pagination' %>
33 41  
34 42 <br style="clear:both" />
... ...
public/designs/themes/ecosol/stylesheets/controller_search.css
... ... @@ -132,6 +132,32 @@ body.category4 .search-results-type-profile.common-profile-list-block li a {
132 132 background: #F79494;
133 133 }
134 134  
  135 +
  136 +#product-categories-menu a {
  137 + text-decoration: none;
  138 +}
  139 +#product-categories-menu a:hover {
  140 + text-decoration: underline;
  141 +}
  142 +
  143 +#product-categories-menu .cat-parent {
  144 + background-color: #E0E8F0;
  145 + Xborder: 1px solid #729FCF;
  146 + -moz-border-radius: 10px;
  147 + padding: 3px 0px 3px 10px;
  148 +}
  149 +
  150 +#product-categories-menu .sub-opening,
  151 +#product-categories-menu .sub-closeing {
  152 +}
  153 +#product-categories-menu .sub-opened {
  154 + background-color: #CDE;
  155 + Xborder: 1px solid #3465A4;
  156 + X-moz-border-radius: 10px;
  157 +}
  158 +
  159 +
  160 +
135 161 /* * * Category Page * * * * * * * * * * * * */
136 162  
137 163 #view-category h3 {
... ...
public/javascripts/prototype.js
1   -/* Prototype JavaScript framework, version 1.6.0.2
2   - * (c) 2005-2008 Sam Stephenson
  1 +/* Prototype JavaScript framework, version 1.6.0.1
  2 + * (c) 2005-2007 Sam Stephenson
3 3 *
4 4 * Prototype is freely distributable under the terms of an MIT-style license.
5 5 * For details, see the Prototype web site: http://www.prototypejs.org/
... ... @@ -7,7 +7,7 @@
7 7 *--------------------------------------------------------------------------*/
8 8  
9 9 var Prototype = {
10   - Version: '1.6.0.2',
  10 + Version: '1.6.0.1',
11 11  
12 12 Browser: {
13 13 IE: !!(window.attachEvent && !window.opera),
... ... @@ -110,7 +110,7 @@ Object.extend(Object, {
110 110 try {
111 111 if (Object.isUndefined(object)) return 'undefined';
112 112 if (object === null) return 'null';
113   - return object.inspect ? object.inspect() : String(object);
  113 + return object.inspect ? object.inspect() : object.toString();
114 114 } catch (e) {
115 115 if (e instanceof RangeError) return '...';
116 116 throw e;
... ... @@ -171,8 +171,7 @@ Object.extend(Object, {
171 171 },
172 172  
173 173 isArray: function(object) {
174   - return object != null && typeof object == "object" &&
175   - 'splice' in object && 'join' in object;
  174 + return object && object.constructor === Array;
176 175 },
177 176  
178 177 isHash: function(object) {
... ... @@ -579,7 +578,7 @@ var Template = Class.create({
579 578 }
580 579  
581 580 return before + String.interpret(ctx);
582   - });
  581 + }.bind(this));
583 582 }
584 583 });
585 584 Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
... ... @@ -807,20 +806,20 @@ Object.extend(Enumerable, {
807 806 function $A(iterable) {
808 807 if (!iterable) return [];
809 808 if (iterable.toArray) return iterable.toArray();
810   - var length = iterable.length || 0, results = new Array(length);
  809 + var length = iterable.length, results = new Array(length);
811 810 while (length--) results[length] = iterable[length];
812 811 return results;
813 812 }
814 813  
815 814 if (Prototype.Browser.WebKit) {
816   - $A = function(iterable) {
  815 + function $A(iterable) {
817 816 if (!iterable) return [];
818 817 if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') &&
819 818 iterable.toArray) return iterable.toArray();
820   - var length = iterable.length || 0, results = new Array(length);
  819 + var length = iterable.length, results = new Array(length);
821 820 while (length--) results[length] = iterable[length];
822 821 return results;
823   - };
  822 + }
824 823 }
825 824  
826 825 Array.from = $A;
... ... @@ -1299,7 +1298,7 @@ Ajax.Request = Class.create(Ajax.Base, {
1299 1298  
1300 1299 var contentType = response.getHeader('Content-type');
1301 1300 if (this.options.evalJS == 'force'
1302   - || (this.options.evalJS && this.isSameOrigin() && contentType
  1301 + || (this.options.evalJS && contentType
1303 1302 && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
1304 1303 this.evalResponse();
1305 1304 }
... ... @@ -1317,18 +1316,9 @@ Ajax.Request = Class.create(Ajax.Base, {
1317 1316 }
1318 1317 },
1319 1318  
1320   - isSameOrigin: function() {
1321   - var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
1322   - return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
1323   - protocol: location.protocol,
1324   - domain: document.domain,
1325   - port: location.port ? ':' + location.port : ''
1326   - }));
1327   - },
1328   -
1329 1319 getHeader: function(name) {
1330 1320 try {
1331   - return this.transport.getResponseHeader(name) || null;
  1321 + return this.transport.getResponseHeader(name);
1332 1322 } catch (e) { return null }
1333 1323 },
1334 1324  
... ... @@ -1401,8 +1391,7 @@ Ajax.Response = Class.create({
1401 1391 if (!json) return null;
1402 1392 json = decodeURIComponent(escape(json));
1403 1393 try {
1404   - return json.evalJSON(this.request.options.sanitizeJSON ||
1405   - !this.request.isSameOrigin());
  1394 + return json.evalJSON(this.request.options.sanitizeJSON);
1406 1395 } catch (e) {
1407 1396 this.request.dispatchException(e);
1408 1397 }
... ... @@ -1415,8 +1404,7 @@ Ajax.Response = Class.create({
1415 1404 this.responseText.blank())
1416 1405 return null;
1417 1406 try {
1418   - return this.responseText.evalJSON(options.sanitizeJSON ||
1419   - !this.request.isSameOrigin());
  1407 + return this.responseText.evalJSON(options.sanitizeJSON);
1420 1408 } catch (e) {
1421 1409 this.request.dispatchException(e);
1422 1410 }
... ... @@ -1620,28 +1608,24 @@ Element.Methods = {
1620 1608 Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
1621 1609 insertions = {bottom:insertions};
1622 1610  
1623   - var content, insert, tagName, childNodes;
  1611 + var content, t, range;
1624 1612  
1625   - for (var position in insertions) {
  1613 + for (position in insertions) {
1626 1614 content = insertions[position];
1627 1615 position = position.toLowerCase();
1628   - insert = Element._insertionTranslations[position];
  1616 + t = Element._insertionTranslations[position];
1629 1617  
1630 1618 if (content && content.toElement) content = content.toElement();
1631 1619 if (Object.isElement(content)) {
1632   - insert(element, content);
  1620 + t.insert(element, content);
1633 1621 continue;
1634 1622 }
1635 1623  
1636 1624 content = Object.toHTML(content);
1637 1625  
1638   - tagName = ((position == 'before' || position == 'after')
1639   - ? element.parentNode : element).tagName.toUpperCase();
1640   -
1641   - childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
1642   -
1643   - if (position == 'top' || position == 'after') childNodes.reverse();
1644   - childNodes.each(insert.curry(element));
  1626 + range = element.ownerDocument.createRange();
  1627 + t.initializeRange(element, range);
  1628 + t.insert(element, range.createContextualFragment(content.stripScripts()));
1645 1629  
1646 1630 content.evalScripts.bind(content).defer();
1647 1631 }
... ... @@ -1686,7 +1670,7 @@ Element.Methods = {
1686 1670 },
1687 1671  
1688 1672 descendants: function(element) {
1689   - return $(element).select("*");
  1673 + return $(element).getElementsBySelector("*");
1690 1674 },
1691 1675  
1692 1676 firstDescendant: function(element) {
... ... @@ -1725,31 +1709,32 @@ Element.Methods = {
1725 1709 element = $(element);
1726 1710 if (arguments.length == 1) return $(element.parentNode);
1727 1711 var ancestors = element.ancestors();
1728   - return Object.isNumber(expression) ? ancestors[expression] :
1729   - Selector.findElement(ancestors, expression, index);
  1712 + return expression ? Selector.findElement(ancestors, expression, index) :
  1713 + ancestors[index || 0];
1730 1714 },
1731 1715  
1732 1716 down: function(element, expression, index) {
1733 1717 element = $(element);
1734 1718 if (arguments.length == 1) return element.firstDescendant();
1735   - return Object.isNumber(expression) ? element.descendants()[expression] :
1736   - element.select(expression)[index || 0];
  1719 + var descendants = element.descendants();
  1720 + return expression ? Selector.findElement(descendants, expression, index) :
  1721 + descendants[index || 0];
1737 1722 },
1738 1723  
1739 1724 previous: function(element, expression, index) {
1740 1725 element = $(element);
1741 1726 if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
1742 1727 var previousSiblings = element.previousSiblings();
1743   - return Object.isNumber(expression) ? previousSiblings[expression] :
1744   - Selector.findElement(previousSiblings, expression, index);
  1728 + return expression ? Selector.findElement(previousSiblings, expression, index) :
  1729 + previousSiblings[index || 0];
1745 1730 },
1746 1731  
1747 1732 next: function(element, expression, index) {
1748 1733 element = $(element);
1749 1734 if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
1750 1735 var nextSiblings = element.nextSiblings();
1751   - return Object.isNumber(expression) ? nextSiblings[expression] :
1752   - Selector.findElement(nextSiblings, expression, index);
  1736 + return expression ? Selector.findElement(nextSiblings, expression, index) :
  1737 + nextSiblings[index || 0];
1753 1738 },
1754 1739  
1755 1740 select: function() {
... ... @@ -1875,8 +1860,7 @@ Element.Methods = {
1875 1860 do { ancestor = ancestor.parentNode; }
1876 1861 while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode);
1877 1862 }
1878   - if (nextAncestor && nextAncestor.sourceIndex)
1879   - return (e > a && e < nextAncestor.sourceIndex);
  1863 + if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex);
1880 1864 }
1881 1865  
1882 1866 while (element = element.parentNode)
... ... @@ -2020,7 +2004,7 @@ Element.Methods = {
2020 2004 if (element) {
2021 2005 if (element.tagName == 'BODY') break;
2022 2006 var p = Element.getStyle(element, 'position');
2023   - if (p !== 'static') break;
  2007 + if (p == 'relative' || p == 'absolute') break;
2024 2008 }
2025 2009 } while (element);
2026 2010 return Element._returnOffset(valueL, valueT);
... ... @@ -2169,6 +2153,46 @@ Element._attributeTranslations = {
2169 2153 }
2170 2154 };
2171 2155  
  2156 +
  2157 +if (!document.createRange || Prototype.Browser.Opera) {
  2158 + Element.Methods.insert = function(element, insertions) {
  2159 + element = $(element);
  2160 +
  2161 + if (Object.isString(insertions) || Object.isNumber(insertions) ||
  2162 + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
  2163 + insertions = { bottom: insertions };
  2164 +
  2165 + var t = Element._insertionTranslations, content, position, pos, tagName;
  2166 +
  2167 + for (position in insertions) {
  2168 + content = insertions[position];
  2169 + position = position.toLowerCase();
  2170 + pos = t[position];
  2171 +
  2172 + if (content && content.toElement) content = content.toElement();
  2173 + if (Object.isElement(content)) {
  2174 + pos.insert(element, content);
  2175 + continue;
  2176 + }
  2177 +
  2178 + content = Object.toHTML(content);
  2179 + tagName = ((position == 'before' || position == 'after')
  2180 + ? element.parentNode : element).tagName.toUpperCase();
  2181 +
  2182 + if (t.tags[tagName]) {
  2183 + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
  2184 + if (position == 'top' || position == 'after') fragments.reverse();
  2185 + fragments.each(pos.insert.curry(element));
  2186 + }
  2187 + else element.insertAdjacentHTML(pos.adjacency, content.stripScripts());
  2188 +
  2189 + content.evalScripts.bind(content).defer();
  2190 + }
  2191 +
  2192 + return element;
  2193 + };
  2194 +}
  2195 +
2172 2196 if (Prototype.Browser.Opera) {
2173 2197 Element.Methods.getStyle = Element.Methods.getStyle.wrap(
2174 2198 function(proceed, element, style) {
... ... @@ -2213,31 +2237,12 @@ if (Prototype.Browser.Opera) {
2213 2237 }
2214 2238  
2215 2239 else if (Prototype.Browser.IE) {
2216   - // IE doesn't report offsets correctly for static elements, so we change them
2217   - // to "relative" to get the values, then change them back.
2218   - Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
2219   - function(proceed, element) {
2220   - element = $(element);
2221   - var position = element.getStyle('position');
2222   - if (position !== 'static') return proceed(element);
2223   - element.setStyle({ position: 'relative' });
2224   - var value = proceed(element);
2225   - element.setStyle({ position: position });
2226   - return value;
2227   - }
2228   - );
2229   -
2230   - $w('positionedOffset viewportOffset').each(function(method) {
  2240 + $w('positionedOffset getOffsetParent viewportOffset').each(function(method) {
2231 2241 Element.Methods[method] = Element.Methods[method].wrap(
2232 2242 function(proceed, element) {
2233 2243 element = $(element);
2234 2244 var position = element.getStyle('position');
2235   - if (position !== 'static') return proceed(element);
2236   - // Trigger hasLayout on the offset parent so that IE6 reports
2237   - // accurate offsetTop and offsetLeft values for position: fixed.
2238   - var offsetParent = element.getOffsetParent();
2239   - if (offsetParent && offsetParent.getStyle('position') === 'fixed')
2240   - offsetParent.setStyle({ zoom: 1 });
  2245 + if (position != 'static') return proceed(element);
2241 2246 element.setStyle({ position: 'relative' });
2242 2247 var value = proceed(element);
2243 2248 element.setStyle({ position: position });
... ... @@ -2319,10 +2324,7 @@ else if (Prototype.Browser.IE) {
2319 2324 };
2320 2325  
2321 2326 Element._attributeTranslations.write = {
2322   - names: Object.extend({
2323   - cellpadding: 'cellPadding',
2324   - cellspacing: 'cellSpacing'
2325   - }, Element._attributeTranslations.read.names),
  2327 + names: Object.clone(Element._attributeTranslations.read.names),
2326 2328 values: {
2327 2329 checked: function(element, value) {
2328 2330 element.checked = !!value;
... ... @@ -2442,7 +2444,7 @@ if (Prototype.Browser.IE || Prototype.Browser.Opera) {
2442 2444 };
2443 2445 }
2444 2446  
2445   -if ('outerHTML' in document.createElement('div')) {
  2447 +if (document.createElement('div').outerHTML) {
2446 2448 Element.Methods.replace = function(element, content) {
2447 2449 element = $(element);
2448 2450  
... ... @@ -2480,25 +2482,45 @@ Element._returnOffset = function(l, t) {
2480 2482  
2481 2483 Element._getContentFromAnonymousElement = function(tagName, html) {
2482 2484 var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
2483   - if (t) {
2484   - div.innerHTML = t[0] + html + t[1];
2485   - t[2].times(function() { div = div.firstChild });
2486   - } else div.innerHTML = html;
  2485 + div.innerHTML = t[0] + html + t[1];
  2486 + t[2].times(function() { div = div.firstChild });
2487 2487 return $A(div.childNodes);
2488 2488 };
2489 2489  
2490 2490 Element._insertionTranslations = {
2491   - before: function(element, node) {
2492   - element.parentNode.insertBefore(node, element);
  2491 + before: {
  2492 + adjacency: 'beforeBegin',
  2493 + insert: function(element, node) {
  2494 + element.parentNode.insertBefore(node, element);
  2495 + },
  2496 + initializeRange: function(element, range) {
  2497 + range.setStartBefore(element);
  2498 + }
2493 2499 },
2494   - top: function(element, node) {
2495   - element.insertBefore(node, element.firstChild);
  2500 + top: {
  2501 + adjacency: 'afterBegin',
  2502 + insert: function(element, node) {
  2503 + element.insertBefore(node, element.firstChild);
  2504 + },
  2505 + initializeRange: function(element, range) {
  2506 + range.selectNodeContents(element);
  2507 + range.collapse(true);
  2508 + }
2496 2509 },
2497   - bottom: function(element, node) {
2498   - element.appendChild(node);
  2510 + bottom: {
  2511 + adjacency: 'beforeEnd',
  2512 + insert: function(element, node) {
  2513 + element.appendChild(node);
  2514 + }
2499 2515 },
2500   - after: function(element, node) {
2501   - element.parentNode.insertBefore(node, element.nextSibling);
  2516 + after: {
  2517 + adjacency: 'afterEnd',
  2518 + insert: function(element, node) {
  2519 + element.parentNode.insertBefore(node, element.nextSibling);
  2520 + },
  2521 + initializeRange: function(element, range) {
  2522 + range.setStartAfter(element);
  2523 + }
2502 2524 },
2503 2525 tags: {
2504 2526 TABLE: ['<table>', '</table>', 1],
... ... @@ -2510,6 +2532,7 @@ Element._insertionTranslations = {
2510 2532 };
2511 2533  
2512 2534 (function() {
  2535 + this.bottom.initializeRange = this.top.initializeRange;
2513 2536 Object.extend(this.tags, {
2514 2537 THEAD: this.tags.TBODY,
2515 2538 TFOOT: this.tags.TBODY,
... ... @@ -2936,13 +2959,13 @@ Object.extend(Selector, {
2936 2959 },
2937 2960  
2938 2961 criteria: {
2939   - tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
2940   - className: 'n = h.className(n, r, "#{1}", c); c = false;',
2941   - id: 'n = h.id(n, r, "#{1}", c); c = false;',
2942   - attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
  2962 + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
  2963 + className: 'n = h.className(n, r, "#{1}", c); c = false;',
  2964 + id: 'n = h.id(n, r, "#{1}", c); c = false;',
  2965 + attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
2943 2966 attr: function(m) {
2944 2967 m[3] = (m[5] || m[6]);
2945   - return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
  2968 + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
2946 2969 },
2947 2970 pseudo: function(m) {
2948 2971 if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
... ... @@ -2966,8 +2989,7 @@ Object.extend(Selector, {
2966 2989 tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
2967 2990 id: /^#([\w\-\*]+)(\b|$)/,
2968 2991 className: /^\.([\w\-\*]+)(\b|$)/,
2969   - pseudo:
2970   -/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
  2992 + pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/,
2971 2993 attrPresence: /^\[([\w]+)\]/,
2972 2994 attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
2973 2995 },
... ... @@ -2992,7 +3014,7 @@ Object.extend(Selector, {
2992 3014  
2993 3015 attr: function(element, matches) {
2994 3016 var nodeValue = Element.readAttribute(element, matches[1]);
2995   - return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
  3017 + return Selector.operators[matches[2]](nodeValue, matches[3]);
2996 3018 }
2997 3019 },
2998 3020  
... ... @@ -3007,15 +3029,14 @@ Object.extend(Selector, {
3007 3029  
3008 3030 // marks an array of nodes for counting
3009 3031 mark: function(nodes) {
3010   - var _true = Prototype.emptyFunction;
3011 3032 for (var i = 0, node; node = nodes[i]; i++)
3012   - node._countedByPrototype = _true;
  3033 + node._counted = true;
3013 3034 return nodes;
3014 3035 },
3015 3036  
3016 3037 unmark: function(nodes) {
3017 3038 for (var i = 0, node; node = nodes[i]; i++)
3018   - node._countedByPrototype = undefined;
  3039 + node._counted = undefined;
3019 3040 return nodes;
3020 3041 },
3021 3042  
... ... @@ -3023,15 +3044,15 @@ Object.extend(Selector, {
3023 3044 // "ofType" flag indicates whether we're indexing for nth-of-type
3024 3045 // rather than nth-child
3025 3046 index: function(parentNode, reverse, ofType) {
3026   - parentNode._countedByPrototype = Prototype.emptyFunction;
  3047 + parentNode._counted = true;
3027 3048 if (reverse) {
3028 3049 for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
3029 3050 var node = nodes[i];
3030   - if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
  3051 + if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
3031 3052 }
3032 3053 } else {
3033 3054 for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
3034   - if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
  3055 + if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
3035 3056 }
3036 3057 },
3037 3058  
... ... @@ -3040,8 +3061,8 @@ Object.extend(Selector, {
3040 3061 if (nodes.length == 0) return nodes;
3041 3062 var results = [], n;
3042 3063 for (var i = 0, l = nodes.length; i < l; i++)
3043   - if (!(n = nodes[i])._countedByPrototype) {
3044   - n._countedByPrototype = Prototype.emptyFunction;
  3064 + if (!(n = nodes[i])._counted) {
  3065 + n._counted = true;
3045 3066 results.push(Element.extend(n));
3046 3067 }
3047 3068 return Selector.handlers.unmark(results);
... ... @@ -3093,7 +3114,7 @@ Object.extend(Selector, {
3093 3114  
3094 3115 // TOKEN FUNCTIONS
3095 3116 tagName: function(nodes, root, tagName, combinator) {
3096   - var uTagName = tagName.toUpperCase();
  3117 + tagName = tagName.toUpperCase();
3097 3118 var results = [], h = Selector.handlers;
3098 3119 if (nodes) {
3099 3120 if (combinator) {
... ... @@ -3106,7 +3127,7 @@ Object.extend(Selector, {
3106 3127 if (tagName == "*") return nodes;
3107 3128 }
3108 3129 for (var i = 0, node; node = nodes[i]; i++)
3109   - if (node.tagName.toUpperCase() === uTagName) results.push(node);
  3130 + if (node.tagName.toUpperCase() == tagName) results.push(node);
3110 3131 return results;
3111 3132 } else return root.getElementsByTagName(tagName);
3112 3133 },
... ... @@ -3153,18 +3174,16 @@ Object.extend(Selector, {
3153 3174 return results;
3154 3175 },
3155 3176  
3156   - attrPresence: function(nodes, root, attr, combinator) {
  3177 + attrPresence: function(nodes, root, attr) {
3157 3178 if (!nodes) nodes = root.getElementsByTagName("*");
3158   - if (nodes && combinator) nodes = this[combinator](nodes);
3159 3179 var results = [];
3160 3180 for (var i = 0, node; node = nodes[i]; i++)
3161 3181 if (Element.hasAttribute(node, attr)) results.push(node);
3162 3182 return results;
3163 3183 },
3164 3184  
3165   - attr: function(nodes, root, attr, value, operator, combinator) {
  3185 + attr: function(nodes, root, attr, value, operator) {
3166 3186 if (!nodes) nodes = root.getElementsByTagName("*");
3167   - if (nodes && combinator) nodes = this[combinator](nodes);
3168 3187 var handler = Selector.operators[operator], results = [];
3169 3188 for (var i = 0, node; node = nodes[i]; i++) {
3170 3189 var nodeValue = Element.readAttribute(node, attr);
... ... @@ -3243,7 +3262,7 @@ Object.extend(Selector, {
3243 3262 var h = Selector.handlers, results = [], indexed = [], m;
3244 3263 h.mark(nodes);
3245 3264 for (var i = 0, node; node = nodes[i]; i++) {
3246   - if (!node.parentNode._countedByPrototype) {
  3265 + if (!node.parentNode._counted) {
3247 3266 h.index(node.parentNode, reverse, ofType);
3248 3267 indexed.push(node.parentNode);
3249 3268 }
... ... @@ -3281,7 +3300,7 @@ Object.extend(Selector, {
3281 3300 var exclusions = new Selector(selector).findElements(root);
3282 3301 h.mark(exclusions);
3283 3302 for (var i = 0, results = [], node; node = nodes[i]; i++)
3284   - if (!node._countedByPrototype) results.push(node);
  3303 + if (!node._counted) results.push(node);
3285 3304 h.unmark(exclusions);
3286 3305 return results;
3287 3306 },
... ... @@ -3315,19 +3334,11 @@ Object.extend(Selector, {
3315 3334 '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
3316 3335 },
3317 3336  
3318   - split: function(expression) {
3319   - var expressions = [];
3320   - expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
3321   - expressions.push(m[1].strip());
3322   - });
3323   - return expressions;
3324   - },
3325   -
3326 3337 matchElements: function(elements, expression) {
3327   - var matches = $$(expression), h = Selector.handlers;
  3338 + var matches = new Selector(expression).findElements(), h = Selector.handlers;
3328 3339 h.mark(matches);
3329 3340 for (var i = 0, results = [], element; element = elements[i]; i++)
3330   - if (element._countedByPrototype) results.push(element);
  3341 + if (element._counted) results.push(element);
3331 3342 h.unmark(matches);
3332 3343 return results;
3333 3344 },
... ... @@ -3340,7 +3351,11 @@ Object.extend(Selector, {
3340 3351 },
3341 3352  
3342 3353 findChildElements: function(element, expressions) {
3343   - expressions = Selector.split(expressions.join(','));
  3354 + var exprs = expressions.join(',');
  3355 + expressions = [];
  3356 + exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
  3357 + expressions.push(m[1].strip());
  3358 + });
3344 3359 var results = [], h = Selector.handlers;
3345 3360 for (var i = 0, l = expressions.length, selector; i < l; i++) {
3346 3361 selector = new Selector(expressions[i].strip());
... ... @@ -3351,22 +3366,13 @@ Object.extend(Selector, {
3351 3366 });
3352 3367  
3353 3368 if (Prototype.Browser.IE) {
3354   - Object.extend(Selector.handlers, {
3355   - // IE returns comment nodes on getElementsByTagName("*").
3356   - // Filter them out.
3357   - concat: function(a, b) {
3358   - for (var i = 0, node; node = b[i]; i++)
3359   - if (node.tagName !== "!") a.push(node);
3360   - return a;
3361   - },
3362   -
3363   - // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
3364   - unmark: function(nodes) {
3365   - for (var i = 0, node; node = nodes[i]; i++)
3366   - node.removeAttribute('_countedByPrototype');
3367   - return nodes;
3368   - }
3369   - });
  3369 + // IE returns comment nodes on getElementsByTagName("*").
  3370 + // Filter them out.
  3371 + Selector.handlers.concat = function(a, b) {
  3372 + for (var i = 0, node; node = b[i]; i++)
  3373 + if (node.tagName !== "!") a.push(node);
  3374 + return a;
  3375 + };
3370 3376 }
3371 3377  
3372 3378 function $$() {
... ... @@ -3844,9 +3850,9 @@ Object.extend(Event, (function() {
3844 3850 var cache = Event.cache;
3845 3851  
3846 3852 function getEventID(element) {
3847   - if (element._prototypeEventID) return element._prototypeEventID[0];
  3853 + if (element._eventID) return element._eventID;
3848 3854 arguments.callee.id = arguments.callee.id || 1;
3849   - return element._prototypeEventID = [++arguments.callee.id];
  3855 + return element._eventID = ++arguments.callee.id;
3850 3856 }
3851 3857  
3852 3858 function getDOMEventName(eventName) {
... ... @@ -3864,7 +3870,6 @@ Object.extend(Event, (function() {
3864 3870 }
3865 3871  
3866 3872 function createWrapper(element, eventName, handler) {
3867   - if ( typeof( handler ) != "function" ) return false;
3868 3873 var id = getEventID(element);
3869 3874 var c = getWrappersForEventName(id, eventName);
3870 3875 if (c.pluck("handler").include(handler)) return false;
... ... @@ -3875,7 +3880,7 @@ Object.extend(Event, (function() {
3875 3880 return false;
3876 3881  
3877 3882 Event.extend(event);
3878   - handler.call(element, event);
  3883 + handler.call(element, event)
3879 3884 };
3880 3885  
3881 3886 wrapper.handler = handler;
... ... @@ -3957,12 +3962,11 @@ Object.extend(Event, (function() {
3957 3962 if (element == document && document.createEvent && !element.dispatchEvent)
3958 3963 element = document.documentElement;
3959 3964  
3960   - var event;
3961 3965 if (document.createEvent) {
3962   - event = document.createEvent("HTMLEvents");
  3966 + var event = document.createEvent("HTMLEvents");
3963 3967 event.initEvent("dataavailable", true, true);
3964 3968 } else {
3965   - event = document.createEventObject();
  3969 + var event = document.createEventObject();
3966 3970 event.eventType = "ondataavailable";
3967 3971 }
3968 3972  
... ... @@ -3991,21 +3995,20 @@ Element.addMethods({
3991 3995 Object.extend(document, {
3992 3996 fire: Element.Methods.fire.methodize(),
3993 3997 observe: Element.Methods.observe.methodize(),
3994   - stopObserving: Element.Methods.stopObserving.methodize(),
3995   - loaded: false
  3998 + stopObserving: Element.Methods.stopObserving.methodize()
3996 3999 });
3997 4000  
3998 4001 (function() {
3999 4002 /* Support for the DOMContentLoaded event is based on work by Dan Webb,
4000 4003 Matthias Miller, Dean Edwards and John Resig. */
4001 4004  
4002   - var timer;
  4005 + var timer, fired = false;
4003 4006  
4004 4007 function fireContentLoadedEvent() {
4005   - if (document.loaded) return;
  4008 + if (fired) return;
4006 4009 if (timer) window.clearInterval(timer);
4007 4010 document.fire("dom:loaded");
4008   - document.loaded = true;
  4011 + fired = true;
4009 4012 }
4010 4013  
4011 4014 if (document.addEventListener) {
... ... @@ -4219,4 +4222,4 @@ Object.extend(Element.ClassNames.prototype, Enumerable);
4219 4222  
4220 4223 /*--------------------------------------------------------------------------*/
4221 4224  
4222 4225 -Element.addMethods();
  4226 +Element.addMethods();
4223 4227 \ No newline at end of file
... ...
public/stylesheets/blocks/profile-info-block.css
... ... @@ -71,6 +71,9 @@
71 71 display: none;
72 72 }
73 73  
  74 +.product-categories {
  75 + clear: both;
  76 +}
74 77  
75 78 .profile-info-data {
76 79 width: 110px;
... ...
public/stylesheets/controller_search.css
... ... @@ -39,6 +39,54 @@
39 39 width: 100%;
40 40 }
41 41  
  42 +.has_cat_list .only-one-result-box .search-results-box {
  43 + width: 79%;
  44 + float: right;
  45 +}
  46 +
  47 +.has_cat_list #product-categories-menu {
  48 + width: 20%;
  49 + float: left;
  50 +}
  51 +
  52 +#product-categories-menu a {
  53 + display: block;
  54 +}
  55 +
  56 +#product-categories-menu ul {
  57 + margin: 0px 0px 0px 20px;
  58 + padding: 0px;
  59 +}
  60 +
  61 +#product-categories-menu .cat-parent {
  62 + font-weight: bold;
  63 + margin: 2px 0px;
  64 + padding: 5px 0px 0px 10px;
  65 + list-style: none;
  66 +}
  67 +#product-categories-menu .cat-empty {
  68 + list-style: none;
  69 + color: #999;
  70 +}
  71 +
  72 +#product-categories-menu .cat-parent ul {
  73 + padding-bottom: 5px;
  74 +}
  75 +
  76 +#product-categories-menu .cat-parent li {
  77 + font-weight: normal;
  78 + margin: 0px;
  79 + padding: 0px;
  80 +}
  81 +
  82 +#product-categories-menu .sub-opening,
  83 +#product-categories-menu .sub-closeing {
  84 + background-color: #FF8;
  85 +}
  86 +#product-categories-menu .sub-opened {
  87 + background-color: #FF0;
  88 +}
  89 +
42 90 .search-results-box.odd {
43 91 margin-left: 1%;
44 92 }
... ...