Skip to content

Instantly share code, notes, and snippets.

@ryanschuhler
Created January 28, 2016 21:49
Show Gist options
  • Save ryanschuhler/66e6fa042e906f05f3be to your computer and use it in GitHub Desktop.
Save ryanschuhler/66e6fa042e906f05f3be to your computer and use it in GitHub Desktop.
<#if request.lifecycle == "RENDER_PHASE">
<#assign journal_content_util = staticUtil["com.liferay.portlet.journalcontent.util.JournalContentUtil"] />
<div class="lego-article ${article_class.data}" id="article-${.vars['reserved-article-id'].data}">
<#list section.siblings as cur_section>
<section class="block-container lego-section section-${cur_section_index + 1} ${cur_section.section_class.data}" ${cur_section.data}>
<#list cur_section.block.siblings as cur_block>
<div class="block block-${cur_block_index + 1} content-column lego-block w${cur_block.width.data} ${cur_block.block_class.data}" ${cur_block.data}>
<#list cur_block.element.siblings as cur_element>
<#assign cur_element_tag = cur_element.tag.data>
<#if !cur_element_tag?has_content>
<#assign cur_element_tag = "div">
</#if>
<${cur_element_tag}
class="live-edit lego-element ${cur_element.element_class.data}"
data-article-id='${.vars["reserved-article-id"].data}'
data-block-id="${cur_block_index}"
data-element-id="${cur_element_index}"
data-namespace='${request["portlet-namespace"]}'
data-resource-url='${request["resource-url"]}'
data-section-id="${cur_section_index}"
${cur_element.data}
>
${cur_element.content.data}
</${cur_element_tag}>
</#list>
<#if cur_block.article_id?? && cur_block.article_id.data?has_content>
<#list cur_block.article_id.siblings as article_id>
<#if article_id.data?has_content && journal_article_local_service.hasArticle(groupId, article_id.data)>
${journal_content_util.getContent(groupId, article_id.data, "", locale, xmlRequest)!}
<#if user_has_permissions>
<#assign service_context = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"].getServiceContext() />
<#assign http_servlet_request = service_context.getRequest() />
<#assign current_url = request.attributes.CURRENT_COMPLETE_URL! />
<#assign edit_url = portletURLFactory.create(http_servlet_request, "15", plid, "0") />
<#assign VOID = edit_url.setParameter("p_p_state", "maximized") />
<#assign VOID = edit_url.setParameter("p_p_lifecycle", "0") />
<#assign VOID = edit_url.setParameter("groupId", "${groupId}") />
<#assign VOID = edit_url.setParameter("struts_action", "/journal/edit_article") />
<#assign VOID = edit_url.setParameter("redirect", "${current_url}") />
<#assign VOID = edit_url.setParameter("articleId", "${article_id.data}") />
<span class="lfr-icon-action lfr-icon-action-edit lfr-meta-actions pull-right">
<a href="${edit_url}" class="taglib-icon">
<img src="/osb-community-theme/images/spacer.png" alt="Edit" style="background-image: url('/osb-community-theme/sprite/images/common/_sprite.png'); background-position: 50% -608px; background-repeat: no-repeat; height: 16px; width: 16px;">
<span class="taglib-text ">Edit</span>
</a>
</span>
</#if>
</#if>
</#list>
</#if>
</div>
</#list>
</section>
</#list>
</div>
<#if css.data?has_content>
<style type="text/css">
${css.data}
</style>
</#if>
<#if javascript?? && javascript.data?has_content>
<script type="text/javascript">
${javascript.data}
</script>
</#if>
<#assign layout_service = serviceLocator.findService("com.liferay.portal.service.LayoutLocalService") />
<#assign theme_display = request["theme-display"] />
<#assign plid = theme_display["plid"] />
<#assign layout = layout_service.getLayout(plid?number) />
<#if layoutPermission.contains(permissionChecker, layout, "UPDATE")>
<style>
.controls-visible .live-edit {
-moz-user-modify: read-write;
-webkit-user-modify: read-write;
}
</style>
<script text="text/javascript">
AUI().ready(
'aui-io-request',
function(A) {
var body = A.getBody();
var saveInfo = function(sectionId, blockId, elementId, value, resourceUrl, namespace, articleId) {
var data = {};
data[namespace + 'articleId'] = articleId;
data[namespace + 'blockId'] = blockId;
data[namespace + 'elementId'] = elementId;
data[namespace + 'languageId'] = themeDisplay.getLanguageId();
data[namespace + 'sectionId'] = sectionId;
data[namespace + 'value'] = value;
A.io.request(
resourceUrl,
{
data: data
}
);
};
A.one('#article-${.vars['reserved-article-id'].data}').delegate(
'click',
function(event) {
var node = event.currentTarget;
var editNode = node;
var initialContent = node.getContent();
editNode.on(
'blur',
function(event) {
node.detach('blur');
var content = editNode.getContent();
if (!body.hasClass('controls-visible') || (initialContent == content)) {
return;
}
var articleId = node.attr('data-article-id');
var blockId = node.attr('data-block-id');
var elementId = node.attr('data-element-id');
var namespace = node.attr('data-namespace');
var resourceUrl = node.attr('data-resource-url');
var sectionId = node.attr('data-section-id');
saveInfo(sectionId, blockId, elementId, content, resourceUrl, namespace, articleId);
}
);
},
'.live-edit'
);
}
);
</script>
</#if>
<#elseif request.lifecycle == "RESOURCE_PHASE">
<#assign journal_article_service = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleService") />
<#assign service_context = objectUtil("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext() />
<#assign http_servlet_request = service_context.getRequest() />
<#assign article_id = paramUtil.getString(http_servlet_request, "articleId") />
<#assign block_id = paramUtil.getInteger(http_servlet_request, "blockId") />
<#assign element_id = paramUtil.getInteger(http_servlet_request, "elementId") />
<#assign language_id = paramUtil.getString(http_servlet_request, "languageId") />
<#assign section_id = paramUtil.getInteger(http_servlet_request, "sectionId") />
<#assign value = paramUtil.getString(http_servlet_request, "value") />
<#assign article = journal_article_service.getArticle(groupId, article_id) />
<#assign document = saxReaderUtil.read(article.getContent()) />
<#assign root_element = document.getRootElement() />
<#assign dynamic_elements = root_element.elements("dynamic-element") />
<#assign section_element = dynamic_elements[section_id] />
<#assign section_dynamic_elements = section_element.elements("dynamic-element") />
<#assign block_element = section_dynamic_elements[block_id] />
<#assign block_dynamic_elements = block_element.elements("dynamic-element") />
<#assign element = block_dynamic_elements[element_id] />
<#assign element_dynamic_elements = element.elements("dynamic-element") />
<#assign element_content_element = "" />
<#list element_dynamic_elements as element_dynamic_element>
<#if validator.equals(element_dynamic_element.attributeValue("name"), "content")>
<#assign element_content_element = element_dynamic_element />
</#if>
</#list>
<#assign dynamic_content = element_content_element.elements("dynamic-content") />
<#assign found_language_id = false />
<#list dynamic_content as dynamic_content_element>
<#assign content_language_id = dynamic_content_element.attributeValue("language-id") />
<#if validator.equals(language_id, content_language_id)>
<#assign void = dynamic_content_element.clearContent() />
<#assign void = dynamic_content_element.addCDATA(value) />
<#assign found_language_id = true />
</#if>
</#list>
<#if !found_language_id>
<#assign dynamic_content_element = element.addElement("dynamic-content") />
<#assign void = dynamic_content_element.addAttribute("language-id", language_id) />
<#assign void = dynamic_content_element.addCDATA(value) />
<#assign available_locales = root_element.attributeValue("available-locales") />
<#assign available_locales_array = stringUtil.split(available_locales) />
<#if !arrayUtil.contains(available_locales_array, language_id)>
<#assign available_locales_array = arrayUtil.append(available_locales_array, language_id) />
<#assign void = root_element.addAttribute("available-locales", stringUtil.merge(available_locales_array)) />
</#if>
</#if>
<#assign version = article.getVersion() />
<#assign void = journal_article_service.updateContent(groupId, article_id, version, document.formattedString(" ")) />
</#if>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment