`);
+
+ for(const key in variables[1])
+ if(variables[1][key] && typeof variables[1][key] == "object" && variables[1][key].type)
+ switch(variables[1][key].type){
+ case "grid":
+ case "table":
+ variables[0][key] = grid_to_html(variables[1][key], key);
+ break;
+ case "list":
+ variables[0][key] = list_to_html(variables[1][key], key);
+ break;
+ };
+
+ if(css)
+ !(css instanceof Array) && (css = [css]);
+ else
+ css = [];
+
+ switch(type){
+ case "pdf":
+
+ const header_height = header ? settings("header_height", input) : 0,
+ footer_height = footer ? settings("footer_height", input) : 0;
+
+ margin.header_top = margin.top + 0;
+ margin.header_height = header_height;
+ margin.header_bottom = page_size[1] - margin.top - header_height;
+ margin.footer_top = page_size[1] - margin.bottom - footer_height;
+ margin.footer_height = footer_height;
+ margin.footer_bottom = margin.bottom + 0;
+ margin.page_height = page_size[1];
+ margin.page_width = page_size[0];
+
+ header && (margin.top += header_height + settings("margin_header", input));
+ footer && (margin.bottom += footer_height + settings("margin_footer", input));
+
+ for(const key in margin)
+ margin[key] = dpi * margin[key] / 25.4;
+ margin_processed = [
+ margin.top,
+ margin.right,
+ margin.bottom,
+ margin.left
+ ];
+ css.push(`
+ .header,.body,.footer{width : ` + ((dpi * page_size[0] / 25.4) - margin.left - margin.right) + `px;}
+ .header{
+ position : absolute;
+ top : 0px;
+ left : 0px;
+ }
+ `);
+
+ break;
+ case "doc":
+ break;
+ };
+
+ css_to_html(string_variables(body, variables), css, type, body_size, dpi, html => {body = html;end();});
+ header && header.forEach((html, i) => css_to_html(string_variables(html, variables), css, type, body_size, dpi, html => {header[i] = html;end();}));
+ footer && footer.forEach((html, i) => css_to_html(string_variables(html, variables), css, type, body_size, dpi, html => {footer[i] = html;end();}));
+
+ };
+
+ const get_uri_data = this.get_uri_data = (data, type) => {
+ if(typeof data == "string" && data.match(/^data\:[^,]+,[^,]+$/))
+ return data;
+ if(data instanceof Blob)
+ return URL.createObjectURL(data);
+ switch(type){
+ case "pdf":
+ return data.output("datauristring");
+ case "doc":
+ return "data:application/vnd.ms-word;charset=utf-8," + encodeURIComponent(data);
+ default:
+ return "data:application/octetstream;base64," + encodeURIComponent(btoa(typeof data == "object" ? JSON.stringify(data) : "" + data))
+ };
+ return null;
+ };
+
+ this.download = (data, file_name) => {
+
+ const anchor = cache_box.appendChild(document.createElement("a"));
+
+ anchor.setAttribute("download", file_name);
+ anchor.setAttribute("target", "_blank");
+ anchor.setAttribute("href", get_uri_data(data, file_name.match(/\.([^\.]+)$/)[1].toLowerCase()));
+
+ anchor.click();
+ anchor.remove();
+
+ // window.open(get_uri_data(data, file_name.match(/\.([^\.]+)$/)[1].toLowerCase()), "_blank");
+
+ };
+
+ const add_fonts = this.add_fonts = array => array && array.push && array.forEach(font => {
+
+ if(!fonts[font[0]])
+ fonts[font[0]] = [[font[1], font[2]]];
+ else{
+
+ let i;
+ const exists = fonts[font[0]].some((source, j) => {
+ if(source[1] == font[2]){
+ i = j;
+ return true;
+ };
+ });
+
+ if(exists)
+ fonts[font[0]][i][0] = font[1];
+ else
+ fonts[font[0]].push([font[1], font[2]]);
+
+ };
+
+ });
+
+ const construct = () => {
+
+ week_days = settings("week_days");
+ months = settings("months");
+
+ ["default_fonts", "fonts"].forEach(key => add_fonts(settings(key)));
+
+ settings("autostart") && self.start();
+
+ };
+
+ construct();
+
+};
diff --git a/Public/git_update.php b/Public/git_update.php
new file mode 100755
index 0000000..0879a28
--- /dev/null
+++ b/Public/git_update.php
@@ -0,0 +1,4 @@
+&1");
diff --git a/Public/test.html b/Public/test.html
new file mode 100755
index 0000000..752436c
--- /dev/null
+++ b/Public/test.html
@@ -0,0 +1,164 @@
+
+
+
+ JSReports - Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Public/wmd.php b/Public/wmd.php
new file mode 100755
index 0000000..d9d76b2
--- /dev/null
+++ b/Public/wmd.php
@@ -0,0 +1,6 @@
+ "update_scripts",
+ "author" => "KyMAN",
+ "project" => "JSReports",
+ "class" => "JSReports",
+ "object" => "jsreports",
+ "url" => "https://jsreports.k3y.pw",
+ "project_author" => "KyMAN",
+ "key_words" => "jsreports,js,report,ecma,pdf,doc,csv,kyman,developt,desarrollo,documentacion,doc",
+ "logo" => "/images/JSReports.png",
+ "language" => "es",
+ "wmd_file" => "/../WMarkDown/HTML/script.w.md",
+ "wmd_file_empty" => "/../WMarkDown/HTML/file.w.md",
+ "ignore_script_paths" => [
+ "/Public/data",
+ "/Public/git_update.php",
+ "/Public/wmd.php",
+ "/Public/wmd_scripts.php"
+ ],
+ "only" => "/Public"
+ ], JSReports\Secrets::wmarkdown));
diff --git a/WMD/dev/ECMAScript/index.w.md b/WMD/dev/ECMAScript/index.w.md
new file mode 100755
index 0000000..baa22a8
--- /dev/null
+++ b/WMD/dev/ECMAScript/index.w.md
@@ -0,0 +1,24 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# ECMAScript
+
+[[header_level 0]]
+[[include /WMD/dev/Public/ecma/JSReports.ecma.js.w.md]]
+
+
+
+[[html_data {
+ "title" : "ECMAScript - JSReports",
+ "url" : "https://jsreports.k3y.pw/dev/ECMAScript/index.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,developt,desarrollo,documentacion,doc,developt,desarrollo,programación,ecmascript",
+ "description" : "Parte ECMAScript del JSReports.",
+ "project" : "JSReports",
+ "logo" : "/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/dev/Public/ecma/JSReports.ecma.js.w.md b/WMD/dev/Public/ecma/JSReports.ecma.js.w.md
new file mode 100755
index 0000000..3f4411e
--- /dev/null
+++ b/WMD/dev/Public/ecma/JSReports.ecma.js.w.md
@@ -0,0 +1,549 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# JSReports.ecma.js
+
+```txt
+/Public/ecma/JSReports.ecma.js
+```
+
+## [[plain JSReports.event_execute]]
+
+[[wdoc
+Método object.
+@name JSReports.event_execute
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 8278db1e610a100e5d356a52280cc082
+#key - optional Parámetro key
+#return - - Retorno.
+]]
+
+## [[plain JSReports.event_add]]
+
+[[wdoc
+Método object.
+@name JSReports.event_add
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 0c176da24fa7ae3cb649495f8e7170d8
+#key - optional Parámetro key
+#method - optional Parámetro method
+#return - - Retorno.
+]]
+
+## [[plain JSReports.event_remove]]
+
+[[wdoc
+Método object.
+@name JSReports.event_remove
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 19d4a9003d7c5d18ecaaea69096d8af0
+#key - optional Parámetro key
+#i - optional Parámetro i
+#return - - Retorno.
+]]
+
+## [[plain JSReports.is_html_item]]
+
+[[wdoc
+Método object.
+@name JSReports.is_html_item
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 9fc6e2286fc35144ae5d31e9f90223a0
+#item - optional Parámetro item
+#return - - Retorno.
+]]
+
+## [[plain JSReports.default_value]]
+
+[[wdoc
+Método object.
+@name JSReports.default_value
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash a1841f42c4352bb7f9f7bb87f89ff6fb
+#_default - optional Parámetro _default
+#nulls - optional Parámetro nulls
+#return - - Retorno.
+]]
+
+## [[plain JSReports.settings]]
+
+[[wdoc
+Método object.
+@name JSReports.settings
+@see JSReports.default_value
+@see JSReports.settings
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash aca8a9716fee6aef64d6753573aebf61
+#names - optional Parámetro names
+#inputs - optional Parámetro inputs
+#_default - optional Parámetro _default
+#nulls - optional Parámetro nulls
+#return - - Retorno.
+]]
+
+## [[plain JSReports.threads_method]]
+
+[[wdoc
+Método object.
+@name JSReports.threads_method
+@see JSReports.event_execute
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access private
+@hash bdc0d47954df34f8c7dd34886abb484b
+#return - - Retorno.
+]]
+
+## [[plain JSReports.threads_start]]
+
+[[wdoc
+Método object.
+@name JSReports.threads_start
+@see JSReports.settings
+@see JSReports.threads_method
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 8ddfcc5b5bc311360f29b185dce9cd19
+#frames_per_second - optional Parámetro frames_per_second
+#return - - Retorno.
+]]
+
+## [[plain JSReports.threads_stop]]
+
+[[wdoc
+Método object.
+@name JSReports.threads_stop
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash c1b6d79c278d28a090faf96255fa0c34
+]]
+
+## [[plain JSReports.threads_add]]
+
+[[wdoc
+Método object.
+@name JSReports.threads_add
+@see JSReports.event_add
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash a8bcfab6b51e3d71c29dfe4489f1a2ea
+#method - optional Parámetro method
+#return - - Retorno.
+]]
+
+## [[plain JSReports.threads_remove]]
+
+[[wdoc
+Método object.
+@name JSReports.threads_remove
+@see JSReports.event_remove
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 2502fd5b998c2aa8c8ef113766274944
+#i - optional Parámetro i
+#return - - Retorno.
+]]
+
+## [[plain JSReports.preload]]
+
+[[wdoc
+Método object.
+@name JSReports.preload
+@see JSReports.is_html_item
+@see JSReports.settings
+@see JSReports.threads_add
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 78825cc3c12f69f2ce9e0dbb365032e3
+#selector - optional Parámetro selector
+#callback - optional Parámetro callback
+]]
+
+## [[plain JSReports.ready]]
+
+[[wdoc
+Método object.
+@name JSReports.ready
+@see JSReports.event_execute
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access private
+@hash 24173da9f3087d1dc7dd6cfb091e1973
+#position - optional Parámetro position
+]]
+
+## [[plain JSReports.start]]
+
+[[wdoc
+Método object.
+@name JSReports.start
+@see JSReports.threads_start
+@see JSReports.settings
+@see JSReports.preload
+@see JSReports.ready
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 7a9f7395ead121483d8fff795eec1c1f
+]]
+
+## [[plain JSReports.on_ready]]
+
+[[wdoc
+Método object.
+@name JSReports.on_ready
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash b10a8f8510b1fdd31af34e4742531d68
+#method - optional Parámetro method
+#return - - Retorno.
+]]
+
+## [[plain JSReports.string_variables]]
+
+[[wdoc
+Método object.
+@name JSReports.string_variables
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash baaa8e283a18d68f6e9af7bb5fa4cbbe
+#string - optional Parámetro string
+#variables - optional Parámetro variables
+#_default - optional Parámetro _default
+]]
+
+## [[plain JSReports.base64_to_blob]]
+
+[[wdoc
+Método object.
+@name JSReports.base64_to_blob
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash b9ca1772f19dd57db9bedc5678ed79e5
+#uri - optional Parámetro uri
+#type - optional Parámetro type
+#return - - Retorno.
+]]
+
+## [[plain JSReports.hash]]
+
+[[wdoc
+Método object.
+@name JSReports.hash
+@see JSReports.settings
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 0e8da659a099929c4de6a1f107c44d8c
+#return - - Retorno.
+]]
+
+## [[plain JSReports.grid_to_html]]
+
+[[wdoc
+Método object.
+@name JSReports.grid_to_html
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 667df7e5df63dd419bf9465b12f221a1
+#grid - optional Parámetro grid
+#name - optional Parámetro name
+#return - - Retorno.
+]]
+
+## [[plain JSReports.list_to_html]]
+
+[[wdoc
+Método object.
+@name JSReports.list_to_html
+@see JSReports.settings
+@see JSReports.list_to_html
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash d0310359b0d5fbe909db8f3968c63972
+#list - optional Parámetro list
+#name - optional Parámetro name
+#return - - Retorno.
+]]
+
+## [[plain JSReports.css_to_html]]
+
+[[wdoc
+Método object.
+@name JSReports.css_to_html
+@see JSReports.hash
+@see JSReports.preload
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash ca5cbc79e2bf66ca5b2b3fb1d5390cea
+#html - optional Parámetro html
+#css - optional Parámetro css
+#type - optional Parámetro type
+#body_size - optional Parámetro body_size
+#dpi - optional Parámetro dpi
+#callback - optional Parámetro callback
+]]
+
+## [[plain JSReports.get_page_size]]
+
+[[wdoc
+Método object.
+@name JSReports.get_page_size
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 0c9acc181031029511c870013794933e
+#format - optional Parámetro format
+#return - - Retorno.
+]]
+
+## [[plain JSReports.to_pixels]]
+
+[[wdoc
+Método object.
+@name JSReports.to_pixels
+@see JSReports.settings
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 834fd27f6c5fad1286ac1d4f2686a685
+#size - optional Parámetro size
+#dpi - optional Parámetro dpi
+#return - - Retorno.
+]]
+
+## [[plain JSReports.create_canas]]
+
+[[wdoc
+Método object.
+@name JSReports.create_canas
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash e590bf71f37824d9ccfad63f9d5d1b18
+#html - optional Parámetro html
+#width - optional Parámetro width
+#height - optional Parámetro height
+#callback - optional Parámetro callback
+]]
+
+## [[plain JSReports.time_format]]
+
+[[wdoc
+Método object.
+@name JSReports.time_format
+@see JSReports.string_variables
+@see JSReports.settings
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 204420143766456a0655f90e88bde2a8
+#date - optional Parámetro date
+#format - optional Parámetro format
+]]
+
+## [[plain JSReports.page_variables]]
+
+[[wdoc
+Método object.
+@name JSReports.page_variables
+@see JSReports.settings
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access private
+@hash 0e1b0f139196df893613aac593e29e3c
+#html - optional Parámetro html
+#variables - optional Parámetro variables
+#return - - Retorno.
+]]
+
+## [[plain JSReports.pdf_header_footer_create]]
+
+[[wdoc
+Método object.
+@name JSReports.pdf_header_footer_create
+@see JSReports.pdf_header_footer_create
+@see JSReports.page_variables
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access private
+@hash fc6d493a044a62726024d64c9cdaa4f0
+#pdf - optional Parámetro pdf
+#header - optional Parámetro header
+#footer - optional Parámetro footer
+#margin - optional Parámetro margin
+#pages - optional Parámetro pages
+#callback - optional Parámetro callback
+#i - optional Parámetro i
+]]
+
+## [[plain JSReports.create]]
+
+[[wdoc
+Método object.
+@name JSReports.create
+@see JSReports.settings
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash d8eec2408d0579c21dfaed249e09d2c9
+#input - optional Parámetro input
+#callback - optional Parámetro callback
+]]
+
+## [[plain JSReports.get_uri_data]]
+
+[[wdoc
+Método object.
+@name JSReports.get_uri_data
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash f4644a2029a63c4358ff2c669cc04ab8
+#data - optional Parámetro data
+#type - optional Parámetro type
+#return - - Retorno.
+]]
+
+## [[plain JSReports.download]]
+
+[[wdoc
+Método object.
+@name JSReports.download
+@see JSReports.get_uri_data
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 4f44d8e3a5538fff046fd56976784a58
+#data - optional Parámetro data
+#file_name - optional Parámetro file_name
+]]
+
+## [[plain JSReports.add_fonts]]
+
+[[wdoc
+Método object.
+@name JSReports.add_fonts
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access public
+@hash 3e46c209a2c978863975828939679f6c
+#array - optional Parámetro array
+#return - - Retorno.
+]]
+
+## [[plain JSReports.construct]]
+
+[[wdoc
+Método object.
+@name JSReports.construct
+@see JSReports.settings
+@see JSReports.add_fonts
+@see JSReports.start
+@lang ECMAScript
+@author KyMAN
+@since 20220422
+@version 20220422
+@access private
+@hash 3843a081dceb29470cdbf51afab923a8
+]]
+
+[[html_data {
+ "title" : "JSReports.ecma.js - JSReports",
+ "url" : "https://jsreports.k3y.pw/Public/ecma/JSReports.ecma.js.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,developt,desarrollo,documentacion,doc,developt,desarrollo,programación,cma",
+ "description" : "JSReports.ecma.js del JSReports.",
+ "project" : "JSReports",
+ "logo" : "/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/dev/index.w.md b/WMD/dev/index.w.md
new file mode 100755
index 0000000..d9fd530
--- /dev/null
+++ b/WMD/dev/index.w.md
@@ -0,0 +1,55 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+
+# ECMAScript
+
+- [/dev/ECMAScript#JSReports-ecma-js-2 /Public/ecma/JSReports.ecma.js]
+ - [/dev/ECMAScript#JSReports-event-execute-2 JSReports.event\_execute]
+ - [/dev/ECMAScript#JSReports-event-add-2 JSReports.event\_add]
+ - [/dev/ECMAScript#JSReports-event-remove-2 JSReports.event\_remove]
+ - [/dev/ECMAScript#JSReports-is-html-item-2 JSReports.is\_html\_item]
+ - [/dev/ECMAScript#JSReports-default-value-2 JSReports.default\_value]
+ - [/dev/ECMAScript#JSReports-settings-2 JSReports.settings]
+ - [/dev/ECMAScript#JSReports-threads-method-2 JSReports.threads\_method]
+ - [/dev/ECMAScript#JSReports-threads-start-2 JSReports.threads\_start]
+ - [/dev/ECMAScript#JSReports-threads-stop-2 JSReports.threads\_stop]
+ - [/dev/ECMAScript#JSReports-threads-add-2 JSReports.threads\_add]
+ - [/dev/ECMAScript#JSReports-threads-remove-2 JSReports.threads\_remove]
+ - [/dev/ECMAScript#JSReports-preload-2 JSReports.preload]
+ - [/dev/ECMAScript#JSReports-ready-2 JSReports.ready]
+ - [/dev/ECMAScript#JSReports-start-2 JSReports.start]
+ - [/dev/ECMAScript#JSReports-on-ready-2 JSReports.on\_ready]
+ - [/dev/ECMAScript#JSReports-string-variables-2 JSReports.string\_variables]
+ - [/dev/ECMAScript#JSReports-base64-to-blob-2 JSReports.base64\_to\_blob]
+ - [/dev/ECMAScript#JSReports-hash-2 JSReports.hash]
+ - [/dev/ECMAScript#JSReports-grid-to-html-2 JSReports.grid\_to\_html]
+ - [/dev/ECMAScript#JSReports-list-to-html-2 JSReports.list\_to\_html]
+ - [/dev/ECMAScript#JSReports-css-to-html-2 JSReports.css\_to\_html]
+ - [/dev/ECMAScript#JSReports-get-page-size-2 JSReports.get\_page\_size]
+ - [/dev/ECMAScript#JSReports-to-pixels-2 JSReports.to\_pixels]
+ - [/dev/ECMAScript#JSReports-create-canas-2 JSReports.create\_canas]
+ - [/dev/ECMAScript#JSReports-time-format-2 JSReports.time\_format]
+ - [/dev/ECMAScript#JSReports-page-variables-2 JSReports.page\_variables]
+ - [/dev/ECMAScript#JSReports-pdf-header-footer-create-2 JSReports.pdf\_header\_footer\_create]
+ - [/dev/ECMAScript#JSReports-create-2 JSReports.create]
+ - [/dev/ECMAScript#JSReports-get-uri-data-2 JSReports.get\_uri\_data]
+ - [/dev/ECMAScript#JSReports-download-2 JSReports.download]
+ - [/dev/ECMAScript#JSReports-add-fonts-2 JSReports.add\_fonts]
+ - [/dev/ECMAScript#JSReports-construct-2 JSReports.construct]
+
+
+[[html_data {
+ "title" : "Código - JSReports",
+ "url" : "https://jsreports.k3y.pw/dev/index.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,developt,desarrollo,documentacion,doc,developt,desarrollo,programación,todo,all",
+ "description" : "Parte Todo del JSReports.",
+ "project" : "JSReports",
+ "logo" : "/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/es/bugs.w.md b/WMD/es/bugs.w.md
new file mode 100755
index 0000000..5a6da67
--- /dev/null
+++ b/WMD/es/bugs.w.md
@@ -0,0 +1,122 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# Bugs
+
+En esta sección se catalogarán todos los Bugs y el estado conforme a si están o no arreglados o si
+se están tratando.
+
+## Cabeceras y pies dispares en UDF
+
+Las cabeceras y pies de página salen en las páginas impares en UDF. El problema recae principalmente
+en que los etiquetados y marcas de MS no son compatibles con las de UDF, siendo para UDF el
+'title="header"' para la cabecera y el 'title="footer"' para el pie; mientras que en MS sería el
+atributo Style "mso-element:header;" para la cabecera y "mso-elemento:footer;" para el pie. Está
+globalizado, pero el método UDF sólo muestra las cabeceras y los pies en las páginas impares.
+
+- [ ] Arreglar el fallo para que salgan en todas las páginas.
+
+Hay una pseudosolución que aportaron en la respuesta del Link que se muestra a continuación se
+muestra una pseudosolución (Digo pseudo porque no es una cabecera ni pié real, sino que se usa una
+tabla que contiene ambas cosas la cual repite su THEAD y su TFOOT en todas las páginas) pero al no
+ser una cabecera y pié reales no lo establecí, pero decir que en caso de extrema necesidad, ésta
+puede ser aplicada perfectamente.
+
+https://stackoverflow.com/questions/1360869/how-to-use-html-to-print-header-and-footer-on-every-printed-page-of-a-document#answer-51371081
+
+## Problemas cabeceras y piés PDF
+
+El jsPDF no fue diseñado para trabajar en profundidad el HTML de hecho, no es capaz ni de
+interpretar CSS ni de adjuntar las fuentes de forma autónoma, pero el problema viene a la hora de
+establecer un elemento HTML pues, aunque establezcas la página donde quieras establecerlo, éste
+siempre irá a la primera página, y si estableces un margen o posición "top" muy alto, éste
+desaparece si no es nativo para estar ahí. El HTML se superpondrá a lo que ya hay en el documento y
+no permite establecer márgenes diferentes a distintos HTML, por lo que el tema de las cabeceras
+queda totalmente descartado mediante HTML nativo.
+
+- [X] Conseguir un sistema que permita generar cabeceras y piés de página contra HTML y CSS.
+- [ ] Probar el sistema de impresión HTML de CSS para establecer una tabla que por página repita su
+THEAD y su TFOOT, como la trampa para establecer cabeceras que encontré para DOCs.
+
+> [[! important IMPORTANTE]]: Actualmente, este sistema funciona pero es a partir de la creación de
+una imagen contra el HTML y CSS dado lo que impide seleccionar texto entre otros problemas. No me
+preocupan los sistemas que migran de PDF a DOC por los OCR.
+
+> [[! note NOTA]]: Para arreglar este problema se optó por hacer uso de la dependencia del propio
+jsPDF: html2canvas, y de ahí se extrae una imagen en URI Base64 que es la que se usa para dichos
+fines.
+
+## Problemas con CSS
+
+En los documentos DOC, la etiqueta STYLE que contiene el CSS, tiene órdenes y sentencias muy
+específicas que no pueden ser flexibilizadas por lo que hay que hacer una adaptación de la misma
+para que funcionen.
+
+- [X] Crear adaptación para que se generen.
+
+Básicamente se reutilizó el sistema hecho para los PDF.
+
+## Corregir tamaños IMG
+
+Las imágenes, en os documentos DOC tienen el problema del valor de atributo "width" y "height" auto,
+que cogen como valor su ancho o alto, consecutivamente.
+
+- [X] Conseguir proporcionar las imágenes.
+
+Para arreglar dicho fallo se hice un análisis del CSS contra las imágenes en su precarga y
+establecer un tamaño relativo con respecto al formato de página, tamaño de la misma y el tamaño de
+la imagen.
+
+## Tamaños de tabla
+
+En los DOC, las tablas no hacen caso de los atributos de tamaño de CSS, requiriendo de hacer uso del
+atributo WIDTH.
+
+Por otro lado, las celdas tampoo hacen caso de su ancho, teniendo que usar la etiqueta COLGROUP y
+sus subetiquetas COL.
+
+- [X] Migrar el ancho en CSS al atributo WIDTH de la tabla.
+- [X] Migrar el ancho de las columnas a los COL.
+- [-] Corregir la porcentualidad de los COL.
+
+> [[! important IMPORTANTE]]: Los COL, en los DOC UDF ignora la unidad del atributo y no respeta la
+proporción de peso, quedando sobre una proporción a 50000. Automáticamente lo tramita desde los DPI
+en medidas por pixel; y por el tamaño de página en mm, cm, in, etc; así como por los propios
+porcentajes. Creo que es algo que hay que mejorar, pero que para salir del paso llega.
+
+## Medidas mm en DOC UDF
+
+Cuando tratabajamos los márgenes CSS de las cabeceras y los pies de página, éstos se establecen en
+mm de forma forzada aunque le pongas otra unidad de medida.
+
+> [[! note NOTA]]: Al ser un atributo CSS especial para MS puede ser que se condicione forzadamente
+en mm? No hay información a penas acerca de ello.
+
+- [ ] Arreglar el Bug, o al menos, adaptarlo para que salga en otras unidades establecidas en CSS.
+
+> [[! note NOTA]]: Actualmente está trabajando en mm, de la misma forma que trabaja esta librería.
+
+## PDF en Chrome
+
+Por algún motivo, en Chrome no crea el PDF. Queda como totalmente apagado y sin terminar el proceso.
+
+- [X] Arreglar el Bug.
+
+El Bug parece ser que era porque el evento OnLoad del IFRAME que gestiona los html2canvas no existe
+en Chrome salvo que éste venga con una URL, por lo que se decidió hacer un Timeout para solventar la
+precarga del objeto.
+
+[[html_data {
+ "title" : "JSReports - Bugs",
+ "url" : "https://jsreports.k3y.pw/es/bugs.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación,bugs,errores,errors",
+ "description" : "Bugs del proyecto JSReports.",
+ "project" : "Bugs",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/es/index.w.md b/WMD/es/index.w.md
new file mode 100755
index 0000000..9a7354e
--- /dev/null
+++ b/WMD/es/index.w.md
@@ -0,0 +1,38 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# JSReports
+
+Este proyecto está orientado a crear Reports (Informes) directamente desde JS cliente desde un
+navegador. Dichos informes se entiende como resultados de información en texto como PDF, DOC, etc.
+Así como tablas de datos.
+
+[[header_level 0]]
+[[include /WMD/es/project.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/projects.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/notes.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/bugs.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/targets.w.md]]
+
+[[html_data {
+ "title" : "JSReports - Documentación",
+ "url" : "https://jsreports.k3y.pw/es",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación",
+ "description" : "Documentación del proyecto JSReports.",
+ "project" : "Documentación",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/es/notes.w.md b/WMD/es/notes.w.md
new file mode 100755
index 0000000..52ffb6c
--- /dev/null
+++ b/WMD/es/notes.w.md
@@ -0,0 +1,176 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# Notas
+
+Notas para no olvidarme del proyecto.
+
+El proyecto se basa en una librería ECMA/JS la cual se llama JSReports como nombre de clase. Hay que
+crear un objecto JSReports para poder trabajar con ella. En el caso de PDF depende de las librerías:
+
+- [https://cdn.k3y.pw/js/html2canvas.min.js]
+- [https://cdn.k3y.pw/js/jspdf.umd.min.js]
+- [https://cdn.k3y.pw/js/purify.min.js]
+
+Para poder empezar a trabajar con esta librería hay que esperar asíncronamente a que termine de
+cargar mediante un Callback "on_ready"
+
+```js
+(js_reports = new JSReports(/* PARAMETROS DE ENTRADA */)).on_ready(() => console.log("Ya terminó de cargar xD"));
+```
+
+> [[! note NOTA]]: La librería requiere de un sitio donde poner componentes de forma temporal a modo
+de caché. No le vale un DocumentFragment. Si no se le establece se pondrá por defecto BODY.
+
+# PDF y DOC
+
+El trabajo con esta librería cara los PDF y DOC es exactamente igual. Hay que llamar a un método
+llamado "create" el cual permite crear este tipo de documentos. La librería se centra en que crees
+un HTML4 y CSS2, aunque pueden ser adjuntadas cosas de HTML5 y XHTML, así como algunos parámetros
+CSS3 y customizados cara cualquier a de las dos plataformas. La idea es construir plantillas para
+cabeceras, pies y cuerpos en HTML y una única hoja de estilos general en CSS, lo que cubriría el 99%
+del informe, luego hay ciertos parámetros que son necesarios establecer mediante valores.
+
+Con esta información tenemos como parámetros de entrada un único valor que vendrá siendo un
+diccionario el cual tiene los siguientes elementos:
+
+> [[! note NOTA]]: Todas las medidas se toma en mm (Milímetros).
+
+- **header**: Cabecera HTML.
+- **body**: Cuerpo HTML.
+- **footer**: Pié HTML.
+- **css**: Estilos CSS.
+- **type**: Extensión que determina si es "doc" o "pdf".
+- **margin**: Margen general para cualquier lado.
+- **margin_top**: Margen superior.
+- **margin_right**: Margen derecho.
+- **margin_bottom**: Margen inferior.
+- **margin_left**: Margen izquierdo.
+- **variables**: Variables para cubrir dentro de los HTML.
+- **header_height**: Alto de la cabecera.
+- **footer_height**: Alto del pié.
+- **margin_header**: Margen de la cabecera.
+- **margin_footer**: Margen del pié.
+- **dpi**: DPI para marcar tamaños digitales en PX.
+- **page_format**: Formato de página (A4, A3, A5, C5, Letter (L), etc.); o tamaño (alto y ancho).
+
+El formato PDF requiere de embedar las fuentes con las que se vaya a trabajar en formato TTF, que es
+el formato por defecto cara los OS. Dicho formato requiere de un archivo por estilo (Regular o
+normal, Light, Bold, Italic, etc). Para embedar fuentes es necesario cubrir la variable "fonts" en
+el diccionario de parámetros de entrada del objeto y se compone de un Array bidimensional donde el
+primer nivel es conjunto de fuentes y el segundo se compone de:
+
+0. Nombre de la fuente.
+0. Link del estilo.
+0. Nombre del estilo.
+
+En ambos casos, las imágenes se embedarán mediante URI Base64, pasando a formar parte del documento.
+Las imágenes, por defecto, suelen estar protegidas por CORS. Para saltarse dicha restricción es
+importante hacer uso de un Proxy. Para establecer el Proxy hemos de establecer el parámetro global
+"proxy" que vendrá siendo una URL contra el Proxy donde la variable String "{url}" determinará donde
+colocar la URL de la imagen.
+
+```js
+js_reports = new JSReports({
+ proxy : "https://proxycors.local/api/DHkwPBhzp78Gz8g3BmG4VFnDgnt5kU9J6XQPjWMGDKwjr6s3f9nV7545B/{url}"
+})
+```
+
+> [[! note NOTA]]: Si el Proxy no retorna las cabeceras del CORS, éste no servirá de nada. Se puede
+hacer uso del proyecto [https://proxycors.k3y.pw/ ProxyCORS], proyecto en el que está basado el
+ejemplo también desarrollado por KyMAN. El Git del proyecto es [https://git.k3y.pw/KyMAN/ProxyCORS].
+
+> [[! important IMPORTANTE]]: El link del ProxyCORS posiblemente no funcione por el hecho de que con
+dicho Hash podrían usar mi servidor como salto anónimo para saltarse el CORS entre otros fines por
+lo que el Hash quede deshabilitado.
+
+También se le pueden agregar componentes especiales al documento como tablas o listas programas
+directamente como objetos o Arrays a partir de un objeto que determina su tipo y el contenido del
+mismo. A continuación se titularán los tipos de objetos especiales que hay actualmente.
+
+## Tablas (Grids)
+
+Los documentos DOC y PDF permiten la generación de tablas dinámicas a partir de la idea de un Grid,
+es decir, un objeto que determina la cabecera y los datos y automáticamente, el programa embedará
+una tabla con dichos datos. La estructura del objeto es la siguiente:
+
+- **type**: Tipo (puede ser "table" o "grid").
+- **header** : Array de textos, cada uno será la cabecera de esa columna concreta.
+- **body**: Cuerpo de la tabla o datos. Array bidimensional con los valores por cada tupla y columna.
+
+Un ejemplo de una tabla puede ser el siguiente:
+
+```js
+const table = {
+ type : "table",
+ header : ["Cabecera 1", "Cabecera 2", "Cabecera 3", "...", "Cabecera N"],
+ body : [
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"],
+ ["Valor 1", "Valor 2", "Valor 3", "...", "Valor N"]
+ ]
+};
+```
+
+## Listas
+
+Los documentos DOC y PDF permiten la generación de listas dinámicas a partir de un Array el cual
+puede anidar otros Array para hacer Listas de múltiples niveles. Admiten tantos listas ordenadas
+como desordenadas, y su estructura es la siguiente:
+
+- **type**: Tipo (Siempre será "list"),
+- **mode**: El modo en que se mostrarán los datos. Éste puede ser:
+ - *ol* o *ordered*: Para mostrar los datos con un valor que representa su posición autoincremental.
+ - *ul* o *unordered*: Para mostrar los datos con puntos, guiones o como se establezca por CSS.
+- **start**: Para los elementos ordenados autoincrementalmente, valor numérico de inicio.
+- **items**: Array de elementos ordenados. Puede contener objetos que anidan otras listas.
+
+Un ejemplo de una tabla puede ser el siguiente:
+
+```js
+const list = {
+ type : "list",
+ mode : "ordered",
+ start : 12,
+ items : [
+ "cosa 1",
+ "cosa 2",
+ "cosa 3",
+ "...",
+ ["jojo", {
+ mode : "unordered",
+ items : [
+ "pasa A",
+ ["pasa B", {
+ items : [
+ "otro xD"
+ ]
+ }],
+ "pasa C"
+ ]
+ }],
+ "juas",
+ "jiji"
+ ]
+};
+```
+
+[[html_data {
+ "title" : "JSReports - Notas",
+ "url" : "https://jsreports.k3y.pw/es/notes.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación,notas",
+ "description" : "Notas del proyecto JSReports.",
+ "project" : "JSReports",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/es/project.w.md b/WMD/es/project.w.md
new file mode 100755
index 0000000..5e27a1b
--- /dev/null
+++ b/WMD/es/project.w.md
@@ -0,0 +1,29 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# Proyecto
+
+El proyecto viene siendo una librería Core que permite, desde un cliente JS (Navegador), junto con
+sus dependencias, en caso de requerirlo, crear informes en múltiples formatos como PDF y DOC,
+pasando como formato visual HTML y CSS, así como generación de archivos multiplataforma compatibles
+con Excel y Calc como es el formato CSV. También se baraja la idea de poder gestionar la descarga de
+información directa en XML, JSON, etc.
+
+La librería final es la siguiente:
+
+https://jsreports.k3y.pw/ecma/JSReports.ecma.js
+
+[[html_data {
+ "title" : "JSReports - Proyecto",
+ "url" : "https://jsreports.k3y.pw/es/project.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación,proyecto,descripción",
+ "description" : "Descripción del proyecto JSReports.",
+ "project" : "Proyecto",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/es/projects.w.md b/WMD/es/projects.w.md
new file mode 100755
index 0000000..58db781
--- /dev/null
+++ b/WMD/es/projects.w.md
@@ -0,0 +1,67 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# Proyectos y dependencias
+
+Este proyecto depende de una serie de librerías externas las cuales son:
+
+[[links_group [{
+ "images" : [],
+ "link" : "https://github.com/cure53/DOMPurify",
+ "text" : "DOMPurify"
+}, {
+ "images" : ["data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNTZweCIgaGVpZ2h0PSI1NnB4IiB2aWV3Qm94PSIwIDAgNTYgNTYiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iUHJvcG9zYWwtLS1TdWtodW12aXQtU2V0IiBmaWxsPSIjRkZGRkZGIj4KICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwLTIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLCAzLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDEyIEw0LDQ2IEwzNy4wMjMyNTU4LDQ2IEwzNy4wMjMyNTU4LDEyIEw0LDEyIFogTTIsOCBMMzkuMDIzMjU1OCw4IEM0MC4xMjc4MjUzLDggNDEuMDIzMjU1OCw4Ljg5NTQzMDUgNDEuMDIzMjU1OCwxMCBMNDEuMDIzMjU1OCw0OCBDNDEuMDIzMjU1OCw0OS4xMDQ1Njk1IDQwLjEyNzgyNTMsNTAgMzkuMDIzMjU1OCw1MCBMMiw1MCBDMC44OTU0MzA1LDUwIDEuMzUyNzA3NWUtMTYsNDkuMTA0NTY5NSAtMS4yMzI1OTUxNmUtMzEsNDggTC0yLjIyMDQ0NjA1ZS0xNiwxMCBDLTMuNTczMTUzNTVlLTE2LDguODk1NDMwNSAwLjg5NTQzMDUsOCAyLDggWiIgaWQ9IlJlY3RhbmdsZSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw0IEwxMiwzOCBMNDYsMzggTDQ2LDQgTDEyLDQgWiBNMTAsMCBMNDgsMCBDNDkuMTA0NTY5NSwtMi4wMjkwNjEyNWUtMTYgNTAsMC44OTU0MzA1IDUwLDIgTDUwLDQwIEM1MCw0MS4xMDQ1Njk1IDQ5LjEwNDU2OTUsNDIgNDgsNDIgTDEwLDQyIEM4Ljg5NTQzMDUsNDIgOCw0MS4xMDQ1Njk1IDgsNDAgTDgsMiBDOCwwLjg5NTQzMDUgOC44OTU0MzA1LDIuMDI5MDYxMjVlLTE2IDEwLDAgWiIgaWQ9IlJlY3RhbmdsZS1Db3B5Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPgo="],
+ "link" : "https://html2canvas.hertzen.com/",
+ "text" : "html2canvas"
+}, {
+ "images" : [
+ "https://parall.ax/parallax-2016/img/svg/jspdf-logo.svg",
+ "https://camo.githubusercontent.com/54ed74d0938e90aa54fc062f91767281c46cfd9964787f1b4a7b898eca9e887e/68747470733a2f2f706172616c6c2e61782f706172616c6c61782d323031362f696d672f7376672f6a737064662d6c6f676f2e737667"
+ ],
+ "link" : "https://github.com/parallax/jsPDF",
+ "text" : "jsPDF"
+}] ]]
+
+Por otro lado, hay proyectos desarrollados por KyMAN o en los que KyMAN también participó tales
+como:
+
+[[links_group [{
+ "images" : ["https://wmarkdown.k3y.pw/images/wmarkdown.png"],
+ "link" : "https://wmarkdown.k3y.pw/",
+ "text" : "WMarkDown"
+}, {
+ "images" : [],
+ "link" : "https://wdictionaries.k3y.pw/",
+ "text" : "Wdictionaries"
+}, {
+ "images" : [],
+ "link" : "https://proxycors.k3y.pw/",
+ "text" : "ProxyCORS"
+}] ]]
+
+Finalmente, este proyecto es usado en los proyectos:
+
+[[links_group [{
+ "images" : ["https://anp.k3y.pw/images/AnP.png"],
+ "link" : "https://anp.k3y.pw/",
+ "text" : "AnP"
+}, {
+ "images" : [],
+ "link" : "https://anprm.k3y.pw/",
+ "text" : "AnPRM"
+}] ]]
+
+[[html_data {
+ "title" : "JSReports - Proyectos",
+ "url" : "https://jsreports.k3y.pw/es/projects.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación,proyectos,dependencias",
+ "description" : "Proyectos y dependencias del proyecto JSReports.",
+ "project" : "Proyectos y dependencias",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/es/targets.w.md b/WMD/es/targets.w.md
new file mode 100755
index 0000000..024a553
--- /dev/null
+++ b/WMD/es/targets.w.md
@@ -0,0 +1,51 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# Objetivos
+
+Aquí se pondrán los objetivos del proyecto JSReports.
+
+- [X] Crear proyecto Git.
+- [X] Crear base del proyecto.
+- [X] Crear el JS.
+- [-] Crear la parte para HTML compacto.
+- [X] Adjuntador de fuentes.
+- [X] Meter todo en el CDN y comentarlo.
+- [X] Añadir cabeceras y pies al PDF.
+- [X] Posibilidad de múltiples cabeceras y pies.
+- [X] Corregir sobreescritura de elementos CSS y el múltiple ";".
+- [X] Montar el cuerpo de los DOC.
+- [X] Montar cabeceras y pies de página.
+- [X] Corregir Bug de tamaños de imagen.
+- [X] Corregir Bug de ancho de tablas.
+- [X] Corregir Bug de ancho de celdas.
+- [X] Compatibilizar OpenDocument con MSDocument.
+- [X] Montar variables de página.
+- [X] Arreglar Bug de márgenes del Footer y el Header.
+- [X] Corregir fuentes embedadas de PDF.
+- /*Hasta aquí es compatible con UDF al 100%.*/
+- [ ] Montar VM temporal con el Office 365 para probar resultados y corregir Bugs.
+ - *Compatibilizar UDF con MS XML.*
+- [-] Documentar.
+- [X] Añadir JSReports al WDictionaries.
+- [X] Publicar.
+- [X] Montar CORS.
+- [X] Subir los archivos de dependencias.
+- [X] Arreglar el tester HTML.
+- [X] Elimintar el tester 0 HTML.
+- [X] Corregir Bug del JSReports en Chrome.
+
+[[html_data {
+ "title" : "JSReports - Objetivos",
+ "url" : "https://jsreports.k3y.pw/es/targets.html",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación,objetivos,targets",
+ "description" : "Objetivos del proyecto JSReports.",
+ "project" : "Objetivos",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]
diff --git a/WMD/index.w.md b/WMD/index.w.md
new file mode 100755
index 0000000..6d11824
--- /dev/null
+++ b/WMD/index.w.md
@@ -0,0 +1,40 @@
+[[post_data {
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422
+}]]
+# JSReports
+
+Seleccione un idioma para acceder a la documentación del proyecto.
+
+[[links_group [{
+ "images" : ["https://i.imgur.com/im1o0gc.png"],
+ "link" : "/es/",
+ "text" : "Español",
+ "self" : true
+}] ]]
+
+[[header_level 0]]
+[[include /WMD/es/project.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/projects.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/bugs.w.md]]
+
+[[header_level 0]]
+[[include /WMD/es/targets.w.md]]
+
+[[html_data {
+ "title" : "JSReports - Idioma",
+ "url" : "https://jsreports.k3y.pw/",
+ "author" : "KyMAN",
+ "since" : 20220422,
+ "version" : 20220422,
+ "key_words" : "jsreports,js,report,ecma,pdf,doc,csv,kyman,wmd,wmarkdown,documentación",
+ "description" : "Documentación del proyecto JSReports.",
+ "project" : "JSReports",
+ "logo" : "https://jsreports.k3y.pw/images/JSReports.png",
+ "language" : "es"
+}]]