AbandonSocios: El Portal de los Juegos Antiguos

Abandonsocios => AbandonWiki => Mensaje iniciado por: MenganitoFZ en Marzo 22, 2010, 11:59:02 am

Título: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 22, 2010, 11:59:02 am
Bueno pues Kendo me ha pedido (https://www.abandonsocios.org/wiki/index.php?title=Usuario_Discusión%3AMenganitoFZ&diff=8602&oldid=7520) que traiga el tema aquí (https://www.abandonsocios.org/wiki/index.php?title=Usuario_Discusión%3AKendo&diff=8751&oldid=7515).

Me explico: El Mediawiki por defecto cuando se edita tienen una serie de botones en la parte superior (como se pueden ver usando cualquier otra piel (https://www.abandonsocios.org/wiki/index.php?title=AbandonWiki:P%E1gina_de_pruebas&action=edit&useskin=monobook) para (https://www.abandonsocios.org/wiki/index.php?title=AbandonWiki:P%E1gina_de_pruebas&action=edit&useskin=chick) la (https://www.abandonsocios.org/wiki/index.php?title=AbandonWiki:P%E1gina_de_pruebas&action=edit&useskin=standard) wiki (https://www.abandonsocios.org/wiki/index.php?title=AbandonWiki:P%E1gina_de_pruebas&action=edit&useskin=modern)  (https://www.abandonsocios.org/wiki/index.php?title=AbandonWiki:P%E1gina_de_pruebas&action=edit&useskin=nostalgia)) para ayudar en la edición. Y como suele ser habitual el preguntar por como se hace el símbolo "~" pues creo que será útil intentar arreglar los botones (hay uno para firmar (https://www.abandonsocios.org/wiki/skins/common/images/button_sig.png)) me puse a mirarlo un poco.


El problema
Vamos a ver, para que se vea el problema para hacerlo de forma práctica (con FireFox/SeaMonkey):
1.- CTRL + MAYS + J, sale una cosa rara en chino (posiblemente con muchas advertencias y errores). Pulsad en "Limpiar" para ver más claro el error que interesa.
2.- Sin cerrar la anterior ventana, ni haber abierto ninguna otra página desde entonces, abrid este enlace (https://www.abandonsocios.org/wiki/index.php?title=AbandonWiki:Página_de_pruebas&action=edit) (preferiblemente en otra pestaña)
3.- Mirad los errores y advertencias que salen *cough*. Entre ellos el que afecta a los botones es el que dice:
Citar
Error: mwEditButtons is undefined
Archivo de origen: https://www.abandonsocios.org/wiki/skins/common/edit.js?207 (https://www.abandonsocios.org/wiki/skins/common/edit.js?207)
Línea: 6

mwEditButtons es la lista botones que se van a mostrar durante la edición (además de mwCustomEditButtons, que aunque no se muestre error ocurre el mismo fallo). Pero el problema está en que sí que están definidos en https://www.abandonsocios.org/wiki/skins/common/wikibits.js?207 (https://www.abandonsocios.org/wiki/skins/common/wikibits.js?207)


El JavaScript
Yep, uno es edit.js y el otro wikibits.js; y esto es así, no es ningún error. En el MediaWiki, el JavaScript y CSS visto desde fuera parece un verdadero caos a no ser que se esté familiarizado y se conozcan sus recónditos entresijos. Desconozco la razón por la que se definen en otro lugar pero tengamos fe de que en 8 años de desarrollo se haya descubierto una situación por la que sea necesario declararlos ahí...

A no ser que se haga una skin personalizada desde cero que no siga las pautas de las demás, las páginas llaman a los siguientes ficheros de JavaScript en el siguiente orden:
Simplemachines (que no sé si fue creada desde cero o no) en este sentido parece que lo hace correctamente (tiene más JavaScript para la cabecera y la adaptación al foro que se carga antes de lo anterior, el <body> de esa es piel otra historia). (Edit 2: Meh, error mío no lo hace bien)


Posible solución

Solución antigua y temporal a nivel de administrador de la wiki y no necesaria si se arregla la piel.
Spoiler (click para mostrar/ocultar)

Arreglando la piel:

Como comento en el 4 mensaje de este tema, el problema es que se carga wikibits.js antes de la definición de variables de la piel. Así que tan solo hay que cambiarlo a después. Solo lo puede hacer quien tenga acceso al servidor.

----

EDIT: Actualizados los enlaces incluyendo un pequeño arreglo para que solo se añadan los botones en las páginas de edición en la solución a nivel de administrador de la wiki

EDIT 2: Poniendo el orden real en el que se debe cargar el JavaScript y añadiendo lo que hay que hacer en la plantilla de la skin Simplemachines
Título: Re: Sobre los botones de edición
Publicado por: cireja en Marzo 22, 2010, 14:00:44 pm
Te lo has currao, pare, ere un mostro. Yo me perdí por la 3ª o 4ª linea  :(
pero seguro que Johan le prestará a esto la atención que se merece.
Título: Re: Sobre los botones de edición
Publicado por: Kendo en Marzo 22, 2010, 14:42:45 pm
Yo me perdí por la 3ª o 4ª linea  :( pero seguro que Johan le prestará a esto la atención que se merece.

:D telepatia "pare", me has leido la mente


probablemente tanto elessar como johan lo entiendan como quien mira matrix en una pantalla de unos y ceros, pero yo no hago mas que marearme.
yo he entendido el tema de añadir los botones de edicion. El caso es que esos botones ya estaban, hasta que se hizo la insercion de la wiki en la web, con el cambio de formato y tal dejaron de verse. Seguramente Johan ya sepa como apañarlo.

asi que voy a dedicarme a lo que se hacer que es ir añadiendo paginas y contenidos y no toquetear códigos pa no romper nada (pedazo ladrillo he dejado en la página "videoconsola" por cierto... si alguien conoce videoconsolas que no esten en la lista que las añada!))
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 22, 2010, 16:23:37 pm
Estaba escribiendo una respuesta explicando que como en realidad no sabía porqué sucedía el problema, eso era tan solo un apaño a nivel de administrador de la wiki, para un error a nivel de la piel de la wiki que no sé porqué se produce. Y mientras lo repasaba un poco...

¡¡AAAAhhhh, creo que lo ví!!, olvidad todo el mensaje anterior

Tal como describo arriba, Simplemachines carga wikibits.js antes que la definición de variables de la propia página, me había dado cuenta de que en las demás primero están las variables dentro de propia página y luego el wikibits.js pero no lo había dado importancia... (total, tan solo son definiciones de variables y funciones) pero he visto que sí que la tiene.

wikibits.js realiza algunas comprobaciones para algunas cosas (if (lo que sea)) de forma directa y resulta que usa algunas de las variables definidas por la página haciendo que salte el error
Citar
Error: wgBreakFrames is not defined
Archivo de origen: https://www.abandonsocios.org/wiki/skins/common/wikibits.js?207 (https://www.abandonsocios.org/wiki/skins/common/wikibits.js?207)
Línea: 104

Que había desestimado pensando que pasaba lo mismo que con los botones... pero acabo de caer de que si cuando se carga un archivo de JavaScript y salta un error ignora el resto del archivo (bueno, no recuerdo si también ignora la parte ya parseada). De todas formas la definición de la variable de los botones se encuentras después.

Para cambiar eso hay que tener acceso al servidor  :P y cambiar la plantilla de la piel directamente para cambiar el orden en el que se añaden... pero a partir de ahí no puedo ser más preciso, obviamente.

PD: Actualizo el mensaje principal.
Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 22, 2010, 18:01:55 pm
He estado mirando la skin del wiki y no encuentro el error, buscando documentacion sobre el error todo parece estar correcto, incluso comparando la skin con las que funcionan el orden del codigo es igual en todas. A ver si Johan cuando tenga tiempo puede echarle un vistazo, que el es quien adapto la skin y sabra mejor si los añadidos que hizo son los causantes del problema.
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 22, 2010, 18:16:05 pm
Uhm... ¿has tocado algo? porque ahora ya solo carga "wikibits.js" y el que carga las páginas Mediawiki:xxx.js.

No incluye ni el edit.js, ni el ajax.js, ni ningun otro... :/
Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 22, 2010, 18:29:09 pm
Lol? No he tocado nada :s
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 22, 2010, 18:42:25 pm
Pues no es que lo diga en broma:
Algo similar a esto:
Spoiler (click para mostrar/ocultar)


Se ha convertido ahora en:
Spoiler (click para mostrar/ocultar)
Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 22, 2010, 18:54:14 pm
Deduzco que eso es el resultado de mirar el codigo fuente de la pagina con el navegador, cuyo resultado no se parece en nada al codigo php real, asi que sirve bien poco de pista respecto a la linea que puede estar mal.
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 22, 2010, 19:15:35 pm
Yep, lo sé.

Pero es que de todas formas en la plantillas de serie no indican como inyectar texto a la cabecera por defecto, bueno en la MonoBook añade css, sí:
Spoiler (click para mostrar/ocultar)
pero no añade JavaScript, (supongo que se hará con alguna función de "include/skin.php" o "include/skinTemplate") pero me huelo a que SimpleMachines debe crear las páginas a pelo sin usar la herecia/extend de las clases de dichas páginas (o heredar de MonoBook/MySkin, lo que sería muy recomendable) más que nada porque todas las skins la cabecera la generan igual excepto esa. Así que no puedo decir "intercambia el orden las líneas $out->addJS( 'wikibits.js'); y $out->addJSVars;" (addJS y addJSVars, me las acabo de inventar por no buscarlas, ).

La historia sería más parecida a que estas líneas deben estar en este orden (lo he copiado de un ejemplo que simula la plantilla del monobook (http://www.mediawiki.org/wiki/Manual:Skinning/Example)):

Código: [Seleccionar]
<!-- Esto añade las variables globales de la página -->
<?php print Skin::makeGlobalVariablesScript($this->data); ?>  
 
<!-- Esto añade wikibits.js -->
<script type="<?php $this->text(&#39;jsmimetype&#39;) ?>" src="<?php $this->text(&#39;stylepath&#39;) ?>/common/wikibits.js?<?php echo $GLOBALS[&#39;wgStyleVersion&#39;] ?>"><!-- wikibits js --></script>

----

PD: Han vuelto a aparecer informágicamente las variables y las llamadas al JavaScript
Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 22, 2010, 20:36:04 pm
Asi es exactamente como esta, incluyo el archivo de la skin como attachment
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 22, 2010, 20:41:13 pm
Uhm, gracias, tan solo es intercambiar lineas 84 y 85 (pero teniendo en cuenta el ".=" es en la segunda):
Original:
Código: [Seleccionar]
$context['wiki_js'] = '<script type="'.$this->data['jsmimetype'].'" src="'.$this->data['stylepath'].'/common/wikibits.js?'.$GLOBALS['wgStyleVersion'].'"><!-- wikibits js --></script>';
$context['wiki_js'] .= Skin::makeGlobalVariablesScript( $this->data ).$this->data['headscripts'];
Cambiado:
Código: [Seleccionar]
$context['wiki_js'] = Skin::makeGlobalVariablesScript( $this->data ).$this->data['headscripts'];
$context['wiki_js'] .= '<script type="'.$this->data['jsmimetype'].'" src="'.$this->data['stylepath'].'/common/wikibits.js?'.$GLOBALS['wgStyleVersion'].'"><!-- wikibits js --></script>';


Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 22, 2010, 23:57:19 pm
Esas lineas ya las cambie en una prueba, pero al ver que no iba lo volvi a dejar como estaba, aunque no cambie el .=.

A mi asi sigue sin irme, pero probad.
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 23, 2010, 01:22:21 am
/me mirando el HTML generado...

JUR  :huh: , esto si que no me lo esperaba... lo baja demasiado. Así que $this->data['headscripts'] debe contener las llamadas al ajax.js y edit.js. Por tanto para ponerlo entremedias sería así (son las mismas líneas):

Original (tras el cambio anterior)
Código: [Seleccionar]
$context['wiki_js'] = Skin::makeGlobalVariablesScript( $this->data ).$this->data['headscripts'];
$context['wiki_js'] .= '<script type="'.$this->data['jsmimetype'].'" src="'.$this->data['stylepath'].'/common/wikibits.js?'.$GLOBALS['wgStyleVersion'].'"><!-- wikibits js --></script>';

Cambiado:
Código: [Seleccionar]
$context['wiki_js'] = Skin::makeGlobalVariablesScript( $this->data );
$context['wiki_js'] .= '<script type="'.$this->data['jsmimetype'].'" src="'.$this->data['stylepath'].'/common/wikibits.js?'.$GLOBALS['wgStyleVersion'].'"><!-- wikibits js --></script>';
$context['wiki_js'] .= $this->data['headscripts'];

Y esta es la definitiva  B), no puede fallar
Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 23, 2010, 03:43:07 am
Seguro que las dos ultimas lineas van con ".="?
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 23, 2010, 09:22:04 am
Pues sip.

Si entiendes un poco de C/C++/Java/JavaScript, .= sería similar a += pero sirve para concatenar cadenas

Si fueran = a secas irías pisando el contenido de la variable en vez de concatenarlo que es lo que se quiere.

Con .= en esas líneas el valor de $context['wiki_js'] es:
$context['wiki_js'] = variables globales + wikibits.js + (edit.js, ajax.js y ajaxwatch.js)

Mientras que si fuera = tan solo quedaría:
$context['wiki_js'] = edit.js, ajax.js y ajaxwatch.js
Perdiéndose por el camino las variables globales y el wikibits.js por pisotearlas

----

Edit: jo que curioso, desaparecen los símbolos de sumar aleatoriamente del mensaje XD XD XD
Título: Re: Sobre los botones de edición
Publicado por: Elessar en Marzo 23, 2010, 14:19:49 pm
Arreglado, esperemos.
Título: Re: Sobre los botones de edición
Publicado por: MenganitoFZ en Marzo 23, 2010, 15:03:07 pm
Yep, arreglados los 4 errores iniciales de JavaScript de golpe. (Los dos de CSS os los dejo como tarea para la semana que viene  :lol:)

(http://cms7.blogia.com/blogs/a/ac/acr/acrobatas/upload/20070225233258-toy.jpg)

(https://www.abandonsocios.org/wiki/skins/common/images/button_sig.png) = ~~~~