/modules/apps/collaboration/blogs/blogs-web/src/main/resources/META-INF/resources/blogs/js/blogs.js
http://github.com/liferay/liferay-portal · JavaScript · 462 lines · 340 code · 122 blank · 0 comment · 44 complexity · 781aa44604bbde823455638c7b489ea7 MD5 · raw file
- AUI.add(
- 'liferay-blogs',
- function(A) {
- var Lang = A.Lang;
- var CSS_INVISIBLE = 'invisible';
- var STR_BLANK = '';
- var STR_CHANGE = 'change';
- var STR_CLICK = 'click';
- var STR_SUFFIX = '...';
- var Blogs = A.Component.create(
- {
- ATTRS: {
- constants: {
- validator: Lang.isObject
- },
- descriptionLength: {
- validator: Lang.isNumber,
- value: 400
- },
- editEntryURL: {
- validator: Lang.isString
- },
- entry: {
- validator: Lang.isObject
- },
- saveInterval: {
- value: 30000
- },
- strings: {
- validator: Lang.isObject,
- value: {
- confirmDiscardImages: Liferay.Language.get('uploads-are-in-progress-confirmation'),
- savedAtMessage: Liferay.Language.get('entry-saved-at-x'),
- savedDraftAtMessage: Liferay.Language.get('draft-saved-at-x'),
- saveDraftError: Liferay.Language.get('could-not-save-draft-to-the-server'),
- saveDraftMessage: Liferay.Language.get('saving-draft')
- }
- }
- },
- AUGMENTS: [Liferay.PortletBase],
- EXTENDS: A.Base,
- NAME: 'liferay-blogs',
- NS: 'liferay-blogs',
- prototype: {
- initializer: function(config) {
- var instance = this;
- instance._bindUI();
- var entry = instance.get('entry');
- var draftEntry = entry && entry.status === instance.get('constants').STATUS_DRAFT;
- var userEntry = entry && entry.userId === themeDisplay.getUserId();
- if (!entry || userEntry && draftEntry) {
- instance._initDraftSaveInterval();
- }
- var customDescriptionEnabled = entry && entry.customDescription;
- instance._customDescription = customDescriptionEnabled ? entry.description : STR_BLANK;
- instance._shortenDescription = !customDescriptionEnabled;
- instance.setDescription(window[instance.ns('contentEditor')].getText());
- },
- destructor: function() {
- var instance = this;
- if (instance._saveDraftTimer) {
- instance._saveDraftTimer.cancel();
- }
- (new A.EventHandle(instance._eventHandles)).detach();
- },
- setDescription: function(text) {
- var instance = this;
- var description = instance._customDescription;
- if (instance._shortenDescription) {
- description = instance._shorten(text);
- }
- window[instance.ns('descriptionEditor')].setHTML(description);
- instance._syncDescriptionEditorUI();
- },
- _bindUI: function() {
- var instance = this;
- instance._captionNode = instance.one('.cover-image-caption');
- var eventHandles = [
- Liferay.on('coverImageDeleted', instance._removeCaption, instance),
- Liferay.on(['coverImageUploaded', 'coverImageSelected'], instance._showCaption, instance)
- ];
- var publishButton = instance.one('#publishButton');
- if (publishButton) {
- eventHandles.push(
- publishButton.on(STR_CLICK, A.bind('_checkImagesBeforeSave', instance, false, false))
- );
- }
- var saveButton = instance.one('#saveButton');
- if (saveButton) {
- eventHandles.push(
- saveButton.on(STR_CLICK, A.bind('_checkImagesBeforeSave', instance, true, false))
- );
- }
- var customAbstractOptions = instance.one('#entryAbstractOptions');
- if (customAbstractOptions) {
- eventHandles.push(
- customAbstractOptions.delegate(STR_CHANGE, instance._configureAbstract, 'input[type="radio"]', instance)
- );
- }
- instance._eventHandles = eventHandles;
- },
- _checkImagesBeforeSave: function(draft, ajax) {
- var instance = this;
- if (instance._hasTempImages()) {
- if (confirm(instance.get('strings').confirmDiscardImages)) {
- instance._getTempImages().each(
- function(node) {
- node.ancestor().remove();
- }
- );
- instance._saveEntry(draft, ajax);
- }
- }
- else {
- instance._saveEntry(draft, ajax);
- }
- },
- _configureAbstract: function(event) {
- var instance = this;
- var target = event.target;
- var description = instance._customDescription;
- instance._shortenDescription = target.val() === 'false';
- if (instance._shortenDescription) {
- instance._customDescription = window[instance.ns('descriptionEditor')].getHTML();
- description = window[instance.ns('contentEditor')].getText();
- }
- instance._setDescriptionReadOnly(instance._shortenDescription);
- instance.setDescription(description);
- },
- _getPrincipalForm: function(formName) {
- var instance = this;
- return instance.one('form[name=' + instance.ns(formName || 'fm') + ']');
- },
- _getTempImages: function() {
- var instance = this;
- return instance.all('img[data-random-id]');
- },
- _hasTempImages: function() {
- var instance = this;
- return instance._getTempImages().size() > 0;
- },
- _initDraftSaveInterval: function() {
- var instance = this;
- instance._saveDraftTimer = A.later(
- instance.get('saveInterval'),
- instance,
- function() {
- if (!instance._hasTempImages()) {
- instance._saveEntry(true, true);
- }
- },
- null,
- true
- );
- var entry = instance.get('entry');
- instance._oldContent = entry ? entry.content : STR_BLANK;
- instance._oldSubtitle = entry ? entry.subtitle : STR_BLANK;
- instance._oldTitle = entry ? entry.title : STR_BLANK;
- },
- _removeCaption: function() {
- var instance = this;
- var captionNode = instance._captionNode;
- if (captionNode) {
- captionNode.addClass(CSS_INVISIBLE);
- }
- window[instance.ns('coverImageCaptionEditor')].setHTML(STR_BLANK);
- },
- _saveEntry: function(draft, ajax) {
- var instance = this;
- var constants = instance.get('constants');
- var content = window[instance.ns('contentEditor')].getHTML();
- var coverImageCaption = window[instance.ns('coverImageCaptionEditor')].getHTML();
- var description = window[instance.ns('descriptionEditor')].getHTML();
- var subtitle = window[instance.ns('subtitleEditor')].getHTML();
- var title = window[instance.ns('titleEditor')].getText();
- var form = instance._getPrincipalForm();
- if (draft && ajax) {
- var hasData = content !== STR_BLANK && title !== STR_BLANK;
- var hasChanged = instance._oldContent !== content || instance._oldSubtitle !== subtitle || instance._oldTitle !== title;
- if (hasData && hasChanged) {
- var strings = instance.get('strings');
- var saveStatus = instance.one('#saveStatus');
- var allowPingbacks = instance.one('#allowPingbacks');
- var allowTrackbacks = instance.one('#allowTrackbacks');
- var data = instance.ns(
- {
- 'allowPingbacks': allowPingbacks && allowPingbacks.val(),
- 'allowTrackbacks': allowTrackbacks && allowTrackbacks.val(),
- 'assetTagNames': instance.one('#assetTagNames').val(),
- 'cmd': constants.ADD,
- 'content': content,
- 'coverImageCaption': coverImageCaption,
- 'coverImageFileEntryCropRegion': instance.one('#coverImageFileEntryCropRegion').val(),
- 'coverImageFileEntryId': instance.one('#coverImageFileEntryId').val(),
- 'displayDateAmPm': instance.one('#displayDateAmPm').val(),
- 'displayDateDay': instance.one('#displayDateDay').val(),
- 'displayDateHour': instance.one('#displayDateHour').val(),
- 'displayDateMinute': instance.one('#displayDateMinute').val(),
- 'displayDateMonth': instance.one('#displayDateMonth').val(),
- 'displayDateYear': instance.one('#displayDateYear').val(),
- 'entryId': instance.one('#entryId').val(),
- 'referringPortletResource': instance.one('#referringPortletResource').val(),
- 'subtitle': subtitle,
- 'title': title,
- 'workflowAction': constants.ACTION_SAVE_DRAFT
- }
- );
- var customAttributes = form.all('[name^=' + instance.NS + 'ExpandoAttribute]');
- customAttributes.each(
- function(item, index, collection) {
- data[item.attr('name')] = item.val();
- }
- );
- A.io.request(
- instance.get('editEntryURL'),
- {
- data: data,
- dataType: 'JSON',
- on: {
- failure: function() {
- instance._updateStatus(strings.saveDraftError);
- },
- start: function() {
- Liferay.Util.toggleDisabled(instance.one('#publishButton'), true);
- instance._updateStatus(strings.saveDraftMessage);
- },
- success: function(event, id, obj) {
- instance._oldContent = content;
- instance._oldSubtitle = subtitle;
- instance._oldTitle = title;
- var message = this.get('responseData');
- if (message) {
- instance.one('#coverImageFileEntryId').val(message.coverImageFileEntryId);
- instance.one('#entryId').val(message.entryId);
- if (message.blogsEntryAttachmentReferences) {
- instance._updateImages(message.blogsEntryAttachmentReferences);
- }
- var tabs1BackButton = instance.one('#tabs1TabsBack');
- if (tabs1BackButton) {
- tabs1BackButton.attr('href', message.redirect);
- }
- var cancelButton = instance.one('#cancelButton');
- if (cancelButton) {
- cancelButton.attr('href', message.redirect);
- }
- if (saveStatus) {
- var entry = instance.get('entry');
- var saveText = entry && entry.pending ? strings.savedAtMessage : strings.savedDraftAtMessage;
- var now = saveText.replace(/\{0\}/gim, (new Date()).toString());
- instance._updateStatus(now);
- }
- }
- else {
- saveStatus.hide();
- }
- Liferay.Util.toggleDisabled(instance.one('#publishButton'), false);
- }
- }
- }
- );
- }
- }
- else {
- instance.one('#' + constants.CMD).val(instance.get('entry') ? constants.UPDATE : constants.ADD);
- instance.one('#content').val(content);
- instance.one('#coverImageCaption').val(coverImageCaption);
- instance.one('#description').val(description);
- instance.one('#subtitle').val(subtitle);
- instance.one('#title').val(title);
- instance.one('#workflowAction').val(draft ? constants.ACTION_SAVE_DRAFT : constants.ACTION_PUBLISH);
- submitForm(form);
- }
- },
- _setDescriptionReadOnly: function(readOnly) {
- var instance = this;
- var descriptionEditorNode = instance.one('#descriptionEditor');
- descriptionEditorNode.attr('contenteditable', !readOnly);
- descriptionEditorNode.toggleClass('readonly', readOnly);
- },
- _shorten: function(text) {
- var instance = this;
- var descriptionLength = instance.get('descriptionLength');
- if (text.length > descriptionLength) {
- text = text.substring(0, descriptionLength);
- if (STR_SUFFIX.length < descriptionLength) {
- var spaceIndex = text.lastIndexOf(' ', descriptionLength - STR_SUFFIX.length);
- text = text.substring(0, spaceIndex).concat(STR_SUFFIX);
- }
- }
- return text;
- },
- _showCaption: function() {
- var instance = this;
- var captionNode = instance._captionNode;
- if (captionNode) {
- captionNode.removeClass(CSS_INVISIBLE);
- }
- },
- _syncDescriptionEditorUI: function() {
- var instance = this;
- var liferayDescriptionEditor = window[instance.ns('descriptionEditor')];
- if (liferayDescriptionEditor.instanceReady) {
- var nativeDescriptionEditor = liferayDescriptionEditor.getNativeEditor().get('nativeEditor');
- if (nativeDescriptionEditor && nativeDescriptionEditor.plugins && nativeDescriptionEditor.plugins.ae_placeholder) {
- var editorEvent = {
- editor: nativeDescriptionEditor
- };
- nativeDescriptionEditor.plugins.ae_placeholder._checkEmptyData(editorEvent);
- }
- }
- },
- _updateImages: function(persistentImages) {
- var instance = this;
- persistentImages.forEach(
- function(item, index) {
- var el = instance.one('img[' + item.attributeDataImageId + '="' + item.fileEntryId + '"]');
- if (el) {
- el.attr('src', item.fileEntryUrl);
- el.removeAttribute(item.attributeDataImageId);
- }
- }
- );
- },
- _updateStatus: function(text) {
- var instance = this;
- var saveStatus = instance.one('#saveStatus');
- if (saveStatus) {
- saveStatus.html(text);
- }
- }
- }
- }
- );
- Liferay.Blogs = Blogs;
- },
- '',
- {
- requires: ['aui-base', 'aui-io-request', 'liferay-portlet-base']
- }
- );