|
*pensándolo un poco algunas cosas no son tan sencillas, se pueden hacer sencillas, pero no sería... "elegante", y yo todo lo hago elegante xD
Sin ir más lejos esta mañana a las 7:00 me he plantado en la biblioteca de la UA dispuesto a dedicar el día de hoy al log, por eso de que "menos quejarse y más trabajar", he estado sin parar hasta las 12, no he dejado de teclear ni un segundo en 5 horas.
Luego por la tarde he estado dos o tres horas más también en la biblioteca, y claro, he avanzado bastante, en el sentido de que he hecho mucho, pero eso no es nada con todo lo que me queda...
Lo único que he hecho es empezar una librería para tener "editores flotantes", ya que me hacían falta para editar entradas y laterales desde las páginas "examinar", "configuración", y "crear página". 8 horas y tengo la librería casi en pañales (menos de 40% hecha).
También he hecho un sistema bastante chulo de gestión de cambios para la sección de configuración, te explico como funciona sólo porque me gusta explicarlo, aunque luego no me entiendas xD:
Por ejemplo, en la actual página para crear páginas (de ahora en adelante llamada "ppcp") tú creas las entradas que quieres que tenga la actualización, y por cada entrada te aparece automáticamente un editor de texto parecido a este de postear. Todo lo que escribas en los editores está, como puede parecer lógico, en los editores, pero esto tiene los siguientes problemas:
- Cambiar las entradas de orden es un puto follon, como no son "textarea" normales tengo que hacerme una estructura en forma de árbol mono-hijo en el DOM de la página, guardar las entradas en el servidor bajo una orden de intercambio de orden y volver a recargarla en el navegador del cliente. Es una chapuza pero es lo único que funciona, porque estos editores al no ser objetos html normales petan en cuanto quieres hacer algo con ellos.
- Al crear una entrada nueva pasa lo mismo, hay que crear el arbol del DOM con un hijo más, pero como estos editores son tan especialitos, no puedes añadirlo tan felizmente, te toca destruirlo todo y volver a crearlo.
- Cuando guardas los cambios en la actualización, para por ejemplo, irte a otro lado y seguirla mñn por donde ibas... tengo que borrar toda la actualización del servidor y volver a crearla desde cero, porque no sé que ha cambiado y qué no.
En la beta todo se soluciona de la siguiente manera (y es lo que he estado haciendo hoy aparte de la librería):
El apartado de configuración tiene algunos retos extra, como por ejemplo, no quiero que ningún cambio se aplique hasta que pulses el botón guardar, no hay espacio para tener 1 editor de texto por cada lateral, las tablas de laterales tienen que ser interactivas, es decir, si cambias el lateral de posición tiene que verse inmediatamente, pero a su vez no debe aplicarse hasta que guardes los cambios, y a su vez, no vale lo de borrar todo en el servidor, porque si borrase los tags de las entradas y los volviese a crear, todas las entradas ya publicadas perderían sus tags.
Solución en 3 partes:
- Los editores flotantes: me han quedado un poco feos, y no pegan con la estética del log, pero paso de rayarme más con la apariencia. Tú haces click en nuevo lateral o nueva entrada, y todo se oscurece para aparecer ante ti el editor de esa entrada o lateral. En la ppcp de la beta habrá una lista con las entradas de la actualización, pero no verás su contenido hasta que no abras su editor flotante.
- Datos en memoria y render con cada cambio: Toda la información ya no la contienen los objetos que hay en pantalla, ahora todo está guardado en estructuras de memoria específicas en el navegador del cliente, y cada vez que hay un cambio en los datos se vuelve a renderizar la parte de la página que tiene que reflejar esos cambios.
- Sistema de pila de comandos: Cada cambio se guarda en una pila de comandos, así por ejemplo, si cambias el nombre de un lateral, y luego borras un tag, y luego creas un tag, y luego le cambias el nombre a un tag, yo sólo mando al servidor una pila de comandos como la siguiente:
*CambiarNombreLateral(id,nombre) *BorrarTag(id) *CrearTag(nombre) *CambiarNombreTag(id,nombre)
Dicho esto, actualizo la beta que hay publicada (el código, no el contenido) y te hago blogger allí, para que puedas probar, en la sección de configuración de tu blog, a crear varios laterales: así verás cómo es el editor de texto flotante que te sale (para cambiar el título del lateral haz click sobre él). Verás que la tabla de laterales se actualiza enseguida (lo del editor pasa a la estructura de memoria de los laterales y la parte de la página de que los muestra se vuelve a renderizar. También puedes probar a subir y bajar laterales de la tabla, cada click es un comando se añade sin que lo veas a la pila de comandos, así cuando se guardasen los cambios sólo mandaría los comandos al servidor.
Si tocas cualquier otra cosa que no sea lo que te he dicho, petará, dado que por supuesto no está ni de lejos terminado :)
|