From 8d4c5663790012d9f0200b443211c6c68131b037 Mon Sep 17 00:00:00 2001 From: Alejandro Valle Date: Wed, 12 Jan 2011 16:03:16 +0000 Subject: [PATCH 01/14] loadin... --- .gitignore | 2 +- app/views/layouts/application.html.haml | 4 +- db/sphinx/development/nota_core.spa | Bin 520 -> 0 bytes db/sphinx/development/nota_core.spd | Bin 570 -> 0 bytes db/sphinx/development/nota_core.sph | Bin 398 -> 0 bytes db/sphinx/development/nota_core.spi | Bin 455 -> 0 bytes db/sphinx/development/nota_core.spp | Bin 570 -> 0 bytes public/javascripts/application.js | 6 +- public/javascripts/jquery.blockUI.js | 490 ++++++++++++++++++++++++ public/stylesheets/application.css | 17 + 10 files changed, 514 insertions(+), 5 deletions(-) delete mode 100644 db/sphinx/development/nota_core.spa delete mode 100644 db/sphinx/development/nota_core.spd delete mode 100644 db/sphinx/development/nota_core.sph delete mode 100644 db/sphinx/development/nota_core.spi delete mode 100644 db/sphinx/development/nota_core.spp create mode 100644 public/javascripts/jquery.blockUI.js diff --git a/.gitignore b/.gitignore index d20a3c6..d6bedd3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .bundle db/*.sqlite3 db/*.sp* -db/sphinx/* +db/sphinx log/* tmp/**/* config/database.yml diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index a5eea14..86f66f9 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -7,7 +7,7 @@ = stylesheet_link_tag "kitchen","tipsy","menu","jquery", 'highlight' = javascript_include_tag :defaults,'jquery.tipsy','jquery-ui-1.8.6.custom.min' = javascript_include_tag :on_the_spot, :ckeditor, 'jquery.form', 'jquery.validate.min' - = javascript_include_tag 'autocomplete-rails' + = javascript_include_tag 'jquery.blockUI' = csrf_meta_tag = yield(:head) @@ -19,7 +19,7 @@ #right_side #search_title Search any note or comment #search_form - = form_tag("/notas/search", :method => :get, :remote => true) do + = form_tag("/notas/search", :method => :get, :remote => true,:id => 'full_text_search_form') do = search_field_tag("search") = submit_tag 'Search' .clear diff --git a/db/sphinx/development/nota_core.spa b/db/sphinx/development/nota_core.spa deleted file mode 100644 index ba5ec078f56e1808c6da6aec98c91f387a69ad5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 520 zcmXxYze+*@9L4dgS(bk)vp@Gg)~9Xp zD_ij)Q07;*)91i8zp~xZcKDTTI0#humF>*{-I6 zJ$_}I)Asq5ZT1#u@GD#P9ys7vwhpbyuWZeaz#+e~-O-Ntm96y|IObQj&R5`sU)gTH Z11Z0Zh diff --git a/db/sphinx/development/nota_core.spd b/db/sphinx/development/nota_core.spd deleted file mode 100644 index 7f0af3dde14c4be22f562039a4d7c66d2340681d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmb`EJxc>Y5Qg`iy}f*@cS$rRX>5WPK@cGbX)J6~YN16$Boagpa2h4_PH8L7dBsHrNm>08NlNDSpzEX?6lVklLlYTlaxZS*dv^M94 z?UBg_UeQJwXAtDx)yPhmKesdLfz8PSTadY3`j%|zb5fOdN2}Pq*R==gXiwCoy^sxi z6ArvNJ_-0n^3A>DeaKILyJlbY|DS-W<3C&#QPAS1Sv=#}b`^H2nNLvpq^X(%1-;=H DS9&Oq diff --git a/db/sphinx/development/nota_core.sph b/db/sphinx/development/nota_core.sph deleted file mode 100644 index 29243ac3fb2d4a58015bf9970eead555ebc94471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmb_Xy9xp^5cFASpY) zqX{&rTCCfH<_yGkM9a+N#q%NIalh4M;IO*9NXEr9LNyldua4|7; z%;?SrQac`ARODi0?Ar4s4XC8~&qH=LX6D@&-U;wAGPVEw$qE#lH}!E08zWQeuXiOt zs{P?IIiM*M=bYsL>TCV5HV>#|?Uj?>Kx*2`4@N-h_w7EQO2*!czhi;a)tmP+fmCC| zhoc}@G`3#vwFS{14(bA_mN!R&fYhXu8?}HI&+Pvu3AA|L@T`>zMkPYhfejsGx!03(=W GU;qG3C!P`j diff --git a/db/sphinx/development/nota_core.spp b/db/sphinx/development/nota_core.spp deleted file mode 100644 index 4c281bf47de615608b893982a70af18865ff0f66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmc&wNe;q549h}WUX3Dw1P2Zr_;0bD(G*_5VXQ13$B93x&UUNv1~(K=7UuS@N@k%B z0&B{XDTecvx#R9V!~bMq$k7*1UcBa{vpe2iPBw4#8xrsc0k znT<9tyEMUcq4d`JNLSYMH@QsAjg%&Ng5FK4vL;OdgdNXF6)UgYRoS>DDYPd)-mOEx c5!&2}*T4n-0y+SFVo&<$rRg`mKv!e)18qjE2LJ#7 diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 1e055ed..dbb7c4e 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -12,14 +12,16 @@ $(document).ready(function(){ $("#full_text_search_form") .bind('ajax:loading', function() { - $('#loading').fadeIn(); + //$('#loading').fadeIn(); $("#notas").hide(); $("#in_comments").hide(); + + $("#notas").block(); }) //.bind('ajax:success', function(data, status, xhr) {alert("success!");}) //.bind('ajax:failure', function(xhr, status, error) {alert("failure!");}) .bind('ajax:complete', function() { - $('#loading').fadeOut(); + $("#notas").unblock();; $("#notas").fadeIn('slow'); $("#in_comments").fadeIn('slow'); diff --git a/public/javascripts/jquery.blockUI.js b/public/javascripts/jquery.blockUI.js new file mode 100644 index 0000000..fe1144a --- /dev/null +++ b/public/javascripts/jquery.blockUI.js @@ -0,0 +1,490 @@ +/*! + * jQuery blockUI plugin + * Version 2.36 (16-NOV-2010) + * @requires jQuery v1.2.3 or later + * + * Examples at: http://malsup.com/jquery/block/ + * Copyright (c) 2007-2008 M. Alsup + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Thanks to Amir-Hossein Sobhi for some excellent contributions! + */ + +;(function($) { + +if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) { + alert('blockUI requires jQuery v1.2.3 or later! You are using v' + $.fn.jquery); + return; +} + +$.fn._fadeIn = $.fn.fadeIn; + +var noOp = function() {}; + +// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle +// retarded userAgent strings on Vista) +var mode = document.documentMode || 0; +var setExpr = $.browser.msie && (($.browser.version < 8 && !mode) || mode < 8); +var ie6 = $.browser.msie && /MSIE 6.0/.test(navigator.userAgent) && !mode; + +// global $ methods for blocking/unblocking the entire page +$.blockUI = function(opts) { install(window, opts); }; +$.unblockUI = function(opts) { remove(window, opts); }; + +// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl) +$.growlUI = function(title, message, timeout, onClose) { + var $m = $('
'); + if (title) $m.append('

'+title+'

'); + if (message) $m.append('

'+message+'

'); + if (timeout == undefined) timeout = 3000; + $.blockUI({ + message: $m, fadeIn: 700, fadeOut: 1000, centerY: false, + timeout: timeout, showOverlay: false, + onUnblock: onClose, + css: $.blockUI.defaults.growlCSS + }); +}; + +// plugin method for blocking element content +$.fn.block = function(opts) { + return this.unblock({ fadeOut: 0 }).each(function() { + if ($.css(this,'position') == 'static') + this.style.position = 'relative'; + if ($.browser.msie) + this.style.zoom = 1; // force 'hasLayout' + install(this, opts); + }); +}; + +// plugin method for unblocking element content +$.fn.unblock = function(opts) { + return this.each(function() { + remove(this, opts); + }); +}; + +$.blockUI.version = 2.35; // 2nd generation blocking at no extra cost! + +// override these in your code to change the default behavior and style +$.blockUI.defaults = { + // message displayed when blocking (use null for no message) + message: '

Please wait...

', + + title: null, // title string; only used when theme == true + draggable: true, // only used when theme == true (requires jquery-ui.js to be loaded) + + theme: false, // set to true to use with jQuery UI themes + + // styles for the message when blocking; if you wish to disable + // these and use an external stylesheet then do this in your code: + // $.blockUI.defaults.css = {}; + css: { + padding: 0, + margin: 0, + width: '30%', + top: '40%', + left: '35%', + textAlign: 'center', + color: '#000', + border: '3px solid #aaa', + backgroundColor:'#fff', + cursor: 'wait' + }, + + // minimal style set used when themes are used + themedCSS: { + width: '30%', + top: '40%', + left: '35%' + }, + + // styles for the overlay + overlayCSS: { + backgroundColor: '#000', + opacity: 0.6, + cursor: 'wait' + }, + + // styles applied when using $.growlUI + growlCSS: { + width: '350px', + top: '10px', + left: '', + right: '10px', + border: 'none', + padding: '5px', + opacity: 0.6, + cursor: 'default', + color: '#fff', + backgroundColor: '#000', + '-webkit-border-radius': '10px', + '-moz-border-radius': '10px', + 'border-radius': '10px' + }, + + // IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w + // (hat tip to Jorge H. N. de Vasconcelos) + iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank', + + // force usage of iframe in non-IE browsers (handy for blocking applets) + forceIframe: false, + + // z-index for the blocking overlay + baseZ: 1000, + + // set these to true to have the message automatically centered + centerX: true, // <-- only effects element blocking (page block controlled via css above) + centerY: true, + + // allow body element to be stetched in ie6; this makes blocking look better + // on "short" pages. disable if you wish to prevent changes to the body height + allowBodyStretch: true, + + // enable if you want key and mouse events to be disabled for content that is blocked + bindEvents: true, + + // be default blockUI will supress tab navigation from leaving blocking content + // (if bindEvents is true) + constrainTabKey: true, + + // fadeIn time in millis; set to 0 to disable fadeIn on block + fadeIn: 200, + + // fadeOut time in millis; set to 0 to disable fadeOut on unblock + fadeOut: 400, + + // time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock + timeout: 0, + + // disable if you don't want to show the overlay + showOverlay: true, + + // if true, focus will be placed in the first available input field when + // page blocking + focusInput: true, + + // suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity) + applyPlatformOpacityRules: true, + + // callback method invoked when fadeIn has completed and blocking message is visible + onBlock: null, + + // callback method invoked when unblocking has completed; the callback is + // passed the element that has been unblocked (which is the window object for page + // blocks) and the options that were passed to the unblock call: + // onUnblock(element, options) + onUnblock: null, + + // don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493 + quirksmodeOffsetHack: 4, + + // class name of the message block + blockMsgClass: 'blockMsg' +}; + +// private data and functions follow... + +var pageBlock = null; +var pageBlockEls = []; + +function install(el, opts) { + var full = (el == window); + var msg = opts && opts.message !== undefined ? opts.message : undefined; + opts = $.extend({}, $.blockUI.defaults, opts || {}); + opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {}); + var css = $.extend({}, $.blockUI.defaults.css, opts.css || {}); + var themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {}); + msg = msg === undefined ? opts.message : msg; + + // remove the current block (if there is one) + if (full && pageBlock) + remove(window, {fadeOut:0}); + + // if an existing element is being used as the blocking content then we capture + // its current place in the DOM (and current display style) so we can restore + // it when we unblock + if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) { + var node = msg.jquery ? msg[0] : msg; + var data = {}; + $(el).data('blockUI.history', data); + data.el = node; + data.parent = node.parentNode; + data.display = node.style.display; + data.position = node.style.position; + if (data.parent) + data.parent.removeChild(node); + } + + var z = opts.baseZ; + + // blockUI uses 3 layers for blocking, for simplicity they are all used on every platform; + // layer1 is the iframe layer which is used to supress bleed through of underlying content + // layer2 is the overlay layer which has opacity and a wait cursor (by default) + // layer3 is the message content that is displayed while blocking + + var lyr1 = ($.browser.msie || opts.forceIframe) + ? $('') + : $(''); + var lyr2 = $(''); + + var lyr3, s; + if (opts.theme && full) { + s = ''; + } + else if (opts.theme) { + s = ''; + } + else if (full) { + s = ''; + } + else { + s = ''; + } + lyr3 = $(s); + + // if we have a message, style it + if (msg) { + if (opts.theme) { + lyr3.css(themedCSS); + lyr3.addClass('ui-widget-content'); + } + else + lyr3.css(css); + } + + // style the overlay + if (!opts.applyPlatformOpacityRules || !($.browser.mozilla && /Linux/.test(navigator.platform))) + lyr2.css(opts.overlayCSS); + lyr2.css('position', full ? 'fixed' : 'absolute'); + + // make iframe layer transparent in IE + if ($.browser.msie || opts.forceIframe) + lyr1.css('opacity',0.0); + + //$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el); + var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el); + $.each(layers, function() { + this.appendTo($par); + }); + + if (opts.theme && opts.draggable && $.fn.draggable) { + lyr3.draggable({ + handle: '.ui-dialog-titlebar', + cancel: 'li' + }); + } + + // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling) + var expr = setExpr && (!$.boxModel || $('object,embed', full ? null : el).length > 0); + if (ie6 || expr) { + // give body 100% height + if (full && opts.allowBodyStretch && $.boxModel) + $('html,body').css('height','100%'); + + // fix ie6 issue when blocked element has a border width + if ((ie6 || !$.boxModel) && !full) { + var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth'); + var fixT = t ? '(0 - '+t+')' : 0; + var fixL = l ? '(0 - '+l+')' : 0; + } + + // simulate fixed position + $.each([lyr1,lyr2,lyr3], function(i,o) { + var s = o[0].style; + s.position = 'absolute'; + if (i < 2) { + full ? s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"') + : s.setExpression('height','this.parentNode.offsetHeight + "px"'); + full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"') + : s.setExpression('width','this.parentNode.offsetWidth + "px"'); + if (fixL) s.setExpression('left', fixL); + if (fixT) s.setExpression('top', fixT); + } + else if (opts.centerY) { + if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'); + s.marginTop = 0; + } + else if (!opts.centerY && full) { + var top = (opts.css && opts.css.top) ? parseInt(opts.css.top) : 0; + var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"'; + s.setExpression('top',expression); + } + }); + } + + // show the message + if (msg) { + if (opts.theme) + lyr3.find('.ui-widget-content').append(msg); + else + lyr3.append(msg); + if (msg.jquery || msg.nodeType) + $(msg).show(); + } + + if (($.browser.msie || opts.forceIframe) && opts.showOverlay) + lyr1.show(); // opacity is zero + if (opts.fadeIn) { + var cb = opts.onBlock ? opts.onBlock : noOp; + var cb1 = (opts.showOverlay && !msg) ? cb : noOp; + var cb2 = msg ? cb : noOp; + if (opts.showOverlay) + lyr2._fadeIn(opts.fadeIn, cb1); + if (msg) + lyr3._fadeIn(opts.fadeIn, cb2); + } + else { + if (opts.showOverlay) + lyr2.show(); + if (msg) + lyr3.show(); + if (opts.onBlock) + opts.onBlock(); + } + + // bind key and mouse events + bind(1, el, opts); + + if (full) { + pageBlock = lyr3[0]; + pageBlockEls = $(':input:enabled:visible',pageBlock); + if (opts.focusInput) + setTimeout(focus, 20); + } + else + center(lyr3[0], opts.centerX, opts.centerY); + + if (opts.timeout) { + // auto-unblock + var to = setTimeout(function() { + full ? $.unblockUI(opts) : $(el).unblock(opts); + }, opts.timeout); + $(el).data('blockUI.timeout', to); + } +}; + +// remove the block +function remove(el, opts) { + var full = (el == window); + var $el = $(el); + var data = $el.data('blockUI.history'); + var to = $el.data('blockUI.timeout'); + if (to) { + clearTimeout(to); + $el.removeData('blockUI.timeout'); + } + opts = $.extend({}, $.blockUI.defaults, opts || {}); + bind(0, el, opts); // unbind events + + var els; + if (full) // crazy selector to handle odd field errors in ie6/7 + els = $('body').children().filter('.blockUI').add('body > .blockUI'); + else + els = $('.blockUI', el); + + if (full) + pageBlock = pageBlockEls = null; + + if (opts.fadeOut) { + els.fadeOut(opts.fadeOut); + setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut); + } + else + reset(els, data, opts, el); +}; + +// move blocking element back into the DOM where it started +function reset(els,data,opts,el) { + els.each(function(i,o) { + // remove via DOM calls so we don't lose event handlers + if (this.parentNode) + this.parentNode.removeChild(this); + }); + + if (data && data.el) { + data.el.style.display = data.display; + data.el.style.position = data.position; + if (data.parent) + data.parent.appendChild(data.el); + $(el).removeData('blockUI.history'); + } + + if (typeof opts.onUnblock == 'function') + opts.onUnblock(el,opts); +}; + +// bind/unbind the handler +function bind(b, el, opts) { + var full = el == window, $el = $(el); + + // don't bother unbinding if there is nothing to unbind + if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked'))) + return; + if (!full) + $el.data('blockUI.isBlocked', b); + + // don't bind events when overlay is not in use or if bindEvents is false + if (!opts.bindEvents || (b && !opts.showOverlay)) + return; + + // bind anchors and inputs for mouse and key events + var events = 'mousedown mouseup keydown keypress'; + b ? $(document).bind(events, opts, handler) : $(document).unbind(events, handler); + +// former impl... +// var $e = $('a,:input'); +// b ? $e.bind(events, opts, handler) : $e.unbind(events, handler); +}; + +// event handler to suppress keyboard/mouse events when blocking +function handler(e) { + // allow tab navigation (conditionally) + if (e.keyCode && e.keyCode == 9) { + if (pageBlock && e.data.constrainTabKey) { + var els = pageBlockEls; + var fwd = !e.shiftKey && e.target === els[els.length-1]; + var back = e.shiftKey && e.target === els[0]; + if (fwd || back) { + setTimeout(function(){focus(back)},10); + return false; + } + } + } + var opts = e.data; + // allow events within the message content + if ($(e.target).parents('div.' + opts.blockMsgClass).length > 0) + return true; + + // allow events for content that is not being blocked + return $(e.target).parents().children().filter('div.blockUI').length == 0; +}; + +function focus(back) { + if (!pageBlockEls) + return; + var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0]; + if (e) + e.focus(); +}; + +function center(el, x, y) { + var p = el.parentNode, s = el.style; + var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth'); + var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth'); + if (x) s.left = l > 0 ? (l+'px') : '0'; + if (y) s.top = t > 0 ? (t+'px') : '0'; +}; + +function sz(el, p) { + return parseInt($.css(el,p))||0; +}; + +})(jQuery); diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 99f8db1..b2e5b91 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -369,3 +369,20 @@ body { padding: 10px; border: 1px solid #222222; } +div.blockMsg { + width: 40%; + top: 30%; + left: 30%; + text-align: center; + background-color: #fa0; + border: 1px solid #ddd; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + -moz-opacity:.70; + opacity:.70; + padding: 15px; + color: #fff; +} + From c569256a817de1690456d2995870a4cbd7a1fa0e Mon Sep 17 00:00:00 2001 From: Alejandro Valle Date: Wed, 12 Jan 2011 16:13:06 +0000 Subject: [PATCH 02/14] config --- .gitignore | 2 +- log/searchd.development.pid | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 log/searchd.development.pid diff --git a/.gitignore b/.gitignore index d6bedd3..bda7c00 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ db/*.sqlite3 db/*.sp* db/sphinx -log/* +log tmp/**/* config/database.yml config/*.sphinx.conf diff --git a/log/searchd.development.pid b/log/searchd.development.pid deleted file mode 100644 index afc9571..0000000 --- a/log/searchd.development.pid +++ /dev/null @@ -1 +0,0 @@ -6409 From b8d533d8868e252f7be1884c1606739f1c0d9b45 Mon Sep 17 00:00:00 2001 From: Alejandro Valle Date: Wed, 12 Jan 2011 18:04:25 +0000 Subject: [PATCH 03/14] animated loading --- app/views/notas/index.html.haml | 5 +++-- public/images/loading.gif | Bin 37879 -> 40784 bytes public/javascripts/application.js | 10 ++++----- public/stylesheets/application.css | 17 --------------- public/stylesheets/kitchen.css | 32 +++++++++++++++++++++++++++++ 5 files changed, 40 insertions(+), 24 deletions(-) diff --git a/app/views/notas/index.html.haml b/app/views/notas/index.html.haml index 65dd0d4..554a3eb 100644 --- a/app/views/notas/index.html.haml +++ b/app/views/notas/index.html.haml @@ -3,6 +3,7 @@ = render :partial => @notas #in_comments %h1 -#load - = image_tag('loading.gif',:id => "loading") +#loading + = image_tag('loading.gif',:id =>"loading") + %span#loading_title Buscando Datos... diff --git a/public/images/loading.gif b/public/images/loading.gif index deb111a4ed8fcc9eb31461dffc0b4cdc8a7962d9..3954a70c0c2ad8cf39d898f8717145ca64430e88 100644 GIT binary patch literal 40784 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 literal 37879 zcmbTdc~Dbn8|}OI&dwajK!5~7NJ1bX3>^_|RHTy-AdChCL`4mV3JMwq6%aKE0m39< zP!UDLq^PKXs5rDH5fzlyI1jCMK%~)D8*R0<+olg+-COroom2PLch3HM*RFd1*z32R z^{h86JTzcViU<$^9RM)=03Lg-eL5=r_<7*o6YiT2?N7(kzWp`!=EJ^wqk+RusBhji zeEfWG>~-GL(fE7M{oj1(`!@CQ&AY0x|Gf5e_z7X`o%Y^y?zgEo_nuHc{&nx^c>Ko? zePgdPhaV80jz)d_JpATE*SEjkJRJ>u^KReR>!N$l1HVmu8yn9YdslVux%a&%jE{dk zeL9}}@$&`XfB#|si;oG3Ul=Twhxqvl5#aO}*k55R3g7|W|M}W~jtQWqjP**Hw^Pkv zd(Kei+yj=*yohC~{IVks6=HItzy!0OG}VyBAw6;Z_JW56zHjmqvjUfk4VFr>4d2~? zOO8SdGK(s=@V84TOdP$TCK5@{TCum1Shj}BMKXA{O_hRG5ny#uvzOzxHSX(rv6+Ql zh{#P_;7sE>*gKbj=W<<}H*g~<>sK7l5*SvqZQN~$l{kB*J(A~(cT({fm#X&RZ1cD{ z0I1yOMfW9m*}FYJ3fvINtS9x6J1S8ZD&*b5qk}Wn@g#!?c}fks0_KQ1rI|Vekr_uA z{NrG&2E`MSIw#99D0^loZKOLCB0GM#I7?XD0!;x#ml&O#YkUGllQ=;-_iB-feItmr zc(qZ7hXfHeCQ+&wz!Lm1Yg5D+9SS8+n?n{$G!9Fy(MfuPc9tVQC@;xfTdZ~fh5g>Q zTSM-!ScUhWV1V3=#?ycm7+aY_1tYvi zC4igm4~iSNr|p&pJjE4?RZzvXVPr_2s61Y(>Rus{bmp1n;x6!8A^gXXTN_yyp%rBJ zzU(2=J)gv364|@tm+$C_@|Ez8l>8U<`!T2lD9@e@fu1B|YDDCm$JA1$?xeB)&mVht zY%NMt#Z|%$atJJ%^QRGXY-ed1Ay*|t)s}dcNzQmb$D&;Qjw8j`D*-i>)0YoMc=TUZ z<0Ju-V^v0j1(&}%qW(Y@glUO_sYRln(HD}0Ccu%z8i3iM3)7EQ8_L}_y|#RTF@Ct) zM*sDXu41Z+&AJtbl>Y57@@Zc-ebu@NvJaExfRAc9H+gn&T?9i92#)XXHun6rCvRQP z)aZ}ul}t8Ytp+xa<#Zw`@Z|oWU)~;WxmZw?a%cCJDiV)OE+TDEZ7nzz%?wg=MfE%3 z-NrThP)Ypb>$@@rP>g@>ECL)1lg#w48HHwm>py8iyNgI5PF?tV?9klxUj>_1Ki^Xg zF1yayO}5FGdo)EavjX1Sk_c_N3&QaofND?}(SC6`*YsiEj_laKCD|y#A5ThdBe`QX zx1HpvgknV9eA0@_|DE+j#xU5ChZx4-nq)&Z9%=ai~T`)r2-WmK?Zkk-UdNjDJ$pS$6B;MsvLR~ zo~N5B$@)<0jpV=GKKZ32Tee0^@?O8-^WfmW10Ba_54H)y9#MNSC8vI17&r2bS8{xl zv{+ywkNoWyHWzgI$V!2?6awF0Z%`kqQete|hXdQCT0~Npjh)D3^DKMdC$fU$rT=*- zt)Yxs6(0Dlvvo0SQIQ%pVCVxDfFtGqUY?CzvQ+ybU#ggqA^N>KETCjh6ie%|cvzS3 zuQ>T((#e@3n5C9VvZiLvPB&_5$^#`BW~aTQN{JlTwFmpfL#!VM*EBU4ev~I@J>ItH zTBMiBggM^pJ3i1)EfGg9KdZejbgS%3)?i>Ojykqs(S|YOZ7NHR`F02Ej)DGf9rpNt zb-3jJ3pW1`Y5p(FOjG24BF+DVnQ6vMv*-UGGt*G{UrFC4gMsxU%!Ip(DyXHzYm+aN#gfi#axOr-YLd~0b_N7OxO{&*(yQX z+hG|gh$wnNWmN%|oKC0WkRGm^nzuwbm2W)GQ~*iF4_kQ`SI z4|QOdEh!RVsw_W%OGonX&KN=g!_LtYeKlM9(!tY|pCzby$N&JW*M2M(0(T8aoMGB6 ze9qP-*F;iPj?|x@pE#g_B-j_AmBd=6DQCn~0c8q|4#)6Kn=5aP6GlSvW&j5u;g5^cF&@PW=R&(|Nxn<~JLz@}aWhI28ZPd4$w@egF4g=4RB@s7gPWnkPDcy1y z`L;_w07jkdwN+t1B46s0&JCiX=p-Wm@~O8$1WGF(2#bEdiM4sjzB-&{IO?!1m%}w` z5Rb7bY8*~ykVG?IeW_G0F=N2GBV1l=6t~K7JjxViX{@1gn?e)T`vb9$E+8&8iKn(npv*0`=9f?Y9r{keLiZagyN+*}Q_N zitN=Juw*djIL0LDWpG|ycegmr$UTGh5JLE3RJ~-cN0g1<841B?gdm+za=I(qa>{js zQ-B2-{POO4$Se@1Iq#?~uK{<*m(}kHPr80|{=3I3C)?tW#u?EEIyJI57aGfmAv~JB zG7uiFJadwE88(>-4T^OTyGnU-%Bx|ua5a`P*x(cRk3^$=;g1NuO-84ypj5E^aG49E z%i;l}^5hT#lRmpJu*sptbaD12%0>z)&1yoRnvJSi7<+3D#Tp!q>@sU zdjQL*Zn|3F{b< zrLWpjk*kJ0IzoPay}OQc+x_>VgDXSxMbC$GUH<+FgdiE5mV^Kv(o)ubvfSpqD=qC# zQ^E0`H~%c{)|`5b1}8k1aCNHo$$(dwIfPKGvUZLlIvW!*;__nu*n#0LBcgEKW!xo< zBbTf|K3=!~9=QQ5j6WP;R4@#f}qxKt(- z1LZeWR5)^$vuxZc$sY9T&FPV3!OCiQixvcTKmbPzSZD=RQ)qxEzcU7u+cp*{T}Q0^XOR0(mgT!qE>D|Wix^3F*$wtnjA znieK<{tF!`Q{S?KMDE%pP7P*=M7*Z_{4yLz$yR6n`7+nCBf3^;1~xY;27Z7=z}>Z* z2K(D&+~+y$nguyI2Y8+&iy2A&=e7aoNi~@(U9Z+%LkD-ON6KQyH-+I{xkfdVh3x@A zbffC2t86{xW!0itBKeM6`_8^_;p+?{i3FoJV(mH=1Lzm?_q=ck+HZ^#_lK`fjrZ7kHoLMy>SxB{Mco^wCMiz;&#No<20!VxjKVW?*_9-stMt-|9czD^u9y316X%9f)16~-Sb zyB-{cS$c~GI~ZgIV3vsP?MD1XokgbfxoPpw`X*J_&u44JyM1zms=1=|t?fA50h)UX z)2GWg>}vd^K6mw)+>?T^?jEl~W6%mznytz7Bed0`2Hd;5W6K1w$J%#vr`6lnSh$~8 z=U07mHx9PH_m4s1qTX6gGS9V`BUy|hIgi>;N_CUS6%xE#<0;9BkNJ}sl#+F8{i|m_ zyuxy)0}Z*l>b+LgE5rNh$-o-LHkZp|2}`w87z9;rUg)id&t*##)58f7Ljrtv?Qi8fAvvUFSgk={f#J1g8~Kxx;8{T#N!f*B2lDEF$Nz*&y8W z#3#@K$@YoXp;}}QcUU%Xguaj?k<5vU9Pa@+jM3C2>bMzpkfayX$g%8q>3^r5(WmXLA&|t-n=ie<%Uz>f>|%bU%)1Z|56AqlNgkE9wH)`EavqGIya?sIdPEJ8-C2@$}yxe9X;l}Iwq zF)+|OjuTv}4d(L)`ys?sc{n{kNUj_)>LDd=+QR;da8DNa_3|OTV4^j4PncS)L?*MKq}LfGAc^m*!6#H)^o_)4lyaN}2I+*Q81V0z~P2 z!15OrA5nXb?G;TGg$FRx46gJ02mBT!t1%)89v{#x!qk(50M19*9qC*z^;_omXo_sm zIn%i!8}+BExX}o9pZ;c4*idXd`OgruMX08+8i8*CR%75NQovIN@lB^HMKai?!DbTb zE7jYFIdC}L+>`bvt;&3k>Q&P~*rrVde@Cg3@x$l8SlGKIs zdn2A6QF(hDX+&;Ss1P1{y|LRX*^&TzEAN%qguUx3Q7JTF-hRWV66;-ic%w056blJ2xAHNe3(SuY zK8=&&cERD5rI-k*=yBDj)DRo`%h()xR7-=o5o=qeFoW1MJ>!P~{`)5lCk1*j5Ik_U zZWhj)wcKy>iah`Z`ts}qTao{f!SxC|#sp}#nK+h2P8B1$qsW^;A`5k1_ z*E6c|;>5)@a0COW!P|5d6*UHHe@z03oqY>KQQkeG`@Hd1;8Uzrq;B04C|m{*;a?xG ziezLi7r{zHDaI~c4a(~GRwXO2P5k19DJ3Ov0-m>ju{yR+u3CD}%Pr&b08n~25J^Q~ zXVp@&@3d&JqagGmHZ+uKy~GUwmUH4&Ll@;HbpeVd`_ibA-8+0IWfYi40dR(wdr%H+ z_527UMqjJ`kixN(q(2L4Qfr;+THytesJi_D+Cv57P#;Z#IcoyfUx@(S$686tN9f4L zZcH5~Bz7mu;(;8vNg`uJsCbLY;ks|ofcOr0Rg3?8xHcd2ap6V}mi7yGrJyWRWB=Rx zz>~M}+iR1}G(;<3u6$j+Cs4xJ%ca@sU&XXUncv8I@NB{zO=;9i^24#SkpvSQsA>0p z7OQFDTfx&5^Nf$hL(Aey5H3K6mv-EJrEdy=mv+o-p1htie{EBQ5?3xKU3G`S|I$5| zICyAwrI8L7?jeVTwhZPc*2MgI!#757^nJvPMVM)Zl;$KY9m&gu)i|312}=M^>oh2b zRu;pWTrU`1wjnpiH-=X1)v9g7?O*8RY=_!U7UbmN_%Vo{dR#;QDsDV-B^|{>JNEBh zg^lsmobJIfnaCeO1{=X6oK4Fm#!y>!YI0cd3=dbx- zvAZERh?LPiYD>0tjR4v0$ogX>0Osb4X zdw%Azb3&BrhMhA|RMhREUQL7~N}60^3L;`e1Pcq5j_l&$;#CNvxE9gka3A4${c?#N z!tc#pbiTTbuuoCFHt8B2SZ^$;0R>_mD#dZvjEA$(BAo;CBX*HVMY|zCom4?V9+F^j zY0S)pa!~vInE}gh--R02!~i{jei`epj72r>Oz&wI=uiY`5V@H`6+nTzO;~S2j>*S5 z)s<&L#OzElLY~@3BZa8(I1nAuS+CBjq_13Fac~U&IEzbAZ94-s`8M`yp?ENetN)S%tygTlE^mZ#hsMf}FO+ zT6k_a=_O9kH>-YHcNHoC+buVr^fKm0W5585Bt+7uO0IdjELBw_e!dh&1*?S`1cWgH znCG}Y?N#7q6bf{LyLYh0WA{G9Ffk?-&bCpBzJt6pByGwn-Gh&N&A1S~lw1V>phRvw zh4qjF;ErKhum8;Gw$0#jPL=V@k38w5iH;liN3}wbPSVhGi`rFpA|8GFt+$`GQNrn| zx?O;Y!r#7yVVx5}Tk~LKud6Jbu|BxZHd{4?$I~XoD{uBGo<>L%1`W2l;8WCV*HwlB ziWPf4&Si{41`!Nt{dc-z0vr5X_$+@!)j-YIutcmYTN zQ2E>jZ^GZbM50`Uar3;*dk#ErkoRcZ%WV%$LdYabiA_GsS^VBu-(bbXpDnlb7zzeG zXIvsMa9G46Thq9_IT*8k&L0a!UmKL?3h%GfWEskHR2uvR?#Q<16}zKt*}}HLYi@KI zjWRwWuy4;=K705wBoWU073ka+23#>ji6A`gJ!w6C;F~}wa=WK-r>CniA1+heQhJnv zK@7lO12+yFnd<>OC~3IK*CM}#O*=5??u5eThUrL59=AF~uardk*Mz-ZtZtjgzxWUT zC*;3N)c0wJVcG2HOf%^KWR-@yv+Cy2smYDW55mX7M?Fu?RfAk|CAslLL+B(ra#PZ^ zm$y@7-Bp|isqcZftutgLLmgzP98gEIcD625Hzis^Qex6{38`%}n@RLf+RUaz-F^4| z$^X(w^Ji*mmz=n4l6L&nketw!@3}Z3u_9`TJ?(rodsg9bQQPwYP^T%Ex)C?x;NskL zMn2DOqa#ezEkM%KVXuZfDBsCztwz9Ez~7i&qDdE|$f>T*wipS%Ef2ZCRkO3L1E$82 z>T!E`HfMI>+)tftC_aOZW1vWE9nEL0b|cegfyWR!Z80cZK}Xw934@a< z7&H~FDQ7u61tk~DLdCWW&wDWuP*^h?tMm>V)7r@F9g^1V)n8Y$@ zNNNXyHYy1`IT&EC&pW7>TSYi3AE#2L042r9;74;YdYq(^2qu<((OVH%hs91sLgP9a zjI~{25oktC@%A3F`9iA|iXhI~3nh)TJj3GbKd(wRf||;`e@Cg3-kLvLL`#GA-FE!k zxoS`U81?)@iK`07Y})#0vq$y&?T!;)E^cl`T=M^B_770E)V&-ViaHFmjDD{KTtj zF33brm5c8c+N0$z?o;h@BjD2r>HYdc;nfBGQ0I8v!kCOv(Do7TTQGIWI{{S>*13cTuHOli~~t>=lBL=Mte0$Z9$cH4!@O z7qTQ^fr`qo0vvp|r!?h5!O*Yj8v)h>2WX$eGfF%79okUJzLZ}AA1_9#5%otFuW87G zkHA=FygaPj_%dJ>e7So`Ms42mg|D_cd6Ub6aMIAjP~@GnX86nEj-!6xzwQ);NAxT1 zW2RnlbN5Hp@9JFJF%KGGP!NF@4Z=BK)~H{d-`+R`tl83jx=LCJV~Cm4d5}lv^C@oW`swkww)x5^0XEs%58AWgzULDLyuc!Czrt5%+h01kqYAaKEDpt%?3P| zrn0X{CycDlL49k?3Tt`hb8Oa8hc69w9%Uu!cwC<-#c9`H6k(S`StNHWT^Qxp)ueBO}Kh+}=A#jG!9Ne4k|afnVP26xvCEMPQ4#{Ju^PU?>2hR$$>(@Zs=@V!mcx!x=eL@94lU z&NocYmwF9%I3uZSWx0{64~dp_fUNWsav21ODf_Kqk6YOG&E0Ae#i)Q}BYtboTyvKy zU_Mui_2=MLWuMT?te9rfucucf!F5?j+fIo1-$nVhfJ{|fw3Y;x9ga}#_cup3yjMF2 zgpS%Mce0Em^N#|kQoc!5n&7_JDFxv3+sGB6ETqV|I}T7kv>0Zl%^uMoiK}4Lli>fx zI;YzO-B$q~DoGUm0a2HT3cVAtHJ1$2EhypjTqausR4yK_a zq0Lu!pNyqW_e_}1SAA9ni;78^jyO_FcgvM_(t3)!d1Wg2BZubDA0Qb%08w#%`IZ-^ zV5FT^UbRouE*{F^IVtX39ye9se5(2;l__ykwP<^QZxtCdxGf&@uFUKAxJlA^?ZPdd zv_k4QVqAK@9vs)Byd*9odI^NJ0p-(O0D}=m*v-a?6^4-S*<@}&I{On`<^av^S14Y> z<B6oh1vkKQgo>A z=|Cqdua%6lZw%b(cTlXlWFQv)`S-)}gU00i2YG({Q8SweB<&9nDIyPt-2S6+$;xZ( z;Q)i6gI$V7hbML~u9^gH6oLdIu#Yt2{_xnp`xU!QPC$Q;EO)dZu4)F{M>3+>aCa$= zMY8}{XdqYRdvHoQanmP%qE&^Xz<>$JNP_lDJNgf)7V_Z9@XeuBcW(OPJtoD`(nmAp zm9D;DP?&{#IEiFdS4u)altZv8`U0s(?dw0Cb`s$Y zJ+Bv&aZ4z+AI;tFcZzDKl^Q{xVd)cO47Xd@w1Q+D+b0LEwX>jETZ&~@J5&prN8(@X zDStn1ZTq(X$ct1(d~>K(FCA*h!5>w1*0JhK!`m0;eyMIJ#DgbTDPi}o-@|Fy=yz37 zET*i45>MNKhNTR>XD~c>vXp2r&g~zGqilOW8}n8IM%*<6G!|^9gX6Z(lw=0QYi6py zLo`iXCe60gEQnWZ3zHM;M?rVx)=^n%UO2KvTBjyEfesahFz63a@Qlx^5swN)SQKA7 z6Wd-m!%3cR;fIQZY`9T?MwhOn&-<$u>#kZ6uQfuvW9+Kkc@SYk_9^(np{*@x8r*KR zj2#86usfF|*d1V-tlWUf6K+MD@bZVG2Yf_~whuFvtbV^n&=QRSni-ISWt zPs<9-x|0`@2D^UGymC(XgAbR>KrAME&@)#|Zwf1j~0zh7l2_*fRp{u~r>ueTZ z^?o+BTQB7&%Pr6l8n6${BR$j?B(ZI8ZN$`R_-HD>)dCqHYy8b5X)t1}$H| z0j?nNm4!*-NFdmbCnQXCEAucUf`6v+Ywz#nz`Eo*CyBs3oHzRB5xK)i1D+fsc_;gt zj7kM_tId(NgG-Rjcwk?^*O!{s^j767^^&ZTQZ(UG;J>F{KM;WIH$BNzR4@h*#ONlU zY~3e%Z%qJ1{P1H2&6bJIwjn2&W>5nPnpK0~8Y~jJBwJH6w`I!Et8u|$NGh0gFIKz= z%FeGWD<`Dt(C6()o;kSnc+E4T+ED%w+9o0_$iCW&qt{K!V%+jwVK(M#)WtgDC zjH%}Mi;QCDeMaL3m*>joF@+nKoOT4@X^^v^ZT zd5Mohqoq2Qw1_$Ub%h6BU@))D9@XJ@)=jl)6k!TKr@2QvTgJY#9o%T0F@Iy(>jvBM zKS2s2t(zghajyItbTjwj;74Lvv>3xv-aqPI6WboFz62 zHTx$2>f`KSI{{IebH|-W#n)f2a{x7xwZCC1w7~{!fs172h35`8I<^S{C#O?yf@&C169&#W-8P6fWFZj|6zy?7%W!&oNl`x~P^U6VD?)4X_Q z^cFLEbZjIJ%KG>G^?uY`H|Upt#(D6-BzJP~;uKc4#O|PxaOPOZjZg2|YHUq+wc6YD%#S7Cw zBB~SB2K?tf$*Kj+Kkqsg(OZ&S^1>aKn$MbNogfXS(9cmUKQ*YZ9_|9-y_vy?(knb* zU=s$%I-UJ{NpsBi zXn8l`he$wNF?p|VW&VIHHz52MQYSp0{HqgdLOyr42b!7`NffYJ$=w{LwHeO%C|=>( zKM7nErmWaI?Tk0htwSSe8>-(K;)pe&T|L(9qWR^uKAkPoy{201&XvT;zk23|^iAp` z`k%SP>*xH^HHu%W))Iejr-HRmmC`@o`oYou)msg&`xK1XTED z!M1PliOV78zZ-9(ZEPsqZHpP1%B&4V9=T}2bP;2N?PAx=f^t~rg@_^3$RU)?<;#(= zWPzfvqF^~U27(1{tl-^6%jrAiR7a(*uzUlK5=|30?(LL7%sqSEV$pkx9-IJxo+u6x zq<~sqvd11K)1KJ6fJ{7Ly1W9Hl>WP^+qO|hC-TVDM>9N4;f_5H2bk$cttku3P-fB` z9ZP|faBPD7oh2#39;pv7>8vb0qaGC?a+^pEJZbV^gXz$RsC*CPhHTm1-S>P6OYFw4-{`WppFK-A$^KNnLJ8bm zvUTD;sFK${jok%ZJ=Q%WB;F|t$BS*`W|)f+L9tF#(*E#`A4G%16uih{;tCidiTeEo zi1-7}FiX0OH8z78XnVS`3@yd7!MPq%J+Mjis#PXaT0R)lr1_%|Zy@n4Z%H6|e&<0)JIu%qoU^iEqIMzY$P*Is4Hfb#Z7r*Dd_KQ5dG|ri z6I^4~$1lWrzEQo39kY-3OgG=>V}ITKM|h#2U7%1%tH;Cp@w&g`3(dQjyu&4cfijdA}fOT2XuDcfC&TT~qc}Pc7!`75HWKWAn;tkeJ3g#L0kuKGLA;RNlo7 zktRiJyauryMd-Fg<_yk*Ilr8}+Rb?;4Ao;jT9ECUD_GpB>eSn8p$@ZSbAwQ0V{RdcDzAPv zObF-AHfjN`x1^fWdT4%+guHogFveO6EoOrt*_-oQ+@FB>zGdWX`BLJOZxem^@6Z{Cw|A>`>mJ8p z?Fm=;m3oy>ps2nimG~VgF8eg!i(?B#`PGZm03jTl?_HsN;venNZ;TF6f?!O6ANRjo z5T^V0HfB2Q)8(D_3G}O|TJvc_*q^>Sr9*Mv9w%W(e;@ZWQ}X<6Yh)10hQdzwvCq%S z^2&70z)xE{y35kdl?B;*);mSfsAyV<+sevvM4Yd3%a(F4ZKQ2>PVnYq>)qoh73J`S z%;_S68!W)_gAX@evW-J3e*Cec@W`PEng9jbfQ+q&?|Ly)s$&rsyE+7%Nb-seUMz22 zx$XYgwjZ+_f28-nAp#IHuG^}`t;&KK-m)7e6fOj3P>3XC^KuVK>~vjgNT`7ZAQ8$ zcIq(#KYxs}B3+D_Wm2(!lOlu&l z1*fA_*xn3YDYIQwPO4ChLh2hMQQk?1jhB&BcS83Z`Wr2*rysHD1VoeykR@tRJZplH zHq-|eSQMi>X-8{arn*bLbwZd09RXrk)}dYGAltlL_T_odF1xp@C!ldG&hbOC;h%SL z2cI$K29zNHF*bYRrs;ix*kpQCmbq573)A5ry}Qe}#Cf!j%%m%JepuoE7k{A|U}fqh zSXa4`fEhhCqdBN)D*cQNmK`V;qil5sHO8m2_ty67-YcbUz8A>*zw-|bHl{*4xB8i0 zPwKD%d)h;^Adfrqr&|Bs4fT{9!;B?;t8?Leo6(PfmzZzM zyf-k)EjyLMd~q1BF;@bfAMPCYE&L|A38o%4NU)0TM;?_&)9TdG694Xf_^%&Rd5s^` zq(hKxlo4O%HDOXT&i_1m3q7TuBy4Zq)GxvF^l~+9&yI_TS$kUd3b)mJ^^P_Ain9wC z2R@R4{aaYrv4el4Nu>>wLr220Z9?6pRl9BfjyVa;?li(Yc%u=?GaXU^?RN&)-*Nit z$7-f-$87o4840^KRn6xx2mv$KE?eL6#O&%%=E-aV*>F}*|M8+S2&hN zg$d`thIoN49MzdBlvwT(YVG~&nhvJM$mXbL>%Dr_S#iq_JgnTc|5M#&^kDUa&}Y$B zZuP(h{ZFFApKM0}55g%$d;r9rgrC$bJ*N8M))aKrB5Ch`v)s!x5PCs6_kG+{|LtxG zjXVQCsbU643H3817*Z)Z3fb53#^}*3Lq$5Kq(0|)%L&dITYDleI0mZCqElYOsNiVs zLes8?7jom)kxI7DxyV5Lp+$}4cPIN42t>}n)&TLZA>fm1`F8w%h%J=1<*RG3yKv8r zH}R0Rlk2_*bj$3zc*kDW9>Wi{{q(+3^uu!H+T}Zh^n!gBK~#Xk{dc)I?X>WGWb+B= z)lz6QX$Cv+REyIxT`4wV^0fT`zAS=P@hOCWJF(AD!*8FqWg1lJ% z#C(13XZ`Z{PuH=k9 zn%7M7E;YoPPbb}WW>1nAs=_-ctgof>Vgz}o8#>63zO?Npj4V5kDc0u|z?7&HHfesE z$&c(SS4e+g7(x|}WF0=4!sGQFIY`p{7d5-;+CzEQ8BuUejWqb}rg>f^95;_l)N}vb zxY(}ezrU|&Kkn?lGe00o>6M&8b)9ZN+aNP&f^Be7(Ms10*Q}LHy8Ci&S~YI#j-upn z8jI=_8;sae2ve8YF!wh%Z|P-3@Yj3srIfQLQ}N4e_h$F>kRsf?1Ta>5q9*%%yxq2% z>OQZQFtj7q9mU6_^K349F;jh(c~IHJxDk7ZkS9Gn z2^fR-+NZOmCl6}&=^;qIk3wmYVz=_<_OT~ChtU|WNU}I-WIuW-HFd_v7cF2ddKX|b zvPcX~g`rcs%BP3-foU{X=TZW z&CJ8wdy#0^8!09Y)!hkB-)NNJ(Vi$3P-`}7Nx^*o^c2O}1XG8g5J`WI1#{p{QR)6Ct8oRMg!&J6 zn>}@8pO-1kf*M^*g}1BJ0s@c~1^HCJ8Q&qU?(5SpOzG6Cae}FUZi}{8v9QWj&?gjw zt_{X%5o>P+3ceGttg|lVweDWFMQ?=g9I0r<#!CZ|6dIKI@j2Fa5Ng}XJ!>kDq0)52 zB;w@v>}vO~sm3(#9SK!49%OUUxIA6AZn|A&9-M`$P9o(}npw4V-yN67%|^DqSI|Jr zh#8monLYZQ+mlz7xMNY)C@^g@C5kQ%8Z}~(`79&uw=ezUDr8BLUhJw%$91~easdr#t&@POKe(g}lKaL#z%$rK3Jr%--+?C2m06S( zGhWWfSOd!a&UbCxAGG8EpI@!%lCifV&2KzdkT|))BoZBaBI|%8AQg1F5#h+FIO7&J1sdC`nRMX z3On*CTP&e^*S%*B|1?V!Z!o!kcl-5&b((qJO&xyV`^Cb6i{Cb-lI_Up{W<28FCU+B z3JEPs?#~Wizu=G{a{xyD^kLnK>Ejzl!(D^>Ea}Ll5AeG$^_=ZFYPWi7?~IlM>L^A-7>-!t;P?AX}?P2X)H>a4f?myLv$8QxsCqa>c-Co;Bohe@OaJ$*o z9p~nFY9bnqr9s9L+Y4=;INEYMj<9q8P-}*lbRUVK^nIVd0qe_&Z=Ygemky-{{I*mA z6pf&IAEVbT8(ey*^rS5>Q<3T=G>&Z(ePhn)h=hE%K#ccI-O zZO`ouk6!*~r)p=ovd_B0;P<|4|@e|kl!RN03&a-A_;l&SK(7VBV(V0W`uvcydBNZtS zxIsSL^}h7tba=ZLHieoyeR~~8$>L|IRdp>?8O;~LLWkJo)Y0KBiO}}?x_(?q7$w8) zB+s=aeRXCcnYiyvd+pT_nyVMl5%!j@Dpu3;Q&zS8qN!hfFx2S|%Ey-C6zsN1wVKIv zN%iT;7*;W1MJU-!_fH_P;Nad^4K?1n+Fi=eZ(VOM$`O_PCvqNWqDbgL{?K383}Gvo zOmc~`C41=Z`5@uys5we8s3O?kOmb7-@|aT1WQquM(xkYS3?wEwLz<*^`J0L;QXK&R zqTQtX0)!biLh>E^9Q=D)L&);Ql^DH4=h0#ZuXvq%oCH%w#Y1p9OZ=M(Q6bOy6ka?72#`iDPx&j9@w@*9;UJJ}3B| z1*ZRq&x<>!9p6-dp6qzJ$PVMeahe1%V46~c&$;Jc9%?n#H*wu*rB{(GxkwB%_>(a~ zUv(#kOWi!XIWy`FyR14th;t9xJ7~VA@?qagSU~QmHN{i942?S6y@qIAYru3CvO178 z-IiSa;!fQf?esNhp2*;`cEKuaJBlLem8A1TbZ$U@f4i#_eqZ^ry0Zk&2#Fo7y9Kht zvJdZ#UcPuD*els+izcsa@;u~lM9;zfp78j7V_{Rz5xSSZygjV&;4W9`>PEnf_z2%U z=u`H*@J3t19QSdY}gSB=u(+vWx>e9vb49VghTlV6n zW@nv;$`osJ6fDQ?R8qH}?e({v%h%hNWq-~PnIo~D^$V8SrODQx9<#m9tzU_xT0Ba) z*4yfY*7qXB&~=#zyQA)F*uk$(_x=ZUZ~oO({=Ivib8<2r0-Ov$fDn=pAcVn)sGw+N z0>T^+6$LdQGKfP&KtR+a1PFr|1`!l7ASxgzC@PK>5EUE|heAs&K%6ZLEz45N;&XFX zukO{WyYKqm?w@Y|3umpf-+S+8Kd;A)1;K&<+vk+kik_5KL+R14ntPirk$X2cK_sH$ z+CJDY2AqpD|D=+ma{Apm-q*@9lv8I|bGxOv?>5K~cBzP#x?dqbj|$rkUpIx^%t3tr zy(k>X*(wJ9dK@C$az~)t1BY7un%YCmg@Sl%_H~_vGM~+PX=@`81_YfscdId&)KDDw z=mRTtADZ3&Jv=N@tAACM+Ug@*Dp8%#c>l{%1{VE#Jpj9RU+KFVGbwFb-!yvr-1Y0k zi!fJ*_ag(TRBq1a%Bv|qwjV|$u>j4r=zv_~^2caP)S-yF?OTq*+&KeDX3_(FUetA; zf^ttR?7Mfq?(pG@VO-PHCcN=IuWOTfKAU%p_AGV_#c}EbICoS}4&*CpToo)h=={>9 zFRQe;)Fk#rzroNBiVePy!27!LMgl zTjh!Hhip?a!j%EsB&*_rokDJ;Lg-0g0Tfy|dkI^Gy;d!l6Zd8U#-`t&w)n+=@7Gk7 zG7buFXjb9F`j$x^2QV9A8^T+qL<_$<>m#FF_9wOTdH3Ha^QQEqx`AE5(F3M)mSgcz zk;E*2$(JJi^G7*!x?Y|6Q=z=eAFPt=p5cJ_`21wHlJKe4l-I&%W-py1ow(E=KO^m)Cn z+CB61EFw>N*H)&wx^}%N)Kj<`{hui7m33eWn!EgXa7b}ibUf1>$}tQGT^lw|{3SU@!e#~mj9|Mg3rqCWXhuM)TPXd?} z=lc{^R|NPghdif|CrngpDdx9}>V`Qg9Ey?Cm2%Eo2!nHJr2k+C+$VqweN}QRZ4qcr z$?sjteL+OvW450Jsz>|%&E@g2Q6O-a%H5F6$W9dgu5O9U1cd$)0^-5*|17+48Jy{A zSNHDedk8QCT@HOb>t0Ys;Ol1XU?ssHAKS(U=d4IQwqKFr5^HQV%ssQ+Woq)fY)FKe z*m56dv)M>r1L3cYs*BiWQ5>V^mqQ8VGlADDnAHsz0z=(O2wA{BH5h7>O`+KRlB9$*-8YK@1rduWp)!^)OTR=S zQ&eLbVl#9LT~<~FLatq{H`ZCS3N7Yl@rL_3w&l)JOj^7Xx5P7}?al&Ob^-}>;SDMD zY};z}N^!mrm@QoU?Jh68$frJZb8UvpqP8~l4v`*jSf+{V9}O!XWSk9Mu{Gm+%R-Bu zF>oV>M5OHhCm^#Nb?|6C(v0p;3o^r^%7-9MVEgXC@{Ew;nPUH>s1--fy(Ja6tI)om z$U1KizibV^1*O%!srG90K1JP+Lq9$*oF2|dL)h;R_pRT4)449tE9GlXD|?tdMe^QU zaZ>LU?aUg^wIm7D^`6$FX*PMS&ySxw7ZP%v6}?RnwLbJ4`*1h)ogd)wX1mF&`47LP z2&EHle!%S9ZxpfxGYFMO|7>njVaTzD6-T=ADp}W|9BmQviCwx5vv%mmIy-s5+_&c< zX0x2j#X5Z?PLWaevfD!{5CXg!LGvy5c;z0YcuNC|^T3NIJtbcH=N&M3>)x^oDFYA_ zC>F@$}&bi+|ZCP>#zOcSO`gp)Ip&;yOd4SpD zf8X4%Z6Jc;hprwO#gW&Q+N;yik|ndgm;5=s54Ta=p|xjz-k$}{wtf_5( zpIngz`QN`1@LPkS_98rtSN##eYCk&kQ$SP1m-yMvw5uYXHWn-lOq%;`K@%p;Uh8*T z1-P@)LZP}RUWqA%+ROsU@$(YpUZJsmHUOa~0qbL505@lOX5`>Cyq{6y*`^LzG74-X z$Tha!De_2OVA+)zc_G=qpdeN+Tr;8OmXn3~Aw1QE)*kf=6w2GkJ1Erjop%nqO?jkO z;a#ql{WOVk-pBP5F0CQp2w-qTw2?M63}H)75N9}%->tjbYWV|P!P)?nzk)71$Ru$|*U0&!p*Fm`+S9zEk4V;@V zt=>(Ql+M}5a`wE^CI22(aOmn;En|8A?m%8&15Fi{P3a?@ixm-Ez7FZ@IKY4YzoAY3 zSB7Z)-_a(!3&h+{rblULiDdU{ZVZHG=R0hg*`7J!uGar{Jqr4B1@%6$54-gd$$P6( zg1253zadk&_huzkSSa)}ci!BDiXnK~BaRk2i3??MMUb>$w z#Q{!ORUsPlLY1|g-J;UXk$UMB`dx!+f~A))Z;L=ZJyh%Boeu&mun>2J@%8dKMy&V74>k;sHZ+#Xb#>j;gfL= zpX+>$eIRJ&hHeG?S^#ye6AdN^6CY!-<|LA!TT!6JnIof!Q7kTFqZ}VaWz-; z$^btE{pI93SwrYrO-LvmY$r7E0l z6$2Yj`%4XsET*fK?bC4T&f@g=B(d31+DK$^U25VrTS}=Afc{8T35g!4_Lc+w>@0U3rW$Med-`wN zxU56h5GTXZlD!-*a0Z;h_oAS~y!O`THETcXRzrolVW6O&)EgXktrc)G!^A#n%72-f z8?-mQB`3-q>#eInS)}J62%EPxH{w6mAI>k0RURzKTmHQea}}5a5QVk2hI+I;mXtBt zK}~A>)TvRew67DV*T*fdKe~%g=u6-iH51x`ItSebaA!h7*S6hFop_uZyZnATLVH=K zf~V)GUmVu!q-)zyd`!=Q-urWC>l}^{o7CE>z_+~f@r0S8xnrOS4r1Xe*Yt!{{Bz|n zSJ>?F)51i%G4|An;o-&qin{c@HoNzNCC3`&m1ivu5dSb_4)^I$(9n16d^=0o*vj|0 z7k*~Xr-CxnCUY|mygItPH-67TX1`*Gw-t#24^U-zLEWUP0F0;BT6G4p|g0g zyPxq~?=SfCMj?de46n;#%D=L*T;5k7<*c;%*hk>X7P`I z7yydZDsxMJrwIQ>ce=!mu>Oz}QWv>RHGSxeL;T{%4?h2?2P8?xLYv|r1)|9atzKO5 z=wYSiq46X^g^}pXU;QOL^#NvoUh<<5`{Z(*reHJrloB+#6034s@)~<$x}}sRKSo&l z_|6xt!g@{Rq-&%vP@aGH!jix6L`T`x#hbq<#sW=EvnYb6=olYbXzZv1)mZ<0v; z#5Y0CE(^m?f5xWI6sat$LmdV_!tVsX+qkEyXQLmzU8NgoJmZa$5em@n+Ul0nJ6{#_ zw#&^`$O2%NF_9$)=K-=E5wFKuITdP$8N8Ty56h;Gz%fI))KQN1H|ilI3_y{_=ik|*SBha5w*{Lwy)|9ya{lb-ay1G za};N@eZEb0QkD`{x_{@v0fEo!hLgnmCJ%;0jJH`_9z1NNwKf?mv;;#KIcDGyJPS#y zlbZYsUI9V7x;GQIkn~okPH#t5e^q-*>3=+yD{gt6NOO4(HvE`{P4sBd4#XJfV|pdxHs85-c3o6G69EqJ@ZAJ0+>>~SIv@6l+9kH;KB5J%{JI=lnCE0 zx?;BjgpUxQWP^#hWmeKdK)s}`YddJUN;G=;w7u40xkcy>mJXgS1PKuBqXw!5c7B=u3E2 zA$e%|+mq#kTR8=gmPpr+iPilDfaURQz$lh!;eX049|4AQ5XCN8(*8_+MQ!$*%@5qz zGMd+u?=9KJGZUfvR^MqgSscdiq`t!MJ-AtApPu#2{c! zGDI%DMpE9_UTmpaWRpGJG4{yL??n@UP5qq63EbFLX++#7W~vd}uB)1uw7Se_9sDv$ zoUsSk~!ZK`-e(YxQS>|^~o`zOTc6K_j01wm@JX$wXbe%Zz08=)AFw~x)wc-q{!2AB(#m(@q2Lyk!3QCymA`CsB;Y>oOTIDnKk&uv%UubNy7%INtqZ`6 z+f(0G`%#MUB=QRuD7P@P85IuAi!p!R z3B)oRRNLdTk>zX%;Iky=wn<04YWfT82mryyKzjG>ttVm}v3h@oX!SnKiWIZ|?)xc2 zo9p#|3?gFfQbLd9c@C2jjz7*zs0d zuhh%%(zYmUEdOz{g>fio-A;2!y5>{wsEQpk8FShF@>oW5kh8$B;i8TRKe=Z{>ggmA z1xwTSvTA4FO;#Gyh3@;50B*7g>`sDw-YNUp9lWp=n@tz!#;XByO!i$~zpvcoNJzXI zJDHx+^uhH|UGGUE+1J*dqR>WcYPGSs@QU)|Y^kczSVMnvSopWBZ=FR`f=gT~)gSPu z`V14+df&DCFQskzG84U*oBWYnH>XUJd1HZBOlg>J$Ar)M)KsSn(LKLz2+cc2(*3Hn zn!feI$Ajx-ml;6Yh`<|k8`j5Bkkz*Co+(<-(mY+x-YC+>`t>}mE7^%zpIc^-cu~!r zxk1ib>JS^6mQ`HRS_(@Xtq?0)OrZU#Hg~KRv+vH{4X$2}xqLqC76_G>m4aH@g{^l> zer8ynwzTA%|9WZt5rm>8zqvD6;!1ywn2% zr0~g^f3pF4G*;$8kT=7}K=b7-zKaZ3@OXACft_FkFS6M#zOgr3v<22^sZ2S=F2tcn zmW8pmB^qZ#Hjn)cQ^43Gia8->biJPtKX;Dg%rRgrv4l-s*XSLn7Gw4SG`*1}9#ESz z*F_vWlrn-$-2EeS*Zr%95w=s!Z%N8#VRoVwGo}DeE99=TQHl3{NsDU!ySP;ooD0xU zRd^{N(0E;LpxFEGyFYi#XZoV3GMuN| zwB1WVUi*6r4)jn7K^&EEIVO%jtiA4HpMCj8*-*ZXgP-Mk&M*r47t+X1H+cqcfmO-m zN-O5bjXelKKID-=Vc*_;Uhs`rW&OB+Vz<=>t1|S#>qCVon^gCrvF*o1`P^+EW+v_2 z!2KkolH*NJ3eqbWu#;XLx>4HsU?i}-RC<}~VmpixV|h0-9|5s1$6p)@=L@gn%aRlp z0Rek2A6ZBDO(DU(4CSuFRaa}u(fL;-dn$*^FQ?(hVW2&urPvTCIBOooG@@*E8ly!771SP{;H(E^Ow&g`VO)b7D2vLl)0(6uf+r zCR<$UAM0^W?7N4MW3K}=)*QuSPHp|a(Rut%vd?~(ufv4I;25{&m;2M2nhzdtV zFK7_2F8S{_E8ou2gC$y!Pv*25C+w4g2XDlcs}iBDG}?;S=RJ_VgBxt=e;vH{J$$bY zL4BswgC)u%It+&ZY94%8xK%^I#k0zz7&FIb?L}JAFG4T9K!vf4IS+x(G2Xy|z^gr) zd*7BP(Lj$={;v-`qLBMQj8;hBD(#go-n*A#@o-6^&xUWaBzJCIiC^`>vv-DAI%eDw z_0yWAVCnFQ#nTa~#_5+ic?>sgx}J^&@KRrC^~E{ix3ENFpIf?AQjTWb2fCbLWCObB zV))O7aq`QR-><=UFI{tny`xg9o`zRtHQn9Q)!cCHZ|enxWbzY~`0S5VU)u4VM@fAk z;=;lKhpp9TDlzkhCd9-DcB`)muooz+$SqR3*uA;xVlTwt=XCjlmCyYHx`0fYO8xW^ z&uUIuoDJvUPWt+{!TwYsWIB~&3xO4>a=9ZI z#RlGe?YrZA%(jp(@FHUZOwM^u4;(IZ`P5JU30!VpegsC9a)3*)Z^>t$b8QH=<y4lTCR z;6i5i`pH-+?q5~PMkAOUZrpT!8hKBCjfRwxC*by|M#oTQ}vW zq$sFXX^5>Otw_SlFDuPh#i-hxf>_jwoytp~_Ef6*?m*A_JX?2Gt**YkWT)7i znabn^IVE4HH>hCi7Yj-}c#&26WjSKI}pd_;p)(igODz zbbC7oLxioE{havxQT;pZg1{Ft{il``s)L2imztr1rov(pPFpipsJv2O{h>&aI?Uo8 z1qz>4%GK=;IcfSOIe>gz1mkV_`KTCdnuY)y=UlmO%fL^>02qk)vHCV*!7fv0E)sG~$EMvawgS0Arna^q znaEFStihU5B+ZG>83btda-SC^9JN~G;gd?3V)tpOUZ)kYCt17mE`Ls2$31R56Rs0piDAi(E zex|9=`oqle(suYo*bKt&WFz_|sp}@{rFQ}dNrTn0o%XmkQT2oR%bcM6*5Uh@RDZt# z2ubRTo-y=w?lofUlANp9@WzSZ+Rv;{0O*O{?Z4F{Wtd!XI}M2 zFCyNbI(-Wd>YtbGuP5d9?|J&9>Uy0|5p>CZcjucrCUp2VW6s2Lvn4eYU^d-%= zn?T??@|g5mZn>fqXi3S(w@Vnu{-=Xd)Xr7l(G`)w}l8^RFxJ^$^3e}c)|!}JKzZlgQq zl|l@~lfUkcSA7=Kg357M^m^=440Bzc#O_y-J0_{P7VqYn^>#uA20(`AI64P9%tz&SHv z*e>p0QpS!|labinA6qy(p0xs}$#zPin20MM6q2!%aVz?^*&Co~t_`T7kts=?gV+<= zsMn1T=as23Hu1EKKxyV<&%mrM;<=b37Uce!b61}dkxyRiyVkEh(Uf2LvBP@+r_`q~ z$rr267jK_;oUELZOmpC0)}TkkL4(L=i>raTdmp{Hx(CcqtikH2{T0R@fhEa{ zbgb!a)1(Nd_ygg#hG0?P?w&$W#Y@PM`WuUJPFhxhPf0mSA31aY#WT`VjcpSHWGCgA z<3Rlg5fyaJdi}~bT^C_CE}XNT@f@;@z46cBX-#3LaIJ!8EMOX%7bT?wE@Vx?cfC#z z7MsV#XyK6~I)2M8OPf)Z^z*&5GmHnVVFl>&vRPEPsfmMaAGRd*8Bd!3K9FnQ++Q*0 zGhp7uEtu|INq;itID_UD__+#ddz}mw=rOjhFa-{ay62I~4_a&9FUFbBMT7<;!0f6- zD6v=^O4MCEao2`5tTKOjOq|}-?!H!H{ZAvp_NI(Ja+X{#$PMc5o7s7Vc>drefVcP!>z2tuo$#Fsl zo)zC{%`9#4iE+PDdi{47n@8nK#y$6ht`^rSHbjyq9?W}pB@BinM0SRK06#5l1sP%@ zNTMyDwOvZF%GkVoh1v3qJ%|&zLhP8ftWHArge<588ML}?8B<@_<`ToB2flP*_r7djo*?I-iPWSY9?ss+4Y&JatmZ$h?ZXn)f&vkdE#S?1% zT3uYYgU-~?Q@D`l&k<5VQ~643;uE133HU>*v-(U~Ob~iq*07J(bc>?~u4u~wd|`tk zTvJ3fM-vv=9)na;6WAi>WuHb*m`r_hqnTxxMyZvtXp_OvU&J}#pO22HmRtszoZm5H z>6&6Iv}kbOVbfMU;iuSZ+~4`15(sfK)gjj_+0UutV;|-atk6Lgb)%}(GqQ~a* z)jr-*4N_BEmUVfuIJ|r`tRF49?BiDiG2B|PYs6#KBBD4|abr)NifDm-*CQ!|W}R-u z7MXrrllvf#V&l)r!8BIiXi%EZRBS(U^8k}StZ_a{6Cfb2XG#d$$DeZI)i)TSZSTX< zhP{995*sn@vHekAR(gFuV&OqwQ}>^3Zli^|Q9^2Q)buyN3?>K$Aif-c_C+iR31Zhv zV_l@(d+R3!)VkUS;k(XuMT_#=hprOAu%VE{>e99_oJ;-^7+bUbTlkza1d+yP`h%|W zaP`v%2PrPrwqy~+yr6sA7L15MBGE|uUA!av$}xyvbLhdT4;ghW-YdL}ZQJiTQ}!T^ zpUZypGP6AS!fE%XR?4Mq6Jj;?DEg`jgB2LXj~N!z8fq1g$d9b4t9$b3ga|^sdyC)$^3v$k*g=W z|8+ntXZ`WH;Ra3KPm!T8@^JPyb>B+au>X7kl9b39ahsx(ZQJlo=?C^kiM1mX32gVF zH%8QO;Vk9)_TDq-tB0Nb)v?tpM~yeKW3(V?3>xvfj<(D#G5b*-vi_@a@y%LSr_WcN zEqR8KPai3Fc7w1pZ&7#ACav{*R}V=l_-!!xM8K&&tUkK$T!m6)0V{yv8#=~hwAr4o zMOn!x%hP&HB?|{#C(jGb`nw#Dk|%7VIDpxUt4oi$y(il9mHX8-mk)VADW)T_rA)V( zg**wb?OW(8&!}uwohA(#qBrv1QtD zw+1kj$(mSa+bUJE4Xr|Az9V^)WHAI$=`yFv9bkjlQD;aM<6(q(dS@W*lzY`4$4*zr zRj01FVzVyt`R=$NmO(X=?9@lCOl4SXcZW||1f5U0h@1v2`^+|8a;0Oq$xJINKGn%w zis5gpo22%UnMSuQ9BuvFuIrt{g7j4#85@1kN`*0?l0dO$jH?to(VTy24P)~0ho-%c zb+8?4pwL9Lh{$W3151k#s8pu6X_igvq!gXD^{Plqf38r+T6CO&o{_yK!p>0%3uc=uB^HQ7Y{+C=kWI0#Jj3%Z{MEeZw&b?zG(WR;*hso=!TEA~5nve5o6D@$ zQM^F_sAF50uwvrEjlibCPZC|U2$o&E$^C0Fc%_8QTL26imFhoo0Sci~K7OX(tZ9bu zM+RhfSU6G*oADq3g#|8QTT-I6_LuGp-etF=*!)Q}Q zTKB2iWA*(w=zE|M^5_LXGqOSP@$|Ck${WPDU(l6YwMwIyVbThnZd(V=3ZMa-f8LYGd75EPeuKg6Qb0VU`0 z8dWE10`PT1KT(3zI9$G>f4{ZeKjceQ(n5`6$iKC1C@aira{6>Ko2(|Vgu;HefSxBF z`BC9|;Kd7Y%7t7C#g!qXF80f+o!J~=Na$IQYgPg z7iQixRL<-fXUIRVl)z~U8^1^RnSSWJtKF(|g{!Rdtt@M{hm^TbSYqa~{K zYAe>vTDNc3VX4J|l5uTa>NAt2_^NCCFkkdY^_w-N=udNLIL~;H<|{aahsS91_FV-J zsQ}o`DBz-pXq+y9BEWH{a@Ww~2Q4ARQQr!sCC_`f$3tgCs*$8P*cV4?XlFPn!f4{L z-sSN#q8dg4T$|d%jf>LqY&8j^DzX}70Z+@tu?_Sna#@?o)$J|Z1x9u z^c-Bvw6ZzZdUCfb$BU7M09H&(Co?Gv+j8*wHt4)K`;;qtRbb)Uf^?ah)I;IRslq|E zg}Ibg*}R@mg!LkdXCh-csLGr{mbrXakQYcVOEWnl$ zY1Y<-bz{PnFb>P`{fZ`<;FJ##bdx$!fwf zx+4f*Z*EA|zF|F@O;C>CIPg=t&y#*h*%qvY&5|welG6ir7aL!PiPP`?yw3po7Q*jC4$`h2J5Xkv&x+= zm}l-PK>peU0=)Q%_)St)*YYjT-7+JrJ)Uvu!RLOxoB||9a1X8F87#@{4yAdSOGR{T z2`(2T3AGt&pBX&sqrR$fVXtA$B4A_#4 zrA{L6-oy6KZCe52zfUxW_lqk85wMLfpsDP6lsKVb>=$V8S@wVSv9$1+}q2_no^6dKXXFjRik_H{_Qn~)<5HGu{-kbM(?}S@w)wl8#ijq!8QAF zBWm_ULZd^M+TWKB-)_?c2PhQ%?1wJtW$3h>hXSB~c+&5Ag82CHHCkZ4q506=sxvq> z*XIPZacTjvNKjgPhP3sV`S`{@1Ap~eWJTpe3gXf048r()*1OK*UqseNi+i_<0Ds&Y zIl#;LB`!TMDR|{x(a1<}^)3?t1K{**X_GkDxXlF5Q<_#8{^lAsc77+RHqLeQ#X+6L z+!IY(B+mW=!^yd*no|*AW1D&RzYxXNdtw3VoTdSo+hik0lxcNS_jJP1AlN z5DO~bCDX|U{UQ7vVphv=h4c~rx1LJ9DeN!q`*niJ4fU*N|Q*yW2uekz3{ z7XU<_J=!C>!Z-6ph)-I>T2NIm zcP2-3b+V`YwXzBOJ&(ey82f4b!R;9a<%+?OD_BzRm=qpYkmn3rK-yt;&pCMwjb-Eu zSxHDMj=~W_xR^WZzQ{rS-~*3Yq;OlWDJt#lFXrIX?bvNoPpmmcr?@8rGv#`rPwF^e z4cx$lK8BoI&ou#a^||Xo3?&Cx6?>+cG<+0Mw*)wK$`_zxp`fGU#o@P^`?l#fnLHQI zs5i6A;18Ge#RfL*@!ZD0f;n)ET>vrjjdt0{MBzUuM0M-}6U6F0&wS&3@am!Ev77fL z121hR2obXcD#f#45o|Pp3jeo=)c;q}eER(7Dr$ zIxXK>5qsrYc)xgm%l)rX@#iAyY#JPZr`jZhkR13#xV+4Pv0Z8d^EDD%>smKEREDNj zl<~_f*i~Z3gD$8I%FWBMmr=`h9&E<6x=`0n=gu=XyRbbm=6Mc82Rg@7vI1kXrKRNwysc_blR>1n{O5kAKp@rZ#WOmd zE|+!{Y6*dev`&#^N-PbW!&8tuF+dh^;Z=%2D#at9%aaj_$U#kVVE{5!)F41|=pxrE z*y`yB4r_U{T+xgL02(t&R-o?F18bAjGV;ye8k2FMlP9ZHuUja5h@Pfa8|PDP0%-(P zJwQOg2s)iT*&k?qE6k8;3MzXV!?lyC{E|#e`<2D(*6Cwq1RT@HU-m+^)_D#;FZ-*4 zqX`160?gha4K#$%x0T=`FHQXE^Qa@|05tz;PEdB zNSskQ%gusNf8p}7f^OMIPS=U(mwLBA9$tTQ`GWL!gENG{*l!#FTG%2VKfkvWV|Bk_ z#-HoroYNiCYGZPD(gwpJn(2}p$Dy+-BK4Ij8|ZBVAjUAp5<{WX>07UKJMtKXH+DSR z*&2o)Bd}FJQE21f{4*lC*pBPfUy89?+l<3`^u8D`n%=1k3U`qiDq^KwdR!E9xb?vH z4&4-&iM>P)+4+Qb@M@@(AaE2(R3j#sAvbB4dS|QbP%S@fiK+i4!X&oy;{cWB}t^bUzvsWT^hIH+|w0m9X57ZVgATU1mcR6!+FF3iPQzRO>A8 zFZCKMe;kgm^wrSL)AzIbiCcI}$H{h6Z#P3+wcZ2g z``Aah?|bTdMMz}2*n~Ck>8uW-`|H=8DB55YKYboGyq9e5TmOM`HRgv9p!mpv!rXF= zm~2*a1oxa7XS|(4d_8}F=(lR$w`nrfUjPv)gfSs8<@ZO`0}|z!=qcgh)n#Ox8l|B@ zHh+^ZIpgz>c@W%VGZK|Mepr9%+UmZO9TJs5v+bzE>^$-*LQQcHZBh~dVxpHxn}1oP zj3eKTTim*#x`ZscJ!&UzR(`6K(V76N{gt&JiVFdSxn%$$AdiQ37W)M!{&C&jTG7|R zp=;;AxVMNLI}9p22cQo1Wuk}88NoIMWWhUtjkxRlXX=pShib^|VUgCxq0pr|wYImz zsmNNnK1Rk8ed7(!UsAYYFXy;8YV%E|$3EG}0`_yuJm9FwO%7i%{0_58>>czkVH}Y95-Oqqi{2 zc!2d+XV+lyIN%;t;3Y4@<34O!XE8WVG2Oc6`51QmW>$kcq%ubB7w(E6sG$=_s=`W? z$nJYFW{O~}JoP#x&4V0gErxmwoIQy>Nwh%KNqSQ=^sG1FL5pxG2~Dva3{DhZ4=(oT&3#zFVB4b_mJ*R6W<;qra%c@ik8q9Lml2) zOV@SfF>d@TA?zc^#p@>a=FsInoKW+O%`gIQcG{5ZY90V(z&1I-PFXr_=GI&bS2~U3 zwRtlF1=EV$4;E*E<*uHtX2mucHab3D#yVQmwwZU_!4+f9BNpw!$Y^^G9<*{ko`Xj* zU<=a05`vk&p5CIqq5!%~Pf)OpeK>Ox+#>H66}P#{^1qHL z0L)yrJU_MT^#EvQK{EKuo3TcY*K$HCTHTMaIu4e&mMv3G4!wTlYBLB4-U zR^KsXvknPfmymI|K4p*cMlSE+{`T7h+5P%I0V8Z}>BSW+x^@rqrZ6Vgw`b?!{a<^R z&iq%<-&a6stLXv}UM3*&hiStiGfI!K4}ZJ-Pv-WYM_X>qA6^qA^M=o z%_?Z$_BGL_p}{rgiVAT=KMI>o3=QLq(CcjJ;w1hsndtVJlDdC%rn3epVOBrK6FgbQ z1GLlMUd(z~H`SP3r;koSF3e4)RKX?wD|@t_Kw zc^bLAJvWBaVzm8q0m#I}tuR;l{owtQ(q(ey>J>%r`!T|QF$A5x@^ZK}*~j$Y^- zj*=4IUJJQU2S15C=9Vz{p&K>@yAgx1S!|d~XBnH#^?Ft9u=)HD+%Z(7IW@9iir?F4 zOeKOAr#3gES)w}6K|YczTD$kyClKpdzBH1^d*7~_U#t%tz~?1)7zxqIzW550>N2A^ zgFaStqqr-+A9fjR+Ifj-C(1gPl`l-W+19HRj(oEczg~?y$#_UuBct8%Ug_k^Jix_{ zJzxK^&iK9&sS}<-7luxp#%!t~kO4pPIMDyt+_fJtlZB~>&U*5lrxy7$rSP3ouG)Bh zQj9&Yj?yjq`P+k;@#IxHJv5D2aP`mF4rV=bIT9ab`xeXkEdzj4I+9E!f1c?}Zhiga zC8p@+(qG>NFtXx0kd~F$8IR4$AFm|C$NR~Q?*2$6vm^fsaFG_(|MC=h%#ZAaYMR)6 z_X-03{b*I$oImHR@E8B=xx4(i*0JNU%PFD^N5jNXJlQhmK6Y1N zms^W!>7v%sZ|w_#dBVy{M6b9)i%+glY*2 z=|j`B%IZR*xVAJOv^YxEnRe1nZ6&NBx&^9dSSnTDGY4FuCu9U1TTDJOeAQ-N8&ZBY zoH?Dc@ZVtd)^0mT`Yy6Lbjglz}v}gX!6|Ss9toURO$r zL2y-CAVvtJr7~e9bUH7>WgH955*Oro6u#S*B*d)=Dq%Cj{VCtyWAE zgB}DD$)FYU$$XJWR2cT&UtYZk6k^5iB2ruLYjj#GKHn{7oMkh8neDjbzDJ_)^+GFm zYf_&uQG^gdU%l|I5x{2i7%~-&Z7haCp}=5Ns0%C!y57_=LxGX)<|SLa=F6l@Jn-i?IM~2CA1O%wjtrE;T?A)E%?=HLBA$ zuMt6RBP)6{uf`Q7Lmtr>y>$ViP4j0(c+A_WAs19OKg^1y^w$=?fI)a=ARKq(!>{cFxf8~XTifoA2e7BwP8(`zZl;K; z^c+7a%r|ryu}gpd%iI*9q)6bOZSe;Egc*L5dbdVz2=r7M0ODwp93WWHSOcI-t0^SP z+~de{FW*N&k)`r^?MCQj8W+YBO}ZeaMLH$gGeDR*nAdW>|B(J%t1H{=g-A1id(+V> z^d~-zdY3t`apI^qVs}=GZ{@1pQkXp6JF?_N`pJ z^IYfre!GN|S1zq&33^AOrvUbyg@#@J{uWDipZ}m}IdPi?#+ju43ESUrt_r2oam06O z$w8Y&mIn09bP5tP725`GcQ!UdILzyq-w`YQn5tA*I!n84R?7Ydxv41tkdYquwR0|% zCKO{F8;;=WK18)Za6qqZHca*L3h_HW6r#O#rMXqSH&l&k2pFG6YJsD1`9N#Jfnm`! zq>4<&y_wV5W?;a*$Fu}euTTucIk2Zt=Q^Qk%%#MolN@(Pod{7^C9K4Chq6paZYvnL z6u^?i?Xlun;p%@uOuE4LXX6wg&j!@2wW23h;6JVcujvDNmE`0Pg9YUNMaM(x4nmV7 zjxD9aBNb6jf!Q+~^5Uyo+*4UAq=ZObyr$YIjFovq8IDyhEd&)xHw(Hb@@7Zkw16BT8-TqKgT1bsc>$u z6dU3%GC#Oly;1Iji8!$`qQ-da)uW^!mhd{;3$1qd<)%gJ!@3)oQL`m_$gK7t^g1;| zW4Xj*M~tzMaaegVCQ0b@X)JnYyW&_}uo}v4Za6?og6@PTq%3M}ntO~hIJ;>GIZV7l z6AY`8=!Tu<|E;@oeQV;t;_%F5l1wH6CLw_Y10*D1fq)q|SSt|2Q=c0^NiQ3)c3gB_5OS(brzh^eMB|O!voJ?f4EgKYd zI+rBmLoh{P0Z;jxe~&!L5hsFkC)7|@&SD1C?>hV6E&KmG=SlO-njzZov7B1U#O#Zv zG_fqO76tukgzfcd`vl?{Q|*FF)x^5sm7?;}3KMHba_|;zxhOrNQ2&v+lv+(Ck*J(P zQ%HKq7E6pU<-)~sZs>gvS2B?Oux^x5z*Gj5mN%I=Nn~+LQY2HDjETs~1%QVm1GkUEk}hf{ZYw`d9woWW~p+27&e;KzP!u|nbQNa^ATw(@*P`85K;idUZr&v z?(OzsL@bVOgVhkctXX((Z=SU}%+2j^w-GsDAbLV`LcaR)E?mXUPHa0_Z3VKA9}wgY zoLkk*m*=b14vH@tKT_08nLNnGVzhwV8?dB<{x>pRJR{Ipz4}nUcIwEr^^Az-(e7@g z6pv{*A^`~&8HiY+X?_L(cscS|Bd>am_f~v8owxmQ;Bx8A)@+$vK1?F{F#?w9J|Rqy zk3=PdkOJ3jfMWP5xAwz|4GTB%J{ntfIPxNQ+Tgi&cO%T+d9llzDN@S~q+moY*WTi8 z_27zaPBl&JF5y@08!KKT3icMd0tN14IO=UHX{WWXoTx*&kJq|0o7EbXX$f?x2~=*7 zdrCZZHB1e~l5C#Y^=us!s*+tjINb4jeJll0LvmUXAtxopxs2d(WUo-RD67YJ+4JL1 z*XiH>#4$it=o}EdP=nRef;)9VLAcDl2^z|XJK?B0HKK*QYV8A3zWP!k>9+%8kW#Ot zNQ5^*QGOFE>-OUWu4A^7B^f+r#FR@|Ont}P>u1JWp@dz~GG7R-YP$QP1+DsW?S`ZK z`2II7sYSYP1Yx=pIr+aF=RajrUE%w6Fib)h5AT5|7&-vlgR zJLPZl@UEW@JkC(FIcm=ZB5$hVF;4+1KmOu}W|x>EA^F zbo97kh8Zndp9=lbP5)38P|+g@!Y>pPpw|K0TX})ad4q=C18FG@#aMa@&Hu3WqA=vz zlb`b_6>4M2Vh+2J`SaoB!^Vb{7(ubN7Fz+Y!5v5@K38SXcw>$JCHRfqddEyR7i zRSq29qW_|Kb|yK+)%Zu*mPsLKE&Tn|wwh*Ej+nQ{Egy{V zil>p|J}~*|e2V`v&G+kl$Arm|?RVmg(Dz%;eBY^!(zt_%S(JA;fID2NB_=2L9)yW8 zR40Mpm}V$p3_aV>MSY!eR zG<`q%D%dL9AdggWiRTiBvg(UH09YYdCOd#&?*kxe3o3Lg2p?Mrcf}RsgYIiBa4A0} zHo~c4oYh^C@~>{&lfBXTqa`LPD>HNqA#ne<&a zI9ee(Q~!>c-YaVyx}?}|v0qyE%Ttu>%I0{>p@h{Li1AIX@bnm(nFTh6<>%HZ-y^5R zf9S(=a)M%{W?El36Vm~8(-Jdp|BLsB)gXO4h5Tmud5`a11ZMi1GuhLJ6#cHzZa4VF z`2Pm|@6@MlOg=R+lk<|hQ%%n(tL^Ay^UU$*zqkMEO2g(Qf4z0rYmS-S7=f}^lJsRC zp>P?zxl$<#D&+Wtqz77TRujsqWDEI%fUes!qparw>Q^W zrb28C#$tzHl@>IV0P#8i>*9 zRucfvch1Ty#-Bi&cX3S35BM-Q$pkcv$0*ICY`h@`9q%E+UyT=W!won(v_$2@V%{iPh;eeOcR89CQ1# zW8HmcE(`*1HU_v#IFDZT#W@-dezU&r15Ro|M{ zM@ZK;DRDv`b=U|?G!;nt1toxkq0JaBSW<9!`)8&K;91Q{?X@hnUv0^RQn}jS&MiS#K}7jXqhZ}oTN<^Vb%`*NX!5=R z957YGcZ_~LlJ!`G?D8$Ivr}iG;JK0gV9s*K()pFBeglmDd9`v_m&(vRe*#shh@Rx4 zB@K@bfQ0XpV1N9_`t1o!kiJ-WP7Z~so?gCmA+(tOxAV1EZFErOnhvBc)x!mIhE8LC zEt1p!F52w7oXO7T{}U~b?g1AUi5@U@SO8({q?(S0B{T>O#&@nUgWg&t&f&^841w);BQFsgJw zzRyTIx5;g*>{gKSdUn%x-P4#zuO72nZLR~cdUvRSx3<3%N0lZ;5lK=n! diff --git a/public/javascripts/application.js b/public/javascripts/application.js index dbb7c4e..9107540 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -12,17 +12,17 @@ $(document).ready(function(){ $("#full_text_search_form") .bind('ajax:loading', function() { - //$('#loading').fadeIn(); - $("#notas").hide(); + $("#in_comments").hide(); - $("#notas").block(); + $("#notas").block({ fadeIn: 350, + fadeOut: 350,showOverlay: false,message: $('div#loading') }); }) //.bind('ajax:success', function(data, status, xhr) {alert("success!");}) //.bind('ajax:failure', function(xhr, status, error) {alert("failure!");}) .bind('ajax:complete', function() { - $("#notas").unblock();; - $("#notas").fadeIn('slow'); + $("#notas").unblock(); + $("#in_comments").fadeIn('slow'); }); diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index b2e5b91..99f8db1 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -369,20 +369,3 @@ body { padding: 10px; border: 1px solid #222222; } -div.blockMsg { - width: 40%; - top: 30%; - left: 30%; - text-align: center; - background-color: #fa0; - border: 1px solid #ddd; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); - -moz-opacity:.70; - opacity:.70; - padding: 15px; - color: #fff; -} - diff --git a/public/stylesheets/kitchen.css b/public/stylesheets/kitchen.css index d4ade2c..92199a7 100644 --- a/public/stylesheets/kitchen.css +++ b/public/stylesheets/kitchen.css @@ -236,3 +236,35 @@ body { #help_area .help_wrap { padding: 10px; border: solid 1px #666666; } + +/*Span Cargando Datos*/ +img#loading{ + float: left; + padding-left:25px; + bottom:10px; + } + +#loading_title{ + bottom:15px; + padding-left:10px; + font-size:50px; + float: left; +} + + +div#content div.blockMsg { + border: none ; + /*padding: 5px ;*/ + top:245px !important ; + opacity: .6; + width: 60% !important; + text-align: center !important ; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); + -moz-opacity:.60; + color: #000 !important ; + background-color: #cbe73f !important; +} + From 7c86ab114116c1fb2bbaf4fb841ada2e9a01049d Mon Sep 17 00:00:00 2001 From: Alejandro Valle Date: Thu, 13 Jan 2011 12:14:32 +0000 Subject: [PATCH 04/14] end --- app/views/notas/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/notas/index.html.haml b/app/views/notas/index.html.haml index 554a3eb..95c713d 100644 --- a/app/views/notas/index.html.haml +++ b/app/views/notas/index.html.haml @@ -2,7 +2,7 @@ #notas = render :partial => @notas #in_comments - %h1 + #loading = image_tag('loading.gif',:id =>"loading") %span#loading_title Buscando Datos... From 2ec87ccf058e78b5259fd581df3aa7cbc65a16ef Mon Sep 17 00:00:00 2001 From: jorgemoreno Date: Thu, 13 Jan 2011 12:23:31 -0300 Subject: [PATCH 05/14] new stylesheet show note page --- .gitignore | 6 +- Gemfile.lock | 1 - app/models/nota.rb | 2 +- app/views/comments/_comment.html.haml | 14 +- app/views/comments/_form.html.haml | 11 +- app/views/notas/_form.html.haml | 14 +- app/views/notas/_nota.html.haml | 2 +- app/views/notas/edit.html.haml | 6 - app/views/notas/new.html.haml | 1 - app/views/notas/show.html.haml | 111 +++++++-------- app/views/shared/_comments_count.html.haml | 5 +- app/views/shared/_votes.html.haml | 11 +- config/development.sphinx.conf | 42 ------ db/sphinx/development/nota_core.spa | Bin 520 -> 0 bytes db/sphinx/development/nota_core.spd | Bin 570 -> 0 bytes db/sphinx/development/nota_core.sph | Bin 398 -> 0 bytes db/sphinx/development/nota_core.spi | Bin 455 -> 0 bytes db/sphinx/development/nota_core.spp | Bin 570 -> 0 bytes log/searchd.development.pid | 1 - public/stylesheets/highlight.css | 2 +- public/stylesheets/kitchen.css | 130 ++++++++++++++++-- public/stylesheets/sass/highlight.sass | 2 +- public/stylesheets/sass/kitchen.sass | 152 ++++++++++++++++++--- 23 files changed, 342 insertions(+), 171 deletions(-) delete mode 100644 config/development.sphinx.conf delete mode 100644 db/sphinx/development/nota_core.spa delete mode 100644 db/sphinx/development/nota_core.spd delete mode 100644 db/sphinx/development/nota_core.sph delete mode 100644 db/sphinx/development/nota_core.spi delete mode 100644 db/sphinx/development/nota_core.spp delete mode 100644 log/searchd.development.pid diff --git a/.gitignore b/.gitignore index dd3bd61..c1ae3c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,8 @@ .bundle db/*.sqlite3 db/*.sp* -db/sphinx/* -log/* +db/sphinx +log tmp/**/* config/database.yml - +config/*.sphinx.conf diff --git a/Gemfile.lock b/Gemfile.lock index db35976..a3cf787 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -141,4 +141,3 @@ DEPENDENCIES will_paginate (= 3.0.pre2) wirble yaml_db - diff --git a/app/models/nota.rb b/app/models/nota.rb index 6bc70ad..1e68029 100644 --- a/app/models/nota.rb +++ b/app/models/nota.rb @@ -44,7 +44,7 @@ def self.pagination(page) end def was_voted_by(user) - self.votantes.where(:id => user.id).count < 1 + self.votantes.where(:id => user).count < 1 end def add_view diff --git a/app/views/comments/_comment.html.haml b/app/views/comments/_comment.html.haml index c6ceafc..18b105b 100644 --- a/app/views/comments/_comment.html.haml +++ b/app/views/comments/_comment.html.haml @@ -1,12 +1,12 @@ .comment - .author.right - %span= distance_of_time_in_words(comment.created_at, Time.now) - ago - | - %span== created by #{comment.user.email} - .body + .comment_owner + %span= comment.created_at.strftime('%d de %B, %Y') + == - + %span + %b== by #{comment.user.name} + .comment_body %p - if current_user == comment.nota.user - = on_the_spot_edit comment,:comment, :type => :textarea, :rows => 6, :columns => 82 + = on_the_spot_edit comment,:comment, :type => :textarea, :rows => 6, :columns => 68 - else = comment.comment diff --git a/app/views/comments/_form.html.haml b/app/views/comments/_form.html.haml index c9ee628..1261cf5 100644 --- a/app/views/comments/_form.html.haml +++ b/app/views/comments/_form.html.haml @@ -1,10 +1,11 @@ = form_for([@nota,Comment.new], :remote => true) do |f| = f.hidden_field :nota_id, :value => @nota.id - = f.text_area :comment, :cols => 80, :rows => 5, :class => "required", :minlength => "3" - %p - = f.submit - == or #{link_to_function "Cancel","newComment()"} - + = f.text_area :comment, :cols => 70, :rows => 5, :class => "required", :minlength => "3" + #links_comments + %span#link_cancel== #{link_to_function "Cancel","newComment()"} + %span= f.submit "Save", :id => "link_create" + + .clear :javascript $(document).ready(function(){ $("#new_comment").validate(); diff --git a/app/views/notas/_form.html.haml b/app/views/notas/_form.html.haml index 0c362a4..6797925 100644 --- a/app/views/notas/_form.html.haml +++ b/app/views/notas/_form.html.haml @@ -6,23 +6,25 @@ Aca van los lenguajes disponibles? #nota_form #new_note_title - New Note + - if @nota.new_record? + New Note + - else + Edit Note = form_for @nota do |f| %p %span= f.label :title = f.text_field :title, :size => 72 %p %span= f.label :tag_list - - = text_field_tag :tag_list,nil , :id => "all_tags" + = text_field_tag :tag_list,nil , :id => "all_tags", :size => 72 %p %span= f.label :body, "Note" - = f.text_area :body, :cols => 72, :rows => 25 + = f.text_area :body, :cols => 71, :rows => 25 =# f.cktext_area :body, :width => '90%', :height => '250px', :class => 'inputs' #submit_form_buttons = link_to 'Cancel',notas_path,:id => "link_cancel" - = submit_tag - + = f.submit 'Save Note', :id => "submit_button" + .clear \ - - :javascript $(function() { function split( val ) { diff --git a/app/views/notas/_nota.html.haml b/app/views/notas/_nota.html.haml index 177a3e7..6b85dd7 100644 --- a/app/views/notas/_nota.html.haml +++ b/app/views/notas/_nota.html.haml @@ -13,7 +13,7 @@ %h2= link_to nota.title.capitalize, nota_path(nota), :class => 'info', :title => "#{nota.votes.size} votes / #{nota.comments.size} comments / #{nota.views} views" //.triangle_left_title %p.body - ~ truncate(word_wrap(nota.body,:line_width => 30), :length => 100).html_safe + ~ truncate(word_wrap(collapse_code(nota.body),:line_width => 30), :length => 100).html_safe %p.tags - unless nota.tags.empty? Tags: diff --git a/app/views/notas/index.html.haml b/app/views/notas/index.html.haml index 95c713d..f7218b3 100644 --- a/app/views/notas/index.html.haml +++ b/app/views/notas/index.html.haml @@ -1,6 +1,10 @@ -- title "Tips & Notes" +- title "Globant Kitchen" #notas - = render :partial => @notas + - for nota in @notas + = render :partial => 'nota', :locals =>{:nota => nota} + .clear + = will_paginate @notas, :prev_label => "back", :next_label => "next" + #in_comments #loading diff --git a/app/views/notas/show.html.haml b/app/views/notas/show.html.haml index 37e4925..e2d3796 100644 --- a/app/views/notas/show.html.haml +++ b/app/views/notas/show.html.haml @@ -1,46 +1,46 @@ - title "#{@nota.title}" #notas -#nota_show - #top_header - #header_note - #note_info - %span#votes.info{:title => "Vote Me!"} - = render :partial => "shared/votes" - == / - %span#views - = pluralize(@nota.views, 'view') - == / - %span#comment_count - = render 'shared/comments_count' - = distance_of_time_in_words(@nota.created_at, Time.now) - ago + #nota_show + #top_header + #header_note + #note_info + %span#votes.info{:title => "Vote Me!"} + = render :partial => "shared/votes" + == / + %span#views + = pluralize(@nota.views, 'view') + == / + %span#comment_count + = render 'shared/comments_count' + = distance_of_time_in_words(@nota.created_at, Time.now) + ago + %br + Created by + %span#note_owner + = @nota.user.name %br - Created by - %span#note_owner - = @nota.user.name - %br - #note_title - #title - -if @nota.user == current_user - = on_the_spot_edit @nota, :title - - else - = @nota.title - #body_note - ~ textilize @nota.body - - unless @nota.tags.empty? - #tags - Tags: - - @nota.tags.each do |tag| - %span.tag - = link_to tag,search_by_tag_path(tag.name) - - #links_note - - if current_user == @nota.user - %span#link_delete= link_to "Delete", @nota, :confirm => "Are you sure?", :method => :delete - %span#link_edit= link_to "Edit", edit_nota_path(@nota) - .clear -#comments_note - #add_comment + #note_title + #title + -if @nota.user == current_user + = on_the_spot_edit @nota, :title + - else + = @nota.title + #body_note + ~ textilize @nota.body + - unless @nota.tags.empty? + #tags + Tags: + - @nota.tags.each do |tag| + %span.tag + = link_to tag,search_by_tag_path(tag.name) + + #links_note + - if current_user == @nota.user + %span#link_delete= link_to "Delete", @nota, :confirm => "Are you sure?", :method => :delete + %span#link_edit= link_to "Edit", edit_nota_path(@nota) + .clear + #comments_note + #add_comment %script function newComment(){ $('#comment_form').slideToggle(); @@ -49,7 +49,13 @@ - if current_user %span = link_to_function "Add new Comment","newComment()" - #comment_form{:style => "display:none;"} - = render 'comments/form' - .list_comments - = render :partial => @nota.comments + #comment_form{:style => "display:none;"} + = render 'comments/form' + .list_comments + = render :partial => @nota.comments + +#in_comments +#loading{:style => "display:none;"} + = image_tag('loading.gif',:id =>"loading") + %span#loading_title Buscando Datos... + diff --git a/public/stylesheets/kitchen.css b/public/stylesheets/kitchen.css index df28151..dfb6758 100644 --- a/public/stylesheets/kitchen.css +++ b/public/stylesheets/kitchen.css @@ -1,6 +1,8 @@ body { font-family: Ubuntu, Verdana, Helvetica; font-size: 14px; } + body img { + border: none; } .clear { clear: both; } @@ -36,10 +38,11 @@ body { margin-bottom: 8px; } #container { - background-image: -webkit-gradient(linear, left bottom, right bottom, color-stop(0.37, #e6e6e6), color-stop(0.69, #bdbdbd)); } + background: -webkit-gradient(linear, left bottom, right bottom, color-stop(0.37, #e6e6e6), color-stop(0.69, #bdbdbd)); + background: -moz-linear-gradient(left bottom, #e6e6e6 37%, #bdbdbd 59%); } #container #side_panel { background: white; - width: 19%; + width: 20%; float: left; padding: 10px; margin-top: 10px; @@ -141,15 +144,15 @@ body { font-size: 1.6em; } #container #content { float: right; - width: 78%; } + width: 77%; } #container #content .note { margin-top: 10px; float: left; background: url(http://github.com/images/head_note.png) top no-repeat; } #container #content .note .note_complete { color: white; - margin: 18px 10px; - width: 286px; + margin: 18px 5px; + width: 287px; padding: 7px; background: #0c0c0c; border-bottom: 3px solid #cbe73f; @@ -191,7 +194,10 @@ body { font-size: 15px; font-weight: bold; } -#pagination { +.error { + color: red; } + +.pagination { width: 96%; text-align: right; border-top: 3px solid #666666; @@ -319,7 +325,7 @@ body { #comments_note #links_comments { float: right; margin-right: 8px; - margin-top: -7px; + margin-top: -5px; font-size: 15px; font-weight: bold; } #comments_note #links_comments a { @@ -330,7 +336,7 @@ body { border: solid 2px #14addb; color: white; margin: 0; - padding: 2px 10px; + padding: 3px 15px 3px 15px; text-decoration: none; font-family: Ubuntu, Verdana, Helvetica; font-size: 15px; @@ -339,7 +345,7 @@ body { background: #34c6f7; border: solid 2px #34c6f7; margin: 0 -5px 0 0; - padding: 2px 10px; + padding: 4px 15px 4px 15px; text-decoration: none; } #comments_note #links_comments .new_comment textarea { border: solid 1px #666666; } diff --git a/public/stylesheets/sass/kitchen.sass b/public/stylesheets/sass/kitchen.sass index 2904a66..16181ef 100644 --- a/public/stylesheets/sass/kitchen.sass +++ b/public/stylesheets/sass/kitchen.sass @@ -3,6 +3,8 @@ body :font :family Ubuntu,Verdana, Helvetica :size 14px + img + :border none .clear :clear both .flash @@ -36,10 +38,11 @@ body :color #fff :margin-right 25px #container - :background-image -webkit-gradient(linear,left bottom,right bottom,color-stop(0.37, rgb(230,230,230)),color-stop(0.69, rgb(189,189,189))) + :background -webkit-gradient(linear,left bottom,right bottom,color-stop(0.37, rgb(230,230,230)),color-stop(0.69, rgb(189,189,189))) + :background -moz-linear-gradient(left bottom,rgb(230,230,230) 37%,rgb(189,189,189) 59%) #side_panel :background #fff - :width 19% + :width 20% :float left :padding 10px :margin-top 10px @@ -152,15 +155,15 @@ body :font-size 1.6em #content :float right - :width 78% + :width 77% .note :margin-top 10px :float left :background url(http://github.com/images/head_note.png) top no-repeat .note_complete :color #fff - :margin 18px 10px - :width 286px + :margin 18px 5px + :width 287px :padding 7px :background #0c0c0c :border-bottom 3px solid $globant_color @@ -207,9 +210,9 @@ body :font :size 15px :weight bold - - -#pagination +.error + :color red +.pagination :width 96% :text-align right :border-top 3px solid #666666 @@ -268,7 +271,6 @@ body :padding 10px :color #fff #top_header - .triangle_left_title :border-color transparent transparent #B8B8B8 transparent :border-style solid :border-width 12px @@ -344,7 +346,7 @@ body #links_comments :float right :margin-right 8px - :margin-top -7px + :margin-top -5px :font :size 15px :weight bold @@ -357,7 +359,7 @@ body :border solid 2px #14ADDB :color #fff :margin 0 - :padding 2px 10px + :padding 3px 15px 3px 15px :text-decoration none :font :family Ubuntu,Verdana, Helvetica @@ -367,7 +369,7 @@ body :background #34C6F7 :border solid 2px #34C6F7 :margin 0 -5px 0 0 - :padding 2px 10px + :padding 4px 15px 4px 15px :text-decoration none .new_comment textarea From d06398ae0ecbfeac2456c7618dc0bceb5c64396b Mon Sep 17 00:00:00 2001 From: Alejandro Valle Date: Fri, 14 Jan 2011 15:28:16 +0000 Subject: [PATCH 09/14] tips colors --- app/views/notas/_nota.html.haml | 7 --- public/stylesheets/kitchen.css | 3 ++ public/stylesheets/sass/kitchen.sass | 79 ++++++++++++++-------------- public/stylesheets/sass/tipsy.sass | 5 +- public/stylesheets/tipsy.css | 4 +- 5 files changed, 48 insertions(+), 50 deletions(-) diff --git a/app/views/notas/_nota.html.haml b/app/views/notas/_nota.html.haml index 6b85dd7..d0ede6b 100644 --- a/app/views/notas/_nota.html.haml +++ b/app/views/notas/_nota.html.haml @@ -23,11 +23,4 @@ - else untagged .clear -%script - //$(function() { - //$( "#sortable" ).sortable({placeholder: "ui-state-highlight"}); - //$( "#sortable" ).disableSelection(); - //}); - $('.info').tipsy({gravity: 's'}); - //$('.flash').dialog({ autoOpen: true, height: 100}); diff --git a/public/stylesheets/kitchen.css b/public/stylesheets/kitchen.css index dfb6758..4abe4af 100644 --- a/public/stylesheets/kitchen.css +++ b/public/stylesheets/kitchen.css @@ -1,4 +1,7 @@ body { + margin: 0; + border: 0; + padding: 0; font-family: Ubuntu, Verdana, Helvetica; font-size: 14px; } body img { diff --git a/public/stylesheets/sass/kitchen.sass b/public/stylesheets/sass/kitchen.sass index 16181ef..c231f21 100644 --- a/public/stylesheets/sass/kitchen.sass +++ b/public/stylesheets/sass/kitchen.sass @@ -1,5 +1,8 @@ $globant_color: #CBE73F body + :margin 0 + :border 0 + :padding 0 :font :family Ubuntu,Verdana, Helvetica :size 14px @@ -9,7 +12,7 @@ body :clear both .flash :background $globant_color - :padding 5px + :padding 5px :color #0c0c0c :border 1px solid #8B9E2E :text-align center @@ -29,10 +32,10 @@ body :padding-top 55px :margin-left 15px //:padding-right 150px - #right_side + #right_side #search_title :font-size 12px - :margin-bottom 8px + :margin-bottom 8px :padding-top 50px :float right :color #fff @@ -59,19 +62,19 @@ body :size 20px :weight bold :color #0c0c0c - :padding 10px 0 + :padding 10px 0 :border-bottom solid 3px $globant_color :color #666666 input[type=submit] - :float right + :float right :color #fff :margin-right -5px :padding 3px 18px :font :size 15px :weight bold - :border solid $globant_color 1px - :background $globant_color + :border solid $globant_color 1px + :background $globant_color #user_info :color #666666 #user_header @@ -81,7 +84,7 @@ body :color $globant_color :padding 5px :border-bottom solid 3px $globant_color - #user_name + #user_name :border-top solid #cecece 2px :border-bottom solid #cecece 2px :border-right solid #cecece 2px @@ -97,7 +100,7 @@ body :color #34C6F7 .logout_link :padding 4px - :float right + :float right :text-align right :text-decoration none :color #fff @@ -140,25 +143,25 @@ body :border solid 2px #cecece :padding 8px :width 90% - :margin auto + :margin auto a :font-weight bold :color #222 :text-decoration none .css1 :font-size 1em - .css2 + .css2 :font-size 1.2em - .css3 + .css3 :font-size 1.4em - .css4 + .css4 :font-size 1.6em - #content + #content :float right :width 77% .note :margin-top 10px - :float left + :float left :background url(http://github.com/images/head_note.png) top no-repeat .note_complete :color #fff @@ -190,7 +193,7 @@ body :margin-left 10px h2 :padding 5px - :width 100% + :width 100% :background $globant_color :margin-left -7px :border-radius 0 3px 3px 0 @@ -218,8 +221,8 @@ body :border-top 3px solid #666666 :float right :margin 5px 20px 5px 0 - :padding 5px - + :padding 5px + #nota_form :margin 10px :border solid 1px #666666 @@ -234,11 +237,11 @@ body #submit_form_buttons :font :size 15px - :weight bold + :weight bold :float right :width 30% :margin-right 10px - #link_cancel + #link_cancel :margin 0 -5px 0 0 :background #34C6F7 :color #fff @@ -271,7 +274,7 @@ body :padding 10px :color #fff #top_header - :border-color transparent transparent #B8B8B8 transparent + :border-color transparent transparent #B8B8B8 transparent :border-style solid :border-width 12px :height 0px @@ -289,7 +292,7 @@ body :weight bold #note_info :float right - #note_owner + #note_owner :font :size 12px :weight bold @@ -303,7 +306,7 @@ body :margin-left 10px h2 :padding 5px - :width 100% + :width 100% :background $globant_color :margin-left -11px #body_note @@ -322,14 +325,14 @@ body a :color #fff :text-decoration none - #link_delete - :margin 0 -5px 0 0 + #link_delete + :margin 0 -5px 0 0 :background #34C6F7 :padding 4px 15px 4px 15px #link_edit :background #14ADDB :border solid 2px #14ADDB - :margin 0 0 0 0 + :margin 0 0 0 0 :padding 2px 10px :text-decoration none #comments_note @@ -342,7 +345,7 @@ body :text-decoration none :font :size 15 px - :weight bold + :weight bold #links_comments :float right :margin-right 8px @@ -353,8 +356,8 @@ body a :color #fff :text-decoration none - - #link_create + + #link_create :background #14ADDB :border solid 2px #14ADDB :color #fff @@ -368,12 +371,12 @@ body #link_cancel :background #34C6F7 :border solid 2px #34C6F7 - :margin 0 -5px 0 0 + :margin 0 -5px 0 0 :padding 4px 15px 4px 15px :text-decoration none .new_comment textarea - :border solid 1px #666666 + :border solid 1px #666666 .list_comments .comment :padding 10px @@ -381,24 +384,24 @@ body :color #9C9798 :border-top 2px solid #666666 .comment_owner - :font + :font :size 12px .comment_body - + /*Span Cargando Datos*/ #loading img :float left - :padding 0 25px + :padding 0 25px :bottom 10px - #loading_title + #loading_title :bottom 15px :margin-left 10px :font-size 50px :float left -.blockMsg - :border none +.blockMsg + :border none :position absolute !important //:top 245px !important :opacity .75 @@ -412,5 +415,3 @@ body :color #000 !important :background-color $globant_color !important - - diff --git a/public/stylesheets/sass/tipsy.sass b/public/stylesheets/sass/tipsy.sass index 71e4695..a0a582e 100644 --- a/public/stylesheets/sass/tipsy.sass +++ b/public/stylesheets/sass/tipsy.sass @@ -8,8 +8,8 @@ .tipsy-inner padding: 10px - background-color: black - color: white + background-color: #DFEF95 + color: black font-weight: bold min-width: 50px max-width: 200px @@ -28,3 +28,4 @@ .tipsy-west background-position: left center + diff --git a/public/stylesheets/tipsy.css b/public/stylesheets/tipsy.css index 19a5d28..302f14e 100644 --- a/public/stylesheets/tipsy.css +++ b/public/stylesheets/tipsy.css @@ -8,8 +8,8 @@ .tipsy-inner { padding: 10px; - background-color: black; - color: white; + background-color: #dfef95; + color: black; font-weight: bold; min-width: 50px; max-width: 200px; From 5989b75048f03b1351d7cadba656a42060eb20a9 Mon Sep 17 00:00:00 2001 From: boolean Date: Mon, 17 Jan 2011 17:17:06 -0300 Subject: [PATCH 10/14] update gems --- Gemfile.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9be8bd6..cabef41 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -40,13 +40,13 @@ GEM activesupport (3.0.3) acts-as-taggable-on (2.0.6) archive-tar-minitar (0.5.2) - arel (2.0.6) + arel (2.0.7) awesome_print (0.3.1) - bcrypt-ruby (2.1.3) + bcrypt-ruby (2.1.4) builder (2.1.2) ckeditor (3.5.0) mime-types (>= 1.16) - coderay (0.9.6) + coderay (0.9.7) columnize (0.3.2) devise (1.1.2) bcrypt-ruby (~> 2.1.2) @@ -69,7 +69,7 @@ GEM rake mysql2 (0.2.6) net-ldap (0.1.1) - nifty-generators (0.4.3) + nifty-generators (0.4.4) nokogiri (1.4.4) on_the_spot (0.0.6) json_pure (>= 1.4.6) @@ -93,7 +93,7 @@ GEM rake (>= 0.8.7) thor (~> 0.14.4) rake (0.8.7) - riddle (1.2.1) + riddle (1.2.2) ruby-debug-base19 (0.11.24) columnize (>= 0.3.1) linecache19 (>= 0.5.11) @@ -110,7 +110,7 @@ GEM thor (0.14.6) treetop (1.4.9) polyglot (>= 0.3.1) - tzinfo (0.3.23) + tzinfo (0.3.24) warden (0.10.7) rack (>= 1.0.0) webrat (0.7.3) From 97259c3f82bacbb27667a88cbba3cabef10991ca Mon Sep 17 00:00:00 2001 From: Jorge Moreno Date: Tue, 25 Jan 2011 10:19:28 -0300 Subject: [PATCH 11/14] probando cambios de estilo --- app/controllers/admin/users_controller.rb | 2 +- app/controllers/application_controller.rb | 8 ++- app/controllers/comments_controller.rb | 2 +- app/controllers/notas_controller.rb | 5 +- app/controllers/tags_controller.rb | 2 +- app/helpers/notas_helper.rb | 2 +- app/models/nota.rb | 2 +- app/views/comments/create.js.erb | 3 +- app/views/devise/sessions/_new.html.haml | 8 ++- app/views/layouts/application.html.haml | 29 +++++++-- app/views/notas/_form.html.haml | 52 ++++++++++++--- app/views/notas/_nota.html.haml | 13 ++-- app/views/notas/show.html.haml | 11 +++- app/views/shared/_comments_count.html.haml | 2 +- app/views/shared/_votes.html.haml | 4 +- app/views/tags/by_tag.html.haml | 5 +- config/routes.rb | 2 - db/schema.rb | 1 - public/images/loading.gif | Bin 40784 -> 1924 bytes public/stylesheets/kitchen.css | 67 +++++++++++++------ public/stylesheets/sass/kitchen.sass | 71 +++++++++++++++------ public/stylesheets/sass/tipsy.sass | 10 +-- public/stylesheets/tipsy.css | 6 +- 23 files changed, 220 insertions(+), 87 deletions(-) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index f1cbbd2..dbf3da7 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -21,7 +21,7 @@ def update def show end - + private def find_user diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c7a1e2..0c7daa5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,5 +1,5 @@ class ApplicationController < ActionController::Base - before_filter :tags + before_filter :tags, :relevant_notes rescue_from DeviseLdapAuthenticatable::LdapException do |exception| render :text => exception, :status => 500 @@ -11,7 +11,11 @@ class ApplicationController < ActionController::Base private - + def relevant_notes + @most_viewed = Nota.last(:order => :views) + @last_note = Nota.last + @most_voted = Nota.all.sort{|a,b| b.votes.size <=> a.votes.size}.first + end def tags @tags = Nota.tag_counts_on(:tags) end diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index e57fb80..d45f319 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -24,7 +24,7 @@ def create @nota = @comment.nota respond_to do |format| if @comment.save - flash[:notice] = "Successfully created comment." + @nota.comments.reload format.js else format.html {render :action => 'new'} diff --git a/app/controllers/notas_controller.rb b/app/controllers/notas_controller.rb index 80497c8..ea70809 100644 --- a/app/controllers/notas_controller.rb +++ b/app/controllers/notas_controller.rb @@ -10,7 +10,7 @@ class NotasController < ApplicationController def index @notas = Nota.pagination(params[:page]) end - + def search sleep(3) @notas = Nota.search(params[:search], :include => "comments") @@ -49,6 +49,9 @@ def edit end def update + tags = [] + params[:tag_list].split(',').each{|tag| tags << ActsAsTaggableOn::Tag.find_or_create_by_name(tag.strip)} + params[:nota][:tag_list] = tags if @nota.update_attributes(params[:nota]) flash[:notice] = "Successfully updated nota." redirect_to @nota diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb index 52bb24c..817a8e9 100644 --- a/app/controllers/tags_controller.rb +++ b/app/controllers/tags_controller.rb @@ -3,7 +3,7 @@ class TagsController < ApplicationController def by_tag if params[:tag] tag = params[:tag] - @notas = Nota.tagged_with(tag).paginate(:page => params[:page], :per_page => 12) + @notas = Nota.tagged_with(tag).paginate(:page => params[:page], :per_page => 6) end end diff --git a/app/helpers/notas_helper.rb b/app/helpers/notas_helper.rb index 97131b4..fa67986 100644 --- a/app/helpers/notas_helper.rb +++ b/app/helpers/notas_helper.rb @@ -1,5 +1,5 @@ module NotasHelper def collapse_code(text) - text.gsub(/(?:@@@((?:[^@]+(?:[@]{1,2}?)[^@]*)*|(?:[^@]*))@@@)/m, "
Code
") + text.gsub(/(?:@@@((?:[^@]+(?:[@]{1,2}?)[^@]*)*|(?:[^@]*))@@@)/m, "
[ Code ]
") end end diff --git a/app/models/nota.rb b/app/models/nota.rb index 1e68029..3e7c711 100644 --- a/app/models/nota.rb +++ b/app/models/nota.rb @@ -37,7 +37,7 @@ class Nota < ActiveRecord::Base validates :title, :body, :user_id, :presence => true - validates_length_of :title, :within => 3..20 + #validates_length_of :title, :within => 3..20 def self.pagination(page) all(:order => "created_at DESC").paginate(:page => page, :per_page => 6) diff --git a/app/views/comments/create.js.erb b/app/views/comments/create.js.erb index 0e37388..b80fdb4 100644 --- a/app/views/comments/create.js.erb +++ b/app/views/comments/create.js.erb @@ -1,7 +1,8 @@ $(".list_comments").append("<%= escape_javascript(render :partial => @comment) %>"); -$('#comment_count').html("<%= escape_javascript(render 'shared/comments_count')%> ") +$('.comment_count').html("<%= escape_javascript(render 'shared/comments_count')%> ") $('#comment_form').slideToggle('slow'); $('form.new_comment textarea').val("") $('#add_comment').fadeToggle(); + <% flash.discard %> diff --git a/app/views/devise/sessions/_new.html.haml b/app/views/devise/sessions/_new.html.haml index 9610be9..c145819 100644 --- a/app/views/devise/sessions/_new.html.haml +++ b/app/views/devise/sessions/_new.html.haml @@ -2,14 +2,18 @@ %p = f.label :email %br - = f.text_field :email, :size => 27 + = f.text_field :email, :size => 25, :class => "required email" %p = f.label :password %br - = f.password_field :password, :size => 27 + = f.password_field :password, :size => 25, :class => "required" - if devise_mapping.rememberable? = f.check_box :remember_me = f.label :remember_me #submit_login{:style => "float:right;margin-right: 5px"} = f.submit "Sign in" .clear +:javascript + $(document).ready(function(){ + $("#user_new").validate(); + }); \ No newline at end of file diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 86f66f9..4d6b418 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -46,25 +46,46 @@ %span.user_my_notes My Notes: = current_user.notas.size - - if current_user.has_role? :admin - %p= link_to 'admin', admin_path #user_links + - if current_user.has_role? :admin + %span{:style =>"float:left;margin:0 -10px"}= link_to 'admin', admin_path, :class => 'logout_link' = link_to "Log Out", destroy_user_session_path, :class => 'logout_link' .clear %p - #note_buttons + #note_buttons{} .all_notes = link_to "All Notes", root_url .new_note = link_to "New Note", new_nota_path %br + %p + #relevant_notes + #relevant_header + Relevant Notes + .title + = link_to @last_note.title, nota_path(@last_note), :class =>"info", :title => "#{@last_note.tag_list}" + %span.details + %small + == created #{distance_of_time_in_words(@last_note.created_at, Time.now)} ago + .clear + .title + = link_to @most_voted.title, nota_path(@most_voted), :class =>"info", :title => "#{@most_voted.tag_list}" + %span.details + %small== (#{ @most_voted.votes.size} votes) + .clear + .title + = link_to @most_viewed.title, nota_path(@most_viewed), :class =>"info", :title => "#{@most_viewed.tag_list}" + %span.details + %small== (#{ @most_viewed.views} views) + .clear %p #tag_panel #tag_header = link_to_function "Select Tags", "$('#tag_list').slideToggle('slow');" - #tag_list{:style => "display:none;"} + #tag_list - tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| = link_to tag.name, search_by_tag_path(tag.name), :class => "#{css_class} info", :title => "#{Nota.tagged_with(tag).size} notes" + #content - if flash[:notice] .flash diff --git a/app/views/notas/_form.html.haml b/app/views/notas/_form.html.haml index 43eb13a..6d37a2e 100644 --- a/app/views/notas/_form.html.haml +++ b/app/views/notas/_form.html.haml @@ -1,9 +1,37 @@ #help_area .help_wrap - Aca va la ayuda para crear una nota codigo - %br + %h2 + Que quiero anotar? + %p + Las notas sirven para compartir conocimiento, o como ayuda memoria en el trabajo + Puedo postear una solucion a algun problema que me haya encontrado en el proyecto, + o algo que algun compañero haya preguntado, algo interesante que me haya encontrado + en la red. + + %p + Tratamos que escriban la situacion por la cual empezaron a buscar y la solucion encontrada, + asi otro que se encuentre en la misma situacion, podra usar lo que otros hayan encontrado. Se + pueden comentar, para corregir, agradecer, proponer variantes, etc. + %p + Para citar codigo, por el momento un solo bloque de codigo por nota, tenemos que dejar una linea en blanco + antes y otra despues, y poner el codigo entre tres arrobas + %br + %blockquote + @@@ lang + %br + "CODIGO" + %br + @@@ + %br + Reemplazamos + %em lang + por el lenguaje que estamos utilizando + %br .help_wrap - Aca van los lenguajes disponibles? + %h2 + Lenguajes disponibles + Los lenguajes disponibles para que se vean coloreados, son: + %b Java, Javascript, Php, Ruby, Cpp #nota_form #new_note_title - if @nota.new_record? @@ -14,21 +42,21 @@ %p %span= f.label :title %br - = f.text_field :title, :size => 72 + = f.text_field :title, :size => 63, :class => "required", :minlength => "3" %p %span= f.label :tag_list %br - = text_field_tag :tag_list, @nota.tag_list.join(', ') , :id => "all_tags", :size => 72 + = text_field_tag :tag_list, @nota.tag_list.join(', ') , :id => "all_tags", :size => 63 %p - %span= f.label :body, "Note" - %br - = f.text_area :body, :cols => 71, :rows => 25 + %div= f.label :body, "Note" + = f.text_area :body, :cols => 81, :rows => 16, :class => "required", :minlength => "10" =# f.cktext_area :body, :width => '90%', :height => '250px', :class => 'inputs' #submit_form_buttons - = link_to 'Cancel',notas_path,:id => "link_cancel" - = f.submit 'Save Note', :id => "submit_button" + %span= link_to 'Cancel',notas_path,:id => "link_cancel" + %span= f.submit 'Save Note', :id => "submit_button" .clear + :javascript $(function() { function split( val ) { @@ -76,4 +104,8 @@ } }); }); +:javascript + $(document).ready(function(){ + $("#new_nota").validate(); + }); diff --git a/app/views/notas/_nota.html.haml b/app/views/notas/_nota.html.haml index 6b85dd7..d6bc1a7 100644 --- a/app/views/notas/_nota.html.haml +++ b/app/views/notas/_nota.html.haml @@ -7,13 +7,14 @@ == created by %span.note_owner == #{nota.user.name} - .title_note - .title_header - .title - %h2= link_to nota.title.capitalize, nota_path(nota), :class => 'info', :title => "#{nota.votes.size} votes / #{nota.comments.size} comments / #{nota.views} views" + .nota_height + .title_note + .title_header + .title + %h2= link_to nota.title.capitalize, nota_path(nota), :class => 'info', :title => "#{nota.votes.size} votes / #{nota.comments.size} comments / #{nota.views} views" //.triangle_left_title - %p.body - ~ truncate(word_wrap(collapse_code(nota.body),:line_width => 30), :length => 100).html_safe + .body + ~ truncate(word_wrap(collapse_code(nota.body),:line_width => 30), :length => 100).html_safe %p.tags - unless nota.tags.empty? Tags: diff --git a/app/views/notas/show.html.haml b/app/views/notas/show.html.haml index e2d3796..cb58359 100644 --- a/app/views/notas/show.html.haml +++ b/app/views/notas/show.html.haml @@ -10,7 +10,7 @@ %span#views = pluralize(@nota.views, 'view') == / - %span#comment_count + %span.comment_count = render 'shared/comments_count' = distance_of_time_in_words(@nota.created_at, Time.now) ago @@ -49,10 +49,17 @@ - if current_user %span = link_to_function "Add new Comment","newComment()" + %br + %small + This note has + %span.comment_count + = render "shared/comments_count" #comment_form{:style => "display:none;"} = render 'comments/form' .list_comments - = render :partial => @nota.comments + - for comment in @nota.comments.order("created_at DESC").last(5) + = render :partial => comment, :locals => {:comment => comment} + #in_comments #loading{:style => "display:none;"} diff --git a/app/views/shared/_comments_count.html.haml b/app/views/shared/_comments_count.html.haml index 8f0906f..2f0ffae 100644 --- a/app/views/shared/_comments_count.html.haml +++ b/app/views/shared/_comments_count.html.haml @@ -1,3 +1,3 @@ -%span.value +%span = pluralize(@nota.comments.size, 'comment') diff --git a/app/views/shared/_votes.html.haml b/app/views/shared/_votes.html.haml index 2e036a8..e7962c8 100644 --- a/app/views/shared/_votes.html.haml +++ b/app/views/shared/_votes.html.haml @@ -1,7 +1,7 @@ - unless @nota.was_voted_by(current_user) - %span + %span#vote_info = pluralize(@nota.votes.size, 'vote') - else - %span + %span#vote_link = link_to pluralize(@nota.votes.size, 'vote'), add_vote_nota_path(@nota), :remote => true, :method => "post" diff --git a/app/views/tags/by_tag.html.haml b/app/views/tags/by_tag.html.haml index 305f43c..d69bf63 100644 --- a/app/views/tags/by_tag.html.haml +++ b/app/views/tags/by_tag.html.haml @@ -1,5 +1,8 @@ - title "Related Notes" #index - = render :partial => @notas + - for nota in @notas + = render :partial => 'notas/nota', :locals =>{:nota => nota} + .clear + = will_paginate @notas, :prev_label => "back", :next_label => "next" diff --git a/config/routes.rb b/config/routes.rb index c22ffdd..f9a8efd 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,7 +11,6 @@ end get '/tags/:tag' => "tags#by_tag", :as => :search_by_tag - resources :notas do get :all_tags, :on => :collection resources :comments, :only => [:new,:create,:edit, :update] do @@ -24,7 +23,6 @@ collection do post :update_attribute_on_the_spot end - member do post :add_vote end diff --git a/db/schema.rb b/db/schema.rb index feb097d..a5e4cf9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -88,4 +88,3 @@ end end - diff --git a/public/images/loading.gif b/public/images/loading.gif index 3954a70c0c2ad8cf39d898f8717145ca64430e88..e86fcb7a3122795db2d57c6af7d8adb6f3e511d5 100644 GIT binary patch literal 1924 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 diff --git a/public/stylesheets/kitchen.css b/public/stylesheets/kitchen.css index dfb6758..94fc0df 100644 --- a/public/stylesheets/kitchen.css +++ b/public/stylesheets/kitchen.css @@ -99,7 +99,7 @@ body { background: #cbe73f; } #container #side_panel #note_buttons { text-align: center; - margin-top: 5px; } + margin: 5px -10px; } #container #side_panel #note_buttons a { color: white; text-decoration: none; @@ -107,7 +107,7 @@ body { font-weight: bold; } #container #side_panel #note_buttons .new_note { padding: 5px; - width: 47%; + width: 47.5%; float: left; background: #34c6f7; } #container #side_panel #note_buttons .all_notes { @@ -119,18 +119,18 @@ body { text-align: left; padding: 8px; background: #666666; - margin-top: 5px; } + margin: 5px -10px; } #container #side_panel #tag_panel #tag_header a { text-decoration: none; - font-size: 20px; + font-size: 15px; font-weight: bold; color: white; } #container #side_panel #tag_panel #tag_list { - border: solid 2px #cecece; padding: 8px; width: 90%; margin: auto; } #container #side_panel #tag_panel #tag_list a { + margin: 5px; font-weight: bold; color: #222222; text-decoration: none; } @@ -154,6 +154,7 @@ body { margin: 18px 5px; width: 287px; padding: 7px; + height: 250px; background: #0c0c0c; border-bottom: 3px solid #cbe73f; border-left: 2px solid #cbe73f; @@ -181,7 +182,7 @@ body { #container #content .note .note_complete .title_header .title h2 { padding: 5px; } #container #content .note .note_complete .body { - height: 100px; + min-height: 90px; margin: 0 10px; border-bottom: solid 1px #cbe73f; font-size: 15px; } @@ -219,19 +220,18 @@ body { font-size: 15px; font-weight: bold; float: right; - width: 30%; - margin-right: 10px; } + width: 40%; + margin-right: -45px; } #nota_form #submit_form_buttons #link_cancel { margin: 0 -5px 0 0; background: #34c6f7; color: white; - padding: 4px 15px 4px 15px; + padding: 5px 15px; text-decoration: none; } #nota_form #submit_form_buttons #submit_button { background: #14addb; border: solid 2px #14addb; color: white; - margin: 0; padding: 2px 10px; text-decoration: none; font-family: Ubuntu, Verdana, Helvetica; @@ -244,7 +244,8 @@ body { width: 30%; } #help_area .help_wrap { padding: 10px; - border: solid 1px #666666; } + border: solid 1px #666666; + background: white; } #nota_show { margin: 10px; @@ -258,6 +259,7 @@ body { border-style: solid; border-width: 12px; height: 0px; + margin: 0; width: 0px; float: right; position: relative; @@ -324,7 +326,6 @@ body { font-weight: bold; } #comments_note #links_comments { float: right; - margin-right: 8px; margin-top: -5px; font-size: 15px; font-weight: bold; } @@ -360,19 +361,19 @@ body { /*Span Cargando Datos */ #loading img { float: left; - padding: 0 25px; - bottom: 10px; } + padding: 10px 25px; } #loading #loading_title { - bottom: 15px; - margin-left: 10px; - font-size: 50px; + margin-left: 30px; + margin-top: 10px; + font-size: 40px; float: left; } .blockMsg { border: none; position: absolute !important; - opacity: 0.75; - width: 70% !important; + top: 45px !important; + opacity: 0.9; + width: 60% !important; text-align: center !important; -moz-border-radius: 10px; -webkit-border-radius: 10px; @@ -381,3 +382,31 @@ body { -moz-opacity: 0.6 !important; color: black !important; background-color: #cbe73f !important; } + +#vote_info a { + color: white; } + +#vote_link a { + color: #222222; } + +#relevant_notes #relevant_header { + text-decoration: none; + font-size: 15px; + font-weight: bold; + color: white; + text-align: left; + padding: 8px; + background: #666666; + margin: 10px -10px; } +#relevant_notes .title { + margin: 0px -8px; + padding: 5px; + border-bottom: 1px solid #cecece; } + #relevant_notes .title a { + color: #222222; + font-size: 25px; + font-weight: bold; + text-decoration: none; } + #relevant_notes .title .details { + float: right; + margin-top: 5px; } diff --git a/public/stylesheets/sass/kitchen.sass b/public/stylesheets/sass/kitchen.sass index 16181ef..6344ef5 100644 --- a/public/stylesheets/sass/kitchen.sass +++ b/public/stylesheets/sass/kitchen.sass @@ -107,7 +107,8 @@ body :background $globant_color #note_buttons :text-align center - :margin-top 5px + :margin 5px -10px + a :color #fff :text-decoration none @@ -116,7 +117,7 @@ body :weight bold .new_note :padding 5px - :width 47% + :width 47.5% :float left :background #34C6F7 .all_notes @@ -129,19 +130,19 @@ body a :text-decoration none :font - :size 20px + :size 15px :weight bold :color #fff :text-align left :padding 8px :background #666666 - :margin-top 5px - #tag_list - :border solid 2px #cecece + :margin 5px -10px + #tag_list :padding 8px :width 90% :margin auto a + :margin 5px :font-weight bold :color #222 :text-decoration none @@ -165,6 +166,7 @@ body :margin 18px 5px :width 287px :padding 7px + :height 250px :background #0c0c0c :border-bottom 3px solid $globant_color :border-left 2px solid $globant_color @@ -196,7 +198,7 @@ body :border-radius 0 3px 3px 0 :-moz-border-radius 0 3px 3px 0 .body - :height 100px + :min-height 90px :margin 0 10px :border-bottom solid 1px $globant_color :font @@ -236,19 +238,18 @@ body :size 15px :weight bold :float right - :width 30% - :margin-right 10px + :width 40% + :margin-right -45px #link_cancel :margin 0 -5px 0 0 :background #34C6F7 :color #fff - :padding 4px 15px 4px 15px + :padding 5px 15px :text-decoration none #submit_button :background #14ADDB :border solid 2px #14ADDB :color #fff - :margin 0 :padding 2px 10px :text-decoration none :font @@ -262,6 +263,7 @@ body .help_wrap :padding 10px :border solid 1px #666666 + :background #fff #nota_show :margin 10px @@ -275,6 +277,7 @@ body :border-style solid :border-width 12px :height 0px + :margin 0 :width 0px :float right :position relative @@ -345,7 +348,6 @@ body :weight bold #links_comments :float right - :margin-right 8px :margin-top -5px :font :size 15px @@ -389,20 +391,20 @@ body #loading img :float left - :padding 0 25px - :bottom 10px + :padding 10px 25px + //:bottom 10px #loading_title - :bottom 15px - :margin-left 10px - :font-size 50px + :margin-left 30px + :margin-top 10px + :font-size 40px :float left .blockMsg :border none :position absolute !important - //:top 245px !important - :opacity .75 - :width 70% !important + :top 45px !important + :opacity .9 + :width 60% !important :text-align center !important :-moz-border-radius 10px :-webkit-border-radius 10px @@ -412,5 +414,34 @@ body :color #000 !important :background-color $globant_color !important +#vote_info + a + :color #fff +#vote_link + a + :color #222 +#relevant_notes + #relevant_header + :text-decoration none + :font + :size 15px + :weight bold + :color #fff + :text-align left + :padding 8px + :background #666666 + :margin 10px -10px + .title + a + :color #222222 + :font-size 25px + :font-weight bold + :text-decoration none + :margin 0px -8px + :padding 5px + :border-bottom 1px solid #cecece + .details + :float right + :margin-top 5px diff --git a/public/stylesheets/sass/tipsy.sass b/public/stylesheets/sass/tipsy.sass index 71e4695..9dba20a 100644 --- a/public/stylesheets/sass/tipsy.sass +++ b/public/stylesheets/sass/tipsy.sass @@ -1,15 +1,15 @@ .tipsy - padding: 5px + padding: 5px font-size: 13px - opacity: 1 - filter: alpha(opacity = 100) + opacity: .9 + filter: alpha(opacity = 90 ) background-repeat: no-repeat background-image: url(http://github.com/images/tipsy.gif) .tipsy-inner padding: 10px - background-color: black - color: white + background-color: #222 + color: #fff font-weight: bold min-width: 50px max-width: 200px diff --git a/public/stylesheets/tipsy.css b/public/stylesheets/tipsy.css index 19a5d28..8475a77 100644 --- a/public/stylesheets/tipsy.css +++ b/public/stylesheets/tipsy.css @@ -1,14 +1,14 @@ .tipsy { padding: 5px; font-size: 13px; - opacity: 1; - filter: alpha(opacity=100); + opacity: 0.9; + filter: alpha(opacity=90); background-repeat: no-repeat; background-image: url(http://github.com/images/tipsy.gif); } .tipsy-inner { padding: 10px; - background-color: black; + background-color: #222222; color: white; font-weight: bold; min-width: 50px; From 6822be0fd0c3286a1eb81fdfda6638125062b410 Mon Sep 17 00:00:00 2001 From: Jorge Moreno Date: Tue, 25 Jan 2011 14:33:50 -0300 Subject: [PATCH 12/14] new stylesheet in the nota show page --- app/controllers/application_controller.rb | 1 - app/controllers/notas_controller.rb | 1 + app/controllers/sessions_controller.rb | 2 +- app/views/layouts/application.html.haml | 18 ++-- app/views/notas/_form.html.haml | 2 +- app/views/notas/_nota.html.haml | 28 +++--- app/views/notas/index.html.haml | 24 +++-- app/views/notas/show.html.haml | 47 +++++---- public/stylesheets/kitchen.css | 102 ++++++++++++------- public/stylesheets/sass/kitchen.sass | 115 +++++++++++++--------- public/stylesheets/sass/tipsy.sass | 2 +- public/stylesheets/tipsy.css | 2 +- 12 files changed, 210 insertions(+), 134 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 0c7daa5..f3608ca 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -26,7 +26,6 @@ def not_allowed def call_rake(task, options = {}) options[:rails_env] ||= Rails.env - args = options.map { |n, v| "#{n.to_s.upcase}='#{v}'" } system "bundle exec rake #{task} --trace 2>&1 >> #{Rails.root}/log/rake.log &" end diff --git a/app/controllers/notas_controller.rb b/app/controllers/notas_controller.rb index ea70809..07cb760 100644 --- a/app/controllers/notas_controller.rb +++ b/app/controllers/notas_controller.rb @@ -22,6 +22,7 @@ def search def show @nota = Nota.find(params[:id]) + @user_notes = Nota.find_all_by_user_id(current_user,:limit => 10) @nota.add_view unless @nota.new_record? end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index ecc615e..e3feeea 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,7 +1,7 @@ class SessionsController < Devise::SessionsController def new clean_up_passwords(build_resource) - redirect_to root_path, :notice => 'Tenes q estar logueado chabon!!' + redirect_to root_path, :notice => 'You must login to post or vote a note!!' end end diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 4d6b418..9a24c3b 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -62,19 +62,25 @@ #relevant_notes #relevant_header Relevant Notes - .title - = link_to @last_note.title, nota_path(@last_note), :class =>"info", :title => "#{@last_note.tag_list}" + - if @last_note + .title + = link_to truncate(@last_note.title,:length => 35), nota_path(@last_note), :class =>"info", :title => "#{@last_note.tag_list}" + %br %span.details %small == created #{distance_of_time_in_words(@last_note.created_at, Time.now)} ago .clear - .title - = link_to @most_voted.title, nota_path(@most_voted), :class =>"info", :title => "#{@most_voted.tag_list}" + -if @most_voted + .title + = link_to truncate(@most_voted.title,:length => 35), nota_path(@most_voted), :class =>"info", :title => "#{@most_voted.tag_list}" + %br %span.details %small== (#{ @most_voted.votes.size} votes) .clear - .title - = link_to @most_viewed.title, nota_path(@most_viewed), :class =>"info", :title => "#{@most_viewed.tag_list}" + -if @most_viewed + .title + = link_to truncate(@most_viewed.title,:length => 35), nota_path(@most_viewed), :class =>"info", :title => "#{@most_viewed.tag_list}" + %br %span.details %small== (#{ @most_viewed.views} views) .clear diff --git a/app/views/notas/_form.html.haml b/app/views/notas/_form.html.haml index 6d37a2e..efe980b 100644 --- a/app/views/notas/_form.html.haml +++ b/app/views/notas/_form.html.haml @@ -49,7 +49,7 @@ = text_field_tag :tag_list, @nota.tag_list.join(', ') , :id => "all_tags", :size => 63 %p %div= f.label :body, "Note" - = f.text_area :body, :cols => 81, :rows => 16, :class => "required", :minlength => "10" + = f.text_area :body, :cols => 81, :rows => 33, :class => "required", :minlength => "10" =# f.cktext_area :body, :width => '90%', :height => '250px', :class => 'inputs' #submit_form_buttons %span= link_to 'Cancel',notas_path,:id => "link_cancel" diff --git a/app/views/notas/_nota.html.haml b/app/views/notas/_nota.html.haml index 5ddca47..b8699b3 100644 --- a/app/views/notas/_nota.html.haml +++ b/app/views/notas/_nota.html.haml @@ -1,21 +1,14 @@ .note .note_complete - .header - %span.date - == #{distance_of_time_in_words(nota.created_at, Time.now)} ago | - %br - == created by - %span.note_owner - == #{nota.user.name} - .nota_height - .title_note - .title_header - .title - %h2= link_to nota.title.capitalize, nota_path(nota), :class => 'info', :title => "#{nota.votes.size} votes / #{nota.comments.size} comments / #{nota.views} views" - //.triangle_left_title - .body - ~ truncate(word_wrap(collapse_code(nota.body),:line_width => 30), :length => 100).html_safe - %p.tags + .title + %span= link_to word_wrap(nota.title.capitalize), nota_path(nota), :class => 'info', :title => "#{nota.votes.size} votes / #{nota.comments.size} comments / #{nota.views} views" + //.triangle_left_title + %br + .body + ~ truncate(word_wrap(collapse_code(nota.body),:line_width => 120), :length => 150).html_safe + .ellipsis + %br + .tags - unless nota.tags.empty? Tags: - nota.tags.each do |tag| @@ -23,5 +16,6 @@ = link_to tag,search_by_tag_path(tag.name) - else untagged - .clear + + .clear diff --git a/app/views/notas/index.html.haml b/app/views/notas/index.html.haml index f7218b3..b1f27c2 100644 --- a/app/views/notas/index.html.haml +++ b/app/views/notas/index.html.haml @@ -1,13 +1,17 @@ - title "Globant Kitchen" -#notas - - for nota in @notas - = render :partial => 'nota', :locals =>{:nota => nota} - .clear - = will_paginate @notas, :prev_label => "back", :next_label => "next" +- if @notas.empty? + %h2 + No hay notas cargadas todavia! +- else + #notas + - for nota in @notas + = render :partial => 'nota', :locals =>{:nota => nota} + .clear + = will_paginate @notas, :prev_label => "back", :next_label => "next" -#in_comments - -#loading - = image_tag('loading.gif',:id =>"loading") - %span#loading_title Buscando Datos... + #in_comments + + #loading + = image_tag('loading.gif',:id =>"loading") + %span#loading_title Buscando Datos... diff --git a/app/views/notas/show.html.haml b/app/views/notas/show.html.haml index cb58359..28d4bbb 100644 --- a/app/views/notas/show.html.haml +++ b/app/views/notas/show.html.haml @@ -1,24 +1,37 @@ - title "#{@nota.title}" #notas + #nota_info + #nota_info_header + #top_header_info + #header_note + %span#note_date + Created + = distance_of_time_in_words(@nota.created_at, Time.now) + ago + %br + by + %span#note_owner + = @nota.user.name + #related_notes_by_user + %p== Notes posted by #{@nota.user.name } (last 10...): + - @user_notes.each do |note| + .note_user + %span.title_note_user= truncate(note.title, :lenght => 40) + %span.link_nota_user= link_to "View >>", nota_path(note) + %br #nota_show - #top_header - #header_note - #note_info - %span#votes.info{:title => "Vote Me!"} - = render :partial => "shared/votes" - == / - %span#views - = pluralize(@nota.views, 'view') - == / - %span.comment_count - = render 'shared/comments_count' - = distance_of_time_in_words(@nota.created_at, Time.now) - ago - %br - Created by - %span#note_owner - = @nota.user.name + #top_header_note %br + #nota_votes_comments + %span#votes.info{:title => "Vote Me!"} + = render :partial => "shared/votes" + == / + %span#views + = pluralize(@nota.views, 'view') + == / + %span.comment_count + = render 'shared/comments_count' + %br #note_title #title -if @nota.user == current_user diff --git a/public/stylesheets/kitchen.css b/public/stylesheets/kitchen.css index aae0f25..cfde965 100644 --- a/public/stylesheets/kitchen.css +++ b/public/stylesheets/kitchen.css @@ -22,13 +22,13 @@ body { .flash .close_button { float: right; text-align: middle; - padding-bottom: 5px; } + margin-top: -5px; } #header { background: url(http://github.com/images/bg_header.jpg) repeat; } #header #left_side { float: left; - width: 71.5%; + width: 72%; padding-top: 55px; margin-left: 15px; } #header #right_side { @@ -41,6 +41,7 @@ body { margin-bottom: 8px; } #container { + overflow: hidden; background: -webkit-gradient(linear, left bottom, right bottom, color-stop(0.37, #e6e6e6), color-stop(0.69, #bdbdbd)); background: -moz-linear-gradient(left bottom, #e6e6e6 37%, #bdbdbd 59%); } #container #side_panel { @@ -150,6 +151,7 @@ body { width: 77%; } #container #content .note { margin-top: 10px; + margin-bottom: -10px; float: left; background: url(http://github.com/images/head_note.png) top no-repeat; } #container #content .note .note_complete { @@ -162,30 +164,21 @@ body { border-bottom: 3px solid #cbe73f; border-left: 2px solid #cbe73f; border-right: 2px solid #cbe73f; } - #container #content .note .note_complete .header { - margin: 0 10px; - font-size: 11px; - font-weight: bold; } - #container #content .note .note_complete .header .note_owner { - font-size: 12px; - font-weight: bold; - color: #cbe73f; } - #container #content .note .note_complete .title_header { - width: 100%; + #container #content .note .note_complete .title { + padding: 5px 5px; background: #cbe73f; margin-left: -7px; - border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; } - #container #content .note .note_complete .title_header .title a { + min-height: 70px; + max-height: 70px; + width: 96%; } + #container #content .note .note_complete .title a { color: #222222; - font-size: 25px; + font-size: 18px; font-weight: bold; text-decoration: none; margin-left: 10px; } - #container #content .note .note_complete .title_header .title h2 { - padding: 5px; } #container #content .note .note_complete .body { - min-height: 90px; + height: 100px; margin: 0 10px; border-bottom: solid 1px #cbe73f; font-size: 15px; } @@ -224,7 +217,8 @@ body { font-weight: bold; float: right; width: 40%; - margin-right: -45px; } + margin-right: -40px; + margin-top: -5px; } #nota_form #submit_form_buttons #link_cancel { margin: 0 -5px 0 0; background: #34c6f7; @@ -250,6 +244,51 @@ body { border: solid 1px #666666; background: white; } +#nota_info { + width: 30%; + float: right; + padding: 10px; + margin-right: 10px; } + #nota_info #nota_info_header { + padding: 10px; + margin: -10px; + background: #666666; + border: solid 1px #666666; } + #nota_info #nota_info_header #top_header_info { + border-color: transparent transparent #b8b8b8 transparent; + border-style: solid; + border-width: 12px; + float: right; + position: absolute; + top: 120px; + right: -2px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); } + #nota_info #nota_info_header #header_note { + margin: 0 10px; + font-size: 13px; + color: white; } + #nota_info #nota_info_header #header_note #note_info { + float: right; } + #nota_info #nota_info_header #header_note #note_date { + color: #cbe73f; } + #nota_info #nota_info_header #header_note #note_owner { + font-size: 15px; + font-weight: bold; + color: #cbe73f; } + #nota_info #related_notes_by_user { + margin: 15px -10px; + padding: 0 10px; } + #nota_info #related_notes_by_user .note_user { + line-height: 22px; } + #nota_info #related_notes_by_user .note_user .title_note_user { + color: #4a4a4a; } + #nota_info #related_notes_by_user .note_user .link_nota_user { + float: right; } + #nota_info #related_notes_by_user .note_user .link_nota_user a { + color: #222222; + text-decoration: none; } + #nota_show { margin: 10px; background: #666666; @@ -257,7 +296,7 @@ body { width: 62%; padding: 10px; color: white; } - #nota_show #top_header { + #nota_show #top_header_note { border-color: transparent transparent #b8b8b8 transparent; border-style: solid; border-width: 12px; @@ -270,16 +309,8 @@ body { right: -24px; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); } - #nota_show #header_note { - margin: 0 10px; - font-size: 11px; - font-weight: bold; } - #nota_show #header_note #note_info { - float: right; } - #nota_show #header_note #note_owner { - font-size: 12px; - font-weight: bold; - color: #cbe73f; } + #nota_show #nota_votes_comments { + text-align: right; } #nota_show #note_title { width: 100%; background: #cbe73f; @@ -288,11 +319,12 @@ body { color: #222222; font-size: 25px; font-weight: bold; - margin-left: 10px; } - #nota_show #note_title #title h2 { - padding: 5px; } + margin-left: 10px; + padding: 10px 0; } #nota_show #body_note { min-height: 120px; } + #nota_show #body_note p { + line-height: 20px; } #nota_show #tags { border-top: 2px solid #cbe73f; padding: 7px; } @@ -407,7 +439,7 @@ body { border-bottom: 1px solid #cecece; } #relevant_notes .title a { color: #222222; - font-size: 25px; + font-size: 15px; font-weight: bold; text-decoration: none; } #relevant_notes .title .details { diff --git a/public/stylesheets/sass/kitchen.sass b/public/stylesheets/sass/kitchen.sass index 5b5b72d..4982139 100644 --- a/public/stylesheets/sass/kitchen.sass +++ b/public/stylesheets/sass/kitchen.sass @@ -23,15 +23,14 @@ body .close_button :float right :text-align middle - :padding-bottom 5px + :margin-top -5px #header :background url(http://github.com/images/bg_header.jpg) repeat #left_side :float left - :width 71.5% + :width 72% :padding-top 55px :margin-left 15px - //:padding-right 150px #right_side #search_title :font-size 12px @@ -41,6 +40,7 @@ body :color #fff :margin-right 25px #container + :overflow hidden :background -webkit-gradient(linear,left bottom,right bottom,color-stop(0.37, rgb(230,230,230)),color-stop(0.69, rgb(189,189,189))) :background -moz-linear-gradient(left bottom,rgb(230,230,230) 37%,rgb(189,189,189) 59%) #side_panel @@ -162,6 +162,7 @@ body :width 77% .note :margin-top 10px + :margin-bottom -10px :float left :background url(http://github.com/images/head_note.png) top no-repeat .note_complete @@ -174,34 +175,22 @@ body :border-bottom 3px solid $globant_color :border-left 2px solid $globant_color :border-right 2px solid $globant_color - .header - :margin 0 10px - :font - :size 11px - :weight bold - .note_owner + .title + a + :color #222 :font - :size 12px + :size 18px :weight bold - :color $globant_color - .title_header - .title - a - :color #222 - :font - :size 25px - :weight bold - :text-decoration none - :margin-left 10px - h2 - :padding 5px - :width 100% + :text-decoration none + :margin-left 10px + :padding 5px 5px :background $globant_color :margin-left -7px - :border-radius 0 3px 3px 0 - :-moz-border-radius 0 3px 3px 0 + :min-height 70px + :max-height 70px + :width 96% .body - :min-height 90px + :height 100px :margin 0 10px :border-bottom solid 1px $globant_color :font @@ -242,7 +231,8 @@ body :weight bold :float right :width 40% - :margin-right -45px + :margin-right -40px + :margin-top -5px #link_cancel :margin 0 -5px 0 0 :background #34C6F7 @@ -267,7 +257,52 @@ body :padding 10px :border solid 1px #666666 :background #fff - +#nota_info + :width 30% + :float right + :padding 10px + :margin-right 10px + #nota_info_header + :padding 10px + :margin -10px + :background #666666 + :border solid 1px #666666 + #top_header_info + :border-color transparent transparent #B8B8B8 transparent + :border-style solid + :border-width 12px + :float right + :position absolute + :top 120px + :right -2px + :-webkit-transform rotate(45deg) + :-moz-transform rotate(45deg) + #header_note + :margin 0 10px + :font + :size 13px + :color white + #note_info + :float right + #note_date + :color $globant_color + #note_owner + :font + :size 15px + :weight bold + :color $globant_color + #related_notes_by_user + :margin 15px -10px + :padding 0 10px + .note_user + :line-height 22px + .title_note_user + :color #4a4a4a + .link_nota_user + a + :color #222 + :text-decoration none + :float right #nota_show :margin 10px :background #666666 @@ -275,7 +310,7 @@ body :width 62% :padding 10px :color #fff - #top_header + #top_header_note :border-color transparent transparent #B8B8B8 transparent :border-style solid :border-width 12px @@ -288,18 +323,8 @@ body :right -24px :-webkit-transform rotate(45deg) :-moz-transform rotate(45deg) - #header_note - :margin 0 10px - :font - :size 11px - :weight bold - #note_info - :float right - #note_owner - :font - :size 12px - :weight bold - :color $globant_color + #nota_votes_comments + :text-align right #note_title #title :color #222 @@ -307,13 +332,15 @@ body :size 25px :weight bold :margin-left 10px - h2 - :padding 5px + :padding 10px 0 + :width 100% :background $globant_color :margin-left -11px #body_note :min-height 120px + p + :line-height 20px #tags :border-top 2px solid $globant_color :padding 7px @@ -438,7 +465,7 @@ body .title a :color #222222 - :font-size 25px + :font-size 15px :font-weight bold :text-decoration none :margin 0px -8px diff --git a/public/stylesheets/sass/tipsy.sass b/public/stylesheets/sass/tipsy.sass index 6dd69dc..a62941b 100644 --- a/public/stylesheets/sass/tipsy.sass +++ b/public/stylesheets/sass/tipsy.sass @@ -12,7 +12,7 @@ color: #fff font-weight: bold min-width: 50px - max-width: 200px + max-width: 250px text-align: center -moz-border-radius: 5px -webkit-border-radius: 5px diff --git a/public/stylesheets/tipsy.css b/public/stylesheets/tipsy.css index 8475a77..dfba639 100644 --- a/public/stylesheets/tipsy.css +++ b/public/stylesheets/tipsy.css @@ -12,7 +12,7 @@ color: white; font-weight: bold; min-width: 50px; - max-width: 200px; + max-width: 250px; text-align: center; -moz-border-radius: 5px; -webkit-border-radius: 5px; } From f06bf0a9cc2d2ff84c69e18bba1c5daccbcf6d20 Mon Sep 17 00:00:00 2001 From: Jorge Moreno Date: Tue, 25 Jan 2011 17:17:09 -0300 Subject: [PATCH 13/14] remove relevant notes --- app/views/comments/_form.html.haml | 2 +- app/views/layouts/application.html.haml | 27 +------------------------ app/views/notas/index.html.haml | 10 ++++----- public/stylesheets/highlight.css | 6 ++---- public/stylesheets/sass/highlight.sass | 8 ++++---- 5 files changed, 13 insertions(+), 40 deletions(-) diff --git a/app/views/comments/_form.html.haml b/app/views/comments/_form.html.haml index 814c676..1726565 100644 --- a/app/views/comments/_form.html.haml +++ b/app/views/comments/_form.html.haml @@ -1,6 +1,6 @@ = form_for([@nota,Comment.new], :remote => true) do |f| = f.hidden_field :nota_id, :value => @nota.id - = f.text_area :comment, :cols => 80, :rows => 5, :class => "required", :minlength => "3" + = f.text_area :comment, :cols => 81, :rows => 5, :class => "required", :minlength => "3" #links_comments %span#link_cancel== #{link_to_function "Cancel","newComment()"} %span= f.submit "Save", :id => "link_create" diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 9a24c3b..8cc0e19 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -58,32 +58,7 @@ .new_note = link_to "New Note", new_nota_path %br - %p - #relevant_notes - #relevant_header - Relevant Notes - - if @last_note - .title - = link_to truncate(@last_note.title,:length => 35), nota_path(@last_note), :class =>"info", :title => "#{@last_note.tag_list}" - %br - %span.details - %small - == created #{distance_of_time_in_words(@last_note.created_at, Time.now)} ago - .clear - -if @most_voted - .title - = link_to truncate(@most_voted.title,:length => 35), nota_path(@most_voted), :class =>"info", :title => "#{@most_voted.tag_list}" - %br - %span.details - %small== (#{ @most_voted.votes.size} votes) - .clear - -if @most_viewed - .title - = link_to truncate(@most_viewed.title,:length => 35), nota_path(@most_viewed), :class =>"info", :title => "#{@most_viewed.tag_list}" - %br - %span.details - %small== (#{ @most_viewed.views} views) - .clear + %p #tag_panel #tag_header diff --git a/app/views/notas/index.html.haml b/app/views/notas/index.html.haml index b1f27c2..68056c0 100644 --- a/app/views/notas/index.html.haml +++ b/app/views/notas/index.html.haml @@ -1,7 +1,7 @@ - title "Globant Kitchen" - if @notas.empty? %h2 - No hay notas cargadas todavia! + Not found any notes!! - else #notas - for nota in @notas @@ -9,9 +9,9 @@ .clear = will_paginate @notas, :prev_label => "back", :next_label => "next" - #in_comments +#in_comments - #loading - = image_tag('loading.gif',:id =>"loading") - %span#loading_title Buscando Datos... +#loading + = image_tag('loading.gif',:id =>"loading") + %span#loading_title Buscando Datos... diff --git a/public/stylesheets/highlight.css b/public/stylesheets/highlight.css index f753e29..47cae4d 100644 --- a/public/stylesheets/highlight.css +++ b/public/stylesheets/highlight.css @@ -105,16 +105,14 @@ color: #bb4444; font-weight: bold; } .CodeRay .code pre .il { - background: #dddddd; - color: black; } + color: #d0cffe; } .CodeRay .code pre .il .il { background: #cccccc; } .CodeRay .code pre .il .il .il { background: #bbbbbb; } .CodeRay .code pre .il .idl { - background: #dddddd; font-weight: bold; - color: #666666; } + color: #ffc56d; } .CodeRay .code pre .idl { font-weight: bold; color: #666666; } diff --git a/public/stylesheets/sass/highlight.sass b/public/stylesheets/sass/highlight.sass index 3571703..3107fca 100644 --- a/public/stylesheets/sass/highlight.sass +++ b/public/stylesheets/sass/highlight.sass @@ -135,16 +135,16 @@ font-weight: bold .il - background: #ddd - color: black + //background: #ddd + color: #D0CFFE .il background: #ccc .il background: #bbb .idl - background: #ddd + //background: #ddd font-weight: bold - color: #666 + color: #FFC56D .idl font-weight: bold From 45580ce148b11e8362724a72fea54770b1aa0a17 Mon Sep 17 00:00:00 2001 From: Jorge Moreno Date: Tue, 25 Jan 2011 17:42:02 -0300 Subject: [PATCH 14/14] fixed user notes panel --- app/controllers/notas_controller.rb | 2 +- app/views/notas/show.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/notas_controller.rb b/app/controllers/notas_controller.rb index 07cb760..6ec863b 100644 --- a/app/controllers/notas_controller.rb +++ b/app/controllers/notas_controller.rb @@ -22,7 +22,7 @@ def search def show @nota = Nota.find(params[:id]) - @user_notes = Nota.find_all_by_user_id(current_user,:limit => 10) + @user_notes = Nota.find_all_by_user_id(@nota.user,:limit => 10) @nota.add_view unless @nota.new_record? end diff --git a/app/views/notas/show.html.haml b/app/views/notas/show.html.haml index 28d4bbb..9b283e2 100644 --- a/app/views/notas/show.html.haml +++ b/app/views/notas/show.html.haml @@ -13,7 +13,7 @@ %span#note_owner = @nota.user.name #related_notes_by_user - %p== Notes posted by #{@nota.user.name } (last 10...): + %p== Notes posted by #{@nota.user.name }: - @user_notes.each do |note| .note_user %span.title_note_user= truncate(note.title, :lenght => 40)