Autor Tema: Documentación Final de CHMEmulator (con código al final)  (Leído 9971 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 12)
« Respuesta #15 : junio 07, 2006, 11:42:29 pm »
SParam.js

Esta función encarga de extraer un parámetro simple de la entrada especificada de la TOC; de allí la S de SParam.

Con un parámetro simple nos referimos a los correspondientes a una entrada correspondiente a una hoja.



Código: [Seleccionar]
function SParam(NLine, _1_to_4)
{
 ;//This validation is better implemented here;
 ;//anyway this is not used:
   if(_1_to_4<=0 || _1_to_4>4)
   {
    return("");
   }

 return( quoteGetter(NLine, _1_to_4) );
}

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 13)
« Respuesta #16 : junio 07, 2006, 11:47:56 pm »
CParam.js

Esta función encarga de extraer un parámetro complejo de la entrada especificada de la TOC; de allí la C de CParam.

Con un parámetro complejo nos referimos a los correspondientes a una entrada correspondiente a un nodo.



Código: [Seleccionar]
function CParam(Ninneo, _1_to_3)
{
 ;//This validation is better implemented here;
 ;//anyway this is not used:
  if(_1_to_3<=0 || _1_to_3>3)
  {
   return("");
  }

 return( quoteGetter(Ninneo, _1_to_3) );
}



Como vemos, en una versión futura de CHMEmulator podremos perfectamente crear una sola función llamada GetParam que podrá ser indistintamente usada para entradas nodo y entradas hoja.

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 14)
« Respuesta #17 : junio 08, 2006, 12:18:23 pm »
writeSimpleInit.js

Esta función escribe el inicio de una tabla para un elemento hoja. El código HTML mostrado es el que poseerán todos y cada uno de los elementos hoja.

Con un parámetro complejo nos referimos a los correspondientes a una entrada correspondiente a un nodo.



Código: [Seleccionar]
function writeSimpleInit()
{
 _border_ = 0;    ;//HTML TABLE border width
 toRet    = "";   ;//String to return

 toRet += "<table style=\"font-family:arial; font-size:12px\" width=\"800\" border=\""+_border_+"\">\n";

 return(toRet);
}

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #18 : junio 08, 2006, 12:41:57 pm »
No se porque pero me recuerda el postotón... :unsure:

No encuentro nada de ese programa en Google asi que supongo que vos hiciste  :thumbsup:

Por cierto, este comentario me llama mucho la atención:
Citar
;//This validation is better implemented here;
 ;//anyway this is not used:
  if(_1_to_3<=0 || _1_to_3>3)

Soy yo el único que traduce eso como: "esta validación es mejor implementada acá; de todas formas no es usada"  :phew:

Estoy mal interpretando tus comentarios de seguro... :wacko:

sicario

  • Visitante
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #19 : junio 08, 2006, 12:45:48 pm »
hey que alguien me explique de que habla este amigo porque no le entiendo nada.... no se de que habla y sus documentaciones me parece son parciales de tal forma que aunque supiera de que habla no me seria util pues del "ICEBERG" solo esta enseñando un pedacito.


eso es SPAM o que?... y por otro lado... los NERDOS de este foro no le contestan nada, es decir este amigo como que esta hablando solo... me gustaria que alguien interprete y nos traduzca a los que no sabemos ni J de lo que habla... o sere solo yo el que no comprende?

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 15)
« Respuesta #20 : junio 08, 2006, 12:49:33 pm »
writeContent.js

Esta función es capaz de generar el código HTML para 3 casos diferentes: el contenido principal de los elementos hoja, los elementos nodo que despliegan documentos al darles click, y los elementos nodo que no muestran nada (solo despliegan contenido).

Este código también se encarga de asignar el ícono especificado en la TOC a cada entrada generada, ya sean los archivos predeterminados "page.bmp", "epage.bmp" o "ipage.bmp" ("collbook.bmp"/"opbook.bmp" para los nodos); o una imagen *.ico personalizada en el directorio "favicons".



Código: [Seleccionar]
function writeContent(leveL, Line, ident)
{
 idenc = ident;
 maxL  = CHM_nivel_mayor;
 Ltmp  = allTrim(CHM_toc[Line]);
 toRet = "";
 done1 = 0;
 cc    = 0;
 favir = "favicons/";
 cicon = ".bmp";

 if(leveL==1)
 {
  idenc+="_leveler";
 }


 associate = idenc;
 text      = "";   ;//CParam(noLinea, 1);
 documentt = "";   ;//CParam(noLinea, 2);
 destiny   = "";   ;//CParam(noLinea, 3);
 icon      = "";   ;//SParam(noLinea, 4);

  toRet += "<tr>\n";

  if(leveL > 1)                  ;//PADDING
  {                              ;//PADDING
   for(cc=1; cc<=leveL-1; cc++)  ;//PADDING
   {                             ;//PADDING
    toRet += CHM_espaciador;     ;//PADDING
   }                             ;//PADDING
  }                              ;//PADDING


 if(leveL!=maxL)   ;//any level; exept maximum one
 {
  //------Container Generation Code------:
  //------Container Generation Code------:
  //------Container Generation Code------:
  //------Container Generation Code------:
  //------Container Generation Code------:
  //------Container Generation Code------:
   if( ((CHM_struc_niveles[Line+1]>leveL) && (numPars(Line)==3)) || ((CHM_struc_niveles[Line]==1 && CHM_struc_niveles[Line+1]==1) && (numPars(Linea)==3)) ) ;//this is, a container
   {
    text      = CParam(Line, 1);
    documentt = CParam(Line, 2);
    destiny   = CParam(Line, 3);

     toRet += "<td align=\"right\" width=\"20\">";
     toRet += "<img src=\"" + img_rut + "collbook.bmp\" id=\"" + idenc + "_image\" />";
     toRet += "</td>\n";
     toRet += "<td>";
     toRet += "<a ";

     if(allTrim(documentt)!="")
     {
      toRet += "href=\"" + documentt + "\" ";
     }
      else
      {
       toRet += "href=\"javascript:try{jey;}catch(er){}\" ";
      }



       if(allTrim(documentt)!="") ;//container responsible to show a document (address parameter -- parameter #2 -- NOT empty)
       {
        toRet += " onkeypress=\"if(KeyboardCode==13){chmMenuEmule('onkeypress', '" + idenc + "', '" + associate + "', 'window.open(\\'" + documentt + "\\', \\'" + destiny + "\\', \\'\\')', '');}\" ";
        toRet += " onmousedown=\"chmMenuEmule('onkeypress', '" + idenc + "', '" + associate + "', 'window.open(\\'" + documentt + "\\', \\'" + destiny + "\\', \\'\\')', '');\" ";
       }
        else  ;//container that does NOT show anything (parameter #2 empty)
        {
         toRet += " onkeypress=\"if(KeyboardCode==13){chmMenuEmule('onkeypress', '" + idenc + "', '" + associate + "', '', '');}\" ";
         toRet += " onmousedown=\"chmMenuEmule('onkeypress', '" + idenc + "', '" + associate + "', '', '')\" ";
        }

     if(allTrim(destiny)!="")
     {
      toRet += "target=\"" + destiny + "\">";
     }
      else
      {
       toRet += ">";
      }

     toRet += text + " </a><br />";






     toRet += "</td>\n";
     toRet += "</tr>\n";
   
   done1 = 1;
  }
 }




 if(!done1)  ;//any level; whenever the previous processes have not been effectuated
 {
    text      = allTrim(SParam(Line, 1));
    documentt = allTrim(SParam(Line, 2));
    destiny   = allTrim(SParam(Line, 3));
    icon      = allTrim(SParam(Line, 4));

  fic1 = icon.indexOf(".ico",icon.length-4);
  fic2 = (fic1!=0 && fic1+4==icon.length);


   if( (icon!="page" && icon!="epage" && icon!="ipage") && !fic2 )
   {
    icon = "page";
   }


   if( fic2 )
   {
    cicon = "";
   }
    else
    {
     favir = "";
     cicon = ".bmp";
    }

 ;//Attempt to make an advanced check, which will consist on testing through "try/catch"
 ;//and other functions, if in fact has been possible to load the image; otherwise
 ;//load the default image "page.bmp"

  toRet += "  <td align=\"right\" width=\"20\">";
  toRet += "<img src=\"" + img_rut + favir + icon + cicon + "\" />";
  toRet += "</td>\n";
  toRet += "  <td>";
  toRet += "  <a target=\"" + destiny + "\" href=\"" + documentt + "\">" + text + " </a><br />";
  toRet += "  </td>\n";
  toRet += " </tr>\n";
 }


 return(toRet);
}
« Última Modificación: junio 08, 2006, 01:01:46 pm por uDocProject »

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #21 : junio 08, 2006, 01:04:50 pm »
Hey uDocProject creo que nos deberias explicar de una manera mas simple porque no te he entendido nada :unsure:

sicario

  • Visitante
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #22 : junio 08, 2006, 01:11:27 pm »
heyyy porque los administradores se han quedado callados ante esto?.... yo siento que esta persona quiere transmitir un mensaje pero no lo descifro...pueden coordinar esto?..porque por ratos pienso que lo que quiere es hacer post y mas post nada mas... aunque me huele a que sabe lo suyo con esos codigos la verdad no se que creeer. Esa forma abstracta de decir las cosas me tiene en ascuas.

uDocProject

  • Visitante
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #23 : junio 08, 2006, 01:21:59 pm »
La intención es que entre todos se forje una documentación altamente inteligible de este paquete. Cada uno de los mensajes que he enviado aquí corresponde a un módulo del programa de Javascript.

Al inicio se incluye una explicación de lo que cada módulo, o parte, hace. No hay de qué preocuparse si la explicación es corta: si es así es porque lo que el código hace también es poco, aunque se vea voluminoso.

Espero recibir preguntas puntuales de qué es lo que no se entiende. Al inicio de este tema se encuentra una explicación de la intención de esto.

Un resumen:
--------------------------------------------------
Este programa de Javascript surgió por la necesidad de disponer de una interfaz de documentos que no solo fuera fácil de usar sino que también pudiera ser empleada sin necesidad de software especial, utilizando cualquier entorno que soportara Javascript (Windows, Linux, MacOS...).

Se optó por una interfaz del tipo de árboles desplegables y colapsables, tan parecida a la de los archivos HTML compilados (CHM) como fuese posible. Este programa se pensó de modo que pudiera desplegar los íconos usualmente empleados por dichos documentos (libro abierto, libro cerrado, diferentes estilos de figuras de páginas...), así como cualquier otro ícono personalizado como los que se usan en el web.

Gracias a este árbol dinámicamente desplegable y ocultable, se descargaría al programador usuario de tener que generar a mano el árbol y dedicarse solamente a lo realmente importante: popular el docset (conjunto de documentos) con el contenido requerido.

Además, se da la posibilidad de personalizar el TOC (tabla de contenidos, o índice) con una piel de fondo elegida por el programador, así como también objetos HTML al inicio y al fin de dicho índice.

Para este programa utilizaremos varios conceptos (de Javascript): eventos de clicks, arreglos de variables, escritura dinámica en el documento mediante Javascript, efectos visuales de ocultamiento y despliegue, así como un motor parser básico para procesar e interpretar la tabla de contenidos especificada por el usuario.

También, se ha optado por un diseño basado en tablas para asegurarse de que estas serán desplegadas correctamente siempre, sin importar la configuración de un usuario en particular, así como para simplificar la agrupación de los contenidos desplegables y, lo más importante, simplificar la programación y estructura general de la aplicación de Javascript.

Las tablas serían reemplazadas por una estructura de visualización CSS; pero solamente si se demuestra que hacer tal cosa aportaría un beneficio de importancia relevante y práctico, cómo y por qué.
--------------------------------------------------


Después de todo, así es como se llevan adelante los proyectos de código libre.

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 16.1)
« Respuesta #24 : junio 08, 2006, 02:38:21 pm »
CHM_Main_Logic.js

Este es el archivo principal, en el que se reúnen todas las funciones anteriores dentro de una rutina repetitiva que se encarga de recorrer toda la TOC para finalmente generar el código de una forma estructurada y utilizable.

Este es el “core” del parser; pero como tal, este solamente se encarga de administrar las funciones anteriormente descritas para trabajar eficiente y modularmente.

Este código contiene 2 funciones. La primera se encarga de automatizar la tarea de recopilar frecuentemente los números del nivel actual de linea, nivel de linea anterior relativa y nivel de linea siguiente relativa a la linea actual; específicamente, esto es efectuado para cada iteración de líneas.



Código: [Seleccionar]
function adjustLevels()
{
 try
 {
  previousLevel = CHM_struc_niveles[CHM_Iterador-1];
 }
  catch(err)
  {
   previousLevel = CHM_struc_niveles[CHM_Iterador];
  }

 currentLevel  = CHM_struc_niveles[CHM_Iterador];
 futureLevel   = CHM_struc_niveles[CHM_Iterador+1];
}

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 16.2)
« Respuesta #25 : junio 08, 2006, 03:34:02 pm »
La segunda función es finalmente el “core” del parser. No se encarga más que de generar todo el código HTML. El parser se llama una sola vez por CHMEmulator, luego de lo cual la interfaz del usuario (la TOC) se establece.



Código: [Seleccionar]
function CHM_Main_Logic()
{
 v1              = true;  ;//Indicator for contiguous level economic handling
 rd              = 0;

 CHM_Iterador  = 0;  ;//Global. Indicates the currently processed line
 previousLevel = 0;
 currentLevel  = 0;
 futureLevel   = 0;



 ;//------Write the custom HTML before TOC------:
 ;//------Write the custom HTML before TOC------:
 ;//------Write the custom HTML before TOC------:
   document.write(CHM_HTMLini);
    ;//Free the memory hold by this global variable:
      CHM_HTMLini = "";


 ;//Save in "CHM_struc_niveles" array the nesting level of
 ;//every line:
   structure_levels();

 ;//Determine the major nesting level present in "CHM_struc_niveles"
 ;//(global to TOC):
   majorLevel();


 ;//------Main loop------:
 ;//------Main loop------:
 ;//------Main loop------:
 ;//------Main loop------:
 ;//------Main loop------:
 ;//------Main loop------:
   while(CHM_Iterador <= CHM_lineas)
   {
    ;//Adjust previous, current and future levels; we do this for
    ;//every single entry of the TOC:
      adjustLevels();
      v1=true;

   ;//We will try at once with adjustLevels and "try/catch" to
   ;//avoid a -1.
   ;//We will adjust levels again, but ONLY for the special case of
   ;//being at the very first line of the TOC:
    if(CHM_Iterador==0)
    {
     previousLevel = currentLevel;
      currentLevel = CHM_struc_niveles[CHM_Iterador];
      futureLevel  = CHM_struc_niveles[CHM_Iterador+1];
    }


   ;//------This is for the start of the DIVs (always collapsable)------:
   ;//------This is for the start of the DIVs (always collapsable)------:
   ;//------This is for the start of the DIVs (always collapsable)------:
   ;//------This is for the start of the DIVs (always collapsable)------:
     if( currentLevel > previousLevel)  ;//If we go up a level...
     {
      if(previousLevel==1)  ;//If it's the first level we go up...
      {
       document.write("<div id=\"" + (CHM_Iterador-1) + "_leveler\" style=\"display:none\">\n");
       document.write(writeSimpleInit());
      }
       else  ;//If the level we go up starts from 2...
       {
        document.write("<div id=\"" + (CHM_Iterador-1) + "\" style=\"display:none\">\n");
        document.write(writeSimpleInit());
       }
     }
      if( currentLevel<=previousLevel)  ;//If we go down one level...
      {
       document.write(writeSimpleInit());
      }




  ;//------This is for the content of leaves/nodes------:
  ;//------This is for the content of leaves/nodes------:
  ;//------This is for the content of leaves/nodes------:
  ;//------This is for the content of leaves/nodes------:
    ;//If there are several contiguous lines at the same level,these
    ;//are resolved at the following loop, and we save space by
    ;//reducing the number of complete tables to write:
    if(currentLevel==futureLevel)  ;//If level has not changed...
    {
     while(v1)
     {
      document.write(writeContent(currentLevel, CHM_Iterador, CHM_Iterador));
       if(futureLevel!=currentLevel)
       {
        ;//How is that the table is correctly generated from the visual point
        ;//of view even WITHOUT this code???
        ;//Well, because that causes that each hyperlink gets its very single
        ;//table, even when there are contiguous entries at the same level; but
        ;//that certainly is NOT desirable nor economic:
          v1=false;  ;//Indicator to finish this loop
          break;     ;//We break this loop...
       }

      CHM_Iterador++;
      adjustLevels();
     }
    }
      if( (currentLevel!=futureLevel) && v1 )
      {
       document.write(writeContent(currentLevel, CHM_Iterador, CHM_Iterador));
      }



  ;//------This is for the end of the HTML hyperlink tabbed entry------:
  ;//------This is for the end of the HTML hyperlink tabbed entry------:
  ;//------This is for the end of the HTML hyperlink tabbed entry------:
  ;//------This is for the end of the HTML hyperlink tabbed entry------:
    document.write("</table>");

    if(futureLevel<currentLevel)  ;//If we go down one or more levels...
    {
     ;//Absolute value to prepare ourselves for a -1 (that's the value
     ;//we introduced at the last entry of "CHM_struc_niveles[]" to mark
     ;//End Of TOC when we ran "structure_levels()" function):
      for(rd=1; rd<=(currentLevel-Math.abs(futureLevel)); rd++)
      {
       ;//It conveniently closes any number of open
       ;//DIVs whenever we go down levels; the number of
       ;//open DIVs to close is determined at the second
       ;//parameter of this "FOR".
         document.write("</div>");
      }
   }

  CHM_Iterador++;
 }


 ;//------Write the custom HTML after TOC------:
 ;//------Write the custom HTML after TOC------:
 ;//------Write the custom HTML after TOC------:
   document.write(CHM_HTMLfin); //global
    ;//Free the memory hold by this global variable:
      CHM_HTMLfin = "";



 ;//This is sort of undeclaration of the array that holds the TOC.
 ;//We free the duplicate memory hold by this here (this is useless
 ;//now since we ALREADY generated the HTML TOC):
   CHM_toc = new Array();


 return;    ;//Finish!!!
}

uDocProject

  • Visitante
Documentación Final de CHMEmulator (Parte 16.3 - Manejador de Teclado)
« Respuesta #26 : junio 08, 2006, 04:00:02 pm »
Finalmente configuramos el programa para que utilice un manejador de teclado que nos ayudará a emular clicks cuando se presione ENTER.



Código: [Seleccionar]
  var KeyboardCode;   ;//Global variable

 ;//Here we hook up the keyboard to the
 ;//"onkeydown" event, which in turn is
 ;//now controlled by the custom "pushedKey"
 ;//function:
  document.onkeydown = pushedKey;


  try  ;//Specific for Mozilla/Netscape/Firefox family
  {
   document.captureEvents(Event.KEYUP);
  }
   catch(err){}


  function pushedKey(key)
  {
   try  ;//Specific for Mozilla/Netscape/Firefox family
   {
    keyboardCode=key.which;
   }
    catch(err){}


   try ;//Specific for Internet Explorer
   {
    KeyboardCode=event.keyCode;
   }
    catch(err){}
  }

Desconectado vlad

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 6351
    • Qualium.net
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #27 : junio 08, 2006, 04:31:52 pm »
No se... pero que no se inventaron el PDF para sobreponerse a esta limitante?

uDocProject

  • Visitante
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #28 : junio 08, 2006, 04:35:34 pm »
No; son problemas distintos.

Esta interfaz que estoy publicando está diseñada para ser mucho más editable que un archivo PDF, sin necesidad de herramientas especializadas; sino que utilizando las capacidades ya existentes de los navegadores web.

Al poner este programa bajo reflexión, se pueden distinguir muchas ventajas en casos muy específicos ante los archivos PDF. Por ejemplo, puede contener elementos dinámicos que un documento PDF común no tendría.

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Documentación Final de CHMEmulator (con código al final)
« Respuesta #29 : junio 08, 2006, 04:39:10 pm »
Seria bueno que nos pusieras un link donde este una demostracion de este programa :thumbsup: