Abandonsocios > AbandonWiki

Sobre los botones de edición

(1/4) > >>

MenganitoFZ:
Bueno pues Kendo me ha pedido que traiga el tema aquí.

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 para la wiki ) 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 ) 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 (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
Línea: 6
--- Fin de la cita ---

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

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:
[*]La propia página, añade una serie de variables globales: wgUserName = Nombre del usuario; nombre de la skin; grupos a los que pertenece (no alarmarse, solo sirve para hacer comprobaciones rápidas; cambiar el contenido de esta variable no permite hacer cosas que no se tengan permitidas); Nombre del artículo y muchas más
[*]wikibits.js: Funciones de uso general para tooodas las páginas: Funciones para cargar JavaScript externo, comprobaciones de los navegadores, convierte a enlaces el menú principal, controles para el comportamiento de los formularios, codigo para hacer que las tablas de la clase "sortable" tengan unos botones para ordenar las columnas, etc. y entre todo están las definiciones del array de los botones. (Edit 2: Lo había puesto erróneamente como lo primero que debe cargar)
[*]edit.js: Solo cargado en las páginas en las que se edita. Define las funciones para añadir botones a la barra y mostrarla. Además añade mwSetupToolbar(), que es la función que mustra la barra de botones, a la cola de funciones a ejecutar cuando termine de cargargarse el contenido de la página.
[*]ajax.js y ajaxwatch.js: Funciones que permiten recargar partes de la página sin cargar las página entera. Además de ser muy complicado y ser más usado por las extensiones añadidas que por el propio MediaWiki a pelo no me voy a entretener
[*]Otro con una url "muy rara": Bueno pues esto carga dos JavaScript que realmente son páginas del mediawiki, editables por los administradores de la wiki (los permisos ahora son un poco más complejos si se quieren añadir nuevos grupos de usuarios pero por defecto solo lo tienen los administradores) y que teóricamente deberían ser los únicos que se deberían editar para evitar problemas cuando se actualice el motor:
[*]Mediawiki:Commons.js: JavaScript que se añadirá a todas las páginas de todas las pieles.
[*]Mediawiki:<NombreClaveDeLaPiel>.js, en este caso MediaWiki:Simplemachines.js: JavaScript que se va a añadir a todas las páginas de una piel en concreto
[/list]
[*]Después, si estuviera activada una opción; además se cargaría User:<NombreUsuario>/<NombreClaveDeLaPiel>.js que sería el JavaScript personalizado de ese usuario en concreto: Ejemplo 1, Ejemplo 2 (Meh, pero ahora en wikipedia se pueden añadir a traves de la página de preferencias)
[*]Y ya finalmente, otra vez en la propia página, fuera de dónde se suele añadir el JavaScript sino que está dónde se define la barra de edición: Se añaden los botones.
[/list]
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)Continuemos, como hemos dicho el error que da "no está definida esa variable" pero el problema viene a que si todas las skin usan el mismo JavaScript... debería funcionar.

No he encontrado que es lo que hace que "no se encuentre definida esa variable" así que básicamente el código que le puse a Kendo lo que hace es: definir otra vez las variables, añadir los botones y mostrar la barra de herramentas... otra vez haciendo uso de MediaWiki:Simplemachines.js. Lo cuál en verdad es cutre, puesto que debería mirarse más internamente; pero teóricamente debería funcionar.

Digo teóricamente porque las pruebas las he realizado con una Consola de JavaScript (el primer marcador de la lista) y escribiendo ese código (excepto que la última línea es mwSetupToolbar(); para ejecutar directamente la función) aparecen los botones como debe:



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

cireja:
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.

Kendo:

--- Cita de: cireja en Marzo 22, 2010, 14:00:44 pm ---Yo me perdí por la 3ª o 4ª linea  :( pero seguro que Johan le prestará a esto la atención que se merece.

--- Fin de la cita ---

: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!))

MenganitoFZ:
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
Línea: 104
--- Fin de la cita ---

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.

Elessar:
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.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa