¿Por qué no hacen los aviones

La cola

Añadido por antoniogachero | Comentar(43)
Imágenes, Carteles y Desmotivaciones de

carteles antoniogachero desmotivaciones

bueno
10
malo
0
facebook twitter


Los mejores comentarios


FoFiTo~
FoFiTo~    
     +4 / 0  
porque pesarian demasiado?xD

@Nazari_Andaluz@
@Nazari_Andaluz@    
     +2 / 0  
@FoFiTo~, Zas en toda la boca!

Comentarios (43)


FoFiTo~
FoFiTo~    
     +4 / 0  
porque pesarian demasiado?xD

@Nazari_Andaluz@
@Nazari_Andaluz@    
     +2 / 0  
@FoFiTo~, Zas en toda la boca!

antoniogachero
antoniogachero    
     0 / 0  
@FoFiTo~, Puede ser :)

torkan72
torkan72    
     +1 / 0  
@FoFiTo~, si, pesarían mucho mas de lo que deben, además no es solo el material, la caja negra lleva una serie de estructuras de refuerzo que evitan que se rompa

FoFiTo~
FoFiTo~    
     +1 / 0  
@torkan72, si es que se ve que voy para ingeniero XD

torkan72
torkan72    
     +1 / 0  
@FoFiTo~, XD te gano por la mano, yo estoy en 1º de ingenieria

FoFiTo~
FoFiTo~    
     +1 / 0  
@torkan72, yo voy a entrar a 2º de bach. xD

chorbotown
chorbotown    
     +2 / 0  
sería demasiado caro

antoniogachero
antoniogachero    
     0 / 0  
@chorbotown, El gobierno tiene mucho dinero xD

PipasSaladas
PipasSaladas    
     +1 / 0  
wow subí mi cartel justo despues que tú, miro la cola y te veo debajo JAJAJA
PD: +1 tienes razón :)

antoniogachero
antoniogachero    
     0 / 0  
@PipasSaladas, Jajajaj ahora miro el tuyo, estoy ocupado

yuus
yuus    
     +1 / 0  
cierto , yo hace tiempo k me lo pregunto.. aunke si es verdad, pesarian demasiau xD

antoniogachero
antoniogachero    
     0 / 0  
@yuus, Jajaja ya ves xD

antoniogachero
antoniogachero    
     +2 / 0  
Cartel chorra xD

insua
insua    
     +1 / 0  
fuiste tu quien se me coló al hacer este cartel, ayer lo iba a subir con la misma foto y todo y lo ví ya subido... XDDDD

antoniogachero
antoniogachero    
     0 / 0  
@insua, Ah si ._.
Pues ni puta idea de que me hablas xDDDD

insua
insua    
     +1 / 0  
@antoniogachero, nada simplemente iba a colgar el mismo cartel que tu una dos horas más tarde

antoniogachero
antoniogachero    
     +1 / 0  
@insua, Amm vale... lo siento (?)

insua
insua    
     +1 / 0  
@antoniogachero, no hombre, lo digo porque tenemos gustos parecidos de carteles-coñas :)

antoniogachero
antoniogachero    
     0 / 0  
@insua, Jajaja ya ves xD

insua
insua    
     +1 / 0  
@antoniogachero, ahora que ves que somos afines... te quería hablar de una cosa.... ¿tu conoces la multipropiedad? XDDDDD

antoniogachero
antoniogachero    
     0 / 0  
@insua, Si te digo la verdad no :/ es de tener muchas casas y terrenos ? XDDD

insua
insua    
     +1 / 0  
@antoniogachero, jejejeje, es una putada más que otra cosa. Sí la idea es comprar una casa de veraneo entre varios y disfrutarla cada año por meses rotando... pero vamos te lo he dicho por la coña de la venta de multipropiedades jejejeje

antoniogachero
antoniogachero    
     +1 / 0  
@insua, am vale xDDD tienes 33 años ?

pobla23
pobla23    
     +1 / 0  
No volaría porque pesaría mucho ._.

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, Pues se le ponen turbo-motores de algún caza xD

antoniogachero
antoniogachero    
     +1 / 0  
@antoniogachero, o turbo-reactores xD

pobla23
pobla23    
     +1 / 0  
@antoniogachero, Entonces pierde el control y mayor hostion ._.

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, No pasa nah, le ponemos airbags

pobla23
pobla23    
     +1 / 0  
@antoniogachero, ponemos a la simon delante, eso si que amortigua xD

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, O a la Cristina Pedroche... (Que se apellida como mi pueblo)

pobla23
pobla23    
     +1 / 0  
@antoniogachero, la simon pararia mas el avion

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, Ya ves... [AntonioRecio]Pero que pechotes[/AntonioRecio]

pobla23
pobla23    
     +1 / 0  
@antoniogachero, aaaaaw yeeeeeaaaaaaah

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, jajaja xD

pobla23
pobla23    
     +1 / 0  
@antoniogachero, [BarneyStinson] mañana me voy a la guerra de irak y quiero aprovechar esta ultima noche para estar contigo [/BarneyStinson]

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, [antoniogachero]je je[/antoniogachero]
Número de visitas: 713322505 | Usuarios registrados: 269787 | Clasificación de usuariosUsuarios on-line: 5447, 379 registrados y 5068 visitantes
Carteles en la página: 2213954, hoy: 3616, ayer: 10977
blog.desmotivaciones.es
Contacto | Reglas

pobla23
pobla23    
     +1 / 0  
@antoniogachero, [pobla23]juas juas [/pobla23]
Bienvenido, pobla23 | Mensajes privados | Editar perfil | Salir
¿Por qué no hacen los aviones La cola
¡Vota! bueno⇑ · ⇓malo | Puntos: 18 | Votos: 18
Añadido 25.07.2011 a las 17:30 por antoniogachero | Denunciar | Comentar(37)
¿Otra descripcion?
0
FoFiTo~ 25.07.2011 a las 17:31 +4
porque pesarian demasiado?xD
@Nazari_Andaluz@ 25.07.2011 a las 17,31 +2
@FoFiTo~, Zas en toda la boca!
antoniogachero 25.07.2011 a las 17:33 0
@FoFiTo~, Puede ser :)
torkan72 26.07.2011 a las 00:30 +1
@FoFiTo~,

antoniogachero
antoniogachero    
     +1 / 0  
@pobla23, [AG]jijiji[/AG]
Nueva pestaña
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* The global object.
* @type {!Object}
*/
const global = this;
// TODO(estade): This should be removed and calls replaced with cr.isMac
const IS_MAC = /^Mac/.test(navigator.platform);
/**
* Alias for document.getElementById.
* @param {string} id The ID of the element to find.
* @return {HTMLElement} The found element or null if not found.
*/
function $(id) {
return document.getElementById(id);
}
/**
* Calls chrome.send with a callback and restores the original afterwards.
* @param {string} name The name of the message to send.
* @param {!Array} params The parameters to send.
* @param {string} callbackName The name of the function that the backend calls.
* @param {!Function} The function to call.
*/
function chromeSend(name, params, callbackName, callback) {
var old = global[callbackName];
global[callbackName] = function() {
// restore
global[callbackName] = old;
var args = Array.prototype.slice.call(arguments);
return callback.apply(global, args);
};
chrome.send(name, params);
}
/**
* Generates a CSS url string.
* @param {string} s The URL to generate the CSS url for.
* @return {string} The CSS url string.
*/
function url(s) {
// http://www.w3.org
// Parentheses, commas, whitespace characters, single quotes (') and double
// quotes (") appearing in a URI must be escaped with a backslash
var s2 = s.replace(/(\(|\)|\,|\s|'|"|\\)/g, '\\$1');
// WebKit has a bug when it comes to URLs that end with \
// https://bugs.webkit.org
if (/\\\\$/.test(s2)) {
// Add a space to work around the WebKit bug.
s2 += ' ';
}
return 'url("' + s2 + '")';
}
/**
* Parses query parameters from Location.
* @param {string} s The URL to generate the CSS url for.
* @return {object} Dictionary containing name value pairs for URL
*/
function parseQueryParams(location) {
var params = {};
var query = unescape(location.search.substring(1));
var vars = query.split("&");
for (var i=0; i < vars.length; i++) {
var pair = vars[i].split("=");
params[pair[0]] = pair[1];
}
return params;
}
function findAncestorByClass(el, className) {
return findAncestor(el, function(el) {
if (el.classList)
return el.classList.contains(className);
return null;
});
}
/**
* Return the first ancestor for which the {@code predicate} returns true.
* @param {Node} node The node to check.
* @param {function(Node) , boolean} predicate The function that tests the
* nodes.
* @return {Node} The found ancestor or null if not found.
*/
function findAncestor(node, predicate) {
var last = false;
while (node != null && !(last = predicate(node))) {
node = node.parentNode;
}
return last ? node : null;
}
function swapDomNodes(a, b) {
var afterA = a.nextSibling;
if (afterA == b) {
swapDomNodes(b, a);
return;
}
var aParent = a.parentNode;
b.parentNode.replaceChild(a, b);
aParent.insertBefore(b, afterA);
}
// Handle click on a link. If the link points to a chrome: or file: url, then
// call into the browser to do the navigation.
document.addEventListener('click', function(e) {
// Allow preventDefault to work.
if (!e.returnValue)
return;
var el = e.target;
if (el.nodeType == Node.ELEMENT_NODE &&
el.webkitMatchesSelector('A, A *')) {
while (el.tagName != 'A') {
el = el.parentElement;
}
if ((el.protocol == 'file:' || el.protocol == 'about:') &&
(e.button == 0 || e.button == 1)) {
chrome.send('navigateToUrl', [
el.href,
el.target,
e.button,
e.altKey,
e.ctrlKey,
e.metaKey,
e.shiftKey
]);
e.preventDefault();
}
}
});
// Logging info for benchmarking purposes.
var log = [];
function logEvent(name, shouldLogTime) {
if (shouldLogTime) {
chrome.send('logEventTime', [name]);
}
log.push([name, Date.now()]);
}
logEvent('Tab.NewTabScriptStart', true);
/**
* Registers a callback function so that if the backend calls it too early it
* will get delayed until DOMContentLoaded is fired.
* @param {string} name The name of the global function that the backend calls.
*/
function registerCallback(name) {
var f = function(var_args) {
var args = Array.prototype.slice.call(arguments);
// If we still have the temporary function we delay until the dom is ready.
if (global[name] == f) {
logEvent(name + ' is not yet ready. Waiting for DOMContentLoaded');
document.addEventListener('DOMContentLoaded', function() {
logEvent('Calling the new ' + name);
global[name].apply(null, args);
});
}
};
global[name] = f;
}
chrome.send('getMostVisited');
chrome.send('getRecentlyClosedTabs');
chrome.send('getForeignSessions');
chrome.send('getApps');
registerCallback('mostVisitedPages');
registerCallback('recentlyClosedTabs');
registerCallback('syncMessageChanged');
registerCallback('getAppsCallback');
registerCallback('setShownSections');
registerCallback('foreignSessions');
registerCallback('bookmarkBarDetached');
registerCallback('bookmarkBarAttached');
var templateData = {"anim":"true","appcreateshortcut":"Crear acceso directo","applaunchtypefullscreen":"Abrir en pantalla completa","applaunchtypepinned":"Abrir como pesta\u00F1a fija","applaunchtyperegular":"Abrir como pesta\u00F1a normal","applaunchtypewindow":"Abrir como ventana","appoptions":"Opciones","apps":"Aplicaciones","appsettings":"Configuraci\u00F3n","appuninstall":"Desinstalar","attributionintro":"Tema creado por","bookmarkbarattached":"false","close":"Cerrar","closedwindowmultiple":"$1 pesta\u00F1as","closedwindowsingle":"Una pesta\u00F1a","closefirstrunnotification":"Cerrar","customlogo":"false","downloads":"Descargas","fontfamily":"Arial, sans-serif","fontsize":"84%","foreignsessions":"Sesiones externas","hasattribution":"false","help":"Ayuda","helpurl":"https://www.google.com,"history":"Historial","mostvisited":"M\u00E1s visitados","pagedisplaytooltip":"Cambiar el dise\u00F1o de la p\u00E1gina","pinthumbnailtooltip":"Mantener en esta p\u00E1gina","recentlyclosed":"Cerrados recientemente","removethumbnailtooltip":"No mostrar en esta p\u00E1gina","restorethumbnails":"Restaurar todas las miniaturas eliminadas","showhidelisttooltip":"Vista de lista","showhidethumbnailtooltip":"Vista de miniaturas","shown_sections":1,"syncispresent":"true","syncpromotext":"Configurar sincronizaci\u00F3n...","textdirection":"ltr","thumbnailremovednotification":"Miniatura eliminada","title":"Nueva pesta\u00F1a","undothumbnailremove":"Deshacer","unpinthumbnailtooltip":"No mantener en esta p\u00E1gina","web_store_title":"Chrome Web Store","web_store_url":"https://chrome.google.com
html {
/* This is needed because of chrome://theme/css/new_tab.css */
height: 100%;
}
body {
margin: 0;
height: 100%;
overflow: auto;
-webkit-user-select: none;
cursor: default;
}
html[mode=app-launcher] {
height: auto;
}
#main {
box-sizing: border-box;
-webkit-transition: width .15s;
margin: 0 auto;
min-height: 100%;
}
body.loading #main {
/* We start out hidden to prevent glitchiness as the app and most visited
data flows in. */
visibility: hidden;
}
#main,
.section,
.maxiview,
#login-container,
#notification-container,
#closed-sections-bar {
width: 920px;
}
html[dir=rtl] #main {
background-position-x: 100%;
}
html[mode=app-launcher] #main {
min-height: 50px;
}
html[anim=false] *,
.no-anim, .no-anim *,
.loading * {
-webkit-transition: none !important;
-webkit-animation: none !important;
}
:link,
:visited,
.link {
cursor: pointer;
text-decoration: underline;
color: hsla(213, 90%, 24%, 0.33333);
-webkit-appearance: none;
border: 0;
background: none;
}
.link-color {
color: hsl(213, 90%, 24%);
text-decoration: none;
}
.hide {
opacity: 0 !important;
visibility: hidden !important;
pointer-events: none;
}
/* Notification */
#notification-container {
position: fixed;
}
#notification {
-webkit-transition: opacity .15s;
position: relative;
background-color: hsl(52, 100%, 80%);
border: 1px solid rgb(211, 211, 211);
border-radius: 6px;
color: black;
display: -webkit-box;
font-weight: bold;
margin: 2px auto;
opacity: 0;
padding: 7px 15px;
pointer-events: none;
white-space: nowrap;
width: intrinsic;
z-index: 2;
}
#notification.first-run {
padding: 5px 13px; /* subtract the border width */
border: 2px solid hsl(213, 55%, 75%);
background-color: hsl(213, 63%, 93%);
-webkit-box-shadow: 2px 2px 3px hsla(0, 0%, 0%, .3);
font-weight: normal;
}
#notification.promo {
padding: 5px 13px; /* subtract the border width */
border: 1px solid hsl(0, 0%, 80%);
background-color: hsl(120, 93%, 93%);
-webkit-box-shadow: 2px 2px 3px hsla(0, 0%, 0%, .3);
font-weight: normal;
}
#notification.promo a {
color: rgb(0, 102, 204);
}
#notification-close {
display: inline-block;
border: 0;
-webkit-margin-start: 10px;
-webkit-margin-end: auto;
vertical-align: middle;
width: 16px;
height: 16px;
background: no-repeat;
background-color: transparent;
background-image: url('chrome://theme/IDR_CLOSE_BAR');
padding: 0;
}
#notification-close:hover,
#notification-close:focus {
background-image: url('chrome://theme/IDR_CLOSE_BAR_H');
}
#notification-close:active {
background-image: url('chrome://theme/IDR_CLOSE_BAR_P');
}
#notification > * {
max-width: 500px;
overflow: hidden;
text-overflow: ellipsis;
}
#notification.first-run > * {
white-space: normal;
}
#notification.show {
opacity: 1;
pointer-events: all;
-webkit-transition: opacity 1s;
}
#notification .link {
color: rgba(0, 102, 204, 0.3);
-webkit-padding-start: 20px;
}
#notification .link-color {
color: rgb(0, 102, 204);
}
#notification > * > .blacklist-title {
display: inline-block;
max-width: 30ex;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.item {
background: no-repeat 0% 50%;
padding: 2px;
padding-left: 18px;
background-size: 16px 16px;
background-color: hsla(213, 63%, 93%, 0);
display: block;
line-height: 20px;
box-sizing: border-box;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 100%;
}
.item:visited,
.item:link {
color: hsl(213, 90%, 24%);
}
html[dir=rtl] .item {
background-position-x: 100%;
padding-right: 18px;
padding-left: 2px;
text-align: right;
}
.window {
overflow: visible; /* We use visible so that the menu can be a child and shown
on :hover. To get this to work we have to set visibility
to visible which unfortunately breaks the ellipsis for t
he window items */
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA10lEQVQ4y82OSwsBURiGv78of0Ehk2vGwsKlTLllFlMzyJgmaqKJ0fgBVrZWFjb2io2N3WvOiAhNHRuLp7fO6Xn6CAAZ7gLGcoEhw2Xr+Gt4y/78N9fxMRjLG8ylgWMjrJ24GMxtkDax0F2dsd7sHnRmW4TUYyDa1AIpY9OX9ofLCywSdIEyMkGy3nuT7zxf9QlZ74OaqvI1EETDc0mS29wBSW6BynWJO1Cp10DFaok7wNw/CBSKBe6A6LmUEzPcgVw+C0qlBe5A0nMpIUS5A8yleCyCX7gCQoVZHBMa2iYAAAAASUVORK5CYII=");
}
.window-menu {
position: absolute;
display: none;
border: 1px solid #999;
-webkit-box-shadow: 2px 2px 3px hsla(0, 0%, 0%, .3);
color: black;
background-color: white;
left: 0;
white-space: nowrap;
z-index: 2;
padding: 2px;
cursor: default;
border-radius: 4px;
}
/* Made to look like a tooltip using vista/win7 look and feel.
TODO(arv): Replace with -webkit-appearance once issue 17371 is fixed
*/
#window-tooltip {
color: #555;
pointer-events: none;
border: 1px solid rgb(118, 118, 118);
border-radius: 3px;
padding: 0 3px;
background: -webkit-linear-gradient(white, rgb(228, 229, 240));
width: auto;
max-width: 300px;
}
.foreign-session-client {
float: left;
max-width: 114px; /* Selected so that we can fit 5 items in EN-US */
font-weight: normal;
margin: 0;
position: relative;
}
html[dir=rtl] .foreign-session-client {
float: right;
}
.foreign-session-client > p {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 100%;
margin: 0 10px;
}
#foreign-sessions .nav {
max-width: none !important;
}
.nav > a {
/* no icon */
padding: 0;
}
.nav > a:after {
content: '\u00bb'; /* raque gets flipped automatically in rtl */
font-size: 115%;
-webkit-padding-start: 2px;
}
#sync-status > div {
border-radius: 6px;
padding: 5px 0;
margin: 10px 0 20px;
white-space: nowrap;
overflow-x: hidden;
}
#sync-status > div > * {
display: inline-block;
max-width: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 106%;
margin: 0;
}
.notification.hidden {
opacity: 0;
pointer-events: none;
}
/**
* Unfortunately, there seems to be a bug in WebKit where this div doesn't
* immediately get layout. It still doesn't have it in 'load', but gains it
* sometime after.
*
* We detect this in the JS by looking for offsetWidth > 0, and when it occurs,
* remove the 'nolayout' class.
*/
#attribution.nolayout {
position: static;
visibility: hidden;
}
#attribution {
bottom: 5px;
left: 8px;
position: fixed;
text-align: end;
}
html[dir=rtl] #attribution {
left: auto;
right: 8px;
}
#attribution.obscured {
visibility: hidden;
}
html[hasattribution=false] #attribution > div {
display: none;
}
.sync-button {
font-size: inherit;
padding: 0;
margin: 0;
-webkit-appearance: none;
border: 0;
background: none;
cursor: pointer;
text-decoration: underline;
font-family: inherit;
}
.section {
position: fixed;
font-size: 92%;
}
body.noscroll {
overflow: hidden;
}
html[anim=true][enable-section-animations=true] .section {
-webkit-transition: top .15s;
}
#login-container {
display: none;
margin-top: 5px;
position: fixed;
text-align: end;
}
/* A section in menu mode doesn't display its contents at all. Instead it is
rendered as a menu along the bottom of the screen. We have a separate class for
this so that when a hidden section is unhidden it can go back to its previous
collapsed state. */
.section.menu {
display: none !important;
}
/* A disabled section is not rendered in the UI in any way. Examples of this
state include the 'recently closed' section when we have no data for it, or this
'sync status' section, when there is no status to display. We have a separate
class for this so that when a section is enabled, it can go back to its previous
menu and collapsed state. */
.section.disabled {
display: none !important;
}
.section > h2 {
font-family: Helvetica, Arial, sans-serif;
font-size: 133%;
font-weight: normal;
margin: 0;
position: relative;
}
.section:not([noexpand]) > h2 {
cursor: pointer;
}
.section > h2 > .disclosure {
position: absolute;
left: -15px;
margin-top: 50%;
top: -5px;
}
html[dir=rtl] .section > h2 > .disclosure {
left: auto;
right: -15px;
-webkit-transform: rotate(180deg);
}
html[anim=true] .section > h2 > .disclosure {
-webkit-transition: -webkit-transform .15s;
}
.section:not(.collapsed) > h2 > .disclosure {
-webkit-transform: rotate(90deg);
}
.section > h2 .back {
position: absolute;
left: 0;
top: 0.56em;
width: 100%;
height: 1.5em;
z-index: 1;
}
.section > h2 span {
-webkit-padding-end: 0.30em;
position: relative;
z-index: 2;
}
.section-close-button {
-webkit-appearance: none;
-webkit-transition: opacity .15s;
background-color: transparent;
background-image: url(chrome://theme/IDR_CLOSE_BAR);
background-position: center center;
background-repeat no-repeat;
border: 0;
height: 21px;
margin-top: -10px;
position: absolute;
right: -21px;
top: 50%;
width: 21px;
opacity: 0;
z-index: 3;
}
html[dir=rtl] .section-close-button {
left: -21px;
right: auto;
}
.section > h2:hover .section-close-button,
.section-close-button:hover {
opacity: 1;
}
.section-close-button:hover {
background-image: url(chrome://theme/IDR_CLOSE_BAR_H);
}
#closed-sections-bar {
position: fixed;
text-align: end;
}
/* closed-sections-bar is bottom aligned for non-ChromeOS build. On ChromeOS,
it goes right under the sections. */
#closed-sections-bar:not([chromeos]) {
bottom: 14px;
}
#closed-sections-bar > button {
/* We hide all these buttons by default and turn them on when needed. */
display: none;
-webkit-appearance: none;
background: none;
border: 0;
cursor: pointer;
font: inherit;
margin: 0;
-webkit-margin-start: 1.5em;
padding: 2px 0 0 0;
/* Note: The font here should end up the same as .section > h2. A different
percentage is needed because the parent element here has a different size. */
font-family: Helvetica, Arial, sans-serif;
font-size: 122%;
font-weight: normal;
}
#closed-sections-bar > button > img {
-webkit-transform: rotate(90deg);
position: relative;
top: -2px;
margin-left: 1px;
}
.maxiview {
padding: 5px 0 30px;
position: absolute;
-webkit-mask-attachment: fixed;
opacity: 0;
}
.maxiview.opaque {
opacity: 1;
}
.maxiview.collapsing {
opacity: 0;
}
.maxiview.collapsed {
display: none;
opacity: 0;
}
html[anim=true][enable-section-animations=true] .maxiview {
-webkit-transition: opacity .10s, top .15s;
}
html[anim=true][enable-section-animations=true] .miniview {
-webkit-transition: opacity .15s;
}
.section > .miniview {
display: none;
margin: 10px 0 30px;
white-space: nowrap;
overflow-x: hidden;
}
.section.collapsed > * {
display: none;
}
.section.collapsed > h2 {
display: block;
}
.section.collapsed > .miniview {
display: block;
opacity: 0;
}
.section.collapsed > .miniview.opaque {
opacity: 1;
}
.section.collapsed > h2 {
margin-right: 0;
}
.miniview > span {
display: inline-block;
max-width: 114px; /* Selected so that we can fit 5 items in EN-US */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 100%;
margin: 0 10px;
}
.miniview > span:first-child {
margin-left: 0;
}
.miniview > span:last-child {
margin-right: 0;
}
/* small */
.small-layout #main,
.small-layout .section,
.small-layout .maxiview,
.small-layout #login-container,
.small-layout #notification-container,
.small-layout #closed-sections-bar {
width: 692px;
}
.small-layout #notification > * {
max-width: 300px;
}
.small-layout #notification > span > .blacklist-title {
max-width: 15ex;
}
/* Ensure we have at least 10px horizontal marging. */
@media (max-width, 712px) {
#main {
margin-left: 10px;
margin-right: 10px;
}
}
/* Most Visited */
#most-visited-maxiview {
position: relative;
height: 366px;
-webkit-user-select: none;
}
.thumbnail-container {
position: absolute;
color: hsl(213, 90%, 24%);
text-decoration: none;
-webkit-transition: left .15s, right .15s, top .15s;
text-decoration: none;
}
.thumbnail-container:focus {
outline: none;
}
.thumbnail,
.thumbnail-container > .title {
width: 207px; /* natural size is 196 */
height: 129px; /* 136 */
-webkit-transition: width .15s, height .15s;
}
.thumbnail-container > .title {
line-height: 16px;
height: 16px;
margin: 0;
margin-top: 4px;
font-size: 100%;
font-weight: normal;
padding: 0 3px;
opacity: 1;
-webkit-transition: opacity .15s, width .15s;
color: black;
}
.thumbnail-wrapper {
display: block;
background-size: 212px 132px;
background: no-repeat 4px 4px;
background-color: white;
border-radius: 5px;
-webkit-transition: background-size .15s;
position: relative;
}
.filler * {
visibility: hidden;
}
.filler {
pointer-events: none;
}
.filler .thumbnail-wrapper {
visibility: visible;
border: 3px solid hsl(213, 60%, 92%);
}
.filler .thumbnail {
visibility: inherit;
border: 1px solid white;
padding: 0;
background-color: hsl(213, 60%, 92%);
}
.edit-bar {
display: -webkit-box;
-webkit-box-orient: horizontal;
-webkit-box-align: stretch;
padding: 3px;
padding-bottom: 0;
height: 17px; /* 23 - 2 * 3 */
cursor: move;
font-size: 100%;
line-height: 17px;
background: hsl(213, 54%, 95%);
border-top-left-radius: 4px;
border-top-right-radius: 4px;
position: relative;
margin-top: 21px;
margin-bottom: -21px;
-webkit-transition: margin .15s, background .15s;
}
.edit-bar > * {
display: block;
position: relative;
}
.thumbnail-container:focus .edit-bar,
.thumbnail-container:hover .edit-bar {
margin-top: 0;
margin-bottom: 0;
-webkit-transition-delay: .5s, 0s;
/* We need background-color as well to get the fade out animation correct */
background-color: hsl(213, 66%, 57%);
background-image: -webkit-linear-gradient(hsl(213, 87%, 67%),
hsl(213, 66%, 57%));
}
.edit-bar > .spacer {
-webkit-box-flex: 1;
}
.edit-bar > .pin,
.edit-bar > .remove {
width: 16px;
height: 16px;
cursor: pointer;
background-image: no-repeat 50% 50%;
}
.edit-bar > .pin {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAi0lEQVQ4y6WTbQqAIAyGR4eRPs5h/to1umYX2J1swhuYlG0lPCLi+zDFERENyqhEhY1EZEqWJmx6ByNLqUw5ZxcY6TS1B4IiBgHfCUp4hyB4BXVYepIngTwQvFeQDq+CniRYBXeSzXqFGsGjbljzF8FZNtcSq6CFUdFF8Psr/2mmmdCSi7I62nlFhg6BYt2lXCEqGgAAAABJRU5ErkJggg==");
}
.edit-bar > .pin:hover {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAkUlEQVQ4y52TwQnAIAxF/6EDuUkppXdH8Sq6gFN2hNTQVGxRqwa+iPAeiRAAWGLWGBsTOmOFYRYbPxIRRiIiZuH5mBAkNhQEiu76E4SSgOFTBGpUkMPUktQEtVKjI7TqV9CSqF5BSWJ6R8hD8qlG7npG8LStc0mv4BstHb0EHvPl0zJNwMzskJU8YtzAOjthcAHXovXMr/dmSgAAAABJRU5ErkJggg==");
}
.edit-bar > .pin:active {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAtElEQVQ4y6WTQQrCMBBFZ+GhcgsRcZltj+AFXEl7gdl5gdKFELyYi6zifJlCWtM40YFHQ8p/mYSEiGgn7IVReBi5agZZOggsdI2wZmn6Idw5587yHUhbWvz03l+SlEHAHwKEY4xPCDBuEuThubYkRUHaqJKkuoVUqa+CmiTvpCooSUIId9MWchDEoSKMMTPfmgVz2wjnEpNgDcLoaC0Y/r3K78eEiRZ09SPpkzwJvU5a6DVDL0iIFWtK1DHEAAAAAElFTkSuQmCC");
}
.pinned .edit-bar > .pin {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVQ4y6WTQQrEIAxFs5j7lTLM0u1cZFbiXCC7uUPBm3XhyuZDhLaTWm0DH0R4zyiGiOghGSRewo3xyoClUTffnWFl6XsBLgH7f7pz7pOlGrvYCgCnlGYIsO4SrOFSJ5KtIB9URWJfIVfqVFCTGJ3YAksSY5yarrAOQDwqYKyZ+dctKG0DNiR1wT6A0dFecPsr3xmmJ+lIviShY5yDMrQA7LABeK+JNKgAAAAASUVORK5CYII=");
}
.pinned .edit-bar > .pin:hover {
background-image: url(ntp_pin_on_h.png');
}
.pinned .edit-bar > .pin:active {
background-image: url(ntp_pin_on_p.png');
}
.edit-bar > .remove {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAeUlEQVQ4y7WTywmAQAxEH1bjpw53QdiGtkZ7Gi8RRBc1BgO5JMyDfAagA3pgBsrLnE3TAQxW9EYxLRlAkist8k76CigtwCKpNkTVeo+AKmk9QS61O8BZ0AI+Ao6QtTXS74DQCOElhs/ofqTwK0fMNGKWnIDksHMyDRvjd9VHQSi/pgAAAABJRU5ErkJggg==");
}
.edit-bar > .remove:hover {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAdklEQVQ4y72TUQrAIAiG/4fdb4yxty4UdYFO6xRklE+msOB7kfyyUgA4mJOpzHBSNUdycWlwdw3NRUd8dQRPn6tYBURUmMHAILHiEchGMpIv5hFYySL0CmbJUs1vgtQV0o+Y+8ZII6VbOTNMN3QkH6ZtjHPTHLxiHvw7LRQlVgAAAABJRU5ErkJggg==");
}
.edit-bar > .remove:active {
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAi0lEQVQ4y2NgYGBgAWJ/IF4LxDuIxJ1QPSC9DIFAPBOI00jEM6F6GdaToTnNwsKiDEj3MECdRK4BMzEM+P//fwwQY3gJJAaSI8YAkML/yIZgE8NpALoGbJoJGoBmyH9sXqKtARR5geJApDgayUlIPZQmZXBmAgmQgqG2BzNAs2QoEHdDBYnB3VA9DACUmgUVtMbe9gAAAABJRU5ErkJggg==");
}
.thumbnail-container > .title > div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
background: no-repeat 0 50%;
background-size: 16px;
padding-left: 20px; /* we cannot use padding start here because even if we set
the direction we always want the icon on the same side
*/
padding-right: 0;
}
html[dir=rtl] .thumbnail-container > .title > div {
background-position-x: 100%;
padding-left: 0;
padding-right: 20px;
text-align: right;
}
.thumbnail {
border: 3px solid hsl(213, 63%, 93%);
padding: 1px;
border-radius: 5px;
display: block;
-webkit-box-shadow: 0px 2px 2px hsla(0, 0%, 0%, 0);
-webkit-transition: width .15s, height .15s, border-color .15s,
border-top-left-radius .15s, border-top-right-radius .15s,
-webkit-box-shadow .15s;
}
.edit-mode-border {
border-radius: 4px;
/* when dragged over we move this */
position: relative;
-webkit-transition: top .15s, left .15s;
}
.thumbnail-container:focus .thumbnail,
.thumbnail-container:hover .thumbnail {
border-color: hsl(213, 66%, 57%);
-webkit-box-shadow: 0px 2px 2px hsla(0, 0%, 0%, 0);
border-top-left-radius: 0;
border-top-right-radius: 0;
background-image: -webkit-linear-gradient(hsla(0, 0%, 0%, 0),
hsla(0, 0%, 47%, 0) 85%,
hsla(0, 0%, 47%, 0.2));
/* delay border radius transition as much as the edit bar slide delay */
-webkit-transition-delay: 0, 0, 0, .5s, .5s, 0;
}
.thumbnail-container:focus > .edit-mode-border,
.thumbnail-container:hover > .edit-mode-border {
background-color: hsl(213, 66%, 57%);
-webkit-box-shadow: 0px 2px 2px hsla(0, 0%, 0%, .5);
}
.dragging,
.dragging * {
-webkit-transition: none !important;
}
.dragging > .title {
opacity: 0;
}
@-webkit-keyframes 'fade-in' {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.fade-in {
-webkit-animation: 'fade-in' .15s;
}
@media (max-width, 940px) {
#most-visited-maxiview {
height: 294px;
}
.thumbnail,
.thumbnail-container > .title {
width: 150px;
height: 93px;
}
.thumbnail-container > .title {
height: auto;
}
.thumbnail-wrapper {
background-size: 150px 93px;
}
}
#most-visited-settings {
position: absolute;
top: 1px;
right: 0;
border: 0;
cursor: pointer;
font-size: 70%;
margin: 0;
padding: 0;
text-decoration: underline;
visibility: hidden;
-webkit-padding-start: 3px;
z-index: 3;
}
html[dir=rtl] #most-visited-settings {
left: 0;
right: auto;
}
#most-visited:not(.collapsed) #most-visited-settings.has-blacklist {
visibility: visible;
}
/* Apps */
#apps-content {
position: relative;
max-width: 780px; /* (124 + margin * 2) * 6 */
}
html.apps-promo-visible #apps-content {
max-width: 650px; /* (124 + margin * 2) * 5 */
}
#apps-maxiview {
overflow: hidden;
}
/*
We don't need to do anything for html.apps-promo-visible because there is
enough extra space in the small grid layout.
*/
.small-layout #apps-content,
.small-layout html.apps-promo-visible #apps-content {
max-width: 520px; /* (124 + margin * 2) * 4 */
}
.app,
.app[new=installed] {
box-sizing: border-box;
-webkit-perspective: 400;
border-radius: 10px;
color: black;
margin: 5px 3px;
position: absolute;
height: 136px;
width: 124px; /* 920 / 7 - margin * 2 */
visibility: hidden;
}
.app a {
border-radius: 10px;
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0;
}
.app a {
-webkit-transition: background-color .5s;
background: rgba(255, 255, 255, 0) /* transparent white */
no-repeat center 10px;
background-size: 96px 96px;
font-family: Helvetica, Arial, sans-serif;
font-size: 107%;
overflow: hidden;
padding: 111px 10px 10px; /* 10 + 96 + 5 */
text-align: center;
text-decoration: none;
text-overflow: ellipsis;
white-space: nowrap;
}
.app .app-settings {
background-color: transparent;
background-position: center center;
background-repeat: no-repeat;
border: 0;
height: 14px;
padding: 0;
position: absolute;
right: 5px;
top: 5px;
width: 14px;
}
.app > .app-settings {
-webkit-transition: opacity .3s;
-webkit-transition-delay: 0;
background-image: url(chrome://theme/IDR_BALLOON_WRENCH);
opacity: 0;
}
.app > .app-settings:hover {
-webkit-transition: none;
background-image: url(chrome://theme/IDR_BALLOON_WRENCH_H);
}
.app:hover > .app-settings,
.app > .app-settings:focus {
-webkit-transition-delay: .5s;
opacity: .9;
}
.app.dragging > .app-settings {
background-image: none;
}
.app.dragging {
opacity: .7;
}
#apps-content[launcher-animations=true] .app {
-webkit-transition: top .2s, left .2s, right .2s, opacity .2s;
}
#apps-content.visible .app {
visibility: visible;
}
@-webkit-keyframes bounce {
0% {
-webkit-transform: scale(0, 0);
}
60% {
-webkit-transform: scale(1.2, 1.2);
}
100% {
-webkit-transform: scale(1, 1);
}
}
html[install-animation-enabled=true] .app[new=new] {
opacity: 0;
}
html[install-animation-enabled=true] .app[new=installed] {
-webkit-animation: bounce .5s ease-in-out;
-webkit-transition: opacity .5s;
}
.app.web-store-entry > a {
background-image: url("chrome://theme/IDR_WEBSTORE_ICON");
}
menu > button.default {
font-weight: bold;
}
#apps-promo {
display: none;
}
html.apps-promo-visible #apps-promo {
background: url('chrome://theme/IDR_WEBSTORE_ICON') no-repeat;
height: 125px;
-webkit-padding-start: 125px;
display: table-cell;
vertical-align: text-bottom;
}
#apps-promo-heading {
font-size: 115%;
font-weight: bold;
margin-bottom: 5px;
-webkit-margin-start: 3px;
}
#apps-promo-hide {
-webkit-appearance: none;
-webkit-transition: opacity .15s;
background-color: transparent;
border: 0;
cursor: pointer;
font-family: inherit;
font-size: 90%;
text-decoration: underline;
margin-top: 2px;
}
html[dir=rtl] #apps-promo-hide {
float: left;
}
/*
We position the web store entry all by its lonesome in the top of the rightmost
column when there is at least one full row of apps. Note that this is similar,
but different than its position during promo (html.apps-promo-visible), so we
never set .loner while the promo is running.
*/
.app.web-store-entry.loner {
position: absolute;
left: 100%;
top: 0;
}
html[dir=rtl] .app.web-store-entry.loner {
right: 100%;
}
.g-button-basic {
display: inline-block;
border-width: 6px 10px 12px 6px;
-webkit-border-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD4AAABHCAYAAABf7PRNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABXNJREFUeNrsmz2IJEUUgF9Vd8/OzultcAgnGCi4B16oiYiJmhibG5kLhubmwmWiwRkaCAbCXWKgIJiJGKweihys58ndOc5f/1XXK9+rru7puV23e7N7s1PwmKnpGuiv3qtXr15VKecccLnx1S/us1tH8NfDFVisfxNe/gTnPsdi9sns9vvHVG+g/Kdi8OvvfeleuXYdXn35Wbg0HoOxCiqCdwL5cwOwyB0cP1jBz3f+gN9+/xXM/Phw/s2Hd+kxBnCM1IvvuPHoKrz12gswGSWglQKlHCCBK/8dRElpHCwyhGkawVhXgCaDWWYwv/P1t90O0jdvH8Hh4XOwytFruX2gNSjqHGliEWFO4On8AWSz+3CQVKCi8buEtE8yIonY0uPZqoS0JOCFhdLS00RBRr2WFShyYM9ShIfTFNLpPciXjwCqgk3hCj26FJowGMb8bZlZEvAdMBkp/8m/GSsPfEGWm5Kmi9U/YMuMbKC14qdImKhi8eBpXkGSxOsOoHpaynTlVZlClS/BViU55w3NsakTHTCzrsEJcuI7wld9HVGmqaO1/t0dWu+gO2VMkoQxXoPHjsYB7PmnxlS+XmAkEtx5aBKei9v5WEHQqof2vrv9g2+InXl+64oO0vYCIEHbqgKnELTDpuuE8tXKY0W6luGk9ca1tqEdF6ruEHBOpuZr4GDmZzDEnX/UVs5Rm1PiwdsO6AX3Md9jvSZZ4z2+Km613VCLB+9Ybx/4Ccie8fHEkw819XWjxrGh3FmtNfMhzo1AEWk1pnSoOrnccA7nhjSNAUFb2/m70CzMRtTWD05rWY0E7rpdJ1XltZXD2W5q7dxI0OLaPwhdpLQa9++PA+ZxP5XXzg1pzEsd5e0YH6Lxk71m5Xv1niDGgyvv1cksVB3MK9EBDAYZErLy+GZwp9tec8IDmEHzOAatexNvXIJo8P739+A8iyXsFMJEbh1ckNUZN1Bqo9cuxHpc8fjWnRWqT0pIjdxcx7n1zeN++uLkQ3Buvi51jONw58ZOzbcPmVVf76zPxZn6gJxCsG8MHdQkXamOMsHrd+8PtwO42sjAgN9+E71GCb5tSM7tFJORauptBqZP4xy1IZk2L04UNKlm6V4dhyQi6oMAvnGob9U8rgaYukX5pt6M782tsx7w1iGKX6RA/zzOWtZs7q7j1SVrHAaGrBWBR36cb4dXb0PWvtSTQj4UoEnzcT0cuC51t7QbsvZlYCI+DaGi9gSBQyM6r15vEw8IYJQLObYmEVFx7C40Vufxiq7XYlvnpioHWpkavH+z8YmOWdfTeO/eGYml9VhcrWcEqXn1ELX17ZiuNxSUOmWsbHvqqbMq2wgERAcwQ4+CbEk5X159u8g3tf4/RcMFLTvwHfgOfAe+A9+B78B34OJKvR6nBbmm9YmNwqkni2KXpecCLwoDRQmQF9onHKuqaI+FSCu2XEFlcn9a86zdoDrLWiyoYQWFb2xI46XYZak1mRdnqzNzCgxeFul05EjLaFlMfV/rlOSEiMLK6+TbHB9MdjY/CY72+5XJ34jLGWm7OvP4hMRikn3AfHYEnR1k79XRLD+dJ5fB8MK9OQKyJWJ1Asv9q2Du/3gL6quVtoFnW54cvH3jg2jv8keRzSCy5VZo2kYjkn0o//7p5vKHj7+gn6Ykj0hmJCsG56uH+/GVa8/sPf/m62p88BK5xj0y+yQcihGZYLfz43vl3e+OMJ8y6DIA/0uyIMkYiu9U8/3KCcnTUN+6ncD6LqYSCN+MZd4oYMeWBuBl+F6wV8dOAxXGQQHrS+ZaKDgGljKwZeGTWW38WAMXnEAepjrdCWuVIGgIXBh4TOAzjYNTHVPWQcNdUcJN3QXQrvjLp/8JMACZP99HrN477QAAAABJRU5ErkJggg==") 6 10 12 6;
font-size: 1.3em;
color: #fff !important;
text-decoration: none;
font-weight: bold;
text-align: center;
padding: 2px 10px;
white-space: nowrap;
}
menu {
display: none;
position: fixed;
border: 1px solid rgba(0, 0, 0, .50);
-webkit-box-shadow: 0px 2px 4px rgba(0, 0, 0, .50);
color: black;
background: -webkit-linear-gradient(#fff, #eee);
left: 0;
white-space: nowrap;
padding: 8px 0;
margin: 0;
cursor: default;
border-radius: 3px;
z-index: 3;
}
menu > * {
box-sizing: border-box;
display: block;
margin: 0;
width: 100%;
text-align: start;
}
menu > :not(hr) {
-webkit-appearance: none;
background: transparent;
font: inherit;
border: 0;
line-height: 18px;
padding: 0 19px;
overflow: hidden;
text-overflow: ellipsis;
}
menu > hr {
background: -webkit-linear-gradient(left,
rgba(0, 0, 0, .10),
rgba(0, 0, 0, .02) 96%);
border: 0;
height: 1px;
margin: 8px 0;
}
menu > [disabled] {
color: rgba(0, 0, 0, .3);
}
menu > [hidden] {
display: none;
}
menu > :not(hr)[selected] {
background-color: #dce5fa;
}
menu > :not(hr)[selected]:active {
background-color: #426dc9;
color: #fff;
}
menu > [checked]:before {
content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxMAAAsTAQCanBgAAABGSURBVBjTY2DAD4yBWJCQgndArMQAVWmMQ8F/mCIlqIAxFgXvYNYpIQmUoymA2yCIJPEfmwIGHFYY4/PNXawK/v//TxADABR+MoriwNe9AAAAAElFTkSuQmCC");
width: 9px;
height: 9px;
display: inline-block;
vertical-align: 50%;
margin: 0 5px;
}
menu > [checked] {
-webkit-padding-start: 0;
}
menu > [selected][checked]:active:before {
content: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACxMAAAsTAQCanBgAAABOSURBVBjTY/j//z8DHmwMxIKEFLwDYiUQRxAqgE3Bf5giJaiAMRYF72DWKSEJlKMpAGuEWQeT+I+uAKYImxUobkR37F0snmBgIBBOYAwABR4Jwdv/yUkAAAAASUVORK5CYII=");
}
/**
* Bitmask for the different UI sections.
* This matches the Section enum in ../webui/shown_sections_handler.h
* @enum {number}
*/
var Section = {
THUMB: 1
Cerrados recientemente
Corre, ven, sopla y pide un deseo. - www.desmotivaciones.eswww.desmotivaciones.esY ahora - www.desmotivaciones.esCorre, ven, sopla y pide un deseo. - www.desmotivaciones.esSegún las estadísticas - www.desmotivaciones.es¿A dónde - www.desmotivaciones.esSé lo que duelen - www.desmotivaciones.esY ahora - www.desmotivaciones.es¿De qué color es un camaleón - www.desmotivaciones.esCorre, ven, sopla y pide un deseo. - www.desmotivaciones.es
Sesiones externas
Aplicaciones
Más visitados
Cerrados recientemente
Chrome Web StoreAplicaciones
www.desmotivaciones.esNew Message - Foro DesmotivacionesGoogleIniciowww.desmotivaciones.es chat group - www.desmotivaciones.esBazumgaMás visitados
Corre, ven, sopla y pide un deseo. - www.desmotivaciones.eswww.desmotivaciones.esY ahora - www.desmotivaciones.esCorre, ven, sopla y pide un deseo. - www.desmotivaciones.esSegún las estadísticas - www.desmotivaciones.es¿A dónde - www.desmotivaciones.esSé lo que duelen - www.desmotivaciones.esY ahora - www.desmotivaciones.es¿De qué color es un camaleón - www.desmotivaciones.esCorre, ven, sopla y pide un deseo. - www.desmotivaciones.esCerrados recientemente
Abrir como pestaña normal
Abrir como pestaña fija
Abrir como ventana
Abrir en pantalla completa
Opciones
Desinstalar
Crear acceso directo
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview This is a simple template engine inspired by JsTemplates
* optimized for i18n.
*
* It currently supports two handlers:
*
* * i18n-content which sets the textContent of the element
*
*
* i18nTemplate.process(element, {'myContent': 'Content'});
*
* * i18n-values is a list of attribute-value or property-value pairs.
* Properties are prefixed with a '.' and can contain nested properties.
*
*
* i18nTemplate.process(element, {
* 'myTitle': 'Title',
* 'fontSize': '13px'
* });
*/
var i18nTemplate = (function() {
/**
* This provides the handlers for the templating engine. The key is used as
* the attribute name and the value is the function that gets called for every
* single node that has this attribute.
* @type {Object}
*/
var handlers = {
/**
* This handler sets the textContent of the element.
*/
'i18n-content': function(element, attributeValue, obj) {
element.textContent = obj[attributeValue];
},
/**
* This handler adds options to a select element.
*/
'i18n-options': function(element, attributeValue, obj) {
var options = obj[attributeValue];
options.forEach(function(values) {
var option = typeof values == 'string' ? new Option(values) :
new Option(values[1], values[0]);
element.appendChild(option);
});
},
/**
* This is used to set HTML attributes and DOM properties,. The syntax is:
* attributename:key;
* .domProperty:key;
* .nested.dom.property:key
*/
'i18n-values': function(element, attributeValue, obj) {
var parts = attributeValue.replace(/\s/g, '').split(/;/);
for (var j = 0; j < parts.length; j++) {
var a = parts[j].match(/^([^:]+):(.+)$/);
if (a) {
var propName = a[1];
var propExpr = a[2];
// Ignore missing properties
if (propExpr in obj) {
var value = obj[propExpr];
if (propName.charAt(0) == '.') {
var path = propName.slice(1).split('.');
var object = element;
while (object && path.length > 1) {
object = object[path.shift()];
}
if (object) {
object[path] = value;
// In case we set innerHTML (ignoring others) we need to
// recursively check the content
if (path == 'innerHTML') {
process(element, obj);
}
}
} else {
element.setAttribute(propName, value);
}
} else {
console.warn('i18n-values: Missing value for "' + propExpr + '"');
}
}
}
}
};
var attributeNames = [];
for (var key in handlers) {
attributeNames.push(key);
}
var selector = '[' + attributeNames.join('],[') + ']';
/**
* Processes a DOM tree with the {@code obj} map.
*/
function process(node, obj) {
var elements = node.querySelectorAll(selector);
for (var element, i = 0; element = elements[i]; i++) {
for (var j = 0; j < attributeNames.length; j++) {
var name = attributeNames[j];
var att = element.getAttribute(name);
if (att != null) {
handlers[name](element, att, obj);
}
}
}
}
return {
process: process
};
})();
i18nTemplate.process(document, templateData);
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// TODO(arv): Namespace
/**
* The local strings get injected into the page using a variable named
* {@code templateData}. This class provides a simpler interface to access those
* strings.
*
* @param {Object} opt_templateData Optional object containing translated
* strings. If this is not supplied during construction, it can be
* assigned to the templateData property after construction. If all else
* fails, the value of window.templateDate will be used.
* @constructor
*/
function LocalStrings(opt_templateData) {
this.templateData = opt_templateData;
}
// Start of anonymous namespace.
(function() {
/**
* Returns a formatted string where $1 to $9 are replaced by the second to the
* tenth argument.
* @param {string} s The format string.
* @param {...string} The extra values to include in the formatted output.
* @return {string} The string after format substitution.
*/
function replaceArgs(s, args) {
return s.replace(/\$[$1-9]/g, function(m) {
return (m == '$$') ? '$' : args[m[1]];
});
}
/**
* Returns a string after removing Windows-style accelerators.
* @param {string} s The input string that may contain accelerators.
* @return {string} The resulting string with accelerators removed.
*/
function trimAccelerators(s) {
return s.replace(/&{1,2}/g, function(m) {
return (m == '&&') ? '&' : '';
});
}
LocalStrings.prototype = {
/**
* The template data object.
* @type {Object}
*/
templateData: null,
/**
* Gets a localized string by its id.
* @param {string} s The ID of the string we want.
* @return {string} The localized string.
*/
getString: function(id) {
// TODO(arv): We should not rely on a global variable here.
return (this.templateData || window.templateData)[id] || '';
},
/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument.
* @param {string} id The ID of the string we want.
* @param {...string} The extra values to include in the formatted output.
* @return {string} The formatted string.
*/
getStringF: function(id, var_args) {
return replaceArgs(this.getString(id), arguments);
},
};
// End of anonymous namespace.
})();
/**
* Whitelist of tag names allowed in parseHtmlSubset.
* @type {[string]}
*/
var allowedTags = ['A', 'B', 'STRONG'];
/**
* Parse a very small subset of HTML.
* @param {string} s The string to parse.
* @throws {Error} In case of non supported markup.
* @return {DocumentFragment} A document fragment containing the DOM tree.
*/
var allowedAttributes = {
'href': function(node, value) {
// Only allow a[href] starting with http:// and https://
return node.tagName == 'A' && (value.indexOf('http://') == 0 ||
value.indexOf('https://') == 0);
},
'target': function(node, value) {
// Allow a[target] but reset the value to "".
if (node.tagName != 'A')
return false;
node.setAttribute('target', '');
return true;
}
}
/**
* Parse a very small subset of HTML. This ensures that insecure HTML /
* javascript cannot be injected into the new tab page.
* @param {string} s The string to parse.
* @throws {Error} In case of non supported markup.
* @return {DocumentFragment} A document fragment containing the DOM tree.
*/
function parseHtmlSubset(s) {
function walk(n, f) {
f(n);
for (var i = 0; i < n.childNodes.length; i++) {
walk(n.childNodes[i], f);
}
}
function assertElement(node) {
if (allowedTags.indexOf(node.tagName) == -1)
throw Error(node.tagName + ' is not supported');
}
function assertAttribute(attrNode, node) {
var n = attrNode.nodeName;
var v = attrNode.nodeValue;
if (!allowedAttributes.hasOwnProperty(n) || !allowedAttributes[n](node, v))
throw Error(node.tagName + '[' + n + '="' + v + '"] is not supported');
}
var r = document.createRange();
r.selectNode(document.body);
// This does not execute any scripts.
var df = r.createContextualFragment(s);
walk(df, function(node) {
switch (node.nodeType) {
case Node.ELEMENT_NODE:
assertElement(node);
var attrs = node.attributes;
for (var i = 0; i < attrs.length; i++) {
assertAttribute(attrs[i], node);
}
break;
case Node.COMMENT_NODE:
case Node.DOCUMENT_FRAGMENT_NODE:
case Node.TEXT_NODE:
break;
default:
throw Error('Node type ' + node.nodeType + ' is not supported');
}
});
return df;
}
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const cr = (function() {
/**
* Whether we are using a Mac or not.
* @type {boolean}
*/
const isMac = /Mac/.test(navigator.platform);
/**
* Whether this is on the Windows platform or not.
* @type {boolean}
*/
const isWindows = /Win/.test(navigator.platform);
/**
* Whether this is on chromeOS or not.
* @type {boolean}
*/
const isChromeOS = /CrOS/.test(navigator.userAgent);
/**
* Whether this is on vanilla Linux (not chromeOS).
* @type {boolean}
*/
const isLinux = /Linux/.test(navigator.userAgent);
/**
* Whether this uses the views toolkit or not.
* @type {boolean}
*/
const isViews = isWindows || isChromeOS;
/**
* Builds an object structure for the provided namespace path,
* ensuring that names that already exist are not overwritten. For
* example:
* "a.b.c" -> a = {};a.b={};a.b.c={};
* @param {string} name Name of the object that this file defines.
* @param {*=} opt_object The object to expose at the end of the path.
* @param {Object=} opt_objectToExportTo The object to add the path to;
* default is {@code window}.
* @private
*/
function exportPath(name, opt_object, opt_objectToExportTo) {
var parts = name.split('.');
var cur = opt_objectToExportTo || window /* global */;
for (var part; parts.length && (part = parts.shift());) {
if (!parts.length && opt_object !== undefined) {
// last part and we have an object; use it
cur[part] = opt_object;
} else if (part in cur) {
cur = cur[part];
} else {
cur = cur[part] = {};
}
}
return cur;
};
// cr.Event is called CrEvent in here to prevent naming conflicts. We also
// store the original Event in case someone does a global alias of cr.Event.
const DomEvent = Event;
/**
* Creates a new event to be used with cr.EventTarget or DOM EventTarget
* objects.
* @param {string} type The name of the event.
* @param {boolean=} opt_bubbles Whether the event bubbles. Default is false.
* @param {boolean=} opt_preventable Whether the default action of the event
* can be prevented.
* @constructor
* @extends {DomEvent}
*/
function CrEvent(type, opt_bubbles, opt_preventable) {
var e = cr.doc.createEvent('Event');
e.initEvent(type, !!opt_bubbles, !!opt_preventable);
e.__proto__ = CrEvent.prototype;
return e;
}
CrEvent.prototype = {
__proto__: DomEvent.prototype
};
/**
* Fires a property change event on the target.
* @param {EventTarget} target The target to dispatch the event on.
* @param {string} propertyName The name of the property that changed.
* @param {*} newValue The new value for the property.
* @param {*} oldValue The old value for the property.
*/
function dispatchPropertyChange(target, propertyName, newValue, oldValue) {
var e = new CrEvent(propertyName + 'Change');
e.propertyName = propertyName;
e.newValue = newValue;
e.oldValue = oldValue;
target.dispatchEvent(e);
}
/**
* The kind of property to define in {@code defineProperty}.
* @enum {number}
*/
const PropertyKind = {
/**
* Plain old JS property where the backing data is stored as a "private"
* field on the object.
*/
JS: 'js',
/**
* The property backing data is stored as an attribute on an element.
*/
ATTR: 'attr',
/**
* The property backing data is stored as an attribute on an element. If the
* element has the attribute then the value is true.
*/
BOOL_ATTR: 'boolAttr'
};
/**
* Helper function for defineProperty that returns the getter to use for the
* property.
* @param {string} name
* @param {cr.PropertyKind} kind
* @return {function(),*} The getter for the property.
*/
function getGetter(name, kind) {
switch (kind) {
case PropertyKind.JS:
var privateName = name + '_';
return function() {
return this[privateName];
};
case PropertyKind.ATTR:
return function() {
return this.getAttribute(name);
};
case PropertyKind.BOOL_ATTR:
return function() {
return this.hasAttribute(name);
};
}
}
/**
* Helper function for defineProperty that returns the setter of the right
* kind.
* @param {string} name The name of the property we are defining the setter
* for.
* @param {cr.PropertyKind} kind The kind of property we are getting the
* setter for.
* @param {function(*),void} opt_setHook A function to run after the property
* is set, but before the propertyChange event is fired.
* @return {function(*),void} The function to use as a setter.
*/
function getSetter(name, kind, opt_setHook) {
switch (kind) {
case PropertyKind.JS:
var privateName = name + '_';
return function(value) {
var oldValue = this[privateName];
if (value !== oldValue) {
this[privateName] = value;
if (opt_setHook)
opt_setHook.call(this, value, oldValue);
dispatchPropertyChange(this, name, value, oldValue);
}
};
case PropertyKind.ATTR:
return function(value) {
var oldValue = this[name];
if (value !== oldValue) {
this.setAttribute(name, value);
if (opt_setHook)
opt_setHook.call(this, value, oldValue);
dispatchPropertyChange(this, name, value, oldValue);
}
};
case PropertyKind.BOOL_ATTR:
return function(value) {
var oldValue = this[name];
if (value !== oldValue) {
if (value)
this.setAttribute(name, name);
else
this.removeAttribute(name);
if (opt_setHook)
opt_setHook.call(this, value, oldValue);
dispatchPropertyChange(this, name, value, oldValue);
}
};
}
}
/**
* Defines a property on an object. When the setter changes the value a
* property change event with the type {@code name + 'Change'} is fired.
* @param {!Object} obj The object to define the property for.
* @param {string} name The name of the property.
* @param {cr.PropertyKind=} opt_kind What kind of underlying storage to use.
* @param {function(*),void} opt_setHook A function to run after the
* property is set, but before the propertyChange event is fired.
*/
function defineProperty(obj, name, opt_kind, opt_setHook) {
if (typeof obj == 'function')
obj = obj.prototype;
var kind = opt_kind || PropertyKind.JS;
if (!obj.__lookupGetter__(name)) {
obj.__defineGetter__(name, getGetter(name, kind));
}
if (!obj.__lookupSetter__(name)) {
obj.__defineSetter__(name, getSetter(name, kind, opt_setHook));
}
}
/**
* Counter for use with createUid
*/
var uidCounter = 1;
/**
* @return {number} A new unique ID.
*/
function createUid() {
return uidCounter++;
}
/**
* Returns a unique ID for the item. This mutates the item so it needs to be
* an object
* @param {!Object} item The item to get the unique ID for.
* @return {number} The unique ID for the item.
*/
function getUid(item) {
if (item.hasOwnProperty('uid'))
return item.uid;
return item.uid = createUid();
}
/**
* Dispatches a simple event on an event target.
* @param {!EventTarget} target The event target to dispatch the event on.
* @param {string} type The type of the event.
* @param {boolean=} opt_bubbles Whether the event bubbles or not.
* @param {boolean=} opt_cancelable Whether the default action of the event
* can be prevented.
* @return {boolean} If any of the listeners called {@code preventDefault}
* during the dispatch this will return false.
*/
function dispatchSimpleEvent(target, type, opt_bubbles, opt_cancelable) {
var e = new cr.Event(type, opt_bubbles, opt_cancelable);
return target.dispatchEvent(e);
}
/**
* @param {string} name
* @param {!Function} fun
*/
function define(name, fun) {
var obj = exportPath(name);
var exports = fun();
for (var propertyName in exports) {
// Maybe we should check the prototype chain here? The current usage
// pattern is always using an object literal so we only care about own
// properties.
var propertyDescriptor = Object.getOwnPropertyDescriptor(exports,
propertyName);
if (propertyDescriptor)
Object.defineProperty(obj, propertyName, propertyDescriptor);
}
}
/**
* Document used for various document related operations.
* @type {!Document}
*/
var doc = document;
/**
* Allows you to run func in the context of a different document.
* @param {!Document} document The document to use.
* @param {function(),*} func The function to call.
*/
function withDoc(document, func) {
var oldDoc = doc;
doc = document;
try {
func();
} finally {
doc = oldDoc;
}
}
/**
* Adds a {@code getInstance} static method that always return the same
* instance object.
* @param {!Function} ctor The constructor for the class to add the static
* method to.
*/
function addSingletonGetter(ctor) {
ctor.getInstance = function() {
return ctor.instance_ || (ctor.instance_ = new ctor());
};
}
return {
addSingletonGetter: addSingletonGetter,
isChromeOS: isChromeOS,
isMac: isMac,
isWindows: isWindows,
isLinux: isLinux,
isViews: isViews,
define: define,
defineProperty: defineProperty,
PropertyKind: PropertyKind,
createUid: createUid,
getUid: getUid,
dispatchSimpleEvent: dispatchSimpleEvent,
dispatchPropertyChange: dispatchPropertyChange,
/**
* The document that we are currently using.
* @type {!Document}
*/
get doc() {
return doc;
},
withDoc: withDoc,
Event: CrEvent
};
})();
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/** @fileoverview EventTracker is a simple class that manages the addition and
* removal of DOM event listeners. In particular, it keeps track of all
* listeners that have been added and makes it easy to remove some or all of
* them without requiring all the information again. This is particularly
* handy when the listener is a generated function such as a lambda or the
* result of calling Function.bind.
*/
// Use an anonymous function to enable strict mode just for this file (which
// will be concatenated with other files when embedded in Chrome)
var EventTracker = (function() {
'use strict';
/**
* Create an EventTracker to track a set of events.
* EventTracker instances are typically tied 1:1 with other objects or
* DOM elements whose listeners should be removed when the object is disposed
* or the corresponding elements are removed from the DOM.
* @constructor
*/
function EventTracker() {
/**
* @type {Array.}
* @private
*/
this.listeners_ = [];
}
/**
* The type of the internal tracking entry.
* @typedef {{node, !Node,
* eventType: string,
* listener: Function,
* capture: boolean}}
*/
EventTracker.Entry;
EventTracker.prototype = {
/**
* Add an event listener - replacement for Node.addEventListener.
* @param {!Node} node The DOM node to add a listener to.
* @param {string} eventType The type of event to subscribe to.
* @param {Function} listener The listener to add.
* @param {boolean} capture Whether to invoke during the capture phase.
*/
add: function(node, eventType, listener, capture) {
var h = {
node: node,
eventType: eventType,
listener: listener,
capture: capture
};
this.listeners_.push(h);
node.addEventListener(eventType, listener, capture);
},
/**
* Remove any specified event listeners added with this EventTracker.
* @param {!Node} node The DOM node to remove a listener from.
* @param {string} eventType The type of event to remove.
*/
remove: function(node, eventType) {
this.listeners_ = this.listeners_.filter(function(h) {
if (h.node == node && h.eventType == eventType) {
EventTracker.removeEventListener_(h);
return false;
}
return true;
});
},
/**
* Remove all event listeners added with this EventTracker.
*/
removeAll: function() {
this.listeners_.forEach(EventTracker.removeEventListener_);
this.listeners_ = [];
}
};
/**
* Remove a single event listener given it's tracker entry. It's up to the
* caller to ensure the entry is removed from listeners_.
* @param {EventTracker.Entry} h The entry describing the listener to remove.
* @private
*/
EventTracker.removeEventListener_ = function(h) {
h.node.removeEventListener(h.eventType, h.listener, h.capture);
};
return EventTracker;
})();
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('cr.ui', function() {
/**
* Decorates elements as an instance of a class.
* @param {string|!Element} source The way to find the element(s) to decorate.
* If this is a string then {@code querySeletorAll} is used to find the
* elements to decorate.
* @param {!Function} constr The constructor to decorate with. The constr
* needs to have a {@code decorate} function.
*/
function decorate(source, constr) {
var elements;
if (typeof source == 'string')
elements = cr.doc.querySelectorAll(source);
else
elements = [source];
for (var i = 0, el; el = elements[i]; i++) {
if (!(el instanceof constr))
constr.decorate(el);
}
}
/**
* Helper function for creating new element for define.
*/
function createElementHelper(tagName, opt_bag) {
// Allow passing in ownerDocument to create in a different document.
var doc;
if (opt_bag && opt_bag.ownerDocument)
doc = opt_bag.ownerDocument;
else
doc = cr.doc;
return doc.createElement(tagName);
}
/**
* Creates the constructor for a UI element class.
*
* Usage:
*
* var List = cr.ui.define('list');
* List.prototype = {
* __proto__: HTMLUListElement.prototype,
* decorate: function() {
* ...
* },
* ...
* };
*
*
* @param {string|Function} tagNameOrFunction The tagName or
* function to use for newly created elements. If this is a function it
* needs to return a new element when called.
* @return {function(Object=),Element} The constructor function which takes
* an optional property bag. The function also has a static
* {@code decorate} method added to it.
*/
function define(tagNameOrFunction) {
var createFunction, tagName;
if (typeof tagNameOrFunction == 'function') {
createFunction = tagNameOrFunction;
tagName = '';
} else {
createFunction = createElementHelper;
tagName = tagNameOrFunction;
}
/**
* Creates a new UI element constructor.
* @param {Object=} opt_propertyBag Optional bag of properties to set on the
* object after created. The property {@code ownerDocument} is special
* cased and it allows you to create the element in a different
* document than the default.
* @constructor
*/
function f(opt_propertyBag) {
var el = createFunction(tagName, opt_propertyBag);
f.decorate(el);
for (var propertyName in opt_propertyBag) {
el[propertyName] = opt_propertyBag[propertyName];
}
return el;
}
/**
* Decorates an element as a UI element class.
* @param {!Element} el The element to decorate.
*/
f.decorate = function(el) {
el.__proto__ = f.prototype;
el.decorate();
};
return f;
}
/**
* Input elements do not grow and shrink with their content. This is a simple
* (and not very efficient) way of handling shrinking to content with support
* for min width and limited by the width of the parent element.
* @param {HTMLElement} el The element to limit the width for.
* @param {number} parentEl The parent element that should limit the size.
* @param {number} min The minimum width.
*/
function limitInputWidth(el, parentEl, min) {
// Needs a size larger than borders
el.style.width = '10px';
var doc = el.ownerDocument;
var win = doc.defaultView;
var computedStyle = win.getComputedStyle(el);
var parentComputedStyle = win.getComputedStyle(parentEl);
var rtl = computedStyle.direction == 'rtl';
// To get the max width we get the width of the treeItem minus the position
// of the input.
var inputRect = el.getBoundingClientRect(); // box-sizing
var parentRect = parentEl.getBoundingClientRect();
var startPos = rtl ? parentRect.right - inputRect.right :
inputRect.left - parentRect.left;
// Add up border and padding of the input.
var inner = parseInt(computedStyle.borderLeftWidth, 10) +
parseInt(computedStyle.paddingLeft, 10) +
parseInt(computedStyle.paddingRight, 10) +
parseInt(computedStyle.borderRightWidth, 10);
// We also need to subtract the padding of parent to prevent it to overflow.
var parentPadding = rtl ? parseInt(parentComputedStyle.paddingLeft, 10) :
parseInt(parentComputedStyle.paddingRight, 10);
var max = parentEl.clientWidth - startPos - inner - parentPadding;
function limit() {
if (el.scrollWidth > max) {
el.style.width = max + 'px';
} else {
el.style.width = 0;
var sw = el.scrollWidth;
if (sw < min) {
el.style.width = min + 'px';
} else {
el.style.width = sw + 'px';
}
}
}
el.addEventListener('input', limit);

antoniogachero
antoniogachero    
     +1 / 0  
@antoniogachero, ¿Pero que? ._.

pobla23
pobla23    
     +1 / 0  
@antoniogachero, te jodes xDDDDDD

Feel like a Minixone
Feel like a Minixone    
     +1 / 0  
Porque pesaria demasiado el avion xD

xXT8PSECRET82Xx


Iniciar sesión, para comentar tienes que registrarte.


LOS MEJORES CARTELES DE

Número de visitas: 11433421265 | Usuarios registrados: 2057165 | Clasificación de usuarios
Carteles en la página: 8001427, hoy: 9, ayer: 50
blog.desmotivaciones.es
Contacto | Reglas
▲▲▲

Valid HTML 5 Valid CSS!