diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png index 31c417df12a32253c11bc8ef25e09d7339d90b89..fd66544072ba7863cd8b9d691fea4c81b162b347 100644 Binary files a/app/assets/images/logo.png and b/app/assets/images/logo.png differ diff --git a/app/assets/images/user-anon.png b/app/assets/images/user-anon.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ab8da5945a930140730c855609d1e32ee7103f Binary files /dev/null and b/app/assets/images/user-anon.png differ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 4afc28d66aa5166182ff112ec306b210fbe6276d..4a67b4eb08cd76ebb73800a90723ca44edd74fcc 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -17,179 +17,3 @@ //= require bootstrap-sprockets //= require select2 //= require_tree ./application - -$(document).ready(function(){ - size_c = readCookie('fontSize'); - if (size_c != null) { - document.body.style.fontSize = size_c + 'px'; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); - }); - } - Contrast(); -}); - - -//source: http://www.linhadecodigo.com.br/artigo/1615/acessibilidade-aumentando-e-diminuindo-tamanho-de-letra-em-seu-site.aspx -function createCookie(name,value,days) { - if (days) { - var date = new Date(); - date.setTime(date.getTime()+(days*24*60*60*1000)); - var expires = "; expires="+date.toGMTString(); - } else var expires = ""; - document.cookie = name+"="+value+expires+"; path=/"; -} - -function readCookie(name) { - var nameEQ = name + "="; - var ca = document.cookie.split(";"); - for(var i=0;i < ca.length;i++) - { - var c = ca[i]; - while (c.charAt(0)==" ") c = c.substring(1,c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); - } - return null; -} - -function resizeText(increment) { - if (document.body.style.fontSize == "") { - document.body.style.fontSize = "15px"; - } - size = parseFloat(document.body.style.fontSize) - if (increment > 0) { - if (size < 25) { - document.body.style.fontSize = parseFloat(document.body.style.fontSize) + increment + "px"; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h2').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h3').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h4').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h5').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h6').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - } - } else if(increment < 0){ - if (size > 10) { - document.body.style.fontSize = parseFloat(document.body.style.fontSize) + increment + "px"; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h2').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h3').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h4').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h5').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - $('h6').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - } - } - else{ - size = parseFloat(document.body.style.fontSize); - document.body.style.fontSize = '15px'; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1').each(function(index,value) { - $(this).css('fontSize',Math.abs(parseFloat($(this).css('fontSize'))-(size-15)) + 'px'); - }); - $('h2').each(function(index,value) { - $(this).css('fontSize',Math.abs(parseFloat($(this).css('fontSize'))-(size-15)) + 'px'); - }); - $('h3').each(function(index,value) { - $(this).css('fontSize',Math.abs(parseFloat($(this).css('fontSize'))-(size-15)) + 'px'); - }); - $('h4').each(function(index,value) { - $(this).css('fontSize',Math.abs(parseFloat($(this).css('fontSize'))-(size-15)) + 'px'); - }); - $('h5').each(function(index,value) { - $(this).css('fontSize',Math.abs(parseFloat($(this).css('fontSize'))-(size-15)) + 'px'); - }); - $('h6').each(function(index,value) { - $(this).css('fontSize',Math.abs(parseFloat($(this).css('fontSize'))-(size-15)) + 'px'); - }); - } - createCookie('fontSize', parseFloat(document.body.style.fontSize), 365); -} - -function changeContrast() { - if (readCookie('contrast') == null || readCookie('contrast') == "true") { - createCookie('contrast',"false",0); - } else { - createCookie('contrast',"true",0); - } - Contrast(); -} - -function Contrast() { - contrast_c = readCookie('contrast'); - if (contrast_c == null || contrast_c != "false"){ - $('body').removeClass("contraste"); - $('body').removeClass("alto-contraste"); - $('.searchbar').removeClass("searchbar-contraste"); - $('header a').removeClass("link-contraste"); - $('#footer').removeClass("footer-contraste"); - $('#footer div').removeClass("footer-contraste"); - $('.dropdown-menu').removeClass("dropdown-menu-contrast"); - $('.general-highlights').removeClass("general-highlights-contrast"); - $(".nav > li > a").css('background-color','none'); - $(".nav > li > a").hover( - function(){ - $(this).css('background-color','#eee') - },function(){ - $(this).css('background-color','transparent') - } - ); - }else { - $('body').addClass("contraste"); - $('body').addClass("alto-contraste"); - $('.searchbar').addClass("searchbar-contraste"); - $('header a').addClass("link-contraste"); - $('#footer').addClass("footer-contraste"); - $('#footer div').addClass("footer-contraste"); - $('.dropdown-menu').addClass("dropdown-menu-contrast"); - $('.general-highlights').addClass("general-highlights-contrast"); - $(".nav > li > a").css('background-color','#transparent'); - $(".nav > li > a").hover( - function(){ - $(this).css('background-color','#000'); - }, function() { - $(this).css('background-color','#transparent') - } - ); - } -} - - -$.fn.select2.amd.require( - ["select2/core", "select2/utils", "select2/compat/matcher"], - function (Select2, Utils, oldMatcher) { - - var $basicMultiple = $(".js-example-basic-multiple"); - var $limitMultiple = $(".js-example-basic-multiple-limit"); - - $basicMultiple.select2(); - $basicMultiple.select2({ width: '80%' }); - $limitMultiple.select2({ - maximumSelectionLength: 2 - }); -}); diff --git a/app/assets/javascripts/application/accessibility.js b/app/assets/javascripts/application/accessibility.js new file mode 100644 index 0000000000000000000000000000000000000000..7e240dc34bbaee04b3fa5bc7d973370b38682fd9 --- /dev/null +++ b/app/assets/javascripts/application/accessibility.js @@ -0,0 +1,107 @@ +//// font size +var fontSize = function() { + var elements = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', '.btn'], + elements_length = elements.length, + elements_size = {}; + + // get elements size with jquery after document ready + $(document).ready(function() { + for (var i = 0; i < elements_length; i++) { + elements_size[elements[i]] = $(elements[i]).css('fontSize'); + } + }); + + // init + size_c = readCookie('fontSize'); + if (size_c != null) { + $(document).ready(function() { + reloadFontSize(size_c); + }); + } + + function reloadFontSize(size) { + var i = 0; + size = (parseFloat(size) / 10) + 1; + + // change body font size + $('body').css('fontSize', (size * 100) + '%', 'important'); + + // change custom elements + for (i; i < elements_length; i++) { + $(elements[i]).css('fontSize', (parseFloat(elements_size[elements[i]]) * size) + "px", 'important'); + } + } + + return { + resizeText: function(increment) { + var size = parseFloat(readCookie('fontSize')); + increment = parseFloat(increment); + + if (increment === 0) size = 0; + else if (((size > -6) && (increment < 0)) || ((size < 7) && (increment > 0))) { + size = size + increment; + }; + reloadFontSize(size); + + createCookie('fontSize', size, 365); + } + }; +} + +//// contrast +var contrast = function() { + var contrast_elements = 'body, .barra-brasil, .search-bar, .learning-object-vertical .panel, .navbar, .well'; + + // init + $(document).ready(function() { + run(); + }); + + function run() { + var contrast_c = readCookie('contrast'); + + if (contrast_c == null || contrast_c != "true") { + $(contrast_elements).removeClass('contraste'); + $('.search-bar').css('border-top','none'); + $('#menu-bar').removeClass('menu-bar-contrast'); + } + else { + $(contrast_elements).addClass('contraste'); + $('.search-bar').css('border-top','2px solid white'); + $('#menu-bar').addClass('menu-bar-contrast'); + } + } + + return { + change: function() { + (readCookie('contrast') == "true") ? createCookie('contrast',"false",0) : createCookie('contrast',"true",0); + run(); + } + }; +} + +//// cookies +//source: http://www.linhadecodigo.com.br/artigo/1615/acessibilidade-aumentando-e-diminuindo-tamanho-de-letra-em-seu-site.aspx +function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(";"); + for (var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==" ") c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +// define global variables +var fontSize = fontSize(); +var contrast = contrast(); diff --git a/app/assets/javascripts/application/collections.coffee b/app/assets/javascripts/application/collections.coffee new file mode 100644 index 0000000000000000000000000000000000000000..04a4d2015eb8de7fe0a63e9d371fd15ea5396170 --- /dev/null +++ b/app/assets/javascripts/application/collections.coffee @@ -0,0 +1,8 @@ +$ -> + $('#create_collection_popover').popover + html: true + content: -> + $('#create_collection_popover_content').html() + title: -> + $('#create_collection_popover_title').html() + return \ No newline at end of file diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index dc5d2ac45cbb013fb36220d27526bca43e2e8f10..2ce779f1a58ba8832f47c11df5e7ca4296f548ef 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -18,6 +18,8 @@ @import "select2"; @import "select2-bootstrap"; +$header-blue: #1676bc; + //// HTML/BODY html, body { @@ -25,7 +27,7 @@ body { padding:0; height:100%; - font-size: 15px; + font-size: 100%; font-family: 'Roboto', "Helvetica Neue", Helvetica, Arial, sans-serif; } @@ -33,12 +35,26 @@ a, a:focus, a:hover { color: #000; } +.caret { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 7px solid #000000; +} +.caret-up { + transform: rotate(180deg); +} +.caret-align-right { + position: absolute; + left: 90%; + top: 45%; +} + //// HEADER header { border: 0; border-bottom: 1px; border-style: solid; - border-color: #cececd; + border-color: $header-blue; margin-bottom: 16px; a, a:focus, a:hover { @@ -46,21 +62,21 @@ header { } // barra brasil - .barra-brasil { + + .barra-brasil { background:#F1F1F1; height: 32px; padding:0 0 0 10px; display:block; - #barra-brasil .brasil-flag{ - height: 50px !important; - } #wrapper-barra-brasil { max-width: 100% !important; } } - + .brasil-flag{ + height: 100% !important; + } // bar with logo, search and user info .search-bar { color: #FFF; @@ -70,15 +86,27 @@ header { margin: 0px; // logo - .logo-text { + .logo-container { + text-align: left; + } + .logo { margin-top: 10px; padding: 0px; - font-size: 24px; + // font-size: 24px; font-weight: bold; + text-align: center; + float: left; + width: 165px; + h3 { + margin-top: 10px; + } a { color: #FFF; } } + .logo-image { + width: 100px; + } // accessibility .search-accessibility { margin-top: 25px; @@ -128,17 +156,15 @@ header { // user info .status-text { margin-top: 20px; - font-size: 20px; + // font-size: 20px; text-align: right; - .circular-image { - width: 60px; - height: 60px; - border-radius: 50%; + h2, h4 { + margin-top: 5px; } .media-heading { - font-size: 32px; + // font-size: 32px; a { color: #FFF; } @@ -159,20 +185,27 @@ header { .nav { height: 50px; + h3 { + margin-top: 13px; + } + .nav-button { - min-width: 140px; + min-width: 130px; height: 100%; - font-size: 20px; + padding-left: 15px; + padding-right: 10px; + // font-size: 20px; font-weight: 500 !important; a { color: #000; } } .nav-button-first { - a { padding-left: 0px !important; } + padding-left: 0 !important; } .divider { width: 2px; + margin-left: 3px; height: 100%; background-color: #FFF; } @@ -187,6 +220,7 @@ header { } } + //// FOOTER footer { width:100%; @@ -211,8 +245,8 @@ footer { } //// partial OBJECT -.object-horizontal { - +.learning-object-horizontal, .learning-object-vertical { + margin-bottom: 20px; } .starRating:not(old){ @@ -261,26 +295,47 @@ table.tipo1 p{ font-size: 15px; font-weight: bold; } //////////////////////////////////////////////////////////////////////////////// /* Alto Contraste*/ +.contraste{ + background-color: black !important; + color: white !important; + a{ + color: yellow; + } + .search-bar{ + color: white !important; + } + #myCarousel{ + a{ + color: white !important; + } + } -.alto-contraste{ - background-color: black; - color: white; -} - -.link-contraste{ - color: yellow !important; - text-decoration: underline; -} - -.footer-contraste{ - background-color: black !important; - color: white; -} - -.dropdown-menu-contrast{ - background-color: black !important; - border: 1px solid white; + #search{ + .form-control{ + background-color: black !important; + color:white; + } + } + #subject-highlight{ + background-color: black !important; + } } -.general-highlights-contrast{ - border: 1px solid white; +.menu-bar-contrast{ + background-color: black !important; + border-top: 2px solid white; + border-bottom: 2px solid white; + li{ + a{ + color:white !important; + } + a:hover{ + background-color: #1E1E1E !important; + } + } + .divider{ + background-color: white; + } + .dropdown-menu{ + background-color: black; + } } diff --git a/app/assets/stylesheets/application/learning_objects.scss b/app/assets/stylesheets/application/learning_objects.scss new file mode 100644 index 0000000000000000000000000000000000000000..a3271c7b29c97008138c4b5a0535a114e4395c57 --- /dev/null +++ b/app/assets/stylesheets/application/learning_objects.scss @@ -0,0 +1,3 @@ +.learning_object-horizontal { + margin-bottom: 10px; +} \ No newline at end of file diff --git a/app/assets/stylesheets/application/search.scss b/app/assets/stylesheets/application/search.scss index abcd91e129130c77d0bfa906bdb7cff30ad381d6..1e0bc46ea2011f1067d4676045b61a33b8fb2652 100644 --- a/app/assets/stylesheets/application/search.scss +++ b/app/assets/stylesheets/application/search.scss @@ -1,68 +1,107 @@ -#nestedAccordion{ - width:100%; -} -#nestedAccordion h2, #nestedAccordion h3, -#nestedAccordion div, #nestedAccordion ol, -#nestedAccordion li{ - /* reset styles for accordion */ - margin:0; - padding:0; - font-size:1em; - font-weight:normal; - list-style:none; -} -#nestedAccordion div{ - color:#555;/*#555 #003300*/ - overflow:hidden; - display:none; -} +.search-sidebar { + margin-top: 40px; -#nestedAccordion h2{ - cursor:pointer; - color:#fff; - font-size:1.1em; - moz-border-radius: 5px 5px 0 0; - -webkit-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; - padding:3px; - margin-top:5px; - background-color: #3F434F; - background-image: -webkit-gradient(linear, left top, left bottom, from(#4B8CFF), to(#447FE8)); - background-image: -webkit-linear-gradient(top, #4B8CFF, #447FE8);/*#4B8CFF, #447FE8*/ - background-image: -moz-linear-gradient(top, #4B8CFF, #447FE8); - background-image: -ms-linear-gradient(top, #4B8CFF, #447FE8); - background-image: -o-linear-gradient(top, #4B8CFF, #447FE8); - background-image: linear-gradient(to bottom, #4B8CFF, #447FE8); - background-image: url("arrow.ico"); - background-repeat: no-repeat; - background-position: right bottom; + .dropdown-element { + width: 95%; + margin-left: 3%; + } } -#nestedAccordion h3{ - cursor:pointer; - padding:4px; - color: #666; - text-shadow: 0 1px 0 rgba(255, 255, 255, .5); - background-color: #f5f5f5; - background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#ededed)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #ededed); - background-image: -moz-linear-gradient(top, #f5f5f5, #ededed); - background-image: -ms-linear-gradient(top, #f5f5f5, #ededed); - background-image: -o-linear-gradient(top, #f5f5f5, #ededed); - background-image: linear-gradient(to bottom, #f5f5f5, #ededed); +.select2-container { + width: 100% !important; } -#nestedAccordion h3:hover{ - color:#000; -} -#nestedAccordion h3 + div{ - display:none; - background-color:#F5F5F5; - padding:5px 5px 5px 30px; -} -#nestedAccordion li:hover{ - color:#000; - cursor:pointer; -} -#nestedAccordion h2 +div.aberto{ - display:inherit; -} + +// #nestedAccordion{ +// width:100%; +// } +// #nestedAccordion h2, #nestedAccordion h3, +// #nestedAccordion div, #nestedAccordion ol, +// #nestedAccordion li{ +// /* reset styles for accordion */ +// margin:0; +// padding:0; +// font-size:1em; +// font-weight:normal; +// list-style:none; +// } +// #nestedAccordion div{ +// color:#555;/*#555 #003300*/ +// overflow:hidden; +// display:none; +// } +// +// #nestedAccordion h2{ +// cursor:pointer; +// color:#fff; +// font-size:1.1em; +// moz-border-radius: 5px 5px 0 0; +// -webkit-border-radius: 5px 5px 0 0; +// border-radius: 5px 5px 0 0; +// padding:3px; +// margin-top:5px; +// background-color: #3F434F; +// background-image: -webkit-gradient(linear, left top, left bottom, from(#4B8CFF), to(#447FE8)); +// background-image: -webkit-linear-gradient(top, #4B8CFF, #447FE8);/*#4B8CFF, #447FE8*/ +// background-image: -moz-linear-gradient(top, #4B8CFF, #447FE8); +// background-image: -ms-linear-gradient(top, #4B8CFF, #447FE8); +// background-image: -o-linear-gradient(top, #4B8CFF, #447FE8); +// background-image: linear-gradient(to bottom, #4B8CFF, #447FE8); +// background-image: url("arrow.ico"); +// background-repeat: no-repeat; +// background-position: right bottom; +// } +// #nestedAccordion h3{ +// cursor:pointer; +// padding:4px; +// color: #666; +// text-shadow: 0 1px 0 rgba(255, 255, 255, .5); +// background-color: #f5f5f5; +// background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#ededed)); +// background-image: -webkit-linear-gradient(top, #f5f5f5, #ededed); +// background-image: -moz-linear-gradient(top, #f5f5f5, #ededed); +// background-image: -ms-linear-gradient(top, #f5f5f5, #ededed); +// background-image: -o-linear-gradient(top, #f5f5f5, #ededed); +// background-image: linear-gradient(to bottom, #f5f5f5, #ededed); +// +// } +// #nestedAccordion h3:hover{ +// color:#000; +// } +// #nestedAccordion h3 + div{ +// display:none; +// background-color:#F5F5F5; +// padding:5px 5px 5px 30px; +// } +// #nestedAccordion li:hover{ +// color:#000; +// cursor:pointer; +// } +// #nestedAccordion h2 +div.aberto{ +// display:inherit; +// } +// ///Contrast +// .contraste{ +// .thumbnail{ +// background-color: black !important; +// } +// .navbar{ +// select{ +// color: black; +// } +// } +// #nestedAccordion{ +// div{ +// background-color: black !important; +// color: white !important; +// } +// h3{ +// color: white; +// background-color: black !important; +// background-image: none !important; +// border-bottom: 1px solid white; +// } +// h3:hover{ +// color: white; +// } +// } +// } diff --git a/app/assets/stylesheets/application/users.scss b/app/assets/stylesheets/application/users.scss new file mode 100644 index 0000000000000000000000000000000000000000..334ce327e22cfb358fe6cdb6a6b8a2306f84ae9a --- /dev/null +++ b/app/assets/stylesheets/application/users.scss @@ -0,0 +1,25 @@ +$header-blue: #1676bc; + +.user-image { + width: 60px; + height: 60px; + border-radius: 50%; +} + +.user-header { + background-color: #e7e7e8; + width: 100%; + min-height: 100px; + padding: 15px; + + .right-column { + text-align: right; + + .btn { + background-color: $header-blue; + color: white; + border: 0px; + min-width: 150px; + } + } +} diff --git a/app/assets/stylesheets/edges.scss b/app/assets/stylesheets/edges.scss deleted file mode 100644 index 248e4c0d098e1ffcb97d204565abaa8013256443..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/edges.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the Edges controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/learning_objects.scss b/app/assets/stylesheets/learning_objects.scss deleted file mode 100644 index b9ba81d3d355ebd38241b2355d66235b122d16c5..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/learning_objects.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the LearningObjects controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/registrations.scss b/app/assets/stylesheets/registrations.scss deleted file mode 100644 index f6e17a22d8ea83e854c44006511714d6fc63a863..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/registrations.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the registrations controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/university.scss b/app/assets/stylesheets/university.scss deleted file mode 100644 index b37e7ce20f0e77f10ef56f66461a2226c2646e4e..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/university.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the university controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/users.scss b/app/assets/stylesheets/users.scss deleted file mode 100644 index 1efc835ccd15adaf355c0501d7237d13529771e1..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/users.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the users controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/collections_controller.rb b/app/controllers/collections_controller.rb index e9a1359aeec0a3d145828c434b84107be363c4a5..6edf2387280c0305d5a85cd77af40cb30647e494 100644 --- a/app/controllers/collections_controller.rb +++ b/app/controllers/collections_controller.rb @@ -1,5 +1,5 @@ class CollectionsController < ApplicationController - before_action :set_collection, only: [:show, :edit, :update, :destroy, :like] + before_action :set_collection, only: [:show, :update, :destroy, :like] # GET /collections # GET /collections.json @@ -12,13 +12,9 @@ class CollectionsController < ApplicationController def show end - # GET /collections/new - def new - @collection = Collection.new - end - - # GET /collections/1/edit - def edit + # POST /collections/1/like + def like + collection_repository.like @collection end # POST /collections @@ -57,12 +53,10 @@ class CollectionsController < ApplicationController end end - - private def set_collection - @collection = collection_repository.find("##{params[:id]}") + @collection = collection_repository.find params[:id] end def collection_repository @@ -71,7 +65,7 @@ class CollectionsController < ApplicationController # Never trust parameters from the scary internet, only allow the white list through. def collection_params - params[:collection_object] + params.require(:collection).permit(:name, :privacy, learning_objects: []) end end diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb index 59111b75a5f4d98da8b305c10c8607954d60341e..3ded253c23cd10465b3624db636413ac3bf7b848 100644 --- a/app/controllers/learning_objects_controller.rb +++ b/app/controllers/learning_objects_controller.rb @@ -73,7 +73,7 @@ class LearningObjectsController < ApplicationController # Use callbacks to share common setup or constraints between actions. def set_learning_object - @learning_object = learning_object_repository.get_by_dspace_id params[:id] + @learning_object = learning_object_repository.find params[:id] end # Never trust parameters from the scary internet, only allow the white list through. diff --git a/app/controllers/management/welcome_controller.rb b/app/controllers/management/welcome_controller.rb index 7fa9356d45eb2371bbe382b9fed45d940f98ac56..20e2db6276805d5930e04d6f1340ebdd5268dd40 100644 --- a/app/controllers/management/welcome_controller.rb +++ b/app/controllers/management/welcome_controller.rb @@ -1,8 +1,4 @@ class Management::WelcomeController < ManagementController def index - - end - - def destaques end end diff --git a/app/controllers/management_controller.rb b/app/controllers/management_controller.rb index 069b0f6bfa6ad5c5c32103985aee9c26ce482417..6db75c2c7f0cc891b5a3da1010a0ae330923a3de 100644 --- a/app/controllers/management_controller.rb +++ b/app/controllers/management_controller.rb @@ -1,16 +1,3 @@ class ManagementController < ApplicationController layout 'management' - - - def destaques - end - - def denuncias - end - - def estatisticas - end - - def usuarios - end end diff --git a/app/controllers/search/solr_controller.rb b/app/controllers/search/solr_controller.rb deleted file mode 100644 index 6054b17d6d37b4bf0a9f43abcd70cd09801ffe4b..0000000000000000000000000000000000000000 --- a/app/controllers/search/solr_controller.rb +++ /dev/null @@ -1,127 +0,0 @@ -class Search::SolrController < ApplicationController - - def search - queryParams = {:q => '*:*', :fq => params[:qry]} - - results = solr_client.get 'select', - :params => merge_search_parameters(queryParams, solr_search_default_parameters) - - objectsFound1 = select_items_from_results(results) - #@numFound = results["response"]["numFound"] - @numFound =objectsFound1.length - - per_page=10 - @npagnac=10 - if(params[:paginacao]) - per_page=params[:paginacao].to_i - @npagnac=per_page - end - - if(params[:page]) - #params[:page] = 1 - else - params[:page] = 1 - end - - current_page= params[:page].to_i - - if params[:sort] - @ordena=params[:sort] - end - if params[:sort] == "author" - objectsFound1 = sort_author(objectsFound1); - elsif params[:sort] == "publicationasc" - objectsFound1 = objectsFound1.sort_by{|item| [ item['search.resourceid'] ]} - elsif params[:sort] == "publicationdesc" - objectsFound1 = objectsFound1.sort_by{|item| -item['search.resourceid'] } - elsif params[:sort] == "relevance" - items= objectsFound1.collect{ |x| Ranking::Item.new("",1,1,1, x) } #puts each object in an item - - rater = Ranking::Rater.new( - Ranking::Strategies::BasicRater.new( - #define sorting weights - positionWeight = 1000, - useWeight = 1, - likeWeight = 100 - ) - ) - - a = rater.sortByRate(items) # Returns sorted array of items - objectsFound1= a.collect{ |x| x.info } #get only the info fields(objects) - - elsif params[:sort] == "title" - objectsFound1 = sort_title(objectsFound1); - end - # current_page, per_page, total_results - @objectsFound = WillPaginate::Collection.create(current_page, per_page, objectsFound1.length) do |pager| - @start = (current_page-1)*per_page - pager.replace (objectsFound1.to_a[@start,per_page]) - end - - #search.resourceid - #for item in objectsFound - # Busca no orientDb (rid,classe,rate) - #end - end - - private - - #Resource types: - # 2 = Item - # 3 = Collection - # 4 = Community - - def select_items_from_results(results) - resultList = Set.new - results["response"]["docs"].select { |r| - r["search.resourcetype"].to_i.equal? 2 - }.each do |i| - resultList.add i - end - return resultList - end - - def solr_client - return RSolr.connect :url => 'http://portalmecdev.c3sl.ufpr.br:8080/solr/search/' - end - - def merge_search_parameters(p1, p2) - return p1.merge(p2) { |key,oldval,newval| key = [newval,oldval].flatten } - end - - def solr_search_default_parameters - return { - "fl"=>[" - search.resourcetype, search.resourceid, - handle, author, title, dc.description - "], - "type"=>"0", - "start"=>"0", - "rows"=>"1000", - "facet"=>"true", - "facet.offset"=>"0", - "facet.mincount"=>"1", - "f.subject_tax_0_filter.facet.sort"=>"count", - "f.subject_tax_0_filter.facet.limit"=>"11", - "f.author_filter.facet.limit"=>"11", - "f.dateIssued.year.facet.sort"=>"index", - "f.dateIssued.year.facet.limit"=>"10", - "f.author_filter.facet.sort"=>"count", - "facet.field"=>["author_filter","subject_tax_0_filter","dateIssued.year"], - "fq"=>["NOT(withdrawn:true)","NOT(discoverable:false)","read:(g0 OR g0)"] - } - end - - def sort_author(items) - items = items.sort_by{|item| [ item['author'].to_s.downcase ]} - items.each{ |item| item['author'] = sort_author(item['author']) if (item['author'].nil? ? [] : item['author']).size > 0 } - items - end - - - def sort_title(items) - items = items.sort_by{|item| [ item['title'].to_s.downcase ]} - items.each{ |item| item['title'] = sort_title(item['title']) if (item['title'].nil? ? [] : item['title']).size > 0 } - items - end -end \ No newline at end of file diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..a59fd8163bae09371322c428f04d4e2cfc6019ab --- /dev/null +++ b/app/controllers/search_controller.rb @@ -0,0 +1,74 @@ +class SearchController < ApplicationController + + include SearchEngine::OrientdbLucene + + def index + + objectsFound = search(params[:qry]) + @numFound = objectsFound.length + + per_page=10 + @npagnac=10 + if(params[:paginacao]) + per_page=params[:paginacao].to_i + @npagnac=per_page + end + + if(params[:page]) + #params[:page] = 1 + else + params[:page] = 1 + end + + current_page = params[:page].to_i + + if params[:sort] + @ordena = params[:sort] + end + if params[:sort] == "author" + objectsFound = sort_author(objectsFound); + elsif params[:sort] == "publicationasc" + objectsFound = objectsFound.sort_by{|item| [ item.id ]} + elsif params[:sort] == "publicationdesc" + objectsFound = objectsFound.sort_by{|item| - item.id } + elsif params[:sort] == "relevance" + items= objectsFound.collect{ |x| Ranking::Item.new(x.name,x.views,0,x.likes,x) } #puts each object in an item + + rater = Ranking::Rater.new( + Ranking::Strategies::BasicRater.new( + #define sorting weights + positionWeight = 1000, + useWeight = 1, + likeWeight = 100 + ) + ) + + a = rater.sortByRate(items) # Returns sorted array of items + objectsFound = a.collect{ |x| x.info } #get only the info fields(objects) + + elsif params[:sort] == "title" + objectsFound = sort_title(objectsFound); + end + # current_page, per_page, total_results + @results = WillPaginate::Collection.create(current_page, per_page, objectsFound.length) do |pager| + @start = (current_page-1)*per_page + pager.replace (objectsFound.to_a[@start,per_page]) + end + + end + + private + + def sort_author(items) + # items = items.sort_by{|item| [ item['author'].to_s.downcase ]} + # items.each{ |item| item['author'] = sort_author(item['author']) if (item['author'].nil? ? [] : item['author']).size > 0 } + items + end + + + def sort_title(items) + # items = items.sort_by{|item| [ item['title'].to_s.downcase ]} + # items.each{ |item| item['title'] = sort_title(item['title']) if (item['title'].nil? ? [] : item['title']).size > 0 } + items + end +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..16a142622ac082465d1222429fbd9bfb45ff0dcd --- /dev/null +++ b/app/controllers/users_controller.rb @@ -0,0 +1,5 @@ +class UsersController < ApplicationController + def show + @objects = repository.for(:learning_object).all + end +end diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb index cdcd84a35a5d2aa360b6b2e889588a909fa5f8f7..0860a208641c0d3ba8ee4ba980905f5b29d1e04a 100644 --- a/app/helpers/learning_objects_helper.rb +++ b/app/helpers/learning_objects_helper.rb @@ -1,2 +1,18 @@ module LearningObjectsHelper + + def show_categories(categories = []) + categories.to_s + end + + def render_learning_object(orientation, learning_object) + case (orientation) + when "vertical" + render "learning_objects/learning_object_vertical", learning_object: learning_object + when "horizontal" + render "learning_objects/learning_object_horizontal", learning_object: learning_object + else + render "learning_objects/learning_object_horizontal", learning_object: learning_object + end + end + end diff --git a/app/models/collection.rb b/app/models/collection.rb index aaa1bc126f029bb960b14ce1bcb15fd0cbd1201c..a680bb6b6cae2df3de5d58455ff1ef71f9ad1ff1 100644 --- a/app/models/collection.rb +++ b/app/models/collection.rb @@ -1,5 +1,24 @@ class Collection include ActiveModel::Model + attr_accessor :id, :created_at, :description, :name, :views, :likes, + :owner, :learning_objects + validates_presence_of :name, :created_at, :views, :likes, :owner, :learning_objects + validates_with Validators::CollectionOwnerValidator + + def initialize(params={}) + super(params.merge(defaults)) + end + + private + + def defaults + { + views: 0, + likes: 0, + created_at: DateTime.new, + owner: User.new, + learning_objects: [] + } + end - attr_accessor :id, :dateCreation, :description, :highlights, :name, :thumbnail, :views, :likes end diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb index bcb017fa6e2bb31be8cc5d1afb4c6decf57f21b8..3290fc7c5f3a8a842f5e5fd695f2cee638d4b325 100644 --- a/app/models/learning_object.rb +++ b/app/models/learning_object.rb @@ -1,10 +1,10 @@ class LearningObject include ActiveModel::Model attr_accessor :id, :id_dspace, :rid, :name, :description, - :thumbnail, :date_creation, :last_modified, + :thumbnail, :created_at, :last_modified, :type, :bitstreams, :metadata, :likes, :views, :downloads - validates_presence_of :name, :date_creation, :type, :likes, :views, :downloads + validates_presence_of :name, :created_at, :type, :likes, :views, :downloads validates_numericality_of :likes, greater_than_or_equal_to: 0 validates_numericality_of :views, greater_than_or_equal_to: 0 validates_numericality_of :downloads, greater_than_or_equal_to: 0 @@ -17,6 +17,10 @@ class LearningObject @subjects ||= learning_object_repository.get_subjects(self) end + def categories + get_metadata_value_of 'dc.subject.category' + end + def get_metadata_value_of key values = @metadata.select { |v| v["key"] == key } unless values.empty? diff --git a/app/models/main_page.rb b/app/models/main_page.rb new file mode 100644 index 0000000000000000000000000000000000000000..fad55d3bbaaa81f8f04a378e60249b0619ecd4de --- /dev/null +++ b/app/models/main_page.rb @@ -0,0 +1,4 @@ +class MainPage + include ActiveModel::Model + attr_accessor :id, :carousel, :highlights +end \ No newline at end of file diff --git a/app/models/search.rb b/app/models/search.rb new file mode 100644 index 0000000000000000000000000000000000000000..a92037f954023ff18fd5bf39199c38cab5189de7 --- /dev/null +++ b/app/models/search.rb @@ -0,0 +1,21 @@ +class Search + include ActiveModel::Model + attr_accessor :results_per_page, :sort, :query, :results + + validates_presence_of :query, :results_per_page, :sort + validates_numericality_of :results_per_page, greater_than: 0 + + def initialize(params={}) + super(params.merge(defaults)) + end + + private + + def defaults + { + sort: 'relevance', + results_per_page: 10 + } + end + +end \ No newline at end of file diff --git a/app/models/subject.rb b/app/models/subject.rb index a5c857f6a0e3b5741e7b1a989f1f045117fe0d44..58e25fa4d60b98f24147ccee7839f0dee1e01bc7 100644 --- a/app/models/subject.rb +++ b/app/models/subject.rb @@ -1,5 +1,5 @@ class Subject include ActiveModel::Model - attr_accessor :id, :dateCreation, :description, :highlights, :name, :thumbnail + attr_accessor :id, :dateCreation, :description, :highlights, :name end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 28100ca583e944ea07f031fab91efee58583551d..855ae8b7a7b1e7cf7d08afadd72d8c6edc555d5f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -26,6 +26,6 @@ class User < ActiveRecord::Base after_create SyncUserRepositoryService.new after_destroy SyncUserRepositoryService.new - has_attached_file :avatar, styles: { medium: "300x300>", thumb: "60x60>" }, default_url: ActionController::Base.helpers.asset_path('missing.svg') + has_attached_file :avatar, styles: { medium: "300x300>", thumb: "60x60>" }, default_url: ActionController::Base.helpers.asset_path('user-anon.png') validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/ end diff --git a/app/models/validators/collection_owner_validator.rb b/app/models/validators/collection_owner_validator.rb new file mode 100644 index 0000000000000000000000000000000000000000..d98460e12908c90300f426b6f205d60eb34be780 --- /dev/null +++ b/app/models/validators/collection_owner_validator.rb @@ -0,0 +1,9 @@ +class Validators::CollectionOwnerValidator < ActiveModel::Validator + + def validate(record) + if !record.owner.is_a?(User) + record.errors.add :base, 'The owner must be an User' + end + end + +end \ No newline at end of file diff --git a/app/models/web_link.rb b/app/models/web_link.rb new file mode 100644 index 0000000000000000000000000000000000000000..ee1edc1eb3bb5c4369e1448629534530a3af286b --- /dev/null +++ b/app/models/web_link.rb @@ -0,0 +1,4 @@ +class WebLink + include ActiveModel::Model + attr_accessor :id, :dateCreation, :description, :name, :thumbnail, :url +end \ No newline at end of file diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb index c812590eab75fd06bd36e2f5ca54d15a616a6dba..a597b2ca3db07e288434284982510cccedbef7a6 100644 --- a/app/repositories/orient_db/collection_repository.rb +++ b/app/repositories/orient_db/collection_repository.rb @@ -2,28 +2,18 @@ module OrientDb class CollectionRepository < Base include OrientDb::Methods::EdgeMethods - # Example: - # list = repository.for(:collections).all - # list.each do |collection| - # collection_object.inspect <LearningObject model> - # end def all hash = connection.query "SELECT FROM Collection" collections = build_collections(hash) end # Usage: - # collection = repository.for(:collections).get_by_dspace_id 123 - # + # collection = repository.for(:collections).find '#14:14' def find(id) result = connection.query "SELECT FROM #{id}" build_collection result.first end - def create(name, url) - connection.command sprintf("INSERT INTO Collection (name) VALUES ('%s')", name) - end - # Usage: # repository.for(:collections).destroy collection # @@ -34,9 +24,9 @@ module OrientDb private def build_collection(args={}) - return Collection.new( - :id => args["@rid"], - :name => args["name"] + Collection.new( + :id => args["@rid"], + :name => args["name"] ) end @@ -45,7 +35,8 @@ module OrientDb hash.each do |h| collections << build_collection(h) end - return collections + + collections end end diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb index e7a317fba3ca9c8cc105ca4717b5e19418c37dee..b15496835163b9045c69a23ef74d9d8c324583f1 100644 --- a/app/repositories/orient_db/learning_object_repository.rb +++ b/app/repositories/orient_db/learning_object_repository.rb @@ -21,7 +21,7 @@ module OrientDb # end def all learning_objects_hash = connection.query "SELECT FROM LearningObject" - learning_objects = build_learning_objects(learning_objects_hash) || [] + build_learning_objects(learning_objects_hash) || [] end # Usage: @@ -51,18 +51,20 @@ module OrientDb connection.command sprintf("DELETE VERTEX LearningObject where @rid = '%s'", learning_object.id) end - #def author_of(rid) - # connection.query "SELECT expand(in) FROM (SELECT expand(out_author_of) FROM User WHERE @rid=#{rid})" - #end - - #def has(rid) - # connection.query "SELECT expand(in) FROM (SELECT expand(out_has) FROM User WHERE @rid=#{rid})" - #end - - #def get_likes(id) - # likes = connection.query "select outE('Likes') from #{id}" - # likes[0]["outE"] - #end + ## + # To create "index:learningobject_search" on OrientDB, use the following command: + # CREATE INDEX learningobject_search + # ON LearningObject (name, description) + # FULLTEXT ENGINE LUCENE + # METADATA {"analyzer":"org.apache.lucene.analysis.br.BrazilianAnalyzer"} + def search(qry) + learning_objects_hash = connection.query " + SELECT EXPAND(rid) + FROM index:learningobject_search + WHERE key LUCENE '#{qry}' + ", limit: -1 + learning_objects = build_learning_objects(learning_objects_hash) || [] + end private @@ -86,8 +88,18 @@ module OrientDb :metadata => args["metadata"], :last_modified => args["last_modified"]) - lo.likes = count_likes lo - lo.views = count_views lo + unless args["in_Likes"].nil? + lo.likes = args["in_Likes"].count + else + lo.likes = 0 + end + + unless args["in_Views"].nil? + lo.views = args["in_Views"].count + else + lo.views = 0 + end + lo end diff --git a/app/views/collections/_collection.html.erb b/app/views/collections/_collection.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..eaa86d05f3c146f5e0d2ee4a60c91c7413fd055d --- /dev/null +++ b/app/views/collections/_collection.html.erb @@ -0,0 +1,31 @@ +<div class="row collections"> + <h2><%= title %></h2> + + <% learning_objects.each do |learning_object| %> + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b><%= learning_object.categories %></b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading"><%= learning_object.name %></h4> + <span class="glyphicon glyphicon-eye-open"> <%= learning_object.views %> </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + <!-- /item --> + <% end %> + +</div> \ No newline at end of file diff --git a/app/views/collections/_create.html.erb b/app/views/collections/_create.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..a0f48962395b5723585e9d761128bd67af7b5de0 --- /dev/null +++ b/app/views/collections/_create.html.erb @@ -0,0 +1,9 @@ +<a href="#" id="create_collection_popover">Criar coleção</a> + +<div id="create_collection_popover_content" style="display: none"> + <%= render 'form' %> +</div> + +<div id="create_collection_popover_title" style="display: none"> + Criar coleção +</div> \ No newline at end of file diff --git a/app/views/collections/_form.html.erb b/app/views/collections/_form.html.erb index 91c6545768704012706b4c7578b3534c7c2a7ef6..aaa75f9e1a311115f098aaff59ed87f318c69001 100644 --- a/app/views/collections/_form.html.erb +++ b/app/views/collections/_form.html.erb @@ -1,17 +1,12 @@ -<%= form_for(@collection) do |f| %> - <% if @collection.errors.any? %> - <div id="error_explanation"> - <h2><%= pluralize(@collection.errors.count, "error") %> prohibited this learning_object from being saved:</h2> +<form> + <label>Nome da coleção</label> + <input type='text' style="width:250px"/> - <ul> - <% @collection.errors.full_messages.each do |message| %> - <li><%= message %></li> - <% end %> - </ul> - </div> - <% end %> + <label>Privacidade</label> + <select> + <option>Público</option> + <option>Somente seguidores</option> + </select> - <div class="actions"> - <%= f.submit %> - </div> -<% end %> + <input type="submit"/> +</form> \ No newline at end of file diff --git a/app/views/collections/edit.html.erb b/app/views/collections/edit.html.erb deleted file mode 100644 index 6146cc3a11722b79aac7b51e2467f85d2e406c13..0000000000000000000000000000000000000000 --- a/app/views/collections/edit.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<h1>Editing Institution</h1> - -<%= render 'form' %> - -<%= link_to 'Show', @institution %> | -<%= link_to 'Back', institutions_path %> diff --git a/app/views/collections/index.html.erb b/app/views/collections/index.html.erb index 165184353ba8e33be3b955729452d72e31c82e58..17a6fc78e9ac25830ddafd57c38714d7c5ad5f93 100644 --- a/app/views/collections/index.html.erb +++ b/app/views/collections/index.html.erb @@ -1,5 +1,245 @@ -<h1>Listing Institutions</h1> +<h1>Coleções de Recursos</h1> -<% @collections.each do |collection| %> - <%= render 'shared/application/object_vertical', object: collection %> -<% end %> +<% if @collections.count == 0 %> + <div class="row no-collections"> + <p>Nenhuma coleção foi criada, seja o primeiro!</p> + </div> +<% else %> + + <div class="row recommend-collections"> + <h2>Recomendamos para você</h2> + + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Compreensão oral</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + <!-- /item --> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Educação Básica</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Ensino Médio</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + </div> + + <div class="row newest-collections"> + <h2>Últimas coleções</h2> + + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Compreensão oral</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + <!-- /item --> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Educação Básica</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Ensino Médio</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + </div> + + <div class="row newest-collections"> + <h2>Últimas coleções</h2> + + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Compreensão oral</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + <!-- /item --> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Educação Básica</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Ensino Médio</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + </div> +<% end %> \ No newline at end of file diff --git a/app/views/collections/new.html.erb b/app/views/collections/new.html.erb deleted file mode 100644 index 75bb5679fb942a774c05f839b972258a94ad2610..0000000000000000000000000000000000000000 --- a/app/views/collections/new.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<h1>New Institution</h1> - -<%= render 'form' %> - -<%= link_to 'Back', institutions_path %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 5ac749287c3ea221c5295b1b513746bea04fe73d..5974f076c8ed56f498f2588ac3fa2c65fd02e7b7 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -11,16 +11,26 @@ <body> <%= render 'shared/application/header' %> - <% if notice %> - <%= notice %> - <% end %> - <div class="container"> + <% if notice %> + <div class="alert alert-info" role="alert"> + <button type="button" class="close" data-dismiss="alert" aria-label="Fechar"><span aria-hidden="true">×</span></button> + <%= notice %> + </div> + <% end %> + + <% if alert %> + <div class="alert alert-danger alert-dismissible" role="alert"> + <button type="button" class="close" data-dismiss="alert" aria-label="Fechar"><span aria-hidden="true">×</span></button> + <%= alert %> + </div> + <% end %> + <%= yield %> </div> <%= render 'shared/application/footer' %> - + <script defer="defer" src="//barra.brasil.gov.br/barra.js" type="text/javascript"></script> </body> </html> diff --git a/app/views/learning_objects/_learning_object.erb b/app/views/learning_objects/_learning_object.erb new file mode 100644 index 0000000000000000000000000000000000000000..db67c9c3b6b5b6f3e7e351ae921e2b7dbb388565 --- /dev/null +++ b/app/views/learning_objects/_learning_object.erb @@ -0,0 +1 @@ +<%= render_learning_object orientation, learning_object %> diff --git a/app/views/learning_objects/_learning_object_horizontal.erb b/app/views/learning_objects/_learning_object_horizontal.erb new file mode 100644 index 0000000000000000000000000000000000000000..31a37eebdc2e64e6095f8988119062c251c42c63 --- /dev/null +++ b/app/views/learning_objects/_learning_object_horizontal.erb @@ -0,0 +1,27 @@ +<div class="learning-object-horizontal"> + <div class="media"> + <div class="media-left media-middle"> + <a href="#"> + <img src="http://dummyimage.com/250x150/363336/fff" alt='dummy image'> + </a> + </div> + <div class="media-body"> + <a href="<%= learning_object_path(id: learning_object.id) %>"> + <% if learning_object.name.nil? %> + <h4 class="media-heading">Sem TÃtulo</h4> + <% else %> + <h4 class="media-heading"><%= learning_object.name %></h4> + <% end %> + </a> + <span>Por <a>Usuário </a></span><br/> + <span class="glyphicon glyphicon-eye-open"><%= learning_object.views %> </span> + <span class="glyphicon glyphicon-star"><%= learning_object.likes %> </span><br> + <% unless learning_object.description.nil? %> + <%= learning_object.description %> + <br/> + <% end %> + <br/> + Em<b> <%= show_categories learning_object.categories %></b> + </div> + </div> +</div> diff --git a/app/views/shared/application/_object_vertical.html.erb b/app/views/learning_objects/_learning_object_vertical.erb similarity index 50% rename from app/views/shared/application/_object_vertical.html.erb rename to app/views/learning_objects/_learning_object_vertical.erb index 8a4b66c025827a3d651e3e28869f32d58b3341b7..ff0bc2740338a08f42eda2dc7754a8732f515cbe 100644 --- a/app/views/shared/application/_object_vertical.html.erb +++ b/app/views/learning_objects/_learning_object_vertical.erb @@ -1,16 +1,16 @@ -<div class="object-vertical"> +<div class="learning-object-vertical"> <div class="panel"> <div> <img src="http://dummyimage.com/250x150/363336/fff" alt='dummy image' class="img-responsive"> </div> <div class="panel-body"> - <% if object.name.nil? %> + <% if learning_object.name.nil? %> <h4 class="media-heading">Sem TÃtulo</h4> <% else %> - <h4 class="media-heading"><%= object.name %></h4> + <h4 class="media-heading"><%= learning_object.name %></h4> <% end %> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> + <span class="glyphicon glyphicon-eye-open"><%= learning_object.views %> </span> + <span class="glyphicon glyphicon-star"><%= learning_object.likes %> </span> <span>Por <a>Usuário </a></span> </div> </div> diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..46f39ee39908c84a87445daf64decea7d72434ff --- /dev/null +++ b/app/views/search/index.html.erb @@ -0,0 +1,373 @@ +<script type="text/javascript"> + $(document).ready(function () { + $(".select-tag-container").select2(); + + var runDropdown = function (element) { + if ($(element).next().is(':hidden')) { + $('> .caret', element).addClass('caret-up'); + $(element).next().slideDown(); + } + else { + $('> .caret', element).removeClass('caret-up'); + $(element).next().slideUp(); + } + }; + + runDropdown($('#nestedAccordion .dropdown')); + + $('#nestedAccordion .dropdown').click(function () { + runDropdown(this); + }); + }); +</script> + +<div class="row"> + <div class="col-sm-4 search-sidebar"> + <!-- <h2>Busca Avançada</h2> --> + <!-- <div class="media"> + <div class="media-left"> + <span class="glyphicon glyphicon-list" style="font-size: 40px" aria-hidden="true" /> + </div> + <div class="media-body"> + <h4 class="media-heading">Filtros</h4> + Nenhum selecionado + </div> + </div> --> + + <div id="nestedAccordion"> + <h3 class="dropdown open">Matérias<span class="caret caret-align-right"/></h3> + + <div class="dropdown-element"> + <h4 class="dropdown">Matemática<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">Conjuntos</option> + <option value="">Soma</option> + </optgroup> + <optgroup label="Avançada"> + <option value="AL">Ãlgebra</option> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">Biologia<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">Plantas</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">História<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">História do Brasil</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">LÃngua Portuguesa<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">...</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">Geografia<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">...</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">Ciências<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">...</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">Educação FÃsica<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">...</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + <h4 class="dropdown">Inglês<span class="caret caret-align-right"/></h4> + + <div> + <select class="select-tag-container" multiple="multiple"> + <option value="">Todos</option> + <optgroup label="Básico"> + <option value="">...</option> + <option value="">...</option> + </optgroup> + <optgroup label="Avançada"> + <option value="">...</option> + </optgroup> + </select> + </div> + </div> + <!--fim materias --> + <h3 class="dropdown open">Conteúdo<span class="caret caret-align-right"/></h3><!--Tipo 1--> + <div class="dropdown-element"> + <table class="tipo1" style="width:100%"> + <tr> + <td><p>MÃdia</p></td> + <td></td> + </tr> + <tr> + <td><input type="checkbox"> Fotos</td> + <td><input type="checkbox"> Imagens</td> + </tr> + <tr> + <td><input type="checkbox"> Ãudio</td> + <td><input type="checkbox"> VÃdeos</td> + </tr> + <tr> + <td><input type="checkbox"> Apresentações MultimÃdia</td> + <td><input type="checkbox"> Apps</td> + </tr> + <tr> + <td></td> + <td></td> + </tr> + <tr> + <td><p>Textos</p></td> + <td></td> + </tr> + <tr> + <td><input type="checkbox"> Anais</td> + <td><input type="checkbox"> Artigos Web</td> + </tr> + <tr> + <td><input type="checkbox"> CapÃtulos de Livros</td> + <td><input type="checkbox"> Dissertações</td> + </tr> + <tr> + <td><input type="checkbox"> Livros</td> + <td><input type="checkbox"> Monografias</td> + </tr> + <tr> + <td><input type="checkbox"> Periódicos</td> + <td><input type="checkbox"> Revistas</td> + </tr> + <tr> + <td><input type="checkbox"> Teses</td> + </tr> + <tr> + <td></td> + <td></td> + </tr> + <tr> + <td><p>Outros</p></td> + <td></td> + </tr> + <tr> + <td><input type="checkbox"> Planos de Aula</td> + </tr> + </table> + </div> + <!-- <h3>Conteúdo - Tipo 2</h3> + <div> + <h4>MÃdia</h4> + <div> + <table> + <tr> + <td><input type="checkbox">Fotos</td> + <td><input type="checkbox">Imagens</td> + </tr> + <tr> + <td><input type="checkbox">VÃdeos</td> + <td><input type="checkbox">Ãudio</td> + </tr> + <tr> + <td><input type="checkbox">Apresentações MultimÃdia</td> + <td><input type="checkbox">Apps</td> + </tr> + </table> + </div> + <h4>Textos</h4> + <div> + <table> + <tr> + <td><input type="checkbox">Anais</td> + <td><input type="checkbox">Artigos Web</td> + </tr> + <tr> + <td><input type="checkbox">CapÃtulos de Livros</td> + <td><input type="checkbox">Dissertações</td> + </tr> + <tr> + <td><input type="checkbox">Livros</td> + <td><input type="checkbox">Monografias</td> + </tr> + <tr> + <td><input type="checkbox">Periódicos</td> + <td><input type="checkbox">Revistas</td> + </tr> + <tr> + <td><input type="checkbox">Teses</td> + <td></td> + </tr> + </table> + </div> + <h4>Outros</h4> + <div> + <input type="checkbox">Planos de Aula + </div> + </div> --> + <h3 class="dropdown">Ano escolar<span class="caret caret-align-right"/></h3> + + <div class="dropdown-element"> + <table style="width:100%"> + <tr> + <td><input type="checkbox">1º</td> + <td><input type="checkbox">5º</td> + </tr> + <tr> + <td><input type="checkbox">2º</td> + <td><input type="checkbox">6º</td> + </tr> + <tr> + <td><input type="checkbox">3º</td> + <td><input type="checkbox">7º</td> + </tr> + <tr> + <td><input type="checkbox">4º</td> + <td><input type="checkbox">8º</td> + </tr> + </table> + </div> + <h3 class="dropdown">Ano de Publicação<span class="caret caret-align-right"/></h3> + + <div class="dropdown-element"> + <input type="radio" name="ano" value="single" checked>Ano:<br/> + <input type="text" name="ano1" size="8"> + <br/> + <input type="radio" name="ano" value="range">Intervalo:<br/> + <input type="text" name="ano2" size="8"> - <input type="text" name="ano2" size="8"> + </div> + </div> + <!-- fim div id="nestedAccordion"--> + + <div id="nestedAccordion"> + <h3 class="dropdown">Pesquisa Avançada<span class="caret caret-align-right"/></h3> + + <form method="get"> + <div class="dropdown-element"> + <table style="width:100%"> + <tr> + <td>Todas estas palavras:</td> + <td><input type="text" name=""></td> + </tr> + <tr> + <td>A frase exata:</td> + <td><input type="text" name=""></td> + </tr> + <tr> + <td>Qualquer uma destas palavras:</td> + <td><input type="text" name=""></td> + </tr> + <tr> + <td>Nenhuma destas palavras:</td> + <td><input type="text" name=""></td> + </tr> + <tr> + <td></td> + <td align="right"><br> + <button type="submit" class="btn btn-default">Pesquisar</button> + </td> + </tr> + </table> + </div> + </form> + </div> + </div> + <!--/span col sm-4--> + + <!-- search results --> + <div class="col-sm-8"> + <% unless @results.empty? %> + <div> + Mostrando resultados <%= @start+1 %>-<%= if (@start+@npagnac) > @numFound then + @numFound + else + (@npagnac+@start) + end %> de <%= @numFound %> + <form method="get"> + <input type="hidden" name="qry" value="<%= params["qry"] %>"> + + <select name="paginacao" onchange='this.form.submit()'> + <option value="<%= @npagnac %>">Resultados por Página</option> + <option value="10">10</option> + <option value="25">25</option> + <option value="50">50</option> + </select> + + <select name="sort" onchange='this.form.submit()'> + <option value=<%= @ordena %>>Ordenar por</option> + <option value="author">Autores</option> + <option value="publicationasc">Mais novos</option> + <option value="publicationdesc">Mais velhos</option> + <option value="relevance">Relevância</option> + <option value="type">Tipo</option> + <option value="title">TÃtulo</option> + </select> + </form> + <br/> + </div> + <br/> + + <div class="container-fluid"> + <%= render @results, orientation: "horizontal" %> + <%= will_paginate @results %> + </div> + <% end %> + </div> + <!-- col-sm-8 --> +</div><!-- /container --> diff --git a/app/views/search/solr/search.html.erb b/app/views/search/solr/search.html.erb deleted file mode 100644 index 2a9e1da5402d07fa93fc6b4952a937e039123b7c..0000000000000000000000000000000000000000 --- a/app/views/search/solr/search.html.erb +++ /dev/null @@ -1,356 +0,0 @@ -<script type="text/javascript"> - $(document).ready(function() { - $(".js-example-basic-multiple").select2(); - - var parentDivs = $('#nestedAccordion div'), - childDivs = $('#nestedAccordion h3').siblings('div'); - - $('#nestedAccordion h2').click(function(){ - // parentDivs.slideUp(); - if($(this).next().is(':hidden')){ - $(this).next().slideDown(); - }else{ - $(this).next().slideUp(); - } - }); - $('#nestedAccordion h3').click(function(){ - // childDivs.slideUp(); - if($(this).next().is(':hidden')){ - $(this).next().slideDown(); - }else{ - $(this).next().slideUp(); - } - }); - }); -</script> - -<div class="container-fluid"> - <div class="col-sm-4"> - <div class="well sidebar-nav"> - <h2> Busca Avançada</h2> - - <div id="nestedAccordion"> - <h2>Seleção Atual</h2> - <div> - <input type="checkbox"> - </div> - <h2>Matérias</h2> - <div class='aberto'> - <h3>Matemática</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">Conjuntos</option> - <option value="">Soma</option> - </optgroup> - <optgroup label="Avançada"> - <option value="AL">Ãlgebra</option> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>Biologia</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">Plantas</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>História</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">História do Brasil</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>LÃngua Portuguesa</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">...</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>Geografia</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">...</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>Ciências</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">...</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>Educação FÃsica</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">...</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - <h3>Inglês</h3> - <div> - <select class="js-example-basic-multiple" multiple="multiple"> - <option value="">Todos</option> - <optgroup label="Básico"> - <option value="">...</option> - <option value="">...</option> - </optgroup> - <optgroup label="Avançada"> - <option value="">...</option> - </optgroup> - </select> - </div> - </div><!--fim materias --> - <h2>Conteúdo</h2><!--Tipo 1--> - <div class='aberto'> - <table class="tipo1" style="width:100%"> - <tr> - <td><p>MÃdia</p> </td> - <td></td> - </tr> - <tr> - <td><input type="checkbox"> Fotos</td> - <td><input type="checkbox"> Imagens</td> - </tr> - <tr> - <td><input type="checkbox"> Ãudio</td> - <td><input type="checkbox"> VÃdeos</td> - </tr> - <tr> - <td><input type="checkbox"> Apresentações MultimÃdia</td> - <td><input type="checkbox"> Apps</td> - </tr> - <tr> - <td></td> - <td></td> - </tr> - <tr> - <td><p>Textos</p></td> - <td></td> - </tr> - <tr> - <td><input type="checkbox"> Anais</td> - <td><input type="checkbox"> Artigos Web</td> - </tr> - <tr> - <td><input type="checkbox"> CapÃtulos de Livros</td> - <td><input type="checkbox"> Dissertações</td> - </tr> - <tr> - <td><input type="checkbox"> Livros</td> - <td><input type="checkbox"> Monografias</td> - </tr> - <tr> - <td><input type="checkbox"> Periódicos</td> - <td><input type="checkbox"> Revistas</td> - </tr> - <tr> - <td><input type="checkbox"> Teses</td> - </tr> - <tr> - <td></td> - <td></td> - </tr> - <tr> - <td><p>Outros</p></td> - <td></td> - </tr> - <tr> - <td><input type="checkbox"> Planos de Aula</td> - </tr> - </table> - </div> - <!-- <h2>Conteúdo - Tipo 2</h2> - <div> - <h3>MÃdia</h3> - <div> - <table> - <tr> - <td><input type="checkbox">Fotos</td> - <td><input type="checkbox">Imagens</td> - </tr> - <tr> - <td><input type="checkbox">VÃdeos</td> - <td><input type="checkbox">Ãudio</td> - </tr> - <tr> - <td><input type="checkbox">Apresentações MultimÃdia</td> - <td><input type="checkbox">Apps</td> - </tr> - </table> - </div> - <h3>Textos</h3> - <div> - <table> - <tr> - <td><input type="checkbox">Anais</td> - <td><input type="checkbox">Artigos Web</td> - </tr> - <tr> - <td><input type="checkbox">CapÃtulos de Livros</td> - <td><input type="checkbox">Dissertações</td> - </tr> - <tr> - <td><input type="checkbox">Livros</td> - <td><input type="checkbox">Monografias</td> - </tr> - <tr> - <td><input type="checkbox">Periódicos</td> - <td><input type="checkbox">Revistas</td> - </tr> - <tr> - <td><input type="checkbox">Teses</td> - <td></td> - </tr> - </table> - </div> - <h3>Outros</h3> - <div> - <input type="checkbox">Planos de Aula - </div> - </div> --> - <h2>Ano escolar</h2> - <div> - <table style="width:100%"> - <tr> - <td><input type="checkbox">1º</td> - <td><input type="checkbox">5º</td> - </tr> - <tr> - <td><input type="checkbox">2º</td> - <td><input type="checkbox">6º</td> - </tr> - <tr> - <td><input type="checkbox">3º</td> - <td><input type="checkbox">7º</td> - </tr> - <tr> - <td><input type="checkbox">4º</td> - <td><input type="checkbox">8º</td> - </tr> - </table> - </div> - <h2>Ano de Publicação</h2> - <div> - <input type="radio" name="ano" value="single" checked>Ano:<br/> - <input type="text" name="ano1" size="8"> - <br/> - <input type="radio" name="ano" value="range">Intervalo:<br/> - <input type="text" name="ano2" size="8"> - <input type="text" name="ano2" size="8"> - </div> - </div><!-- fim div id="nestedAccordion"--> - - <div id="nestedAccordion"> - <h2>Pesquisa Avançada</h2> - <form method="get"> - <div> - <table style="width:100%"> - <tr> - <td>Todas estas palavras:</td> - <td><input type="text" name=""></td> - </tr> - <tr> - <td>A frase exata:</td> - <td><input type="text" name=""></td> - </tr> - <tr> - <td>Qualquer uma destas palavras:</td> - <td><input type="text" name=""></td> - </tr> - <tr> - <td>Nenhuma destas palavras:</td> - <td><input type="text" name=""></td> - </tr> - <tr> - <td></td> - <td align="right"><br><button type="submit" class="btn btn-default">Pesquisar</button></td> - </tr> - </table> - </div> - </form> - </div> - - </div><!--/.well --> - </div><!--/span col sm-4--> - <div class="col-sm-8"> - - <% unless @objectsFound.empty? %> - <h3>Objetos encontrados: <%= @numFound %></h3> - <nav class="navbar navbar-default"> - <div class="container-fluid" > - Mostrando resultados <%= @start+1 %>-<%= if (@start+@npagnac) > @numFound then @numFound else (@npagnac+@start) end %> de <%= @numFound %> - <form method="get"> - <input type="hidden" name="qry" value="<%=params["qry"]%>"> - - <select name="paginacao" onchange='this.form.submit()'> - <option value="<%=@npagnac%>">Resultados por Página</option> - <option value="10">10</option> - <option value="25">25</option> - <option value="50">50</option> - </select> - - <select name="sort" onchange='this.form.submit()'> - <option value=<%=@ordena%>>Ordenar por</option> - <option value="author">Autores</option> - <option value="publicationasc">Mais novos</option> - <option value="publicationdesc">Mais velhos</option> - <option value="relevance">Relevância</option> - <option value="type">Tipo</option> - <option value="title">TÃtulo</option> - </select> - </form> - </div> - </nav> - <br /> - <div class="container-fluid"> - <%= will_paginate @objectsFound %><!--%=@objectsFound%--> - <% @objectsFound.each do |o| %> - <%= render partial: "shared/application/object_tag1", locals: {obj: o} %> - <% end %> - <%= will_paginate @objectsFound %> - </div> - <% end %> - - </div><!-- col-sm-8 --> -</div><!-- /container --> diff --git a/app/views/shared/application/_header.html.erb b/app/views/shared/application/_header.html.erb index 515a4df0f24c2a7dfa30fcec884e5f4142447a49..a36456d98142a784c40f32619fc898fc5a59ad84 100644 --- a/app/views/shared/application/_header.html.erb +++ b/app/views/shared/application/_header.html.erb @@ -13,22 +13,25 @@ <div class="search-bar"> <div class="container"> <div class="row"> - <div class="col-md-3 logo-text"> - <%= link_to root_path do %> - CONTEÚDO<br>EDUCACIONAL - <% end %> + <div class="col-md-3 logo-container"> + <div class="logo"> + <%= link_to root_path do %> + <%= image_tag image_path("logo.png"), class: "logo-image" %><br/> + <h3>CONTEÚDO EDUCACIONAL</h3> + <% end %> + </div> </div> <div class="col-md-6"> <div class="search-accessibility"> - <%= image_tag 'fonte_mais.png', onclick: 'resizeText(1)' %> - <%= image_tag 'fonte_inicial.png', onclick: 'resizeText(0)' %> - <%= image_tag 'fonte_menos.png', onclick: 'resizeText(-1)' %> - <%= image_tag 'contraste.png', onclick: 'changeContrast()' %> + <%= image_tag 'fonte_mais.png', onclick: 'fontSize.resizeText(1)' %> + <%= image_tag 'fonte_inicial.png', onclick: 'fontSize.resizeText(0)' %> + <%= image_tag 'fonte_menos.png', onclick: 'fontSize.resizeText(-1)' %> + <%= image_tag 'contraste.png', onclick: 'contrast.change()' %> </div> <div class="search-input"> <form action="/search" method="get"> - <div class="input-group"> + <div class="input-group" id="search"> <input type="text" placeholder="buscar" class="form-control" name="qry"> <div class="input-group-btn"> <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button> @@ -43,20 +46,20 @@ <% if user_signed_in? %> <div class="media"> <div class="media-body"> - <h4 class="media-heading"><%= link_to current_user.name, edit_user_registration_path %></h4> - <%= link_to 'sair', destroy_user_session_path, method: 'delete', class: "quit-link" %> + <h2 class="media-heading"><%= link_to current_user.name.split(" ").first, edit_user_registration_path %></h2> + <h4><%= link_to 'sair', destroy_user_session_path, method: 'delete', class: "quit-link" %></h4> </div> <div class="media-right"> <a href="#"> - <img class="circular-image" src="<%= current_user.avatar.url(:thumb) %>" alt="Foto do usuário"/> + <img class="user-image" src="<%= current_user.avatar.url(:thumb) %>" alt="Foto do usuário"/> </a> </div> </div> <% else %> <div class="media"> <div class="media-body"> - <h4 class="media-heading"><%= link_to 'entre', new_user_session_path %></h4> - ou <%= link_to 'cadastre-se', new_user_registration_path, class: "register-link" %> + <h2 class="media-heading"><%= link_to 'entre', new_user_session_path %></h2> + <h4>ou <%= link_to 'cadastre-se', new_user_registration_path, class: "register-link" %></h4> </div> </div> <% end %> @@ -65,14 +68,16 @@ </div> </div> - <nav class="navigation"> + <nav class="navigation" id="menu-bar"> <div class="container"> <div class="row"> <ul class="nav navbar-nav"> - <li class="nav-button nav-button-first"><%= link_to 'Assuntos' %></li> + <li class="nav-button nav-button-first"><h3><%= link_to 'Assuntos' %></h3></li> <li role="separator" class="divider"></li> <li class="dropdown nav-button"> - <a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0);">NÃveis de Ensino <span class="caret" /></a> + <h3> + <a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0);">NÃveis de Ensino <span class="caret" /></a> + </h3> <ul class="dropdown-menu"> <li> <div class="row" style="width: 400px;"> @@ -101,9 +106,9 @@ </ul> </li> <li role="separator" class="divider"></li> - <li class="nav-button"><%= link_to 'FAQ', faq_path %></li> + <li class="nav-button"><h3><%= link_to 'FAQ', faq_path %></h3></li> <li role="separator" class="divider"></li> - <li class="nav-button"><%= link_to 'Contato', contact_path %></li> + <li class="nav-button"><h3><%= link_to 'Contato', contact_path %></h3></li> <li role="separator" class="divider"></li> </ul> </div> diff --git a/app/views/shared/application/_object_horizontal.html.erb b/app/views/shared/application/_object_horizontal.html.erb deleted file mode 100644 index c1793e23a0fce3830b385ad18f4f37c2ccdc2d05..0000000000000000000000000000000000000000 --- a/app/views/shared/application/_object_horizontal.html.erb +++ /dev/null @@ -1,25 +0,0 @@ -<div class="object-horizontal"> - <div class="media"> - <div class="media-left media-middle"> - <a href="#"> - <img src="http://dummyimage.com/250x150/363336/fff" alt='dummy image'> - </a> - </div> - <div class="media-body"> - <% if object.name.nil? %> - <h4 class="media-heading">Sem TÃtulo</h4> - <% else %> - <h4 class="media-heading"><%= object.name %></h4> - <% end %> - <span>Por <a>Usuário </a></span><br/> - <span class="glyphicon glyphicon-eye-open"><%= object.views %> </span> - <span class="glyphicon glyphicon-star"><%= object.likes %> </span><br> - <% unless object.description.nil? %> - <%= object.description %> - <br/> - <% end %> - <br/> - Em<b> Biologia</b>, <b>Biologia Marinha</b> - </div> - </div> -</div> diff --git a/app/views/shared/application/_object_tag.html.erb b/app/views/shared/application/_object_tag.html.erb index 21783cf9ad5c5ba839cef297ea25995b660233ee..c117569976df7ec75f87225f39877e2f6252d65c 100644 --- a/app/views/shared/application/_object_tag.html.erb +++ b/app/views/shared/application/_object_tag.html.erb @@ -1,23 +1,44 @@ -<div class="col-md-12"> - <div class="itemhorz"> - <div class="col-md-5"> - <%= link_to image_tag("logo.png", :class => "img-responsive"), :class => "thumbnail" %> +<!--<%=debug obj%>--> + +<div class="row"> + <div class="col-sm-3"> + <a href="app/assets/images/logo.png" class="thumbnail"> + <p><%= obj.name %></p> + <!-- <%= link_to image_tag("logo.png", :class => "img-responsive"), :class => "thumbnail" %><img src="app/assets/images/logo.png" alt="" width="284" height="213">--> + <%= image_tag("logo.png") %> + </a> + </div> + <div class="col-sm-9"> + <div class="col-sm-12"> + <%= obj.description %> + </div> + <div class="col-sm-12"> + <div align="right"><%= link_to "Ver mais...", learning_object_path(obj.id_dspace), :class => "btn btn-primary" %></div> + <br/> + <table class="table "> + <tr> + <td class="stars">Avaliações:</td><td>Postado por:</td><td class="visualis">Visualizações:</td> + </tr> + <tr> + <td> + <span class="starRating"> + <input id="rating5" type="radio" name="rating" value="5" disabled> + <label for="rating5">5</label> + <input id="rating4" type="radio" name="rating" value="4" checked disabled> + <label for="rating4">4</label> + <input id="rating3" type="radio" name="rating" value="3" disabled> + <label for="rating3">3</label> + <input id="rating2" type="radio" name="rating" value="2" disabled> + <label for="rating2">2</label> + <input id="rating1" type="radio" name="rating" value="1" disabled> + <label for="rating1">1</label> + </span> + () + </td> + <td><%= link_to "<<Autor>>" %> Há ... anos</td> + <td><%= obj.views %></td> + </tr> + </table> + </div> + </div> </div> - <div class="col-md-7"> - <h1><%= link_to obj["title"][0], learning_object_path(obj["search.resourceid"]) %></h1> - <%= image_tag object_thumbnail(obj["handle"]), :class => "img-circle", :width => "32" %> por <%= link_to obj["author"][0] %> -<% -=begin -%> - <p class="pull-right"><span class="glyphicon glyphicon-search" aria-hidden="true"></span>4,5 - <span class="glyphicon glyphicon-star" aria-hidden="true"></span>200 - </p> -<% -=end -%> - <% unless obj["dc.description"].nil? %> - <p><%= obj["dc.description"][0] %></p> - <% end %> - </div> - </div> -</div> diff --git a/app/views/shared/application/_object_tag1.html.erb b/app/views/shared/application/_object_tag1.html.erb deleted file mode 100644 index 27de179726caf4aa86256bd361cadf7f76e49fc9..0000000000000000000000000000000000000000 --- a/app/views/shared/application/_object_tag1.html.erb +++ /dev/null @@ -1,49 +0,0 @@ -<!--<%=debug obj%>--> - -<div class="row"> - <div class="col-sm-3"> - <a href="app/assets/images/logo.png" class="thumbnail"> - <p><% unless obj["title"].nil? %> - <p><%= obj["title"][0] %></p> - <% end %> - </p> - <!-- <%= link_to image_tag("logo.png", :class => "img-responsive"), :class => "thumbnail" %><img src="app/assets/images/logo.png" alt="" width="284" height="213">--> - <%= image_tag("logo.png") %> - </a> - </div> - <div class="col-sm-9"> - <div class="col-sm-12"> - <% unless obj["dc.description"].nil? %> - <%= obj["dc.description"][0] %> - <% end %> - </div> - <div class="col-sm-12"> - <div align="right"><%= link_to "Ver mais...", learning_object_path(obj["search.resourceid"]), :class => "btn btn-primary" %></div> - <br/> - <table class="table "> - <tr> - <td class="stars">Avaliações:</td><td>Postado por:</td><td class="visualis">Visualizações:</td> - </tr> - <tr> - <td> - <span class="starRating"> - <input id="rating5" type="radio" name="rating" value="5" disabled> - <label for="rating5">5</label> - <input id="rating4" type="radio" name="rating" value="4" checked disabled> - <label for="rating4">4</label> - <input id="rating3" type="radio" name="rating" value="3" disabled> - <label for="rating3">3</label> - <input id="rating2" type="radio" name="rating" value="2" disabled> - <label for="rating2">2</label> - <input id="rating1" type="radio" name="rating" value="1" disabled> - <label for="rating1">1</label> - </span> - () - </td> - <td><%= link_to obj["author"][0] %> Há ... anos</td> - <td>333</td> - </tr> - </table> - </div> - </div> - </div> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..2d04b8d963b208f4c7f8abd3a6e7ed6746fba944 --- /dev/null +++ b/app/views/users/show.html.erb @@ -0,0 +1,58 @@ +<div class="row"> + <div class="user-header"> + <div class="col-md-6"> + <div class="media"> + <div class="media-left"> + <a href="#"> + <img class="user-image" src="<%= image_path("user-anon.png") %>" alt="Foto do usuário"> + </a> + </div> + <div class="media-body"> + <h4 class="media-heading">Usuário</h4> + <span>nome da instituição</span> + <p> + x items + </p> + </div> + </div> + </div> + <div class="col-md-6 right-column"> + <button type="button" class="btn btn-default">Seguir</button> + </div> + </div> + + <div class="user-files"> + <div class="row"> + <div class="col-md-6"> + <div class="media"> + <div class="media-body"> + <h4 class="media-heading">Arquivos do usuário</h4> + <p> + x items + </p> + </div> + </div> + </div> + <div class="col-md-6 right-column"> + </div> + </div> + + <div class="row"> + <div class="col-md-3"> + <%= render @objects[0], orientation: "vertical" %> + </div> + <div class="col-md-6"> + <div class="row"> + <div class="col-md-3"></div> + <div class="col-md-6"> + <%= render @objects[1], orientation: "vertical" %> + </div> + <div class="col-md-3"></div> + </div> + </div> + <div class="col-md-3"> + <%= render @objects[2], orientation: "vertical" %> + </div> + </div> + </div> +</div> diff --git a/app/views/welcome/complaint.html.erb b/app/views/welcome/complaint.html.erb deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/config/initializers/repositories/repositories.rb b/config/initializers/repositories/repositories.rb index 791a7454458887f766d062eb7ba4e50b2fe03d01..caebcb6b5995c78904a92585f573b3f540cd2990 100644 --- a/config/initializers/repositories/repositories.rb +++ b/config/initializers/repositories/repositories.rb @@ -24,7 +24,6 @@ Repository::Environments.create :development do |repository| repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) repository.register :webLink, OrientDb::WeblinkRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) - repository.register :carousel, OrientDb::CarouselRepository.new(OrientDb::Client.instance) repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) repository.register :institution, OrientDb::InstitutionRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) @@ -34,7 +33,6 @@ Repository::Environments.create :test do |repository| repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) repository.register :webLink, OrientDb::WeblinkRepository.new(OrientDb::Client.instance) - repository.register :carousel, OrientDb::CarouselRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) @@ -44,7 +42,6 @@ Repository::Environments.create :production do |repository| repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) repository.register :webLink, OrientDb::WeblinkRepository.new(OrientDb::Client.instance) - repository.register :carousel, OrientDb::CarouselRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) diff --git a/config/routes.rb b/config/routes.rb index efd7312c0098bbf9c7a8565e69bd4d1134d2ac41..adc99e689ca67d734145629317ec58bf6779491f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,9 +27,10 @@ Rails.application.routes.draw do resources :institutions resources :collections + get 'users/:id', to: 'users#show', as: 'users_show' get '/faq' => 'welcome#faq' get '/contact' => 'welcome#contact', as: 'contact' get '/complaint' => 'welcome#complaint', as: 'complaint' - get '/search' => 'search/solr#search', as: 'search' + get '/search' => 'search#index', as: 'search' end diff --git a/lib/orient_db/methods/edge_methods.rb b/lib/orient_db/methods/edge_methods.rb index dd207325ed98ce206a8231374e10d9c62dbc4abc..0784e472dcadd44dd8f858ef478248aed7319e7c 100644 --- a/lib/orient_db/methods/edge_methods.rb +++ b/lib/orient_db/methods/edge_methods.rb @@ -5,7 +5,7 @@ module OrientDb ## # Count the number of edges existent def get_in_edges_count(edge_class, id) - result = connection.query "SELECT COUNT(@rid) FROM #{edge_class} WHERE in = #{id}" + result = connection.query "SELECT in('#{edge_class}').size() AS COUNT FROM #{id}" result.first["COUNT"].to_i end diff --git a/lib/search_engine/dspace_solr.rb b/lib/search_engine/dspace_solr.rb new file mode 100644 index 0000000000000000000000000000000000000000..4ddc03ced7b015e260e28a8c581415017df37bab --- /dev/null +++ b/lib/search_engine/dspace_solr.rb @@ -0,0 +1,64 @@ +module SearchEngine + module DspaceSolr + + def search(qry) + + queryParams = merge_search_parameters( + {:q => '*:*', :fq => qry}, + solr_search_default_parameters + ) + results = solr_client.get 'select', :params => queryParams + objectsFound = select_items_from_results(results) + + return objectsFound + end + + private + + #Resource types: + # 2 = Item + # 3 = Collection + # 4 = Community + def select_items_from_results(results) + resultList = Set.new + results["response"]["docs"].select { |r| + r["search.resourcetype"].to_i.equal? 2 + }.each do |i| + resultList.add i + end + return resultList + end + + def solr_client + return RSolr.connect :url => 'http://portalmecdev.c3sl.ufpr.br:8080/solr/search/' + end + + def merge_search_parameters(p1, p2) + return p1.merge(p2) { |key,oldval,newval| key = [newval,oldval].flatten } + end + + def solr_search_default_parameters + return { + "fl"=>[" + search.resourcetype, search.resourceid, + handle, author, title, dc.description + "], + "type"=>"0", + "start"=>"0", + "rows"=>"1000", + "facet"=>"true", + "facet.offset"=>"0", + "facet.mincount"=>"1", + "f.subject_tax_0_filter.facet.sort"=>"count", + "f.subject_tax_0_filter.facet.limit"=>"11", + "f.author_filter.facet.limit"=>"11", + "f.dateIssued.year.facet.sort"=>"index", + "f.dateIssued.year.facet.limit"=>"10", + "f.author_filter.facet.sort"=>"count", + "facet.field"=>["author_filter","subject_tax_0_filter","dateIssued.year"], + "fq"=>["NOT(withdrawn:true)","NOT(discoverable:false)","read:(g0 OR g0)"] + } + end + + end +end diff --git a/lib/search_engine/orientdb_lucene.rb b/lib/search_engine/orientdb_lucene.rb new file mode 100644 index 0000000000000000000000000000000000000000..565a04963787ea9c8628e0aed87a490dd1256f42 --- /dev/null +++ b/lib/search_engine/orientdb_lucene.rb @@ -0,0 +1,15 @@ +module SearchEngine + module OrientdbLucene + + def search(qry) + learning_object_repository.search(qry) + end + + private + + def learning_object_repository + repository.for(:learning_object) + end + + end +end diff --git a/test/repositories/user_repository_proxy_test.rb b/test/repositories/user_repository_proxy_test.rb index edb8049d8398d675b8e4bf2398059bcafafb5c78..0e5ff57c50121f583a9754c87d4bfec2596c8510 100644 --- a/test/repositories/user_repository_proxy_test.rb +++ b/test/repositories/user_repository_proxy_test.rb @@ -10,6 +10,8 @@ class UserRepositoryProxyTest < ActiveSupport::TestCase assert_raise ::NotPersistedRecordError do repository.create_graph_node user end + + assert odb_user_repository.verify end end \ No newline at end of file