// Función de debounce para optimizar el rendimiento function debounce(func, wait) { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } jQuery(document).ready(function($) { // Initialize color pickers $('.color-picker').wpColorPicker({ change: function(event, ui) { updateStyles(); } }); // Initialize html2canvas var script = document.createElement('script'); script.src = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js'; document.head.appendChild(script); script.onload = function() { console.log('html2canvas loaded'); $('.download-jpg').prop('disabled', false); }; // Optimized zoom handling const handleZoom = debounce(function(target, value) { const zoomValue = value/100; const template = $(target).closest('.preview-box').find('.sunset-template'); template.css('transform', `scale(${zoomValue})`); }, 16); // Zoom control event listener $('.zoom-range').on('input', function() { const value = $(this).val(); $(this).siblings('.zoom-value').text(value + '%'); handleZoom(this, value); }); // Toggle excerpt position field visibility $('#cwpai_show_excerpt').on('change', function() { $('#excerpt_position').toggle(this.checked); updateStyles(); }); // Update styles function function updateStyles() { const lineColor = $('#cwpai_line_color').val(); const lineWidth = $('#cwpai_line_width').val() + 'px'; const marginTop = $('#cwpai_line_margin_top').val() + 'px'; const marginBottom = $('#cwpai_line_margin_bottom').val() + 'px'; const marginLeft = $('#cwpai_line_margin_left').val() + 'px'; const marginRight = $('#cwpai_line_margin_right').val() + 'px'; const categoryTop = $('#cwpai_category_position_top').val() + 'px'; const websiteTop = $('#cwpai_website_position_top').val() + 'px'; const titleTop = $('#cwpai_title_position_top').val() + 'px'; const excerptTop = $('#cwpai_excerpt_position_top').val() + 'px'; const categoryLeft = $('#cwpai_category_position_left').val() + 'px'; const websiteLeft = $('#cwpai_website_position_left').val() + 'px'; const titleLeft = $('#cwpai_title_position_left').val() + 'px'; const titleSize = $('#cwpai_title_font_size').val() + 'px'; const categorySize = $('#cwpai_category_font_size').val() + 'px'; const websiteSize = $('#cwpai_website_font_size').val() + 'px'; // Update visibility states const showCategory = $('#cwpai_show_category').prop('checked'); const showWebsite = $('#cwpai_show_website').prop('checked'); const showTitle = $('#cwpai_show_title').prop('checked'); const showExcerpt = $('#cwpai_show_excerpt').prop('checked'); $('.vertical-line').css({ 'background-color': lineColor, 'width': lineWidth, 'top': marginTop, 'height': `calc(100% - (${marginTop} + ${marginBottom}))`, 'left': marginLeft, 'margin-right': marginRight }); $('.category-tag').css({ 'display': showCategory ? 'block' : 'none', 'top': categoryTop, 'left': categoryLeft, 'font-size': categorySize }); $('.website-link').css({ 'display': showWebsite ? 'block' : 'none', 'top': websiteTop, 'left': websiteLeft, 'font-size': websiteSize }); $('.title').css({ 'display': showTitle ? 'block' : 'none', 'top': titleTop, 'left': titleLeft, 'font-size': titleSize }); $('.excerpt-preview').css({ 'display': showExcerpt ? 'block' : 'none', 'top': excerptTop, 'left': titleLeft }); } // Copy buttons functionality with improved feedback $('.copy-excerpt, .copy-hashtags').on('click', function() { const button = $(this); const content = button.data('content'); const originalText = button.text(); // Create temporary textarea const textarea = document.createElement('textarea'); textarea.value = content; textarea.style.position = 'absolute'; textarea.style.left = '-9999px'; document.body.appendChild(textarea); try { // Select and copy text textarea.select(); document.execCommand('copy'); // Visual feedback button.text('¡Copiado!'); button.css('background-color', '#4CAF50'); // Reset button after delay setTimeout(() => { button.text(originalText); button.css('background-color', ''); }, 2000); } catch(err) { console.error('Error al copiar:', err); button.text('Error al copiar'); button.css('background-color', '#f44336'); setTimeout(() => { button.text(originalText); button.css('background-color', ''); }, 2000); } finally { document.body.removeChild(textarea); } }); // Canvas optimization function function optimizeCanvas(canvas, format) { const ctx = canvas.getContext('2d'); // Enable image smoothing ctx.imageSmoothingEnabled = true; ctx.imageSmoothingQuality = 'high'; // Set dimensions based on format switch(format) { case 'rectangular': canvas.width = 1200; canvas.height = 630; break; case 'vertical': canvas.width = 500; canvas.height = 890; break; case 'horizontal': canvas.width = 864; canvas.height = 864; break; } return canvas; } // Image download functionality with improved error handling $('.download-jpg').on('click', function() { const button = $(this); const format = button.data('format'); const template = button.closest('.preview-box').find('.sunset-template')[0]; // Disable button and show loading state button.text('Generando...').prop('disabled', true); const options = { scale: 2, // Higher quality useCORS: true, allowTaint: true, backgroundColor: '#000000', logging: false, // Disable logging in production onclone: function(clonedDoc) { const clonedElement = clonedDoc.querySelector('.sunset-template'); if (clonedElement) { // Reset zoom for export clonedElement.style.transform = 'scale(1)'; // Set dimensions based on format switch(format) { case 'rectangular': clonedElement.style.width = '1200px'; clonedElement.style.height = '630px'; break; case 'vertical': clonedElement.style.width = '500px'; clonedElement.style.height = '890px'; break; case 'horizontal': clonedElement.style.width = '864px'; clonedElement.style.height = '864px'; break; } } } }; // Wait for all images to load Promise.all(Array.from(template.getElementsByTagName('img')).map(img => { return new Promise((resolve, reject) => { if (img.complete) { resolve(); } else { img.onload = resolve; img.onerror = reject; } }); })) .then(() => { return html2canvas(template, options); }) .then(canvas => { // Optimize canvas canvas = optimizeCanvas(canvas, format); // Convert to blob return new Promise((resolve, reject) => { canvas.toBlob(resolve, 'image/jpeg', 0.95); }); }) .then(blob => { // Generate filename const postTitle = template.dataset.title; const timestamp = new Date().getTime(); const fileName = `${postTitle}-${format}-${timestamp}.jpg`; // Save file saveAs(blob, fileName); // Reset button button.text('Descargar ' + ( format === 'vertical' ? 'Vertical' : format === 'horizontal' ? 'Horizontal' : 'Rectangular' )).prop('disabled', false); }) .catch(error => { console.error('Error:', error); button.text('Error - Intentar de nuevo').prop('disabled', false) .css('background-color', '#f44336'); setTimeout(() => { button.css('background-color', ''); button.text('Descargar ' + ( format === 'vertical' ? 'Vertical' : format === 'horizontal' ? 'Horizontal' : 'Rectangular' )); }, 3000); }); }); // Line and position controls $('#cwpai_line_width, #cwpai_line_margin_top, #cwpai_line_margin_bottom, #cwpai_line_margin_left, #cwpai_line_margin_right, #cwpai_category_position_top, #cwpai_website_position_top, #cwpai_title_position_top, #cwpai_excerpt_position_top, #cwpai_category_position_left, #cwpai_website_position_left, #cwpai_title_position_left, #cwpai_title_font_size, #cwpai_category_font_size, #cwpai_website_font_size') .on('change input', debounce(updateStyles, 100)); // Visibility controls $('#cwpai_show_category, #cwpai_show_website, #cwpai_show_title, #cwpai_show_excerpt') .on('change', updateStyles); // Global error handler window.onerror = function(msg, url, lineNo, columnNo, error) { console.error('Error: ', { message: msg, url: url, lineNumber: lineNo, columnNumber: columnNo, error: error }); return false; }; // Initial styles update updateStyles(); });
Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/diariocosta.com/httpdocs/wp-content/plugins/social-media-stories/social-media-stories.php:1) in /var/www/vhosts/diariocosta.com/httpdocs/wp-includes/rest-api/class-wp-rest-server.php on line 1893
{"id":29246,"date":"2023-09-26T18:53:00","date_gmt":"2023-09-26T16:53:00","guid":{"rendered":"https:\/\/diariocosta.com\/?p=29246"},"modified":"2023-09-30T18:54:36","modified_gmt":"2023-09-30T16:54:36","slug":"el-ayuntamiento-de-estepona-contara-con-un-canal-interno-de-denuncias-para-que-los-empleados-informen-de-infracciones","status":"publish","type":"post","link":"https:\/\/diariocosta.com\/el-ayuntamiento-de-estepona-contara-con-un-canal-interno-de-denuncias-para-que-los-empleados-informen-de-infracciones\/","title":{"rendered":"El Ayuntamiento de Estepona contar\u00e1 con un Canal Interno de Denuncias para que los empleados informen de infracciones"},"content":{"rendered":"

El Ayuntamiento contar\u00e1 con un Canal de Denuncias que permitir\u00e1 a los empleados comunicar infracciones o pr\u00e1cticas irregulares que se puedan producir en el \u00e1mbito municipal. Con esta v\u00eda de comunicaci\u00f3n interna se dar\u00e1 cumplimiento a la Ley 2\/2023, de 20 de febrero, reguladora de la la protecci\u00f3n de las personas que informen sobre infracciones normativas y de lucha contra la corrupci\u00f3n.
\nEl teniente alcalde del \u00e1rea Econ\u00f3mica e Innovaci\u00f3n, Jos\u00e9 Mar\u00eda Ayala, ha explicado que en el Pleno del pasado viernes se aprob\u00f3 inicialmente el Reglamento del Canal de Denuncias del Ayuntamiento de Estepona, Organismos y Entidades dependientes del mismo, y que ahora se someter\u00e1 a informaci\u00f3n p\u00fablica durante un plazo de 30 d\u00edas para la presentaci\u00f3n de reclamaciones y sugerencias. Una vez que \u00e9stas sean resueltas, el documento ser\u00e1 llevado a Pleno para su aprobaci\u00f3n definitiva y puesta en funcionamiento.
\nAyala ha indicado que el Canal de Denuncias podr\u00e1 ser utilizado por empleados municipales, empresas y ciudadanos que mantengan relaciones profesionales con el Consistorio, entidades y organismos dependientes que hayan obtenido informaci\u00f3n sobre infracciones en el contexto laboral o profesional.
\nLas comunicaciones podr\u00e1n realizarse a trav\u00e9s del Canal de Denuncias que el Ayuntamiento pondr\u00e1 a disposici\u00f3n en su Sede Electr\u00f3nica. El edil responsable del \u00e1rea Econ\u00f3mica e Innovaci\u00f3n ha subrayado que el Canal de Denuncias admitir\u00e1 tanto denuncias an\u00f3nimas como denuncias que no lo sean, y ha a\u00f1adido que la identidad del denunciante que opte por identificarse ser\u00e1 confidencial en todo momento.
\nAsimismo, el Canal de Denuncias permitir\u00e1 a la persona denunciante consultar el estado de tramitaci\u00f3n de una denuncia, incluso cuando \u00e9sta se haya presentado de forma an\u00f3nima, ya que a todos los escritos enviados se les facilitar\u00e1 un c\u00f3digo num\u00e9rico \u00fanico para el acceso y seguimiento posterior.<\/p>\n

Por otra parte, Jos\u00e9 Mar\u00eda Ayala ha indicado que un funcionario municipal perteneciente al grupo A ser\u00e1 el responsable de este nuevo sistema interno de informaci\u00f3n, que desarrollar\u00e1 sus funciones de forma independiente y aut\u00f3noma respecto al resto de \u00f3rganos del Ayuntamiento, por lo que no podr\u00e1 recibir instrucciones de ning\u00fan tipo en su ejercicio y dispondr\u00e1 de todos los medios personales y materiales necesarios para llevarlas a cabo.
\nUna vez investigados los hechos denunciados en un plazo m\u00e1ximo de tres meses, el \u00f3rgano responsable del Canal de Denuncias podr\u00e1 adoptar las medidas que considere oportunas como el archivo del expediente, en caso de que no existan evidencias de incumplimientos o irregularidades, o la remisi\u00f3n de las actuaciones al Ministerio Fiscal en el caso de que los hechos investigados pudieran ser constitutivos de una infracci\u00f3n penal. Si los hechos investigados afectasen a los intereses financieros de la Uni\u00f3n Europea, se remitir\u00e1 la documentaci\u00f3n a la Fiscal\u00eda Europea.
\nPor otro lado, en el caso de que los hechos denunciados pudieran ser constitutivos de una infracci\u00f3n grave o muy grave cometida por empleado p\u00fablico, se ordenar\u00e1 la apertura del correspondiente expediente sancionador.<\/p>\n","protected":false},"excerpt":{"rendered":"

El Ayuntamiento contar\u00e1 con un Canal de Denuncias que permitir\u00e1 a los empleados comunicar infracciones o pr\u00e1cticas irregulares que se puedan producir en el \u00e1mbito municipal. Con esta v\u00eda de comunicaci\u00f3n interna se dar\u00e1 cumplimiento a la Ley 2\/2023, de 20 de febrero, reguladora de la la protecci\u00f3n de las personas que informen sobre infracciones […]<\/p>\n","protected":false},"author":3,"featured_media":29248,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34520],"tags":[],"class_list":{"0":"post-29246","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-estepona-actualidad"},"_links":{"self":[{"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/posts\/29246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/comments?post=29246"}],"version-history":[{"count":0,"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/posts\/29246\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/media\/29248"}],"wp:attachment":[{"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/media?parent=29246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/categories?post=29246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/diariocosta.com\/wp-json\/wp\/v2\/tags?post=29246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}