From 58ba7a98e028f35c4084c8aef0164a64a7c517d7 Mon Sep 17 00:00:00 2001 From: Augusto Herrmann Date: Mon, 21 Jan 2013 15:46:16 -0200 Subject: [PATCH] Corre??o: removido o c?digo do arquivo de template HTML e acrescentado o c?digo do Google Analytics em CoffeeScript --- LEIAME | 34 ++++++++++++++++++++++++++++++++++ app/barrabrasil.py | 42 ++++++++++++++++++++++++++++++++++++++++++ app/static/estilo-barra.css | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ assets/barra-brasil.coffee | 22 ++++++++++++++++++++++ assets/conteudo-barra.html | 1 + assets/estilo-barra.scss | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ assets/google-analytics.coffee | 12 ++++++++++++ assets/imagens/ai.png | Bin 0 -> 5715 bytes assets/imagens/barra-brasil-v3-bgx.gif | Bin 0 -> 43 bytes assets/imagens/barra-brasil-v3-bgx.png | Bin 0 -> 183 bytes assets/imagens/brasil.png | Bin 0 -> 5737 bytes barra-brasil-1.yaml | 42 ++++++++++++++++++++++++++++++++++++++++++ barra-brasil-2.yaml | 20 ++++++++++++++++++++ doc/fluxo-de-compilacao.png | Bin 0 -> 48316 bytes test/Teste de stress.jmx | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 15 files changed, 447 insertions(+), 0 deletions(-) create mode 100644 LEIAME create mode 100644 app/barrabrasil.py create mode 100644 app/static/estilo-barra.css create mode 100644 assets/barra-brasil.coffee create mode 100644 assets/conteudo-barra.html create mode 100644 assets/estilo-barra.scss create mode 100644 assets/google-analytics.coffee create mode 100644 assets/imagens/ai.png create mode 100644 assets/imagens/barra-brasil-v3-bgx.gif create mode 100644 assets/imagens/barra-brasil-v3-bgx.png create mode 100644 assets/imagens/brasil.png create mode 100644 barra-brasil-1.yaml create mode 100644 barra-brasil-2.yaml create mode 100644 doc/fluxo-de-compilacao.png create mode 100644 test/Teste de stress.jmx diff --git a/LEIAME b/LEIAME new file mode 100644 index 0000000..a706fa6 --- /dev/null +++ b/LEIAME @@ -0,0 +1,34 @@ +Projeto Barra Brasil Distribuída - Desenvolvimento + +Como instalar + +Dependências: + + - Flask + - assetgen + - node.js + - coffeescript + - sass + +Requisitos da Barra + +1. A Barra deve ser adaptável a um desenho fluído e fixo +2. A Barra deve suportar diferentes opções de cor de fundo +3. A Barra deve suportar a inclusão dinâmica do nome da organização +4. A Barra deve funcionar nos navegadores: + Internet Explorer versão 8 ou superior + Mozilla Firefox versão + Google Chrome versão + Safari versão + Opera versão + Navegadores de dispositivos móveis + +5. A Barra deve degradar graciosamente (graceful degradation ou progressive enhancement) clientes que não possuam compatibilidade ou no qual o javascript esteja desligado + +6. A barra deve ser acessível + +Considerações sobre a arquitetura + +1. A barra será hospedada em local centralizado e chamada de forma distribuída pelos portais institucionais + +2. A barra será incluída via javascript minificado, diff --git a/app/barrabrasil.py b/app/barrabrasil.py new file mode 100644 index 0000000..2260e4d --- /dev/null +++ b/app/barrabrasil.py @@ -0,0 +1,42 @@ +from flask import Flask, url_for, render_template, request, Response, make_response +import hashlib +app = Flask(__name__) + +@app.route('/') +def pagina_teste(): + # apos o desenvolvimento substituir por redirect para e-pwg + bootstrap = ''' + + + +
Portal do Governo Brasileiro
+ + + + ''' + return bootstrap # % url_for('static', filename='barra-brasil.js') + +@app.route('/barra.js') +def barra(): + nome_cor = request.args.get('cor', 'azul') + paleta = { + 'azul': '#004B82', + 'preta': '#000000', + 'cinza': '#7F7F7F', + 'verde': '#00500F', + } + cor = paleta.get(nome_cor, '#004B82') + conteudo = render_template('barra-brasil.js', cor=cor) + etag = hashlib.sha1(conteudo.encode('utf-8')).hexdigest() + if request.if_none_match and \ + etag in request.if_none_match: + resposta = Response(status=304) + else: # nao esta em cache do navegador + resposta = make_response(conteudo) + resposta.set_etag(etag) + resposta.headers['Content-type'] = 'application/javascript' + resposta.headers['Cache-control'] = 'max-age: 3600' + return resposta + +if __name__ == '__main__': + app.run(debug=True) diff --git a/app/static/estilo-barra.css b/app/static/estilo-barra.css new file mode 100644 index 0000000..acce76d --- /dev/null +++ b/app/static/estilo-barra.css @@ -0,0 +1,64 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + + +#barra-brasil div, #barra-brasil a, #barra-brasil ul, #barra-brasil li{ + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +body { + line-height: 1; +} +#barra-brasil ul { + list-style: none; +} + +/* Ministerio do Planejamento */ + +#barra-brasil { + position:relative; + overflow:hidden; + min-width:1000px; + background: #7F7F7F url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAJxAAAAACCAMAAADJlDaXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAlQTFRF/7QAAGsKAAAAGc+b7gAAAAN0Uk5T//8A18oNQQAAADVJREFUeNrs2DEBAAAIwCC1f2hT7IMYzAIAAAAAuQMAAAAAcgMAAAAA9FQkAAAAAPReAAEGAIRVYanUtckGAAAAAElFTkSuQmCC") center bottom no-repeat; +} + +#barra-brasil .barra { + display: block; + width: 960px; + height:28px; + margin: 0 auto; + background: url("data:image/gif;base64,R0lGODlhAQACAIAAAP+0AABrCiH5BAAAAAAALAAAAAABAAIAAAICDAoAOw==") 0 bottom repeat-x; +} + +#barra-brasil .barra ul { + float:right; + width: 319px; +} + +#barra-brasil .barra ul li { + float: left; + padding-left: 25px; +} + +#barra-brasil .ai { + display: block; + width: 161px; + height: 28px; + text-indent: -99999px; + background: #7F7F7F url("data:image/png;base64,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") no-repeat 0 4px; +} + +#barra-brasil .brasilgov { + display: block; + width: 108px; + height: 28px; + text-indent: -99999px; + background: #7F7F7F url("data:image/png;base64,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") no-repeat 0 4px; +} diff --git a/assets/barra-brasil.coffee b/assets/barra-brasil.coffee new file mode 100644 index 0000000..a8fc800 --- /dev/null +++ b/assets/barra-brasil.coffee @@ -0,0 +1,22 @@ + divBarra = document.getElementById("barra-brasil") + head = document.getElementsByTagName("head")[0] + link = document.createElement("link") + href = document.createAttribute("href") + + # src.nodeValue = "http://barra.brasil.gov.br/estilo-barra.css"; + # href.nodeValue = "http://189.9.137.173/estilo-barra.css"; + # href.nodeValue = "static/estilo-barra.css" + window._barrabrasil = + insere_css: (css) -> + style = document.createElement("style") + tipo = document.createAttribute("type") + tipo.nodeValue = "text/css" + media = document.createAttribute("media") + media.nodeValue = "all" + conteudo = document.createTextNode(css) + style.setAttributeNode tipo + style.setAttributeNode media + style.appendChild conteudo + head.appendChild style + + divBarra.innerHTML = conteudoBarra diff --git a/assets/conteudo-barra.html b/assets/conteudo-barra.html new file mode 100644 index 0000000..5d4ffa4 --- /dev/null +++ b/assets/conteudo-barra.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/assets/estilo-barra.scss b/assets/estilo-barra.scss new file mode 100644 index 0000000..466d4eb --- /dev/null +++ b/assets/estilo-barra.scss @@ -0,0 +1,62 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +#barra-brasil { + div, a, ul, li { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; + } +} + +body { + line-height: 1; +} + +#barra-brasil ul { + list-style: none; +} + +/* Ministerio do Planejamento */ + +#barra-brasil { + position: relative; + overflow: hidden; + min-width: 1000px; + $cor: \{\{ cor \}\}; + background: $cor embed("imagens/barra-brasil-v3-bgx.png") center bottom no-repeat; + .barra { + display: block; + width: 960px; + height: 28px; + margin: 0 auto; + background: embed("imagens/barra-brasil-v3-bgx.gif") 0 bottom repeat-x; + ul { + float: right; + width: 319px; + li { + float: left; + padding-left: 25px; + } + } + } + .ai { + display: block; + width: 161px; + height: 28px; + text-indent: -99999px; + background: $cor embed("imagens/ai.png") no-repeat 0 4px; + } + .brasilgov { + display: block; + width: 108px; + height: 28px; + text-indent: -99999px; + background: $cor embed("imagens/brasil.png") no-repeat 0 4px; + } +} diff --git a/assets/google-analytics.coffee b/assets/google-analytics.coffee new file mode 100644 index 0000000..d096bcb --- /dev/null +++ b/assets/google-analytics.coffee @@ -0,0 +1,12 @@ +_gaq = _gaq or [] +_gaq.push ["_setAccount", "UA-37670561-1"] +_gaq.push ["_setDomainName", "gov.br"] +_gaq.push ["_trackPageview"] +(-> + ga = document.createElement("script") + ga.type = "text/javascript" + ga.async = true + ga.src = ((if "https:" is document.location.protocol then "https://ssl" else "http://www")) + ".google-analytics.com/ga.js" + s = document.getElementsByTagName("script")[0] + s.parentNode.insertBefore ga, s +)() diff --git a/assets/imagens/ai.png b/assets/imagens/ai.png new file mode 100644 index 0000000..3dc7b77 Binary files /dev/null and b/assets/imagens/ai.png differ diff --git a/assets/imagens/barra-brasil-v3-bgx.gif b/assets/imagens/barra-brasil-v3-bgx.gif new file mode 100644 index 0000000..4660c71 Binary files /dev/null and b/assets/imagens/barra-brasil-v3-bgx.gif differ diff --git a/assets/imagens/barra-brasil-v3-bgx.png b/assets/imagens/barra-brasil-v3-bgx.png new file mode 100644 index 0000000..5514710 Binary files /dev/null and b/assets/imagens/barra-brasil-v3-bgx.png differ diff --git a/assets/imagens/brasil.png b/assets/imagens/brasil.png new file mode 100644 index 0000000..4bc21de Binary files /dev/null and b/assets/imagens/brasil.png differ diff --git a/barra-brasil-1.yaml b/barra-brasil-1.yaml new file mode 100644 index 0000000..0640da3 --- /dev/null +++ b/barra-brasil-1.yaml @@ -0,0 +1,42 @@ +# configuracao do assetgen para: +# - gerar o script de comportamento, minificado +# - gerar o css com as imagens incorporadas + +generate: + +- barra-brasil.js: + source: + - assets/conteudo-barra.html + - assets/barra-brasil.coffee + - assets/google-analytics.coffee + - raw: "})();" # fechamento do escopo da funcao anonima (ver template abaixo) + template: | + (function(){ + var conteudoBarra = '${source|trim}'; + +- estilo-barra.css: + source: + - assets/estilo-barra.scss + depends: + - assets/imagens/* + embed.path.root: assets + embed.url.base: imagens/ + +- barra-brasil-css.js: + source: + - build/estilo-barra.css + template: | + window._barrabrasil.insere_css('${source|trim}'); + +css.embed: true +css.embed.only: true +css.compress: true +js.compress: false +js.uglify.bin: uglifyjs +output.directory: build +output.hashed: false +output.manifest: app/assets.json + +profile.dev: + css.compress: false + js.compress: false diff --git a/barra-brasil-2.yaml b/barra-brasil-2.yaml new file mode 100644 index 0000000..7f3094e --- /dev/null +++ b/barra-brasil-2.yaml @@ -0,0 +1,20 @@ +# configuracao do assetgen para: +# - mesclar o css com javascript de comportamento + +generate: + +- barra-brasil.js: + source: + - build/barra-brasil.js # parte de comportamento + - build/barra-brasil-css.js # codigo de insercao do css + uglify.bin: uglifyjs + +css.embed: true +css.embed.only: true +output.directory: app/templates +output.hashed: false +output.manifest: assets.json + +profile.dev: + css.compress: false + js.compress: false diff --git a/doc/fluxo-de-compilacao.png b/doc/fluxo-de-compilacao.png new file mode 100644 index 0000000..2b84cbb Binary files /dev/null and b/doc/fluxo-de-compilacao.png differ diff --git a/test/Teste de stress.jmx b/test/Teste de stress.jmx new file mode 100644 index 0000000..cc66ef1 --- /dev/null +++ b/test/Teste de stress.jmx @@ -0,0 +1,148 @@ + + + + + Teste de stress genérico + false + false + + + + + + + + + false + 100 + + 1000 + 0 + 1356091419000 + 1356091419000 + false + continue + + + + + + + + + barra.brasil.gov.br + + + + + + + GET + true + false + true + false + false + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + true + false + false + false + false + false + 0 + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + true + false + false + false + false + false + 0 + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + true + false + false + false + false + false + 0 + true + + + + + + + + + -- libgit2 0.21.2