<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Componente multiple.ftl para share no funciona para IE in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82640#M55396</link>
    <description>&lt;P&gt;Gracias. Ya está solucionado el error, eran funciones de string no soportadas por IE.&lt;/P&gt;&lt;P&gt;Se han implementado dichas funciones de forma específica en el ftl y ya funciona correctamente en todos los navegadores.&lt;/P&gt;</description>
    <pubDate>Thu, 16 Apr 2020 12:48:13 GMT</pubDate>
    <dc:creator>jdominguez</dc:creator>
    <dc:date>2020-04-16T12:48:13Z</dc:date>
    <item>
      <title>Componente multiple.ftl para share no funciona para IE</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82636#M55392</link>
      <description>&lt;P&gt;Buenas, tenemos incluído en nuestro Alfresco Comunity 6.1.2-ga un componente para share de selección múltiple de:&amp;nbsp;&lt;A href="https://github.com/donaanacounty/multivalueFormControl" target="_blank" rel="noopener nofollow noreferrer"&gt;https://github.com/donaanacounty/multivalueFormControl&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Dicho componente funciona correctamente para navegadores como Chrome o Firefox, pero en IE falla en los botones de "Filtrar" y "Limpiar".&lt;/P&gt;&lt;P&gt;El código ftl del componente lo adjunto.&lt;/P&gt;&lt;P&gt;¿Hay solución al error?&lt;/P&gt;&lt;P&gt;¿Hay algún manual sobre cómo podría depurarlo, variables disponibles de los componentes a integrar en share o formas de implementarlo?&lt;/P&gt;&lt;P&gt;Gracias&lt;/P&gt;&lt;P&gt;Código:&lt;/P&gt;&lt;PRE&gt;&amp;lt;#include "/org/alfresco/components/form/controls/common/utils.inc.ftl" /&amp;gt;


&amp;lt;#assign optionSeparator=","&amp;gt;
&amp;lt;#assign fieldValue=field.value&amp;gt;

&amp;lt;#if fieldValue?string == "" &amp;amp;&amp;amp; field.control.params.defaultValueContextProperty??&amp;gt;
   &amp;lt;#if context.properties[field.control.params.defaultValueContextProperty]??&amp;gt;
      &amp;lt;#assign fieldValue = context.properties[field.control.params.defaultValueContextProperty]&amp;gt;
   &amp;lt;#elseif args[field.control.params.defaultValueContextProperty]??&amp;gt;
      &amp;lt;#assign fieldValue = args[field.control.params.defaultValueContextProperty]&amp;gt;
   &amp;lt;/#if&amp;gt;
&amp;lt;/#if&amp;gt;

&amp;lt;#if fieldValue?string != ""&amp;gt;
   &amp;lt;#assign values=fieldValue?split(",")&amp;gt;
&amp;lt;#else&amp;gt;
   &amp;lt;#assign values=[]&amp;gt;
&amp;lt;/#if&amp;gt;

&amp;lt;div class="form-field"&amp;gt;
   &amp;lt;#if form.mode == "view"&amp;gt;
      &amp;lt;div class="viewmode-field"&amp;gt;
         &amp;lt;#if field.mandatory &amp;amp;&amp;amp; !(fieldValue?is_number) &amp;amp;&amp;amp; fieldValue?string == ""&amp;gt;
            &amp;lt;span class="incomplete-warning"&amp;gt;&amp;lt;img src="${url.context}/res/components/form/images/warning-16.png" title="${msg("form.field.incomplete")}" /&amp;gt;&amp;lt;span&amp;gt;
         &amp;lt;/#if&amp;gt;
         &amp;lt;span class="viewmode-label"&amp;gt;${field.label?html}:&amp;lt;/span&amp;gt;
         &amp;lt;#if fieldValue?string == ""&amp;gt;
            &amp;lt;#assign valueToShow=msg("form.control.novalue")&amp;gt;
         &amp;lt;#else&amp;gt;
            &amp;lt;#if field.control.params.options?? &amp;amp;&amp;amp; field.control.params.options != "" &amp;amp;&amp;amp;
                 field.control.params.options?index_of(labelSeparator) != -1&amp;gt;
                 &amp;lt;#assign valueToShow=""&amp;gt;
                 &amp;lt;#assign firstLabel=true&amp;gt;
                 &amp;lt;#list field.control.params.options?split(optionSeparator) as nameValue&amp;gt;
                    &amp;lt;#assign choice=nameValue?split(labelSeparator)&amp;gt;
                    &amp;lt;#if isSelected(choice[0])&amp;gt;
                       &amp;lt;#if !firstLabel&amp;gt;
                          &amp;lt;#assign valueToShow=valueToShow+","&amp;gt;
                       &amp;lt;#else&amp;gt;
                          &amp;lt;#assign firstLabel=false&amp;gt;
                       &amp;lt;/#if&amp;gt;
                       &amp;lt;#assign valueToShow=valueToShow+choice[1]&amp;gt;
                    &amp;lt;/#if&amp;gt;
                 &amp;lt;/#list&amp;gt;
            &amp;lt;#else&amp;gt;
               &amp;lt;#assign valueToShow=fieldValue&amp;gt;
            &amp;lt;/#if&amp;gt;
         &amp;lt;/#if&amp;gt;
         &amp;lt;span class="viewmode-value"&amp;gt;${valueToShow?html}&amp;lt;/span&amp;gt;
      &amp;lt;/div&amp;gt;
   &amp;lt;#else&amp;gt;
      &amp;lt;label for="${fieldHtmlId}-entry"&amp;gt;${field.label?html}:&amp;lt;#if field.mandatory&amp;gt;&amp;lt;span class="mandatory-indicator"&amp;gt;${msg("form.required.fields.marker")}&amp;lt;/span&amp;gt;&amp;lt;/#if&amp;gt;&amp;lt;/label&amp;gt;
      &amp;lt;input class="hidden-input-${fieldHtmlId}" id="${fieldHtmlId}" type="hidden" name="${field.name}" value="${fieldValue?string}" /&amp;gt;
		&amp;lt;div class="field-data-${fieldHtmlId}" id="field-data-${fieldHtmlId}"&amp;gt;&amp;lt;/div&amp;gt;

	&amp;lt;script language="Javascript" type="text/javascript"&amp;gt;//&amp;lt;![CDATA[

	    (function() {


		var hiddenInputId = "${fieldHtmlId}";
		var fieldDataDivId = "field-data-${fieldHtmlId}";
		var firstRun = true;


		function WindowLoad() {
			refreshVisible(hiddenInputId, fieldDataDivId);
		}

		function relocatePlus() {

		    var oldPlus = document.querySelector('#plus-${fieldHtmlId}');
		    if (oldPlus) {
                oldPlus.parentNode.removeChild(oldPlus);
            }

            var childDivs = document.querySelector('#field-data-${fieldHtmlId}').getElementsByTagName('div');
            var lastDiv = childDivs[childDivs.length-1];

            var newPlus = document.createElement('img');
            newPlus.setAttribute('class', 'icon plus-icon');
            newPlus.setAttribute('id', 'plus-${fieldHtmlId}');
            newPlus.setAttribute('src', '${url.context}/res/components/form/images/plus-icon.png');
            newPlus.setAttribute('alt', 'Add another');
            newPlus.setAttribute('style', 'vertical-align: middle;margin-left:5px;');

            lastDiv.appendChild(newPlus);

            if (newPlus.addEventListener) {
                newPlus.addEventListener("click", function(){addField('field-data-${fieldHtmlId}', '${fieldHtmlId}');}, false);
            } else {
                newPlus.attachEvent('onclick', function(){addField('field-data-${fieldHtmlId}', '${fieldHtmlId}');} );
            }

		};

		function getCount(divId) {
			var el = document.body.querySelector('#' + divId);
			var matches = el.querySelectorAll('div');
			return matches.length;
		};

		function addField(divName, hiddenInputId) {
			var count = getCount(divName);
			addInput(divName, count, hiddenInputId);

		};


		function deleteField(hiddenInputId, divName, fieldDataDivId) {
			var count = getCount(fieldDataDivId);
			var el = document.getElementById(divName);

			el.parentNode.removeChild(el);

			// Get removed index
			var index = divName.split('___');
			index = index[1];

			refreshHidden(index, count, hiddenInputId);
			refreshVisible(hiddenInputId, fieldDataDivId);

			relocatePlus();

		};

		function addInput(divName, index, hiddenInputId) {
			var newdiv = document.createElement('div');
			newdiv.setAttribute('id', 'div' + hiddenInputId + '___' + index);
			newdiv.innerHTML = "&amp;lt;input type='text' "
					+ "id='txt"
					+ hiddenInputId
					+ index
					+ "'"
					&amp;lt;#if field.control.params.styleClass??&amp;gt;+ " class='${field.control.params.styleClass}'"&amp;lt;/#if&amp;gt;
					&amp;lt;#if field.control.params.style??&amp;gt;+ " style='${field.control.params.style}'"&amp;lt;#else&amp;gt;+ " style='margin-bottom: 4px;'"&amp;lt;/#if&amp;gt;
					&amp;lt;#if field.control.params.maxLength??&amp;gt;+ " maxlength='${field.control.params.maxLength}'"&amp;lt;#else&amp;gt;+ " maxlength='1024'"&amp;lt;/#if&amp;gt;
                    &amp;lt;#if field.control.params.size??&amp;gt;+ " size='${field.control.params.size}'"&amp;lt;/#if&amp;gt;
					+ " /&amp;gt;&amp;lt;img class='icon' style='vertical-align: middle;margin-left:5px;' id='minus-"+index+"-${fieldHtmlId}' src='${url.context}/res/components/form/images/minus-icon.png' alt='Delete this input' "
					+ " /&amp;gt;";
			document.getElementById(divName).appendChild(newdiv);

            // find text field, attach oninput event listener
            var input = document.querySelector('#txt' + hiddenInputId + index);

		    if (input.addEventListener) {
                input.addEventListener("input", function(){refresh(hiddenInputId, divName);}, false);
            } else {
                input.attachEvent('oninput', function(){refresh(hiddenInputId, divName);} );
            };

            if (input.addEventListener) {
                input.addEventListener("keydown", function(e){if (e.keyCode == 188){e.preventDefault();}}, false);
            } else {
                input.attachEvent('onkeydown', function(e){if (e.keyCode == 188){e.preventDefault();}} );
            };



            // find minus button, attach onclick event listener
			var minus = document.querySelector('#minus-'+index+'-${fieldHtmlId}');

			if (minus.addEventListener) {
                minus.addEventListener("click", function(){deleteField(hiddenInputId, "div" + hiddenInputId + '___' + index, divName);}, false);
            } else {
                minus.attachEvent('onclick', function(){deleteField(hiddenInputId, "div" + hiddenInputId + '___' + index, divName);} );
            };

            relocatePlus();

			if (!firstRun) {
				input.focus();
			}
		};


		function refresh(hiddenInputId, fieldDataDivId) {
			var count = getCount(fieldDataDivId);
			refreshHidden(-1, count, hiddenInputId);
		};

		function refreshHidden(excludedIndex, count, hiddenInputId) {
			var cat = "";

			var nonEmptyCounter = 0;
			for (var i = 0; i &amp;lt; count; i++) {
				if (i != excludedIndex) {
					var fieldval = document.getElementById("txt"
							+ hiddenInputId + i).value;
					if (fieldval != "") {
						if (nonEmptyCounter &amp;gt; 0) {
							cat = cat + ",";
						}
						cat = cat + fieldval;
						nonEmptyCounter++;
					}
				}
			}

			document.getElementById(hiddenInputId).value = cat;
		};

		function refreshVisible(hiddenInputId, fieldDataDivId) {
			var cat = document.getElementById(hiddenInputId).value;

			if (cat != "") {
				blocks = cat.split(",");

				var el = document.body.querySelector('#' + fieldDataDivId);
				var matches = el.querySelectorAll('div');
				for (var j = 0; j &amp;lt; matches.length; j++) {
					matches[j].parentNode.removeChild(matches[j]);
				}

				for (var i = 0; i &amp;lt; blocks.length; i++) {
					addInput(fieldDataDivId, i, hiddenInputId);
					document.getElementById("txt" + hiddenInputId + i).value = blocks[i];
				}
			} else {
				addInput(fieldDataDivId, 0, hiddenInputId);
			}

			firstRun = false;
		};

        var reps = 0;

        var checkExist = setInterval(function() {
            if (document.getElementById(hiddenInputId)) {
                clearInterval(checkExist);
                WindowLoad();
            }
            if (reps&amp;gt;=40){
                // give up after a second
                clearInterval(checkExist);
            }
            reps++;
        }, 25);

	} )();//]]&amp;gt;&amp;lt;/script&amp;gt;


         &amp;lt;@formLib.renderFieldHelp field=field /&amp;gt;
         &amp;lt;#if field.control.params.mode?? &amp;amp;&amp;amp; isValidMode(field.control.params.mode?upper_case)&amp;gt;
            &amp;lt;input id="${fieldHtmlId}-mode" type="hidden" name="${field.name}-mode" value="${field.control.params.mode?upper_case}" /&amp;gt;
         &amp;lt;/#if&amp;gt;
   &amp;lt;/#if&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;#function isSelected optionValue&amp;gt;
   &amp;lt;#list values as value&amp;gt;
      &amp;lt;#if optionValue == value?string || (value?is_number &amp;amp;&amp;amp; value?c == optionValue)&amp;gt;
         &amp;lt;#return true&amp;gt;
      &amp;lt;/#if&amp;gt;
   &amp;lt;/#list&amp;gt;
   &amp;lt;#return false&amp;gt;
&amp;lt;/#function&amp;gt;

&amp;lt;#function isValidMode modeValue&amp;gt;
   &amp;lt;#return modeValue == "OR" || modeValue == "AND"&amp;gt;
&amp;lt;/#function&amp;gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 15 Apr 2020 10:51:06 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82636#M55392</guid>
      <dc:creator>jdominguez</dc:creator>
      <dc:date>2020-04-15T10:51:06Z</dc:date>
    </item>
    <item>
      <title>Re: Componente multiple.ftl para share no funciona para IE</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82637#M55393</link>
      <description>&lt;P&gt;Recuerdo que adaptamos este componente hace un tiempo para desarrollar este control:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://github.com/keensoft/alfresco-datalist-constraints/blob/master/datalist-model-share/src/main/amp/config/alfresco/web-extension/site-webscripts/org/alfresco/components/form/controls/datalistSelectone-multiple.ftl" target="_blank" rel="nofollow noopener noreferrer"&gt;https://github.com/keensoft/alfresco-datalist-constraints/blob/master/datalist-model-share/src/main/amp/config/alfresco/web-extension/site-webscripts/org/alfresco/components/form/controls/datalistSelectone-multiple.ftl&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;No estoy seguro de que nuestro código funcione en IE.&lt;/P&gt;
&lt;P&gt;Creo que deberías usar la Consola de Desarrollador para ver qué está fallando, seguramente sea alguna línea de JavaScript no compatible con se navegador.&lt;/P&gt;</description>
      <pubDate>Wed, 15 Apr 2020 11:41:01 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82637#M55393</guid>
      <dc:creator>angelborroy</dc:creator>
      <dc:date>2020-04-15T11:41:01Z</dc:date>
    </item>
    <item>
      <title>Re: Componente multiple.ftl para share no funciona para IE</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82638#M55394</link>
      <description>&lt;P&gt;Buenas, al sobreescribir el código del fichero multiple.ftl por el indicado en la url remitida muestra el siguiente error en todos los navegadores:&lt;/P&gt;&lt;P&gt;Caused by: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:&lt;BR /&gt;share | ==&amp;gt; field.control.params.itemType [in template "xxx/components/form/controls/multiple.ftl" at line 240, column 46]&lt;/P&gt;&lt;P&gt;Adjunto imagen del codigo con las líneas:&lt;SPAN class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="multiple.png" style="width: 811px;"&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="image"&gt;&lt;img src="https://connect.hyland.com/t5/image/serverpage/image-id/432i31C1582E07084FC3/image-size/large?v=v2&amp;amp;px=999" role="button" title="image" alt="image" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;¿Porque podría estar llegando null -&amp;gt; field.control.params.itemType?&lt;/P&gt;</description>
      <pubDate>Thu, 16 Apr 2020 10:33:08 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82638#M55394</guid>
      <dc:creator>jdominguez</dc:creator>
      <dc:date>2020-04-16T10:33:08Z</dc:date>
    </item>
    <item>
      <title>Re: Componente multiple.ftl para share no funciona para IE</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82639#M55395</link>
      <description>&lt;P&gt;Os envié un ejemplo para que pudieses ver si había cambios relevantes en el código JavaScript respecto al que estáis usando. Reemplazarlo tal cual no resolverá el problema.&lt;/P&gt;
&lt;P&gt;Para solucionar el problema que tenéis necesitáis ciertos conocimientos de JavaScript y FTL. Si no los tenéis, quizá deberías valorar la contratación de servicios profesionales externos.&lt;/P&gt;</description>
      <pubDate>Thu, 16 Apr 2020 10:40:41 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82639#M55395</guid>
      <dc:creator>angelborroy</dc:creator>
      <dc:date>2020-04-16T10:40:41Z</dc:date>
    </item>
    <item>
      <title>Re: Componente multiple.ftl para share no funciona para IE</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82640#M55396</link>
      <description>&lt;P&gt;Gracias. Ya está solucionado el error, eran funciones de string no soportadas por IE.&lt;/P&gt;&lt;P&gt;Se han implementado dichas funciones de forma específica en el ftl y ya funciona correctamente en todos los navegadores.&lt;/P&gt;</description>
      <pubDate>Thu, 16 Apr 2020 12:48:13 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/componente-multiple-ftl-para-share-no-funciona-para-ie/m-p/82640#M55396</guid>
      <dc:creator>jdominguez</dc:creator>
      <dc:date>2020-04-16T12:48:13Z</dc:date>
    </item>
  </channel>
</rss>

