jsharmony-cms
Version:
142 lines (126 loc) • 5.63 kB
JavaScript
/*
Copyright 2019 apHarmony
This file is part of jsHarmony.
jsHarmony is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
jsHarmony is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this package. If not, see <http://www.gnu.org/licenses/>.
*/
exports = module.exports = function(jsh, cms){
var _this = this;
var XExt = jsh.XExt;
var $ = jsh.$;
this.lastMediaPath = undefined;
this.lastLinkPath = undefined;
this.getParameters = function(filePickerType, url){
url = (url||'').toString();
if(cms.onGetFilePickerParameters){
var qs = cms.onGetFilePickerParameters(filePickerType, url);
if(qs) return qs;
}
if(url.indexOf('#@JSHCMS') >= 0){
var urlparts = document.createElement('a');
urlparts.href = url;
var patharr = (urlparts.pathname||'').split('/');
if(((urlparts.pathname||'').indexOf('/_funcs/media/')==0) && (patharr.length>=4)){
var media_key = parseInt(patharr[3]);
if(media_key.toString()==patharr[3]) return { init_media_key: media_key };
}
if(((urlparts.pathname||'').indexOf('/_funcs/page/')==0) && (patharr.length>=4)){
var page_key = parseInt(patharr[3]);
if(page_key.toString()==patharr[3]) return { init_page_key: page_key };
}
}
else if((filePickerType === 'link') && _this.lastLinkPath) {
if(_this.lastLinkPath.init_media_path) return { init_media_path: _this.lastLinkPath.init_media_path };
else if(_this.lastLinkPath.init_page_path) return { init_page_path: _this.lastLinkPath.init_page_path };
}
else if ((filePickerType === 'media') && _this.lastMediaPath) return { init_media_path: _this.lastMediaPath.init_media_path };
return {};
};
this.openLink = function(cb, value, meta){
cms.filePickerCallback = cb;
var qs = _this.getParameters('link', value);
XExt.popupForm('jsHarmonyCMS/Link_Browser', 'update', qs, { width: 1100, height: 600 });
};
this.openMedia = function(cb, value, meta){
cms.filePickerCallback = cb;
var qs = _this.getParameters('media', value);
XExt.popupForm('jsHarmonyCMS/Media_Browser', 'update', qs, { width: 1100, height: 600 });
};
this.onmessage = function(event, data){
if(data.indexOf('cms_file_picker:')==0){
if(!cms.filePickerCallback) return true;
data = data.substr(16);
var jdata = JSON.parse(data);
if(cms.onFilePickerCallback && (cms.onFilePickerCallback(jdata))){ /* Do nothing */ }
else if(jdata.media_key){
_this.lastMediaPath = { init_media_path: jdata.media_folder };
_this.lastLinkPath = { init_media_path: jdata.media_folder };
if(jdata.media_path) jdata.text = XExt.basename(jdata.media_path);
cms.filePickerCallback(cms._baseurl+'_funcs/media/'+jdata.media_key+'/?media_file_id='+jdata.media_file_id+'#@JSHCMS', jdata);
}
else if(jdata.page_key){
_this.lastLinkPath = { init_page_path: jdata.page_folder };
if(jdata.page_title) jdata.text = jdata.page_title;
cms.filePickerCallback(cms._baseurl+'_funcs/page/'+jdata.page_key+'/#@JSHCMS', jdata);
}
else XExt.Alert('Invalid response from File Browser: '+JSON.stringify(jdata));
cms.filePickerCallback = null;
return true;
}
return false;
};
this.fileSelector_onGetValue = function(val, field, xmodel, jctrl, parentobj){
return jctrl.find('input.jsharmony_cms_fileselector').val();
};
this.fileSelector_render = function(fileSelectorType, xmodel, field, val){ //fileSelectorType = link_browser or media_browser
return XExt.renderEJS(jsh.$('.jsharmony_cms_fileselector_template').html(), xmodel.id, {
fileSelectorType: fileSelectorType,
field: field,
val: val,
});
};
this.fileSelector_onChange = function(obj){
var jobj = $(obj);
var jctrl = jobj.closest('.xform_ctrl');
var xform = XExt.getFormFromObject(obj);
if(jctrl.length && xform){
if(!jctrl.hasClass('editable')) return;
xform.Data.OnControlUpdate(jctrl[0]);
}
};
this.fileSelector_reset = function(obj){
var jobj = $(obj);
var jparent = jobj.closest('.jsharmony_cms_fileselector_container');
var jtext = jparent.find('input.jsharmony_cms_fileselector');
jtext.val('');
_this.fileSelector_onChange(obj);
};
this.fileSelector_browse = function(obj){
var jobj = $(obj);
var jparent = jobj.closest('.jsharmony_cms_fileselector_container');
var jtext = jparent.find('input.jsharmony_cms_fileselector');
var fileSelectorType = jparent.data('fileselectortype');
var val = jtext.val();
if(fileSelectorType == 'link_browser'){
_this.openLink(function(url, data) {
jtext.val(url);
_this.fileSelector_onChange(obj);
}, val);
}
else if(fileSelectorType == 'media_browser'){
_this.openMedia(function(url, data) {
jtext.val(url);
_this.fileSelector_onChange(obj);
}, val);
}
else XExt.Alert('Invalid File Selector Type: '+fileSelectorType);
};
};