Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice

Índice
outlinetrue
stylenone
exclude.*ndice

 

Objetivo

Este guia é destinado aos desenvolvedores internos e externos do fluig. O objetivo é identificar e mapear todas as diferenças da Timeline personalizada entre as versões 1.4.x e 1.5.0.

Dica
titleDica

Sugerimos que ao seguir este guia seja utilizado um programa de comparação (diff), que permita visualizadas as diferenças entre as versões 1.4.x e 1.5.0.

 

application.info

Na versão 1.5.0 foi melhorado o componente de compartilhamento, sendo necessário adicionar estas dependências para widget.

Atualizar arquivo As linhas abaixo, da versão 1.5.0, devem ser ADICIONADAS para a versão 1.4.xAs linhas a serem adicionadas são:

Bloco de código
languagexml
application.resource.component.X=social/socialshare
application.resource.component.X=social/socialsharelist
application.resource.component.X=social/socialformanswer

 

...

Aviso
titleAtenção!

Não esquecer de substituir o 'X' pela sequência

...

dos componentes já configurados.

 

edit.ftl

...

Arquivo na 1.4.x

...

Arquivo na 1.5.0

 

Atualizar arquivo 1.4.x

Na versão 1.5.0 foi adicionado mais um tipo de ordenação (mais likes), causando uma pequena alteração na estrutura do HTML:.

Copiar o bloco abaixo que se encontra a partir da linha 34 da versão 1.5.0 e substituir SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<div class="row">
	<div class="col-md-4">
		<label for="quantityPublication">${i18n.getTranslation('options.ordenation')}</label>
		<select class="form-control" name="quantityPublication" data-order-type>
			<option value="CREATION_DATE">${i18n.getTranslation('last.publications')}</option>
			<option value="LAST_UPDATE">${i18n.getTranslation('recently.publication')}</option>
			<option value="MORE_LIKE">${i18n.getTranslation('more.like')}</option>
		</select>
	</div>
</div>

 

socialtimeline.properties

Arquivo na 1.4.x

 

Arquivo na 1.5.0

Na versão 1.5.0 foram adicionadas algumas chaves de tradução e devem ser copiadas para ADICIONADAS para versão 1.4.x.

Não esquecer de replicar as alterações para os arquivos: socialtimeline_en_US.properties, socialtimeline_es.properties, socialtimeline_pt_BR.properties.

Veja abaixo:

Bloco de código
languagexml
this.form=um formulário
anwser=responder
message.error.video.not.supported=Ops, esse vídeo não é suportado pelo seu navegador. Faça o download do vídeo ou utilize outro navegador.
post.denounced= O conteúdo foi denunciado por conter palavras restritas e não está mais disponível
options.ordenation=Ordenação padrão
more.like=Mais curtidos
message.video.not.supported=Esse vídeo não é suportado pelo seu navegador.
message.video.not.supported.download=Faça o download do vídeo
message.video.not.supported.sulfix=ou utilize outro navegador.

view.ftl

Arquivo na 1.4.x

Bloco de código
languagexml
<li data-post-id="{{postId}}" class="timeline-list-posts-item">

 

Arquivo na 1.5.0

Bloco de código
languagexml
<li data-post-id="{{postId}}" data-post-community-hidden="{{social.hidden}}" class="timeline-list-posts-item">

 

...

 

view.ftl

Na linha 40 da versão 1.5.0, copiar o atributo código abaixo e colar na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<li data-post-id="{{postId}}" data-post-community-hidden="{{social.hidden}}" class="timeline-list-posts-item">

Na linha 124 da versão 1.5.0, copiar o bloco abaixo e colar na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
{{#shared}}
	<a href="#" data-clipboard-text="link to copy" data-timeline-action="share" class="fluigicon fluigicon-share-on fs-no-text-underline"></a>
{{/shared}}
{{^shared}}
	<a href="#" data-clipboard-text="link to copy" data-timeline-action="share" class="fluigicon fluigicon-share fs-no-text-underline"></a>
{{/shared}}
<a href="#" class="counter counter-warning pos-right-bottom {{existsNumberShares}}" title="{{i18n.manywatch}}" data-request-running="false" data-timeline-action="listShares">{{numberShares}}</a>

Copiar as linhas 231 e 239 Na linha 231 da versão 1.5.0 e colar na , copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
{{^removeText}}
    {{#originalText}}
    	<div class="panel panel-default fs-no-margin timeline-recommendation-content-text">
        	<div class="panel-body">
        		<p class="fs-no-margin">{{{originalText}}}</p>
        	</div>
        </div>
    {{/originalText}}
{{/removeText}}

Na linha 257 da versão 1.5.0, copiar o atributo código abaixo e colar na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<div class="embed-responsive embed-responsive-16by9" data-container-media-video data-video-rest-url="/socialmedia/api/rest/media/mediafile/{{linkedObject.social.alias}}/VIDEO/{{documentId}}">

Na linha 268 da versão 1.5.0, copiar o elemento código abaixo e colar na ADICIONAR na versão 1.4.x:

Bloco de código
languagexml
<div data-url-media="/webdesk/streamcontrol/?WDCompanyId={{tenantId}}&WDNrDocto={{documentId}}&WDNrVersao={{linkedObject.objectId}}&thumbnail={{thumbEnum}}" style="display:none"></div>

Na linha 279 da versão 1.5.0, copiar o atributo código abaixo e colar na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<div class="embed-responsive embed-responsive-16by9" data-container-media-video data-video-rest-url="/socialmedia/api/rest/media/mediafile/{{linkedObject.social.alias}}/VIDEO/{{documentId}}">

Na linha 293 da versão 1.5.0, copiar o elemento código abaixo e colar na ADICIONAR na versão 1.4.x:

Bloco de código
languagexml
<div data-url-media="/webdesk/streamcontrol/?WDCompanyId={{tenantId}}&WDNrDocto={{documentId}}&WDNrVersao={{linkedObject.objectId}}&thumbnail={{thumbEnum}}" style="display:none"></div>

Na linha 308 da versão 1.5.0, copiar o bloco abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<p {{#isFolder}}class="fs-no-margin"{{/isFolder}}>{{linkedObject.description}}</p>
{{^isFolder}}
	<p class="fs-no-margin">{{i18n.version}}/{{i18n.revision}}: {{documentVersion}}</p>
{{/isFolder}}

Na linha 329 da versão 1.5.0, copiar o bloco abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<p {{#isFolder}}class="fs-no-margin"{{/isFolder}}>{{linkedObject.description}}</p>
{{^isFolder}}
	<p class="fs-no-margin">{{i18n.version}}/{{i18n.revision}}: {{documentVersion}}</p>
{{/isFolder}}

Na linha 342 da versão 1.5.0, copiar o bloco abaixo e substituir na ADICIONAR na versão 1.4.x:

Bloco de código
languagexml
<script type="text/template" class="social-timeline-content-form-template">
	<div class="well timeline-recommendation-content">
		<div class="media gallery">
			    <div class="pull-left">
			    	<img src="/webdesk/assets/icons/formulario.png">
			    </div>
		    <div class="media-body">
		        <div class="panel panel-default fs-no-margin">
				    <div class="panel-body">
				    	<p class="fs-no-margin">{{linkedObject.description}}</p>
				    </div>
				</div>
				<a href="{{tenantURI}}{{linkedObject.url}}" data-timeline-form-id="{{documentId}}" data-timeline-action="openAnswerForm">{{i18n.anwser}}</a>
		    </div>
		</div>
	</div>
</script>
<script type="text/template" class="social-timeline-content-gallery-template">
	<div class="well timeline-recommendation-content">
		<div class="media gallery">
			    <div class="pull-left">
			    	<img src="/webdesk/assets/icons/folder_24.png">
			    </div>
		    <div class="media-body">
		        <div class="panel panel-default fs-no-margin">
				    <div class="panel-body">
				    	<p class="fs-no-margin">{{linkedObject.description}}</p>
				    </div>
				</div>
				<a href="{{tenantURI}}/{{urlOrigin}}">{{i18n.details}}</a>
		    </div>
		</div>
	</div>
</script>

Na linha 481 da versão 1.5.0, copiar o bloco abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<#--
	Se o navegador possuir o flash player instalado é utilizada a técnica de "object"
	para exibir os vídeos, se não, é utilizado "iframe" por motivos de bugs no IE9.
	
	O IE9 não sabe se o flash está habilitado ou não, então ele exibe um thumb "quebrado".
	
	Não foi utilizada essa técnica em todos os navegadores pois no chrome acontece erros de requests.
	
	http://stackoverflow.com/questions/24490323/google-chrome-cast-sender-error-if-chrome-cast-extension-is-not-installed-or-usi
-->
{{#hasFlash}}
    <object class="embed-responsive-item">
        <param name="movie" value="{{formattedLink}}?hl={{locale}}&amp;version=3&amp;rel=0" ></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <param name="wmode" value="transparent"></param>
        <embed src="{{formattedLink}}?hl={{locale}}&amp;version=3&amp;rel=0" type="application/x-shockwave-flash"
            allowfullscreen="true"
            allowscriptaccess="always"
            wmode="transparent">
        </embed>
    </object>
{{/hasFlash}}
{{^hasFlash}}
	<iframe id="ytplayer-{{youtubeVideoId}}-{{postId}}" type="text/html"
	src="https://www.youtube.com/embed/{{youtubeVideoId}}"
	frameborder="0" allowfullscreen="allowfullscreen"/>
{{/hasFlash}}

Na linha 531 da versão 1.5.0, copiar o bloco abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
{{#hasFlash}}
    <object class="embed-responsive-item">
        <param name="movie" value="{{formattedLink}}?hl={{locale}}&amp;version=3&amp;rel=0" ></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <param name="wmode" value="transparent"></param>
        <embed src="{{formattedLink}}?hl={{locale}}&amp;version=3&amp;rel=0" type="application/x-shockwave-flash"
            allowfullscreen="true"
            allowscriptaccess="always"
            wmode="transparent">
        </embed>
    </object>
{{/hasFlash}}
{{^hasFlash}}
	<iframe id="ytplayer-{{youtubeVideoId}}-{{postId}}" type="text/html"
	src="https://www.youtube.com/embed/{{youtubeVideoId}}"
	frameborder="0" allowfullscreen="allowfullscreen"/>
{{/hasFlash}}

Na linha 635 da versão 1.5.0, copiar o bloco código abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagexml
<a href="{{{tenantURI}}}/social/{{alias}}" data-user-popover="{{alias}}">{{name}}</a>

Na linha 650 da versão 1.5.0, copiar o bloco abaixo e adicionar na ADICIONAR na versão 1.4.x:

Bloco de código
languagexml
<script type="text/template" class="social-timeline-video-not-supported-template">		
	<div class="timeline-video-not-supported">
		<div class="clearfix fs-margin-auto timeline-container-icon-download-video">
			<img class="fs-float-left timeline-icon-download-video" src="${basePath}/resources/images/image-video-error.svg">
			<h1 class="fs-txt-left fs-no-margin-top">Ops!</h1>
			<p class="fs-txt-left">{{i18n.videoNotSupported}}</p>
		</div>
		<p class="timeline-description-download-video text-center">
			<a href="#" class="fs-text-underline" data-timeline-action="downloadVideo">{{i18n.videoNotSupportedDownload}}</a> {{i18n.videoNotSupportedSulfix}}
		</p>
	</div>
</script>

 

image-video-error.svg

Atualizar arquivo 1.4.x.

Copiar a imagem image-video-error.svg da versão 1.5.0 para a versão 1.4.x no seguinte caminho:

timeline/src/main/webapp/resources/images/

 

socialtimeline.js

Na linha 9 da versão 1.5.0, copiar o conteúdo abaixo e ADICIONAR na versão 1.4.x:

...

Bloco de código
languagejs
'fluig-share': ['click_share']

...

Na linha 123 da versão 1.5.0, copiar o bloco abaixo e ADICIONAR na versão 1.4.x:

Bloco de código
languagejs
// Validação para verificar se o flash está instalado para a renderização de vídeos.
try {
	this.hasFlash = (typeof navigator.plugins == 'undefined' || navigator.plugins.length == 0) ? !!(new ActiveXObject('ShockwaveFlash.ShockwaveFlash')) : navigator.plugins['Shockwave Flash'];
} catch (ex) {
	this.hasFlash = false;
}

...

Copiar a linha 145 da versão 1.5.0 e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
 if(this.continueScroll && !this.isEditMode && this.style !== 'singlepost') {

...

Na linha 219 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
findPost: function(postId, isNew) {
	var that = this,
		dataPost = []
	;
	
	this.serviceFindPost(postId, function(err, data) {
		if(err) {
			that.showListPostsMessage(err);
			return false;
		}
		// foi adicionado um tratamento para quando o post estiver denunciado
		if(data && data.content && data.content.numberDenouncements == 0) {
			dataPost.push(data.content);
			that.showPosts(dataPost, isNew);
		}
		else {
			that.showListPostsMessage();
		}
					
		if(data && data.content && data.content.numberDenouncements != 0){
			that.showFeedbackMessage(that.i18n.messages['post.denounced'], 'warning');
		}
	});
},

 

Na linha 244 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
showPosts: function(posts, isNew) {
	var data = {},
		html = '',
		len = posts.length,
		i = 0,
		comLen,
		j
	;
	
	// Validar se o post a ser exibido já está na listagem.
	if(isNew && $('[data-post-id="' + posts[0].postId + '"]', this.DOM).length) {
		return false;
	}
	
	// Responsável por manipular os dados de posts retornados no objeto "posts" e enviar
	// os mesmos prontos para o mustache montar o post.
	for(i; i < len; i++) {
		// Garantir que a timeline apresente algum post sem quebrar o script.
		try {
			posts[i].tenantURI = this.tenantURI;
			posts[i].locale = this.locale;
			posts[i].text = this.generateContentTextFormatted(posts[i].text, posts[i].mentions);
			posts[i].variableContent = this.generateTemplateVariableContent(posts[i]);
			posts[i].postHeader = this.generatePostHeader(posts[i]);
			posts[i].i18n = this.i18n['labels'];
			posts[i].allowsRemoveActions = this.loggedUserAlias === posts[i].user.alias; 
			posts[i].existsNumberLikes = this.generateListClass(posts[i].numberLikes);
			posts[i].existsNumberComments = this.generateListClass(posts[i].numberComments);
			posts[i].existsNumberWatchers = this.generateListClass(posts[i].numberWatchers);
			posts[i].existsNumberShares = this.generateListClass(posts[i].numberShares);
			posts[i].existsMoreComments = posts[i].numberComments > 2;
			posts[i].shared = 'fs-display-inline-block' == posts[i].existsNumberShares;
			posts[i].hasFlash = this.hasFlash ? true : false;
			
			comLen = posts[i].comments.length;
			j = 0;
			
			// Responsável por manipular os dados de comentários retornados no objeto "posts".
			for(j; j < comLen; j++) {
				posts[i].comments[j].allowsRemoveActions = this.loggedUserAlias === posts[i].comments[j].user.alias;
				posts[i].comments[j].existsNumberLikes = this.generateListClass(posts[i].comments[j].numberLikes);
				posts[i].comments[j].comment = this.generateContentTextFormatted(posts[i].comments[j].comment, posts[i].comments[j].mentions);
			}
			
			// Esse tratamento é feito pois quando um post é criado, o serviço de acompanhar
			// automaticamente é assincrono, então ao exibir o post na tela o mesmo não está
			// acompanhado pelo usuário criador ainda.
			if(isNew && this.loggedUserAlias === posts[i].user.alias) {
				posts[i].watching = true;
				posts[i].numberWatchers = 1;
				posts[i].existsNumberWatchers = 'fs-display-inline-block';
			}
			
			html += Mustache.render(this.templates['social-timeline-post-template'], posts[i], {
				postComments: this.templates['social-timeline-comment-template'],
				postMoreComments: this.templates['social-timeline-show-more-comments-template'],
				postContent: this.templates[posts[i].variableContent.tlpName]
			});
		}
		catch(err) {
			if(console) console.log(posts[i] || '', err);
		}
	}
	
	// Validar se é um novo post ou listagem/paginação.
	if(isNew) {
		$('[data-timeline-content-message]', this.DOM).remove();
		this.$listPostDOM.prepend(html);
	}
	else {
		this.$listPostDOM.append(html);
	}
	
	$('#timeline-ordering-posts', this.DOM).removeAttr('disabled');
	
	if(this.$btnShowMore) {
		this.$btnShowMore.removeAttr('disabled');
	}
	
	this.showVideos();
	this.showCardPopover();
	this.instanceTimeInteraction();
	this.entityRetrieveUndergoing = false;
},

...

Na linha 469 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
showVideos: function() {
	var that = this,
		videos = document.querySelectorAll('.video-js'),
		isLoaded = false
	;
	[].forEach.call(videos, function(item, idx) {
		isLoaded = item.getAttribute('data-is-loaded');
		if(!isLoaded) {
			// esse tratamento é feito para vídeos com problemas de renderização
			// na timeline. A única maneira encontrada de capturar esse erro foi
			// adicionar "na mão" o listener do evento error do vídeo.
			document.getElementById(item.id).addEventListener('error', function(ev) {
				var isError = ev.path ? false : true;
				
				if(isError) {
					$(this)
					.parents('[data-container-media-video]')
					.append(Mustache.render(that.templates['social-timeline-video-not-supported-template'], {
						i18n: that.i18n['messages']
					}));
				}
			}, true);
			
			videojs(item.id, {
				width: '100%',
				height: '100%'
			});
			
			item.setAttribute('data-is-loaded', 'true');
		}
	});
},

...

Na linha 551 da versão 1.5.0, copiar o bloco abaixo e ADICIONAR na versão 1.4.x:

Bloco de código
languagejs
downloadVideoAction: function(el, ev, id) {
	var $el = $(el),
		$post = $el.parents('[data-post-id="' + id + '"]'),
		restUrl = $post.find('[data-video-rest-url]').data('video-rest-url')
	;
	
	window.location = restUrl;
},

...

Na linha 788 da versão 1.5.0, copiar o bloco abaixo e ADICIONAR na versão 1.4.x:

Bloco de código
languagejs
listSharesAction: function(el, ev, id) {
	SOCIALBC.shareListModal({
		sociableId : id,
		instanceId: Date.now()
	});
},

...

Na linha 871 da versão 1.5.0, copiar o bloco abaixo e ADICIONAR na versão 1.4.x:

...

Na linha 967 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
shareAction: function(el, ev, id) {
	var $el = $(el),
		preview = this.processPreview($el),
		loggedUserAlias = WCMAPI.getUserLogin(),
		id = $el.parents('[data-comment-id]').data('comment-id') || $el.parents('[data-post-id]').data('post-id'),
		onlyLink = $el.parents('[data-post-community-hidden]').data('post-community-hidden'),
		url = WCMAPI.getServerURL() + WCMAPI.getProtectedContextPath() + "/" + WCMAPI.getTenantCode() + '/post/' + loggedUserAlias + '/' + id
	;
	SOCIALBC.share($el, {
		showOnlyLink: onlyLink,
		shareType: 'SOCIABLE',
        type: 'POST',
        preview: preview,
        link: url,
        paramId: id,
        widthNoFlash: '200px'
    });
},

...

Na linha 987 da versão 1.5.0, copiar o bloco abaixo e ADICIONAR na versão 1.4.x:

Bloco de código
languagejs
processPreview: function($el) {
	var $previewVideo = $el.parents('.timeline-list-posts-item').find('[data-url-media]'),
		imgEl, miniature, preview
	;
	
	if($previewVideo.length) {
		imgEl = $('<img>');
		imgEl.attr('src', $previewVideo.data('url-media'));
		imgEl.addClass('media-photo');
		return imgEl.wrap('<p>').parent().html();
	} else {
		miniature = $el.parents('.timeline-list-posts-item').find('.panel-body');
		preview = $(miniature).find('.timeline-recommendation-content');
		if(preview.length) {
			preview = preview.clone().wrap('<p>').parent().html();
			preview = preview.replace(/well+/, '');
			return preview;
		}
		return miniature.clone().wrap('<p>').parent().html();
	}
},

...

Na linha 1009 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
controlInteractionActions: function($el, interactionType) {
	var numberInteraction = +$el.text();
	
	if(interactionType === 'add') {
		++numberInteraction;
	}
	else {
		--numberInteraction;
	}
	
	if(numberInteraction > 0) {
		$el
		.text(numberInteraction)
		.removeClass('hidden')
		.addClass('fs-display-inline-block');
	}
	else {
		$el
		.text(numberInteraction)
		.removeClass('fs-display-inline-block')
		.addClass('hidden');
	}
},

 

Na linha 1033 da versão 1.5.0, copiar o bloco abaixo e ADICIONAR na versão 1.4.x:

Bloco de código
languagejs
returnOthersOrderTypes: function() {
	var index, allOrderTypes; 
	
	allOrderTypes = ['CREATION_DATE', 'LAST_UPDATE', 'MY_PUBLICATIONS', 'MORE_LIKE'];		
	index = allOrderTypes.indexOf(this.orderType);
	allOrderTypes.splice(index,1);
	return allOrderTypes;
	
},

...

Na linha 1044 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
generateOrderAction: function() {
	var orderType = this.orderType,
		otherOrderType = this.returnOthersOrderTypes(),
		permissionOrder = this.permissionOrder,
		actions = []
	;
	
	switch(orderType) {
		case 'MY_PUBLICATIONS':
			if(permissionOrder) {
				for (var i = 0; i < otherOrderType.length; i++) {
					var optionOrderType = otherOrderType[i];
					actions.push({
						orderType: optionOrderType,
						orderName: this.i18n.labels[optionOrderType]
					});	
				}
			} else {
				actions.push({
					orderType: this.configOrderType,
					orderName: this.i18n.labels[this.configOrderType]
				});	
			}
			
		break;
		
		case 'CREATION_DATE':
			if(permissionOrder) {
				for (var i = 0; i < otherOrderType.length; i++) {
					var optionOrderType = otherOrderType[i];
					actions.push({
						orderType: optionOrderType,
						orderName: this.i18n.labels[optionOrderType]
					});	
				}
			} else {
				actions.push({
					orderType: 'MY_PUBLICATIONS',
					orderName: this.i18n.labels['MY_PUBLICATIONS']
				});	
			}
			
		break;
		
		case 'LAST_UPDATE':
			if(permissionOrder) {
				for (var i = 0; i < otherOrderType.length; i++) {
					var optionOrderType = otherOrderType[i]; 
					actions.push({
						orderType: optionOrderType,
						orderName: this.i18n.labels[optionOrderType]
					});	
				}
			} else {
				actions.push({
					orderType: 'MY_PUBLICATIONS',
					orderName: this.i18n.labels['MY_PUBLICATIONS']
				});	
			}
		break;
		case 'MORE_LIKE':
			if(permissionOrder) {
				for (var i = 0; i < otherOrderType.length; i++) {
					var optionOrderType = otherOrderType[i]; 
					actions.push({
						orderType: optionOrderType,
						orderName: this.i18n.labels[optionOrderType]
					});	
				}
			} else {
				actions.push({
					orderType: 'MY_PUBLICATIONS',
					orderName: this.i18n.labels['MY_PUBLICATIONS']
				});	
			}
		break;
	}
	return actions;
},

 

Na linha 1125 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
generatePostHeader: function(data) {
	var obj = {};
	
	obj.person = {
		personName: data.user.name,
		personAlias: data.user.alias,
		personPage: data.user.page
	};
	
	if(data.type === 'RECOMMENDATION') {
		obj.verb = this.i18n.labels['recommended'];
		
		if(!data.linkedObject || !data.linkedObject.objectClass || data.linkedObject.objectClass === 'POST') {
			obj.object = {
				objectType: this.i18n.labels['this.publication'],
				objectUrl: data.linkedObject.url || data.url
			};
		}
		else if(data.linkedObject && data.linkedObject.objectClass) {				
			if(data.linkedObject.objectClass.indexOf('com.totvs.technology.social.relation.entity.Social') !== -1) {
				obj.object = {
					objectType: this.i18n.labels['this.connection'],
					objectUrl: data.linkedObject.url || data.url
				};
			}
			else if(data.linkedObject.objectClass.indexOf('com.totvs.technology.social.article') !== -1) {
				obj.object = {
					objectType: this.i18n.labels['this.article'],
					objectUrl: data.linkedObject.url || data.url
				};
			}
			else if(data.linkedObject.objectClass.indexOf('com.totvs.technology.social.form') !== -1) {
				obj.object = {
					objectType: this.i18n.labels['this.form'],
					objectUrl: data.linkedObject.url || data.url
				};
			}
			else {
				obj.object = {
					objectType: this.i18n.labels['this.document'],
					objectUrl: data.linkedObject.url || data.url
				};
			}
		}
		else {
			obj.object = {
				objectType: this.i18n.labels['this.content'],
				objectUrl: data.linkedObject.url || data.url
			};
		}
		
		if(data.originShare && data.originShare.type === 'COMMUNITY') {
			obj.viaThe = {
				viaTheName: data.originShare.name,
				viaTheAlias: data.originShare.alias,
				viaThePage: data.originShare.page
			};
		}
	}
	
	if(data.social.type === 'COMMUNITY') {
		obj.place = {
			placeName: data.social.name,
			placeAlias: data.social.alias,
			placePage: data.social.page
		};
	}
	else if(data.originShare && data.originShare.type === "COMMUNITY") {
		obj.place = {
			placeName: data.originShare.name,
			placeAlias: data.originShare.alias,
			placePage: data.originShare.page
		};
	}
	
	return obj;
},

...

Na linha 1203 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
generateListClass: function(numberActions) {
	if(+numberActions > 0) {
		return 'fs-display-inline-block';
	}
	else {
		return 'hidden';
	}
},

...

Na linha 1212 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
generateTemplateVariableContent: function(data) {
	var obj = {},
		documentId,
		shareMentionVO,
		that = this
	;
	
	obj.thumbEnum = this.thumbEnum;
	
	if(data.type === 'RECOMMENDATION') {
		obj.isRecommendation = true;
	}
	else {
		obj.isRecommendation = false;
	}
	
	// Diferencia se o conteúdo compartilhado é um post ou não.
	if(data.type === 'RECOMMENDATION' &&
			(!data.linkedObject || !data.linkedObject.objectClass || data.linkedObject.objectClass === 'POST')) {
		obj.linkedObject = data.linkedObject.linkedObject;
		
		// Se o post compartilhado possui texto, o mesmo precisa ser formatado.
		if(data.linkedObject && data.linkedObject.text) {
			shareMentionVO = data.shareMentionVO || {};
			obj.originalText = this.generateContentTextFormatted(data.linkedObject.text, shareMentionVO.mentions);
		}
		
		// Se possui linkedObject e o mesmo foi removido retorna.
		if(data.linkedObject && data.linkedObject.removed) {
			// Template para exibição de conteúdo removido.
			obj.tlpName = 'social-timeline-content-removed-template';
			return obj;
		}
		// Se o post compartilhado tiver um link do youtube, retorna.
		else if(obj.linkedObject && obj.linkedObject.youtubeLink) {
			// Template para exibição de vídeo do youtube
			obj.tlpName = 'social-timeline-content-youtube-template';
			return obj;
		}
		// Se o post compartilhado não tiver anexado nenhuma media retorna o template genérico.
		else if(!obj.linkedObject) {
			// Template para exibição de conteúdo genérico.
			obj.tlpName = 'social-timeline-content-generic-template';
			return obj;
		}
	}
	else {
		obj.linkedObject = data.linkedObject;
		// Se possui linkedObject e o mesmo foi removido retorna.
		if(obj.linkedObject && obj.linkedObject.removed) {
			// Template para exibição de conteúdo removido.
			obj.tlpName = 'social-timeline-content-removed-template';
			return obj;
		}
		// Se for vídeo do youtube retorna.
		else if(data.youtubeLink) {
			// Template para exibição de vídeo do youtube.
			obj.tlpName = 'social-timeline-content-youtube-template';
			return obj;
		}
	}
	
	if(obj.linkedObject && (obj.linkedObject.url || data.urlOrigin) && obj.linkedObject.objectId) {
		if(!obj.linkedObject.removed) {
			// Necessário para buscar a url correta do conteúdo.
			obj.linkedObject.url = obj.linkedObject.url || data.urlOrigin;
			
			// Necessário para buscar o id do documento se existir.
			obj.documentId = obj.linkedObject.objectClass ? obj.linkedObject.objectClass.match(/(?:.*)\.(.+)/)[1] : '';
			
			if(obj.linkedObject.objectClass.indexOf('com.totvs.technology.social.document') !== -1) {
				// Template para exibição de imagens.
				if(obj.linkedObject.thumbURL &&
						this.validateFilesTypes(obj.linkedObject.thumbURL.toLowerCase(), 'validImagesFilesTypes')) {
					if(data.linkedObject.sociableType == "SocialObject"){
						obj.removeText = true;
					}
					obj.tlpName = 'social-timeline-content-media-image-template';
					return obj;
				}
				// Template para exibição de vídeos.
				else if(obj.linkedObject.thumbURL &&
						obj.linkedObject.description &&
						this.validateFilesTypes(obj.linkedObject.thumbURL.toLowerCase(), 'validVideosFilesTypes') ||
						this.validateFilesTypes(obj.linkedObject.description.trim().toLowerCase(), 'validVideosFilesTypes')) {
					obj.tlpName = 'social-timeline-content-media-video-template';
					return obj;
				}
				// Template para exibição de documentos.
				else {
					// Se tiver uma url de origem
					if(data.urlOrigin){
						// Template para exibição de categoria e galeria da comunidade.
						obj.tlpName = 'social-timeline-content-gallery-template';
						return obj;
					}
					// isFolder (atribuído nesse momento baseando-se com 'contains' no
					// 			 atributo thumbUrl pois o objectType sempre vem como documento).
					obj.isFolder = obj.linkedObject.thumbURL.toLowerCase().indexOf("folder") > -1;
					obj.documentVersion = FLUIGC.utilities.parseVersion(obj.linkedObject.objectId || 1000);
					obj.tlpName = 'social-timeline-content-media-document-template';
					return obj;
				}
			}
			// Template para exibição de socials.
			else if(obj.linkedObject.objectClass.indexOf('com.totvs.technology.social.relation.entity.Social') !== -1) {
				if(obj.linkedObject.thumbURL) {
					obj.tlpName = 'social-timeline-content-social-template';
					return obj;
				}
			}
			// Template para exibição de artigos.
			else if(obj.linkedObject.objectClass.indexOf('com.totvs.technology.social.article') !== -1) {
				if(obj.linkedObject.thumbURL) {
					obj.tlpName = 'social-timeline-content-article-template';
					return obj;
				}
			} 
			// Template para resposta de formulários.
			else if(obj.linkedObject.objectClass.indexOf('com.totvs.technology.social.form') !== -1) {
				obj.tlpName = 'social-timeline-content-form-template';
				return obj;
			}
			// Template para exibição de documentos genéricos não tratados.
			if(obj.linkedObject.thumbURL) {
				obj.tlpName = 'social-timeline-content-generic-media-template';
				return obj;
			}
		}
		// Template para exibição de conteúdo removido.
		else {
			obj.tlpName = 'social-timeline-content-removed-template';
			return obj;
		}
	}
	
	obj.tlpName = false;
	
	return obj;
},

...

Na linha 1391 da versão 1.5.0, copiar o bloco abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
formatLink: function(text) {
	var html = Mustache.render(this.templates['social-timeline-link-template']);
	var htmlResult = text.replace(/((((https?|ftp|file):\/\/)|(www))[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, html);
	htmlResult = htmlResult.replaceAll('href="www','href="http://www');
	return htmlResult;
},

Na linha 1592 da versão 1.5.0, copiar o bloco abaixo e substituir na SUBSTITUIR na versão 1.4.x:

Bloco de código
languagejs
textComplaintValidate: function(text) {
	var listWords = text.match(/(\w+){3,}/g) || [];
	if(text === '') {
		socialGlobal.alert(this.i18n.messages['denounce.reason.empty']);
		return true;
	}
	if(listWords.length < 4) {
		socialGlobal.alert(this.i18n.messages['denounce.content.invalid']);
		return true;
	}
	return false;
}

 

socialtimelineedit.js

Arquivo na Na linha 123 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:

Bloco de código
language

 

Arquivo na 1.5.0

 

js
setOrderType: function() {
	$('[data-order-type]', this.DOM).find("option[value='"+ this.orderType +"']").prop('selected', this.orderType);
},

 Atualizar arquivo 1.4.x