UNPKG

jsharmony-cms

Version:
396 lines (340 loc) 16.6 kB
jsh.App[modelid] = new (function(){ var _this = this; _this.template_page_template_selection = $('.xctrl_page_template_selection_template').html(); this.oninit = function(xmodel){ jsh.System.RequireBranch(xmodel); if(XExt.hasAction(xmodel.actions, 'IU')){ xmodel.controller.grid.NoResultsMessage = "<a href='#' class='xgrid_norecords' onclick=\""+jsh._instance+".App['"+xmodel.id+"'].addFile(); return false;\"><img src='<%-jsh._PUBLICURL%>images/icon_insert.png' alt='Add' title='Add' />Add Page</a>"; } else { xmodel.controller.grid.NoResultsMessage = 'Folder is empty'; } xmodel.controller.grid.NoDataMessage = xmodel.controller.grid.NoResultsMessage; if(XExt.hasAction(xmodel.actions, 'IU')){ jsh.$root('.xtbl.xform'+xmodel.class).closest('.xsubform').off('contextmenu').on('contextmenu',function(e){ e.preventDefault(); e.stopPropagation(); XExt.ShowContextMenu('.'+xmodel.class+'_file_container_context_menu', xmodel.get('page_folder')); }); } }; this.onrowbind = function(xmodel,jobj,datarow){ if(XExt.hasAction(xmodel.actions, 'IU')){ var page_key = parseInt(datarow.page_key||0); jobj.find('.page_filename').contextmenu(function (e) { e.preventDefault(); e.stopPropagation(); XExt.ShowContextMenu('.'+xmodel.class+'_file_context_menu', page_key); }); XExt.bindDragSource(jobj.find('.page_filename a')); } }; this.page_template_selection_render = function(obj, data, enabled){ $(obj).toggleClass('standalone', (data.page_template_id=='<Standalone>')); return XExt.renderEJS(_this.template_page_template_selection, xmodel.id, { data: data, obj: obj, editable: (enabled===true), }); }; this.page_template_selection_id_onChange = function(obj){ var page_template_id = $(obj).val(); var rowid = XExt.XModel.GetRowID(modelid, obj); var page_template_path = xmodel.get('page_template_path', rowid) || null; var isExistingPage = (page_template_id=='<Standalone>'); XExt.execif(isExistingPage, function(f){ _this.page_template_selection_path_popup(obj, page_template_path, function(_page_template_path){ //Accept page_template_path = _page_template_path; return f(); }, function(){ //Cancel $(obj).val(xmodel.get('page_template_id', rowid)); } ); }, function(){ $(obj).closest('.page_template').toggleClass('standalone', isExistingPage); xmodel.set('page_template_path', isExistingPage?page_template_path:null, rowid); xmodel.set('page_template_id', page_template_id, rowid); jsh.$root('.xrow_'+xmodel.class+'[data-id='+rowid+'] .page_template_selection_id').addClass('updated'); } ); }; this.page_template_selection_path_popup = function(obj, val, onAccept, onCancel){ var rowid = XExt.XModel.GetRowID(modelid, obj); var prev_page_template_path = xmodel.get('page_template_path', rowid); if(!onAccept) onAccept = function(page_template_path){ if(page_template_path == prev_page_template_path) return; xmodel.set('page_template_path', page_template_path, rowid); jsh.$root('.xrow_'+xmodel.class+'[data-id='+rowid+'] .page_template_selection_id').addClass('updated'); }; if(!onCancel) onCancel = function(){}; if(typeof val == 'undefined') val = xmodel.get('page_template_path', rowid); XExt.Prompt('Template URL', val, function(rslt){ if(rslt===''){ return XExt.Alert('Template URL is required for <Standalone> Templates', function(){ _this.page_template_selection_path_popup(obj, val, onAccept, onCancel); }); } else if(!rslt) return onCancel(); else return onAccept(rslt); }); }; this.viewFileActions = function(obj){ if (jsh.XPage.GetChanges().length) return XExt.Alert('Please save all changes before editing page'); var jobj = $(obj); var rowid = jobj.closest('tr').data('id'); var page_key = xmodel.get('page_key', rowid); if(!page_key) return XExt.Alert('Please save changes'); var jpos = jobj.offset(); event.preventDefault(); event.stopImmediatePropagation(); XExt.ShowContextMenu('.'+xmodel.class+'_file_context_menu', page_key, undefined, { top: jpos.top + jobj.find('img').outerHeight() + 6, left: jpos.left - 1 }); }; this.editFile = function(obj){ //obj || page_key if (jsh.XPage.GetChanges().length) return XExt.Alert('Please save all changes before editing page'); var rowid = undefined; var page_key = undefined; if(_.isNumber(obj)){ page_key = obj; if(xmodel.controller.form && xmodel.controller.form.DataSet){ rowid = -1; for(var i=0;i<xmodel.controller.form.DataSet.length;i++){ if(xmodel.controller.form.DataSet[i]['page_key']==page_key) rowid = i; } if(rowid < 0) return XExt.Alert('Page key not found in grid'); } } else rowid = $(obj).closest('tr').data('id'); page_key = xmodel.get('page_key', rowid); if(!page_key) return XExt.Alert('Please save page before editing'); var page_template_id = xmodel.get('page_template_id', rowid); if(!page_template_id) return XExt.Alert('Please select a template before editing'); var page_template_path = xmodel.get('page_template_path', rowid); jsh.System.OpenPageEditor(page_key, xmodel.get('page_filename', rowid), page_template_id, { source: 'page_tree', rawEditorDialog: '.'+xmodel.class+'_RawTextEditor', page_template_path: page_template_path }); }; this.page_filename_onclick = function(obj){ if(xmodel.parent && jsh.App[xmodel.parent].isInEditor){ return _this.sendToEditor(obj); } else { return _this.editFile(obj); } }; this.previewFile = function(page_file){ var page_key = page_file.page_key; var page_id = page_file.page_id; var page_template_id = page_file.page_template_id; var page_template_path = page_file.page_template_path; var page_filename = page_file.page_filename||''; if(!page_template_id) return XExt.Alert('Invalid page template'); jsh.System.OpenPageEditor(page_key, page_filename, page_template_id, { source: 'page_tree', rawEditorDialog: '.'+xmodel.class+'_RawTextEditor', page_id: page_id, page_template_path: page_template_path }); }; this.addFile = function(page_folder){ var orig_page_folder = page_folder; if (jsh.XPage.GetChanges().length) return XExt.Alert('Please save all changes before adding a page'); if(typeof page_folder == 'undefined') page_folder = xmodel.get('page_folder'); var xform = xmodel.controller.form; var sel = '.'+xmodel.class+'_AddFile'; XExt.CustomPrompt(sel, jsh.$root(sel)[0].outerHTML, function () { //onInit var jprompt = jsh.$dialogBlock(sel); XExt.RenderLOV(xform.Data, jsh.$dialogBlock(sel + ' .page_template_id'), xform.LOVs.page_template_id); //Clear Values / Set Defaults jprompt.find('.page_filename').val(''); jprompt.find('.page_title').val(''); jprompt.find('.page_template_id').val(jsh.XPage.getBreadcrumbs().site_default_page_template_id); jprompt.find('.page_template_path').val(''); jprompt.find('.site_default_page_filename').text(jsh.XPage.getBreadcrumbs().site_default_page_filename); var jfilename = jprompt.find('.page_filename'); jprompt.find('.page_filename_default_document').off('click').on('click', function(){ if($(this).is(':checked')){ jfilename.prop('readonly', true); jfilename.val(jsh.App[xmodel.parent].getDefaultPage()); jfilename.addClass('uneditable'); } else{ jfilename.prop('readonly', false); jfilename.val(''); jfilename.removeClass('uneditable'); } }); var jTemplateId = jprompt.find('.page_template_id'); var toggleTemplatePath = function(){ jprompt.find('.page_template_path_container').toggle(jTemplateId.val()=='<Standalone>'); jsh.XWindowResize(); }; jTemplateId.off('.template_path').on('change.template_path', function(e){ toggleTemplatePath(); }); toggleTemplatePath(); }, function (success) { //onAccept var jprompt = jsh.$dialogBlock(sel); //Validate File Selected var page_filename = jprompt.find('.page_filename').val(); var page_title = jprompt.find('.page_title').val(); var page_template_id = jprompt.find('.page_template_id').val(); var page_template_path = jprompt.find('.page_template_path').val(); if (!page_filename) return XExt.Alert('Please enter a file name'); if (page_filename.indexOf('/') >= 0) return XExt.Alert('File name cannot contain "/" character'); if (XExt.cleanFileName(page_filename) != page_filename) return XExt.Alert('File name contains invalid characters'); if (!page_template_id) return XExt.Alert('Please select a template.'); if (page_template_id=='<Standalone>'){ if (!page_template_path) return XExt.Alert('Please enter a page Template URL.'); } else page_template_path = null; if (page_filename.indexOf('.') < 0) page_filename += '.html'; var params = { page_path: page_folder + page_filename, page_title: page_title, page_template_id: page_template_id, page_template_path: page_template_path, }; XForm.Put(xmodel.module_namespace+'Page_Tree_Listing', { }, params, function(rslt){ //Refresh parent if(orig_page_folder){ jsh.App[xmodel.parent].setFolderBeforeLoad(orig_page_folder); jsh.XPage.Select({ modelid: xmodel.parent, onCancel: function(){} }, success); } else{ jsh.XPage.Select({ modelid: 'Page_Tree_Listing', onCancel: function(){} }, success); } }); }); }; this.sendToEditor = function(obj){ var rowid = $(obj).closest('tr').data('id'); var page_key = xmodel.get('page_key', rowid); var page_title = xmodel.get('page_title', rowid); var page_path = xmodel.get('page_path', rowid); var page_folder = xmodel.get('page_folder', rowid); if(window.opener && jsh._GET.CKEditor){ window.opener.postMessage('ckeditor:'+JSON.stringify({ page_key: page_key, CKEditorFuncNum: jsh._GET.CKEditorFuncNum }), '*'); window.close(); } else { if(!window.opener) return XExt.Alert('Parent editor not found'); window.opener.postMessage('cms_file_picker:'+JSON.stringify({ page_key: page_key, page_title: page_title, page_path: page_path, page_folder: page_folder }), '*'); window.close(); } }; this.getPage = function(page_key){ var page_index = _this.getPageIndex(page_key); if(typeof page_index !== 'undefined') return xmodel.controller.form.DataSet[page_index]; return undefined; }; this.getPageIndex = function(page_key){ if(xmodel.controller.form && xmodel.controller.form.DataSet){ for(var i=0;i<xmodel.controller.form.DataSet.length;i++){ var page = xmodel.controller.form.DataSet[i]; if(page.page_key==page_key) return i; } } return undefined; }; this.duplicateFile = function(page_key){ if (jsh.XPage.GetChanges().length) return XExt.Alert('Please save all changes before duplicating a file'); var page = _this.getPage(page_key); if(!page) return XExt.Alert('Invalid page'); var page_filename = page.page_filename; var retry = function(){ _this.duplicateFile(page_key); }; XExt.Prompt('Please enter the new file name', page_filename, function (rslt) { if(rslt === null) return; rslt = rslt.trim(); if(!rslt) return XExt.Alert('Please enter a file name', retry); if(XExt.cleanFileName(rslt) != rslt) return XExt.Alert('Please enter a valid filename', retry); var params = { page_key: page_key, page_path: page.page_folder + rslt }; XForm.Post(xmodel.module_namespace+'Page_Tree_File_Duplicate', {}, params, function(rslt){ //Refresh parent jsh.XPage.Select({ modelid: 'Page_Tree_Listing', onCancel: function(){} }); }); }); }; this.viewRevisions = function(page_key){ if (jsh.XPage.GetChanges().length) return XExt.Alert('Please save all changes before viewing revisions'); var page = _this.getPage(page_key); jsh.App[xmodel.parent].revision_page_key = page_key; jsh.App[xmodel.parent].revision_page_id = page.page_id; jsh.XExt.popupShow(xmodel.namespace + 'Page_Revision_Listing','revision_page','Revisions',undefined,jsh.$root('.xform'+jsh.XModels[xmodel.parent].class+' .revision_page_xlookup')[0],{ OnControlUpdate:function(obj, rslt){ if(rslt && rslt.result){ var page_id = rslt.result; XForm.Post(xmodel.namespace+'Page_Revision_Update',{},{ page_key: page_key, page_id: page_id }, function(){ jsh.XPage.Select({ modelid: 'Page_Tree_Listing', onCancel: function(){} }); }); } } }); }; this.renameFile = function(page_key){ var page = _this.getPage(page_key); var page_filename = page.page_filename; var retry = function(){ _this.renameFile(page_key); }; XExt.Prompt('Please enter the new file name', page_filename, function (rslt) { if(rslt === null) return; rslt = rslt.trim(); if(rslt == page_filename) return; if(!rslt){ return XExt.Alert('Please enter a file name', retry); } if(XExt.cleanFileName(rslt) != rslt) return XExt.Alert('Please enter a valid filename', retry); var params = { page_path: page.page_folder + rslt, page_title: page.page_title, page_template_id: page.page_template_id, page_template_path: page.page_template_path, }; XForm.Post(xmodel.module_namespace+'Page_Tree_Listing', { page_key: page_key }, params, function(rslt){ //Refresh parent jsh.XPage.Select({ modelid: 'Page_Tree_Listing', onCancel: function(){} }); }); }); }; this.moveFile = function(page_key, new_page_path){ new_page_path = new_page_path||''; var page = _this.getPage(page_key); var page_path = page.page_path; XExt.execif(!new_page_path, function(f){ var retry = function(){ _this.moveFile(page_key); }; XExt.Prompt('Please enter a new path', page_path, function (rslt) { if(rslt === null) return; rslt = rslt.trim(); if(rslt == page_path) return; if(!rslt) return XExt.Alert('Please enter a file name', retry); if(rslt[0] != '/') return XExt.Alert('Path must start with "/"', retry); new_page_path = rslt; f(); }); }, function(){ var params = { page_path: new_page_path, page_title: page.page_title, page_template_id: page.page_template_id, page_template_path: page.page_template_path, }; XForm.Post(xmodel.module_namespace+'Page_Tree_Listing', { page_key: page_key }, params, function(rslt){ //Refresh parent //var page_folder = XExt.dirname(new_page_path) + '/'; //if(new_page_path[new_page_path.length-1] == '/') page_folder = new_page_path; _this.reloadParent(xmodel.get('page_folder'), function(){ if(!xmodel.get('page_folder')){ _this.reloadParent('/'); } }); }); } ); }; this.reloadParent = function(page_folder, cb){ jsh.App[xmodel.parent].setFolderBeforeLoad(page_folder); jsh.XPage.Select({ modelid: xmodel.parent, onCancel: function(){} }, cb); }; this.deleteFile = function(page_key){ var page = _this.getPage(page_key); XExt.Confirm('Are you sure you want to delete "'+page.page_filename+'"?', function (rslt) { XForm.Delete(xmodel.module_namespace+'Page_Tree_Listing', { page_key: page_key }, { }, function(rslt){ //Refresh parent jsh.XPage.Select({ modelid: 'Page_Tree_Listing', onCancel: function(){} }); }); }); }; })();