Índice
Índice |
---|
outline | true |
---|
style | none |
---|
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.5.3 e 1.5.4.
Dica |
---|
|
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.5.3 e 1.5.4. |
Na versão 1.5.4 foi adicionado o novo componente de visualização de artigo, sendo necessário adicionar esta dependência para widget.
A linha abaixo, deve ser ADICIONADA para a versão 1.5.3:
Bloco de código |
---|
|
application.resource.component.5=social/socialarticleview |
socialtimeline.properties
Na versão 1.5.0 foram adicionadas algumas chaves de tradução e devem ser 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 |
---|
|
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
Na linha 40 da versão 1.5.0, copiar o código abaixo e SUBSTITUIR na versão 1.4.x:
Bloco de código |
---|
|
<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 SUBSTITUIR na versão 1.4.x:
Bloco de código |
---|
|
{{#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> |
Na linha 231 da versão 1.5.0, copiar o bloco abaixo e SUBSTITUIR na versão 1.4.x:
Bloco de código |
---|
|
{{^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 código abaixo e SUBSTITUIR na versão 1.4.x:
Bloco de código |
---|
|
<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 código abaixo e ADICIONAR na versão 1.4.x:
Bloco de código |
---|
|
<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 código abaixo e SUBSTITUIR na versão 1.4.x:
Bloco de código |
---|
|
<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 código abaixo e ADICIONAR na versão 1.4.x:
Bloco de código |
---|
|
<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 versão 1.4.x:
Bloco de código |
---|
|
<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 versão 1.4.x:
Bloco de código |
---|
|
<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 ADICIONAR na versão 1.4.x:
Bloco de código |
---|
|
<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 versão 1.4.x:
Bloco de código |
---|
|
<#--
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}}&version=3&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}}&version=3&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 versão 1.4.x:
Bloco de código |
---|
|
{{#hasFlash}}
<object class="embed-responsive-item">
<param name="movie" value="{{formattedLink}}?hl={{locale}}&version=3&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}}&version=3&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 código abaixo e SUBSTITUIR na versão 1.4.x:
Bloco de código |
---|
|
<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 versão 1.4.x:
Bloco de código |
---|
|
<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 |
---|
|
hasFlash: null, |
Copiar as linhas 50, 60 e 85 da versão 1.5.0 e ADICIONAR na versão 1.4.x:
Bloco de código |
---|
|
'this.form': '${i18n.getTranslation("this.form")}',
'MORE_LIKE': '${i18n.getTranslation("more.like")}',
'anwser' : '${i18n.getTranslation("anwser")}', |
Copiar as linhas 95 até 101 da versão 1.5.0 e ADICIONAR na versão 1.4.x:
Bloco de código |
---|
|
'video.not.supported': '${i18n.getTranslation("message.error.video.not.supported")}',
'post.denounced': '${i18n.getTranslation("post.denounced")}',
'denounce.reason.empty': '${i18n.getTranslation("alert.message.denounce.reason.empty")}',
'denounce.content.invalid': '${i18n.getTranslation("alert.message.denounce.content.invalid")}',
'videoNotSupported': '${i18n.getTranslation("message.video.not.supported")}',
'videoNotSupportedDownload': '${i18n.getTranslation("message.video.not.supported.download")}',
'videoNotSupportedSulfix': '${i18n.getTranslation("message.video.not.supported.sulfix")}' |
Copiar a linha 111 da versão 1.5.0 e ADICIONAR na versão 1.4.x:
Bloco de código |
---|
|
'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 |
---|
|
// 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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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:
Bloco de código |
---|
|
openAnswerFormAction: function(el, ev) {
var $el = $(el),
documentId = $el.data('timeline-form-id')
;
SOCIALBC.openAnswerForm(documentId);
}, |
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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 versão 1.4.x:
Bloco de código |
---|
|
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 versão 1.4.x:
Bloco de código |
---|
|
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
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 |
---|
|
setOrderType: function() {
$('[data-order-type]', this.DOM).find("option[value='"+ this.orderType +"']").prop('selected', this.orderType);
}, |