barras_rails 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +22 -0
  3. data/app/assets/images/barras_rails/logo_uff_branco.svg +3 -0
  4. data/app/assets/javascripts/barras_rails/barras_rails.js +352 -0
  5. data/app/assets/stylesheets/barras_rails/barra_de_aplicacoes.css +143 -0
  6. data/app/assets/stylesheets/barras_rails/barra_do_governo.css +140 -0
  7. data/app/helpers/barras_rails/application_helper.rb +106 -0
  8. data/app/models/barra_aplicacoes.rb +31 -0
  9. data/app/models/url_api_nao_definida_error.rb +6 -0
  10. data/app/views/layouts/application.html.erb +14 -0
  11. data/app/views/layouts/barras_rails/_barra_aplicacoes.html.erb +27 -0
  12. data/app/views/layouts/barras_rails/_barra_governo.html.erb +18 -0
  13. data/config/routes.rb +2 -0
  14. data/lib/barras_rails/configuracao.rb +16 -0
  15. data/lib/barras_rails/engine.rb +12 -0
  16. data/lib/barras_rails/utilidades.rb +41 -0
  17. data/lib/barras_rails/version.rb +4 -0
  18. data/lib/barras_rails.rb +19 -0
  19. data/lib/generators/barras_rails/install_generator.rb +56 -0
  20. data/lib/generators/barras_rails/templates/barras_rails.rb +52 -0
  21. data/lib/generators/barras_rails/templates/logo_uff_branco.svg +3 -0
  22. data/lib/tasks/barras_tasks.rake +4 -0
  23. data/spec/dummy/README.rdoc +28 -0
  24. data/spec/dummy/Rakefile +6 -0
  25. data/spec/dummy/app/assets/javascripts/application.js +2 -0
  26. data/spec/dummy/app/assets/javascripts/jquery-2.1.4.min.js +4 -0
  27. data/spec/dummy/app/assets/stylesheets/application.css +5 -0
  28. data/spec/dummy/app/assets/stylesheets/reset.css +423 -0
  29. data/spec/dummy/app/controllers/application_controller.rb +11 -0
  30. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  31. data/spec/dummy/app/views/application/index.html.erb +1 -0
  32. data/spec/dummy/app/views/layouts/application.html.erb +19 -0
  33. data/spec/dummy/bin/bundle +3 -0
  34. data/spec/dummy/bin/rails +4 -0
  35. data/spec/dummy/bin/rake +4 -0
  36. data/spec/dummy/config/application.rb +34 -0
  37. data/spec/dummy/config/boot.rb +5 -0
  38. data/spec/dummy/config/database.yml +25 -0
  39. data/spec/dummy/config/environment.rb +5 -0
  40. data/spec/dummy/config/environments/development.rb +37 -0
  41. data/spec/dummy/config/environments/production.rb +78 -0
  42. data/spec/dummy/config/environments/test.rb +39 -0
  43. data/spec/dummy/config/initializers/assets.rb +8 -0
  44. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  45. data/spec/dummy/config/initializers/barras_uff.rb +31 -0
  46. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  47. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  48. data/spec/dummy/config/initializers/inflections.rb +16 -0
  49. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  50. data/spec/dummy/config/initializers/session_store.rb +3 -0
  51. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  52. data/spec/dummy/config/locales/en.yml +23 -0
  53. data/spec/dummy/config/routes.rb +5 -0
  54. data/spec/dummy/config/secrets.yml +22 -0
  55. data/spec/dummy/config.ru +4 -0
  56. data/spec/dummy/db/development.sqlite3 +0 -0
  57. data/spec/dummy/db/schema.rb +2596 -0
  58. data/spec/dummy/db/test.sqlite3 +0 -0
  59. data/spec/dummy/public/404.html +67 -0
  60. data/spec/dummy/public/422.html +67 -0
  61. data/spec/dummy/public/500.html +66 -0
  62. data/spec/dummy/public/favicon.ico +0 -0
  63. data/spec/helpers/application_helper_spec.rb +178 -0
  64. data/spec/lib/configuracao_spec.rb +21 -0
  65. data/spec/models/barra_aplicacoes_spec.rb +0 -0
  66. data/spec/rails_helper.rb +55 -0
  67. data/spec/spec_helper.rb +31 -0
  68. metadata +281 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c382f7563962d25042c878ca441b1a354d7f252a
4
+ data.tar.gz: 3cb43ddfc41bb7c292d0c7d27668513a30866490
5
+ SHA512:
6
+ metadata.gz: bf514261540e2cac391e9b79c6842849b48ffd672ae1e51db3ce3ffde83c609be9e733ba9a7f757131285116f8b7b2293ff511f658f344551875443d514032fd
7
+ data.tar.gz: 4e22cec1399c5bcb531ec1167f16bdb625690c9dc372697a3c8afd1e6f4984ff9090d8fd3fd4ed0400c2f35bf672d30a7af90db9e237ecc02aa4b002f0a657f4
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
8
+ APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
9
+ load 'rails/tasks/engine.rake'
10
+
11
+ Bundler::GemHelper.install_tasks
12
+
13
+ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each { |f| load f }
14
+
15
+ require 'rspec/core'
16
+ require 'rspec/core/rake_task'
17
+
18
+ desc 'Run all specs in spec directory (excluding plugin specs)'
19
+
20
+ RSpec::Core::RakeTask.new(spec: 'app:db:test:prepare')
21
+
22
+ task default: :spec
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="410px" height="210px" viewBox="0 0 410 210">
2
+ <path fill="#ffffff" d="M237.962 71.2 l33.4643 0 0 -17.6 -0.1 0c-0.0767719 -12 -4.4 -23 -11.5 -31.5 -0 -0 -0 -0 -0 -0 -2 -2.4 -4.3 -4.7 -6.8 -6.7 -0 -0 -0 -0 -0 -0 -0.3 -0.3 -0.6 -0.5 -0.9 -0.7 -0 -0 -0 -0 -0 -0 -0.3 -0.2 -0.6 -0.5 -0.9 -0.7 -0 -0 -0 -0 -0 -0 -0.3 -0.2 -0.6 -0.5 -0.9 -0.7 0 -0 -0 -0 -0 -0 -0.3 -0.2 -0.6 -0.5 -1 -0.7 -0 -0 -0 -0 -0.1 -0 -1.6 -1.1 -3.3 -2.1 -5.1 -3 -0 -0 -0 -0 -0 -0 -0.7 -0.4 -1.4 -0.7 -2.1 -1 -0 -0 -0 -0 -0 -0 -0.4 -0.2 -0.7 -0.3 -1.1 -0.5 -0 -0 -0 -0 -0 -0 -0.3 -0.1 -0.7 -0.3 -1.1 -0.4 -0 -0 -0 -0 -0 -0 -0.3 -0.1 -0.5 -0.2 -0.8 -0.3 -0.1 -0 -0.2 -0.1 -0.3 -0.1 -0.2 -0.1 -0.5 -0.2 -0.7 -0.3 -0.1 -0.1 -0.3 -0.1 -0.4 -0.2 -0.2 -0.1 -0.3 -0.1 -0.5 -0.2 -0.2 -0.1 -0.5 -0.2 -0.7 -0.2 -0.1 -0 -0.2 -0 -0.2 -0.1 -0.3 -0.1 -0.6 -0.2 -0.9 -0.3 -0 0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.2 -1.1 -0.3 -0 -0 -0 -0 -0 -0 -0.2 -0 -0.4 -0.1 -0.5 -0.1 -0.2 -0.1 -0.5 -0.1 -0.7 -0.2 -0 0 -0 0 -0 0 -0.4 -0.1 -0.8 -0.2 -1.2 -0.3 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.2 -1.2 -0.2 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.1 -1.2 -0.2 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.1 -1.2 -0.2 -0 -0 -0 -0 -0 -0 -0.4 -0.1 -0.8 -0.1 -1.2 -0.1 -0 0 -0 -0 -0 -0 -0.4 -0 -0.8 -0.1 -1.2 -0.1 -0 0 -0 0 -0 -0 -0.4 -0 -0.8 -0.1 -1.3 -0.1 -0 0 -0 0 -0 0 -0.4 -0 -0.8 -0 -1.3 -0 -0 0 -0 0 -0 0 -0.4 -0 -0.9 -0 -1.3 -0 -27.5 0 -49.9 22.4 -49.9 49.9 0 0 0 0.4 0 0.389765l0.0295277 0 0 33.5 -50.5 0.2 -0 68.1 -0 0.00236221c-0.243308 8.9 -7.7 16.1 -16.6 16.1 -8.9 0 -16.3 -7.2 -16.5 -16.0654l-0.00708664 0 0 -0.5 0 -68.1 -27.9 0 0 -0 -54.9 0 0 33.6 49.6 0 0 35 -0 0.00708664c0 27.5 22.4 49.9 49.9 49.9 0.4 0 0.9 -0 1.3 -0 0 0 0 0 0 0 0.4 -0 0.8 -0 1.3 -0 0 0 0 -0 0 -0 0.4 -0 0.8 -0 1.3 -0.1 0 0 0 0 0 -0 0.4 -0 0.8 -0.1 1.2 -0.1 0 0 0 -0 0 -0 0.1 -0 0.2 -0 0.3 -0 0.3 -0 0.6 -0.1 0.9 -0.1 0.4 -0.1 0.8 -0.1 1.2 -0.2 0 -0 0 -0 0 -0 0.4 -0.1 0.8 -0.1 1.2 -0.2 0 0 0 -0 0 -0 0.2 -0 0.4 -0.1 0.7 -0.1 0.2 -0 0.4 -0.1 0.5 -0.1 0 -0 0 -0 0 -0 0.4 -0.1 0.8 -0.2 1.2 -0.3 0 -0 0 -0 0 -0 0.2 -0 0.4 -0.1 0.5 -0.1 0.2 -0.1 0.4 -0.1 0.7 -0.2 0.1 -0 0.3 -0.1 0.4 -0.1 0.3 -0.1 0.5 -0.1 0.8 -0.2 0.2 -0 0.3 -0.1 0.5 -0.1 0.2 -0.1 0.5 -0.1 0.7 -0.2 0.2 -0.1 0.5 -0.1 0.7 -0.2 0.2 -0.1 0.3 -0.1 0.5 -0.2 0.2 -0.1 0.4 -0.2 0.7 -0.2 0.2 -0.1 0.3 -0.1 0.5 -0.2 0.2 -0.1 0.5 -0.2 0.7 -0.3 0.1 -0.1 0.3 -0.1 0.4 -0.2 0.3 -0.1 0.5 -0.2 0.8 -0.3 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.5 -0.2 0.8 -0.3 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.5 -0.2 0.8 -0.4 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.5 -0.3 0.8 -0.4 0.1 -0 0.2 -0.1 0.3 -0.1 0.3 -0.1 0.6 -0.3 0.9 -0.5 0.1 -0 0.1 -0.1 0.2 -0.1 0.3 -0.2 0.6 -0.3 0.9 -0.5 0.1 -0 0.1 -0.1 0.2 -0.1 0.3 -0.2 0.6 -0.3 0.9 -0.5 0 -0 0.1 -0.1 0.1 -0.1 0.6 -0.4 1.3 -0.8 1.9 -1.2 0 -0 0.1 -0 0.1 -0.1 0.3 -0.2 0.6 -0.4 0.9 -0.6 0 -0 0 -0 0 -0 0.3 -0.2 0.6 -0.4 0.9 -0.6 0 -0 0.1 -0 0.1 -0.1 0.3 -0.2 0.5 -0.4 0.8 -0.6 0.1 -0 0.1 -0.1 0.2 -0.1 0.3 -0.2 0.5 -0.4 0.8 -0.6 0 -0 0.1 -0.1 0.1 -0.1 0.9 -0.8 1.8 -1.5 2.7 -2.4 0 -0 0 -0 0 -0 0.3 -0.3 0.6 -0.5 0.8 -0.8 0 -0 0 -0 0 -0 0.8 -0.8 1.6 -1.7 2.4 -2.6 0 -0 0 -0 0 -0 0.2 -0.3 0.5 -0.5 0.7 -0.8 0 -0 0.1 -0.1 0.1 -0.1 0.2 -0.3 0.5 -0.6 0.7 -0.9 0 -0 0 -0 0 -0 0.2 -0.3 0.4 -0.6 0.7 -0.9 0 -0 0 -0.1 0.1 -0.1 2.6 -3.5 4.8 -7.3 6.5 -11.5 0 -0 0 -0 0 -0 2.3 -5.6 3.8 -11.8 3.8 -18.1583l0.00354332 0 0 -35.3 16.8 0 0 83.3 33.2 0 0 -83.3 66.8 0 0 83 33.4 0 0 -83 100.1 0 0 -33.4 -100.1 0 0 -33.5363c-0.00118111 -0 -0 -0 -0 -0 0 -9.1 7.5 -16.6 16.6 -16.6 9.1 0 16.6 7.6 16.6 16.7 -0 0 0 -0 0 -0.0118111l0 16.8 33.4 0 0 -16.8 -0 0c0 -27.5 -22.4 -49.9 -49.9 -49.9 -0.4 0 -0.9 0 -1.3 0 -0 0 -0 0 -0 0 -0.4 0 -0.8 0 -1.3 0 -0 0 -0 0 -0 0 -0.4 0 -0.8 0 -1.2 0.1 -0 0 -0 0 -0 0 -0.4 0 -0.8 0.1 -1.2 0.1 -0 0 -0 0 -0 0 -0.4 0 -0.8 0.1 -1.2 0.1 -0 0 -0 0 -0 0 -0.4 0.1 -0.8 0.1 -1.2 0.2 -0 0 -0 0 -0 0 -0.2 0 -0.5 0.1 -0.7 0.1 -0.2 0 -0.4 0.1 -0.6 0.1 -0.1 0 -0.3 0.1 -0.4 0.1 -0.3 0.1 -0.5 0.1 -0.8 0.2 -0.1 0 -0.2 0 -0.3 0.1 -0.3 0.1 -0.6 0.1 -0.9 0.2 -0.1 0 -0.1 0 -0.2 0 -0.3 0.1 -0.7 0.2 -1 0.2 -0.1 0 -0.3 0.1 -0.4 0.1 -0.3 0.1 -0.6 0.1 -0.8 0.2 -0.1 0 -0.1 0 -0.2 0.1 -0.3 0.1 -0.6 0.2 -1 0.3 -0.3 0.1 -0.6 0.2 -0.8 0.3 -0.1 0 -0.2 0.1 -0.3 0.1 -0.3 0.1 -0.5 0.2 -0.8 0.3 -0.1 0 -0.3 0.1 -0.4 0.1 -0.2 0.1 -0.4 0.1 -0.6 0.2 -0.2 0.1 -0.4 0.1 -0.6 0.2 -0.2 0.1 -0.4 0.1 -0.5 0.2 -0.2 0.1 -0.4 0.2 -0.6 0.2 -0.2 0.1 -0.3 0.2 -0.5 0.2 -0.2 0.1 -0.4 0.2 -0.6 0.3 -0.1 0.1 -0.3 0.1 -0.4 0.2 -0.2 0.1 -0.5 0.2 -0.7 0.3 -0.2 0.1 -0.3 0.2 -0.5 0.2 -0.2 0.1 -0.4 0.2 -0.6 0.3 -0.2 0.1 -0.5 0.2 -0.7 0.4 -0.1 0.1 -0.3 0.1 -0.4 0.2 -0.2 0.1 -0.5 0.3 -0.7 0.4 -0.1 0.1 -0.2 0.1 -0.3 0.2 -0.3 0.2 -0.6 0.4 -0.9 0.5 -0 0 -0 0 -0.1 0 -0.3 0.2 -0.6 0.4 -1 0.6 -0 0 -0 0 -0.1 0 -0.3 0.2 -0.6 0.4 -1 0.6 -0 0 -0 0 -0 0 -0.3 0.2 -0.6 0.4 -0.9 0.6 -0 0 -0 0 -0 0 -0.3 0.2 -0.6 0.4 -0.9 0.6 -0 0 -0.1 0 -0.1 0.1 -0.3 0.2 -0.6 0.4 -0.9 0.6 -0 0 -0.1 0.1 -0.1 0.1 -0.3 0.2 -0.6 0.4 -0.8 0.7 -0 0 -0.1 0.1 -0.1 0.1 -1.2 1 -2.4 2 -3.5 3.1 -0 0 -0 0 -0 0 -1.1 1.1 -2.2 2.3 -3.2 3.5 -0 0 -0 0 -0 0 -0.2 0.3 -0.5 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.5 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.5 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.4 0.6 -0.7 0.9 -0 0 -0 0 -0 0 -0.2 0.3 -0.4 0.6 -0.6 0.9 -0 0 -0 0.1 -0.1 0.1 -1.7 2.6 -3.2 5.4 -4.4 8.4 -0 0 -0 0.1 -0.1 0.1 -0.1 0.3 -0.3 0.7 -0.4 1 -0 0 -0 0.1 -0 0.1 -0.1 0.4 -0.3 0.7 -0.4 1.1 -0 0 -0 0 -0 0 -0.1 0.4 -0.3 0.8 -0.4 1.1 -0 0 -0 0 -0 0 -0.1 0.4 -0.2 0.8 -0.3 1.1 -0 0 -0 0 -0 0 -0.1 0.4 -0.2 0.8 -0.3 1.2 0 0 -0 0 -0 0 -0.2 0.8 -0.4 1.6 -0.6 2.4 -0 0 -0 0 -0 0 -0.1 0.4 -0.2 0.8 -0.2 1.2 -0 0 -0 0 -0 0 -0.1 0.4 -0.1 0.8 -0.2 1.2 -0 0 -0 0 -0 0.1 -0.1 0.4 -0.1 0.7 -0.2 1.1 -0 0 -0 0.1 -0 0.1 -0.1 0.4 -0.1 0.8 -0.1 1.2 -0 0 -0 0 -0 0.1 -0 0.4 -0.1 0.7 -0.1 1.1 -0 0.1 -0 0.1 -0 0.2 -0 0.4 -0.1 0.8 -0.1 1.2 -0 0 -0 0 -0 0.1 -0 0.4 -0 0.8 -0.1 1.2 -0 0 -0 0 -0 0.1 -0 0.4 -0 0.8 -0 1.2 0 0 0 0 0 0.0271655l-0.160631 0 0 34.1 -66.8 0 -0 -33.7147c0 0 0 0 0 0 0 -9.1 7.6 -16.7 16.7 -16.7 9.1 0 16.6 7.4 16.6 16.6 0 0.2 -0 0.5 -0 0.726381l0 16.5603z"/>
3
+ </svg>
@@ -0,0 +1,352 @@
1
+ /*
2
+ * Módulo JavaScript da API BarrasUFF.
3
+ * Este módulo adiciona a funcionalidade de um layout responsivo para a barra de
4
+ * aplicações. O número de links visíveis na barra será ajustado de acordo com o
5
+ * tamanho da janela do usuário, ou de acordo com um limite de links visíveis.
6
+ *
7
+ * Este módulo depende do jQuery para funcionar.
8
+ *
9
+ * Autor: Rodrigo Castro
10
+ * Criado em: 07/08/2015
11
+ * Atualizado em: 11/08/2015
12
+ */
13
+
14
+ // Apenas carrega o módulo se o jQuery estiver carregado
15
+ if (typeof jQuery != 'undefined') {
16
+ jQuery(window).on('turbolinks:load load', function() {
17
+ var barraAplicacoes = BarrasRails.iniciar();
18
+
19
+ if (barraAplicacoes != null) {
20
+ jQuery(window).resize(function () {
21
+ barraAplicacoes.recalcularLayout();
22
+ });
23
+ }
24
+ });
25
+
26
+ var BarrasRails = (function($) {
27
+ var _barraAplicacoes, _barraAplicacoesNav, _submenu;
28
+ var _limiteAppsVisiveis = 0;
29
+
30
+ // Um objeto que vai conter as 2 funções públicas do módulo.
31
+ // Esse objeto será retornado para a aplicação
32
+ var moduloBarrasRails = {};
33
+
34
+ /**
35
+ * Inicia BarrasRails, fazendo o posicionamento inicial dos links.
36
+ *
37
+ * @returns {Object} O módulo BarrasRails
38
+ */
39
+ moduloBarrasRails.iniciar = function() {
40
+ _setarVariaveisIniciais();
41
+ if (_barraAplicacoes.data('initialized') === 'true') {
42
+ alert('ieie');
43
+ return null;
44
+ }
45
+ _barraAplicacoesNav.css('visibility', 'visible');
46
+ moduloBarrasRails.recalcularLayout();
47
+ return moduloBarrasRails;
48
+ };
49
+
50
+ /**
51
+ * Refaz o cálculo do layout e posicionamento dos links, de acordo com o
52
+ * tamanho da página e com o limite manual setado pelo usuário
53
+ */
54
+ moduloBarrasRails.recalcularLayout = function() {
55
+ // Começa normalizando a barra e atualizando os separadores
56
+ _normalizarBarra();
57
+ _atualizarSeparadores();
58
+
59
+ // Define quantos e quais links permanecerão visíveis na barra, e
60
+ // move para o submenu os que não serão visíveis
61
+ _definirLinksVisiveis();
62
+
63
+ // Checa a visibilidade do submenu e recria os separadores.
64
+ _visibilidadeSubmenu();
65
+ _atualizarSeparadores();
66
+ };
67
+
68
+ // =====================================================================
69
+ // | Funções privadas (não podem ser chamadas de fora deste módulo) |
70
+ // =====================================================================
71
+
72
+ /**
73
+ * Inicializa as variáveis internas necessárias para funcionar.
74
+ *
75
+ * @private
76
+ */
77
+ var _setarVariaveisIniciais = function() {
78
+ _barraAplicacoes = $("#barra-aplicacoes");
79
+ _barraAplicacoes.prop('data-initialized', 'true');
80
+ _barraAplicacoesNav = _barraAplicacoes.find("#nav");
81
+ _submenu = $("#outras-aplicacoes");
82
+ _limiteAppsVisiveis = _barraAplicacoes.data('limite-apps-visiveis');
83
+ if (!_limiteAppsVisiveis) { _limiteAppsVisiveis = 0; }
84
+ };
85
+
86
+ /**
87
+ * Reseta a barra, removendo todos os links de aplicações do submenu e
88
+ * colocando-os na barra, e também remove todos os separadores.
89
+ *
90
+ * @private
91
+ */
92
+ var _normalizarBarra = function() {
93
+ _barraAplicacoesNav.children(".sep").remove();
94
+ var itemsSubmenu = _submenu.find("ul").children();
95
+ _moverParaBarra(itemsSubmenu);
96
+ };
97
+
98
+ /**
99
+ * Calcula quantos links podem ficar visíveis, aplicando as 2 regras de
100
+ * visibilidade: limite manual e tamanho da página.
101
+ *
102
+ * Primeiro calcula o index do primeiro elemento a ser movido para o
103
+ * submenu, pelo limite manual.
104
+ * Depois calcula o mesmo index do último elemento que cabe na tela.
105
+ * No final, pega o menor dos índices e move todos os links a partir do
106
+ * índice calculado para o submenu.
107
+ *
108
+ * @private
109
+ */
110
+ var _definirLinksVisiveis = function() {
111
+ // Pega os links da barra e verifica o limite manual e de largura
112
+ var links = _barraAplicacoesNav.children(":not(.sep, .dir)");
113
+ var indexLimManual = _verificarLimiteManualDeLinks();
114
+ var indexLimLargura = _indexUltimoElementoQueCabe(links);
115
+
116
+ // Calcula o index final e move os links de acordo com esse index
117
+ var indexFinal = Math.min(indexLimManual, indexLimLargura);
118
+ _moverParaSubmenu(links, indexFinal + 1);
119
+ };
120
+
121
+ /**
122
+ * Caso exista um limite manual para o número de links visíveis na barra
123
+ * "principal", essa função vai retornar esse limite. Caso o limite não
124
+ * exista, ela retorna "infinito".
125
+ *
126
+ * @returns {number} O limite de apps, entre 1 e "infinito"
127
+ *
128
+ * @private
129
+ */
130
+ var _verificarLimiteManualDeLinks = function() {
131
+ if (_limiteAppsVisiveis > 0) { return _limiteAppsVisiveis - 1; }
132
+ return Infinity;
133
+ };
134
+
135
+ /**
136
+ * Move links de aplicações da barra principal para dentro do submenu,
137
+ * começando pelo elemento de indexInicial até o último link da barra.
138
+ *
139
+ * @param elementos {Object} Uma lista jQuery contendo os links que
140
+ * estão fora do submenu
141
+ * @param indexInicial {number} Um número indicando qual o index do
142
+ * primeiro elemento que deve ser movido para o submenu. Todos os
143
+ * elementos entre startIndex e o final serão movidos para o submenu.
144
+ *
145
+ * @private
146
+ */
147
+ var _moverParaSubmenu = function(elementos, indexInicial) {
148
+ var ulSubmenu = _submenu.find("ul");
149
+ for (var index = indexInicial; index < elementos.length; index++) {
150
+ ulSubmenu.append($(elementos[index]).clone());
151
+ $(elementos[index]).remove();
152
+ }
153
+ };
154
+
155
+ /**
156
+ * Move uma lista de links de aplicações do submenu para a barra
157
+ * principal (fora do submenu). Os elementos movidos são removidos do
158
+ * submenu e adicionados à barra, sendo posicionados um a um logo antes
159
+ * do <li> que corresponde ao submenu.
160
+ *
161
+ * @param elementos {Object} Uma lista jQuery contendo os links do
162
+ * submenu
163
+ *
164
+ * @private
165
+ */
166
+ var _moverParaBarra = function(elementos) {
167
+ elementos.each(function(index) {
168
+ // Clona cada elemento para antes do <li> do dropdown
169
+ _submenu.before($(elementos[index]).clone());
170
+ });
171
+ // Remove os elementos antigos
172
+ elementos.remove();
173
+ };
174
+
175
+ /**
176
+ * Seta a visibilidade do submenu de acordo com o número de links dentro
177
+ * dele. Caso não haja nenhum link no submenu, ele será escondido, e
178
+ * vice-versa.
179
+ *
180
+ * @private
181
+ */
182
+ var _visibilidadeSubmenu = function() {
183
+ var numLinksSubmenu = _submenu.find("ul").children().length;
184
+ (numLinksSubmenu == 0) ? _submenu.hide() : _submenu.show();
185
+ };
186
+
187
+ /**
188
+ * Calcula e retorna o espaço da barra de aplicações que é destinado aos
189
+ * links de aplicação. Isso significa retornar a largura da página
190
+ * inteira (<body>), e tirar a largura e margens do logo da UFF e do
191
+ * link de deslogar.
192
+ *
193
+ * @returns {number} A medida, em pixels, equivalente à largura da
194
+ * página menos a largura do logo da UFF e do link de deslogar.
195
+ *
196
+ * @private
197
+ */
198
+ var _espacoParaAplicacoes = function() {
199
+ var larguraPagina = $("body").width();
200
+ var larguraLogo = _barraAplicacoes.find("svg").outerWidth(false);
201
+ var larguraDeslogar = _barraAplicacoes.find(".dados")
202
+ .outerWidth(false);
203
+ return larguraPagina - (larguraLogo + larguraDeslogar);
204
+ };
205
+
206
+ /**
207
+ * Retorna o index do último elemento da barra de aplicações que cabe
208
+ * sem precisar ser movido para o submenu de "Outras Aplicações".
209
+ * O último elemento que cabe é o último elemento que pode permanecer
210
+ * na barra sem que o HTML automaticamente quebre-a em 2 ou mais linhas.
211
+ *
212
+ * @param elementos {Object} Um array jQuery contendo os links que estão
213
+ * na barra principal.
214
+ *
215
+ * @returns {number} O index do último elemento da lista de aplicativos
216
+ * que não ultrapassa o limite horizontal da linha especificado.
217
+ *
218
+ * @private
219
+ */
220
+ var _indexUltimoElementoQueCabe = function(elementos) {
221
+ // Começa do último elemento
222
+ var largura = _espacoParaAplicacoes();
223
+ var numElementos = elementos.length;
224
+ var ultimoIndexQueCabe = numElementos - 1;
225
+ var elementoAtual = elementos[ultimoIndexQueCabe];
226
+ var i = 1;
227
+ if (numElementos > 1) {
228
+ // Adicionamos 5px para dar uma "folga" (leia-se: gambiarra)
229
+ var largMenosSub = largura - (_submenu.outerWidth(false) + 5);
230
+ while (!_elementoCabeNaLinha(elementoAtual, largMenosSub)) {
231
+ // Enquando o elemento atual não cabe na linha, vamos
232
+ // percorrendo o array de trás pra frente até encontrar um
233
+ // que caiba.
234
+ i++;
235
+ if (i > numElementos) { break; }
236
+ elementoAtual = elementos[numElementos - i];
237
+ }
238
+ // Quando encontramos um elemento que cabe, setamos o index.
239
+ ultimoIndexQueCabe = (numElementos - i);
240
+ }
241
+ return ultimoIndexQueCabe;
242
+ };
243
+
244
+ /**
245
+ * Verifica se um elemento vai ultrapassar o limite do tamanho
246
+ * horizontal da página, considerando tanto a posição quanto o tamanho
247
+ * dele (calcula em cima da posição do seu limite direito).
248
+ * Essa função usa a posição real do elemento na barra, como se todos os
249
+ * links estivessem ocupando a mesma linha (o que nem sempre é verdade,
250
+ * pois se der overflow o HTML vai quebrar em 2 ou mais linhas).
251
+ *
252
+ * @param elemento {HTMLElement} Um link de aplicação (elemento <li>)
253
+ * @param largura {number} O tamanho do espaço para links da barra.
254
+ *
255
+ * @returns {boolean} True se o elemento cabe na linha com a largura
256
+ * especificada, ou false se ultrapassa o tamanho da linha.
257
+ *
258
+ * @private
259
+ */
260
+ var _elementoCabeNaLinha = function(elemento, largura) {
261
+ var posicaoMargemEsquerda = _posicaoHorizontal(elemento, largura);
262
+ var larguraElemento = $(elemento).width();
263
+ var posicaoMargemDireita = posicaoMargemEsquerda + larguraElemento;
264
+ return posicaoMargemDireita < largura;
265
+ };
266
+
267
+ /**
268
+ * Retorna a posição horizontal real de um elemento. Isso é necessário
269
+ * pois quando há links demais na barra, ela quebra em 2 ou mais linhas,
270
+ * e quando isso acontece, a função elemento.left retorna a posição left
271
+ * do elemento em relação à margem esquerda da linha em que ele se
272
+ * encontra, sem levar em conta toda a largura que ele já ocupou, em
273
+ * teoria, da primeira linha. Essa função tem como objetivo calcular a
274
+ * posição horizontal do elemento, como se ele não tivesse quebrado em
275
+ * mais de uma linha, e como se tudo da barra estivesse em uma linha só.
276
+ *
277
+ * @param elemento {HTMLElement} Um link de aplicação (elemento <li>)
278
+ * @param largura {number} O tamanho do espaço para links da barra.
279
+ *
280
+ * @returns {number} A posição horizontal (position.left) real do
281
+ * elemento. Se a linha quebrar e o elemento estiver na segunda linha,
282
+ * por exemplo, retornará a largura da primeira linha mais a posição
283
+ * dele na segunda linha.
284
+ *
285
+ * @private
286
+ */
287
+ var _posicaoHorizontal = function(elemento, largura) {
288
+ if (elemento) {
289
+ var posicao = $(elemento).position();
290
+ var indexLinha = Math.round(posicao.top / 28.0);
291
+ return (indexLinha * largura) + posicao.left;
292
+ }
293
+ };
294
+
295
+ /**ge
296
+ * Atualiza os separadores verticais da barra de aplicação, que ficam
297
+ * entre os links. Essa função remove os separadores existentes e cria
298
+ * novos separadores entre os links.
299
+ * Isso é necessário pois quando um link é passado para o submenu, o
300
+ * separador permanece, e acaba tendo um acúmulo de separadores um do
301
+ * lado do outro. Essa função normaliza os separadores.
302
+ *
303
+ * @private
304
+ */
305
+ var _atualizarSeparadores = function() {
306
+ // Remove os separadores antigos
307
+ _barraAplicacoesNav.children(".sep").remove();
308
+ // Cria separadores novos
309
+ var elementos = _barraAplicacoesNav.children(":visible");
310
+ for (var i = 0; i < elementos.length - 1; i++) {
311
+ $(elementos[i]).after(_criarSeparador());
312
+ }
313
+ };
314
+
315
+ /**
316
+ * Cria um separador vertical para a barra de aplicações.
317
+ *
318
+ * @returns {HTMLElement} Um novo elemento <li> com a classe "sep"
319
+ *
320
+ * @private
321
+ */
322
+ var _criarSeparador = function() {
323
+ var li = document.createElement("li");
324
+ li.className = "sep";
325
+ return li;
326
+ };
327
+
328
+ /**
329
+ * Cria e retorna um elemento <li> contendo um link de aplicação.
330
+ *
331
+ * @param id O id do link_aplicacao
332
+ * @param nome A label do link
333
+ * @param url A url para o link
334
+ *
335
+ * @private
336
+ */
337
+ var _criarLinkAplicacao = function(id, nome, url) {
338
+ var li = document.createElement("li");
339
+ var anchor = document.createElement("a");
340
+ anchor.innerHTML = nome;
341
+ anchor.href = url;
342
+ $(anchor).attr("data-id", id);
343
+ li.appendChild(anchor);
344
+ return li;
345
+ };
346
+
347
+ return moduloBarrasRails;
348
+ }(jQuery));
349
+ } else {
350
+ // Se o jQuery não estiver carregado, exibir um erro no console
351
+ console.error("BarrasRails JS não foi carregado: jQuery não encontrado");
352
+ }
@@ -0,0 +1,143 @@
1
+ @charset "UTF-8";
2
+
3
+ /*
4
+ * Folha de estilos para a barra de aplicações única dos sistemas da STI UFF.
5
+ *
6
+ * Autor: Rodrigo Castro Azevedo
7
+ * Criado em: 07/08/2015
8
+ * Atualizado em: 11/08/2015
9
+ */
10
+
11
+ svg {
12
+ -webkit-box-sizing: border-box;
13
+ -moz-box-sizing: border-box;
14
+ box-sizing: border-box;
15
+ }
16
+
17
+ #barra-aplicacoes {
18
+ background-color: #2A68AF;
19
+ color: white;
20
+ height: 28px;
21
+ box-shadow: 0 2px 4px #282828;
22
+ -moz-box-shadow: 0 2px 4px #282828;
23
+ -webkit-box-shadow: 0 2px 4px #282828;
24
+ font-family: Helvetica, Arial, sans-serif;
25
+ font-size: 11px;
26
+ }
27
+
28
+ #barra-aplicacoes svg {
29
+ -webkit-transition: background-color .3s ease, box-shadow .3s ease;
30
+ -moz-transition: background-color .3s ease, box-shadow .3s ease;
31
+ -o-transition: background-color .3s ease, box-shadow .3s ease;
32
+ transition: background-color .3s ease, box-shadow .3s ease;
33
+ width: 70px;
34
+ height: 28px;
35
+ float: left;
36
+ padding: 4px 5px;
37
+ }
38
+
39
+ #barra-aplicacoes svg:hover, .dados a:hover {
40
+ -webkit-box-shadow: 0 -3px 0 0 #4187D1 inset;
41
+ -moz-box-shadow: 0 -3px 0 0 #4187D1 inset;
42
+ box-shadow: 0 -3px 0 0 #4187D1 inset;
43
+ background-color: #1D5BA2;
44
+ color: white;
45
+ }
46
+
47
+ #barra-aplicacoes a { text-decoration:none; }
48
+
49
+ .shadow { position: relative; z-index: 999; }
50
+
51
+ .dados {
52
+ display: block;
53
+ float: right;
54
+ font-size: 10px;
55
+ }
56
+
57
+ .dados a {
58
+ -webkit-transition: background-color .3s ease, box-shadow .3s ease;
59
+ -moz-transition: background-color .3s ease, box-shadow .3s ease;
60
+ -o-transition: background-color .3s ease, box-shadow .3s ease;
61
+ transition: background-color .3s ease, box-shadow .3s ease;
62
+ display: block;
63
+ color: white;
64
+ line-height: 28px;
65
+ padding: 0 15px;
66
+ }
67
+
68
+ ul.dropdown, ul.dropdown li, ul.dropdown ul {
69
+ margin: 0;
70
+ padding: 0;
71
+ list-style-type: none;
72
+ }
73
+
74
+ ul.dropdown {
75
+ font-weight: normal;
76
+ position: relative;
77
+ z-index: 597;
78
+ float: left;
79
+ }
80
+
81
+ ul.dropdown ul {
82
+ height: 28px;
83
+ width: 150%;
84
+ margin-top: 1px;
85
+ visibility: hidden;
86
+ position: absolute;
87
+ top: 95%;
88
+ left: -25%;
89
+ z-index: 598;
90
+ }
91
+
92
+ ul.dropdown ul ul { top: 1px; left: 99%; }
93
+ ul.dropdown ul li { font-weight: normal; float: none; }
94
+ ul.dropdown ul li:hover {
95
+ -webkit-box-shadow: 0 0 0 white;
96
+ -moz-box-shadow: 0 0 0 white;
97
+ box-shadow: 0 0 0 white;
98
+ }
99
+
100
+ ul.dropdown li {
101
+ -webkit-transition: background-color .3s ease, box-shadow .3s ease;
102
+ -moz-transition: background-color .3s ease, box-shadow .3s ease;
103
+ -o-transition: background-color .3s ease, box-shadow .3s ease;
104
+ transition: background-color .3s ease, box-shadow .3s ease;
105
+ line-height: 28px;
106
+ float: left;
107
+ vertical-align: middle;
108
+ zoom: 1;
109
+ border-color: #fff #d9d9d9 #d9d9d9;
110
+ background-color: #2A68AF;
111
+ color: white;
112
+ }
113
+
114
+ ul.dropdown li.hover, ul.dropdown li:hover {
115
+ position: relative;
116
+ z-index: 599;
117
+ cursor: default;
118
+ background-color: #1D5BA2;
119
+ -webkit-box-shadow: 0 -3px 0 0 #4187D1 inset;
120
+ -moz-box-shadow: 0 -3px 0 0 #4187D1 inset;
121
+ box-shadow: 0 -3px 0 0 #4187D1 inset;
122
+ }
123
+
124
+ ul.dropdown li a { display: block; padding: 0 10px; }
125
+
126
+ ul.dropdown li.sep:hover {
127
+ -webkit-box-shadow: 0 0 0 white;
128
+ -moz-box-shadow: 0 0 0 white;
129
+ box-shadow: 0 0 0 white;
130
+ background-color: #2A68AF;
131
+ }
132
+
133
+ ul.dropdown li.sep:after{
134
+ content: "|";
135
+ }
136
+
137
+ ul.dropdown li.dir { line-height: 27px; padding: 0 10px; }
138
+ ul.dropdown li:hover > ul { visibility: visible; }
139
+ ul.dropdown a { display: block; }
140
+ ul.dropdown a:link, ul.dropdown a:visited {
141
+ color: white;
142
+ text-decoration: none;
143
+ }
@@ -0,0 +1,140 @@
1
+ /*
2
+ * Folha de estilos para a barra do governo atual.
3
+ * Esse arquivo deve ser atualizado junto com a barra do governo, quando esta
4
+ * for atualizada.
5
+ *
6
+ * Autor: Rodrigo Castro Azevedo
7
+ * Criado em: 07/08/2015
8
+ * Atualizado em: 19/07/2016
9
+ */
10
+
11
+ @font-face {
12
+ font-family: "Open Sans";
13
+ font-style: normal;
14
+ font-weight: 700;
15
+ src: local('Open Sans Bold'), local('OpenSans-Bold'), url(https://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2) format('woff2');
16
+ }
17
+
18
+ #barra-brasil div, #barra-brasil a, #barra-brasil ul, #barra-brasil li {
19
+ margin: 0;
20
+ padding: 0;
21
+ font-size: 100%;
22
+ font-family: inherit;
23
+ vertical-align: baseline;
24
+ }
25
+
26
+ #barra-brasil ul { list-style: none; }
27
+
28
+ #barra-brasil {
29
+ height: 32px;
30
+ background: #f1f1f1;
31
+ font-weight: bold;
32
+ font-size: 12px;
33
+ line-height: 32px;
34
+ font-family: "Open Sans", Helvetica, Arial, sans-serif;
35
+ border-bottom: 1px solid #dfdfdf;
36
+ box-sizing: content-box;
37
+ }
38
+
39
+ #barra-brasil a { text-decoration: none; }
40
+ body.contraste #barra-brasil { background: #000; }
41
+
42
+ div#wrapper-barra-brasil {
43
+ position: relative;
44
+ overflow: hidden;
45
+ margin: 0 auto;
46
+ width: 100%;
47
+ max-width: 960px;
48
+ height: 100%;
49
+ }
50
+
51
+ #barra-brasil .brasil-flag {
52
+ float: left;
53
+ padding: 7px 0 6px;
54
+ width: 115px;
55
+ height: 19px;
56
+ border-right: 2px solid #dfdfdf;
57
+ }
58
+
59
+ #barra-brasil .brasil-flag .link-barra {
60
+ display: block;
61
+ padding-left: 42px;
62
+ width: 43px;
63
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAATCAMAAAC5m+00AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACrUExURQCXSF27iQCWRQOWSQCWSRCdVACSSgCWRwCVSRKcVv/oAP/yAAIvh/bjBQKVTP/rAK3PF/3sARZBkg05ima2LCqiPg+ZRR9JoermBbGwLwEqkgCST1GwMRqdQZfIHdzgCSdSlTlYbEWrNyNKeouUPHOgtEJsn2WOrSClX2m/lF+6i3q8JsDVEBpCgWN2WefTD8i/IYSstzKmO3eIUaa2h3SOjfvlHjVfq6OmNShvDYIAAAFISURBVCjPbVHXksMgDNQBljC4l9iOndjp5VKv//+XnXByb7fDADO7rNAK9v4DngPv/h/24BHBuEhqB3pCeUxJIAWKtMZlIVCTciogH3yhWMpinM2t7ZctS5UgAR74kVICpMauNrfmaucTpMj5e+4VUNTOEvuzCoL8EvZLJCH1SIHAqKjtehowposwTmbIcqZIt+UpNV/3zWa3HYLp2sZ1gegoPXkNU5M238Ow3d132cIYEyel9MHDLo2NcX4519puPkPmbOIowrdTbGyTZXk2BEH1kZo4LPSjFgq2DFcVc3lWNZbt2rGWIIiwTOztzJZV9W77glCp8RsSNHdc1NfL6rxoxp5JCcmUC1cJjdx0GKZ1hxq0eqYBkuPlzLHrjXuiOAwaDUGQFJyWBpyU7EUaQI/xckGeA98jksqNQLmp8BnB4Xh8+ReHX640GNLt25uiAAAAAElFTkSuQmCC") 8px center no-repeat;
64
+ text-transform: uppercase;
65
+ line-height: 19px;
66
+ }
67
+
68
+ #barra-brasil .acesso-info { position: absolute; left: 130px; }
69
+ #barra-brasil .list { position: absolute; top: 0; right: 0; }
70
+ #barra-brasil .list .first { border-left: 2px solid #dfdfdf; }
71
+ #barra-brasil .list-item {
72
+ display: inline-block;
73
+ padding: 0 15px 0 13px;
74
+ height: 32px;
75
+ line-height: 32px;
76
+ border-right: 2px solid #dfdfdf;
77
+ }
78
+
79
+ #barra-brasil .link-barra { color: #606060; }
80
+ body.contraste #barra-brasil .link-barra { color: #FFF; }
81
+
82
+ #menu-icon {
83
+ display: none;
84
+ width: 35px;
85
+ height: 22px;
86
+ background: #f1f1f1 url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZBAMAAAA2x5hQAAAAJ1BMVEUAAABubm5ubm5ubm5ubm5ubm5ubm5ubm5vb29ubm5ubm5ubm5ubm5Wlu/fAAAADHRSTlMA6ioQ1wqDzlIj9Vz4BBXdAAAAR0lEQVQY02PAB1izzsCABAMD0xk4OIjOY053gYFqoMZIJRiYwIAfBBvDgAHQvkRBGPDAZx+qSjRT8ABUl6G6Gp99aCFBPAAA++pVuwpeGZsAAAAASUVORK5CYII=") no-repeat center;
87
+ border-bottom: 1px solid #DFDFDF;
88
+ }
89
+
90
+ @media only screen and (max-width: 959px) {
91
+ #barra-brasil #menu-icon {
92
+ display: inline-block;
93
+ float: right;
94
+ padding: 5px;
95
+ }
96
+
97
+ #barra-brasil nav:hover #menu-icon, #barra-brasil nav:active #menu-icon, #barra-brasil nav:focus #menu-icon {
98
+ background-color: #DDD;
99
+ }
100
+
101
+ #barra-brasil ul.list, #barra-brasil ul.list:active, #barra-brasil ul.list:focus {
102
+ overflow: hidden;
103
+ height: 0;
104
+ transition: 0.3s;
105
+ padding-top: 32px;
106
+ width: auto;
107
+ position: absolute;
108
+ z-index: 9;
109
+ }
110
+
111
+ #barra-brasil .list-item {
112
+ display: block;
113
+ text-align: center;
114
+ height: 30px;
115
+ background: #EEE;
116
+ padding: 0 15px;
117
+ border: 1px solid #dfdfdf;
118
+ }
119
+
120
+ body.contraste #barra-brasil .list-item { background: #000; }
121
+
122
+ #barra-brasil .list a:active li, #barra-brasil .list a:focus li, #barra-brasil .list a:hover li {
123
+ background: #DDD;
124
+ }
125
+
126
+ body.contraste #barra-brasil .list a:active li, body.contraste #barra-brasil .list a:focus li, body.contraste #barra-brasil .list a:hover li {
127
+ background: #000;
128
+ }
129
+
130
+ #barra-brasil nav:active ul.list, #barra-brasil nav:focus ul.list, #barra-brasil nav:hover ul.list {
131
+ height: 150px;
132
+ transition: 0.5s;
133
+ }
134
+
135
+ div#wrapper-barra-brasil { overflow: visible; }
136
+ }
137
+
138
+ @media screen and (min-width: 960px) {
139
+ #wrapper-barra-brasil { width: 960px; }
140
+ }