Javascript 露天:向所有成员发送邮件自定义按钮不';在某些特定的场所不起作用
在应用程序的“共享”部分,我在特定的站点仪表板中遇到了一个问题。Javascript 露天:向所有成员发送邮件自定义按钮不';在某些特定的场所不起作用,javascript,tinymce,share,alfresco,dashboard,Javascript,Tinymce,Share,Alfresco,Dashboard,在应用程序的“共享”部分,我在特定的站点仪表板中遇到了一个问题。 当您创建网站时,此问题会随机出现,显然没有特殊原因。 我的问题是关于“站点配置文件”dashlet。我开发了一个自定义按钮,使用户可以向订阅站点信息的一个或多个成员发送电子邮件。它依赖于javascript文件名“ts send mail to all members.js”当您单击它时,会打开一个弹出窗口,其中包含可用于选择成员的复选框、可用于编写电子邮件的TinyMCE组件和两个按钮,一个用于发送电子邮件,另一个用于关闭弹出窗
当您创建网站时,此问题会随机出现,显然没有特殊原因。
我的问题是关于“站点配置文件”dashlet。我开发了一个自定义按钮,使用户可以向订阅站点信息的一个或多个成员发送电子邮件。它依赖于javascript文件名“ts send mail to all members.js”
当您单击它时,会打开一个弹出窗口,其中包含可用于选择成员的复选框、可用于编写电子邮件的TinyMCE组件和两个按钮,一个用于发送电子邮件,另一个用于关闭弹出窗口。
订阅按钮也已创建,不会产生任何错误。
当您单击允许您发送电子邮件的按钮时,就会出现问题。 有一个javascript错误,该错误会根据站点的仪表板配置而出现。
1) 例如,如果页面上唯一的dashlet是“Site Profile”,则我有以下错误:
Alfresco.module.SimpleDialog is not a constructor
http://localhost:8080/share/res/modules/ts-send-mail-to-all-members.js
Line 139
tinyMCE is not defined
[Break on this error] tinyMCE.init({
代码行如下:var sendMailToAllMembersDialog = new Alfresco.module.SimpleDialog(this.id + "-sendMailToAllMembersDialog");
2) 我没有针对特定配置来获取此错误,但您也可以随机出现此错误:Alfresco.module.SimpleDialog is not a constructor
http://localhost:8080/share/res/modules/ts-send-mail-to-all-members.js
Line 139
tinyMCE is not defined
[Break on this error] tinyMCE.init({
显然,Alfresco没有识别tinyMCE,它抛出了一个异常。在脚本中,“tinyMCE.init”是调用组件的第一条语句。我已经对此错误进行了研究,通常您只需添加一个带有src=“”
参数的
标记,以指定tiny_mce.js的位置。我可以是一个URL或它在Alfresco应用程序中的位置然而,我的脚本完全是用JavaScript编写的,我不能编写HTML语句
3) 第三种情况是,弹出窗口出现,Functionality可以正常工作,没有任何例外。在站点的仪表板上添加“事件列表”dashlet时会发生这种情况 以下是“ts向所有成员发送邮件.js”源代码:
/**
* Copyright (C) T&S.
*
*/
/**
* ts-abonnement-site module
*
*
*
* @namespace Alfresco.module
* @class Alfresco.module.TsAbonnementSite
*/
(function()
{
var Dom = YAHOO.util.Dom,
Event = YAHOO.util.Event,
Element = YAHOO.util.Element,
Bubbling = YAHOO.Bubbling,
KeyListener = YAHOO.util.KeyListener
nodeRef = "";
/**
* CreateSite constructor.
*
* @param htmlId {string} A unique id for this component
* @return {Alfresco.CreateSite} The new DocumentList instance
* @constructor
*/
Alfresco.module.TsSendMailToAllMembers = function(containerId)
{
var instance = Alfresco.util.ComponentManager.get(this.id);
if (instance !== null)
{
throw new Error("An instance of Alfresco.module.TsSendMailToAllMembers already exists.");
}
Alfresco.module.TsSendMailToAllMembers.superclass.constructor.call(this, "Alfresco.module.TsSendMailToAllMembers", containerId, ["button", "container", "connection", "selector", "json"]);
return this;
};
YAHOO.extend(Alfresco.module.TsSendMailToAllMembers, Alfresco.component.Base,
{
members:[],
options:{
siteId:""
},
onReady: function TS_onReady()
{
this.widgets.sendMailToAllMembersButton = Alfresco.util.createYUIButton(this, "btn-sendMailToAllMembers", this.showSendMailForm);
this.widgets.sendMailToAllMembersButton.set("className", "mailBtn mailToAllMembersBtn");
Bubbling.on('selectDeselectAllChanged', this.selectDeselectAllChanged);
Bubbling.on('selectDeselectMemberChanged', this.selectDeselectMemberChanged);
},
showSendMailForm: function()
{
// Intercept before dialog show
var doBeforeDialogShow = function TsSendMailToAllMembers_doBeforeDialogShow(
p_form, p_dialog) {
Alfresco.util.populateHTML(
[p_dialog.id + "-dialogTitle", this.msg("label.sendMailToAllMembersForm.title") ],
[p_dialog.id + "-dialogHeader", this.msg("label.sendMailToAllMembersForm.header") ],
[p_dialog.id + "-members-label", this.msg("label.sendMailToAllMembersForm.members") ],
[p_dialog.id + "-subject-label", this.msg("label.sendMailToAllMembersForm.subject") ],
[p_dialog.id + "-body-label", this.msg("label.sendMailToAllMembersForm.body") ],
[p_dialog.id + "-ok-label", this.msg("label.sendMailToAllMembersForm.btn.send.mail") ],
[p_dialog.id + "-cancel-label", this.msg("label.sendMailToAllMembersForm.btn.cancel") ]);
p_dialog.dialog.header.innerHTML = this.msg("label.sendMailToAllMembersForm.dialog.title");
Dom.get(p_dialog.id + "-shortName").value = this.options.siteId;
tinyMCE.init({
mode : "exact",
elements: p_dialog.id + "-body",
convert_fonts_to_spans: false,
theme: 'advanced',
width: "100%",
theme_advanced_buttons1: "bold,italic,underline,|,bullist,numlist,|,forecolor,|,undo,redo,removeformat",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
theme_advanced_resizing: false,
theme_advanced_buttons2: null,
theme_advanced_buttons3: null,
theme_advanced_path: false,
language: 'fr'
});
Alfresco.util.Ajax.request(
{
url: Alfresco.constants.PROXY_URI + "api/sites/" + this.options.siteId + "/memberships",
dataObj:
{
htmlid : p_dialog.id + "-membersContainer"
},
successCallback:
{
fn: this.onMembersLoaded,
scope: this
}
});
};
var doBeforeFormSubmit = function ()
{
Dom.get(this.id + "-sendMailToAllMembersDialog-mailbody").value = tinyMCE.get(this.id + "-sendMailToAllMembersDialog-body").getContent({format : 'raw'});
var membersIds = "";
var cbs = YAHOO.util.Selector.query("input[id^='cb_']");
for (var i=0; i<cbs.length; i++)
{
var cb = cbs[i];
if (cb.checked)
{
var id = cb.id.replace("cb_", "");
if(cbs.length == 1 || i == cbs.length - 1) {
membersIds += id;
} else {
membersIds += id + ",";
}
}
}
Dom.get(this.id + "-sendMailToAllMembersDialog-membersIds").value = membersIds;
this.widgets.dialog.widgets.okButton.set("disabled", true);
this.widgets.dialog.widgets.cancelButton.set("disabled", true);
};
// Using Forms Service, so always create new
// instance
var sendMailToAllMembersDialog = new Alfresco.module.SimpleDialog(this.id + "-sendMailToAllMembersDialog");
this.widgets.dialog = sendMailToAllMembersDialog;
sendMailToAllMembersDialog.setOptions(
{
width : "60em",
templateUrl : Alfresco.constants.PROXY_URI + "ts/sendMailToAllMembers",
actionUrl : Alfresco.constants.PROXY_URI + "ts/sendHtmlMail",
destroyOnHide : true,
doBeforeFormSubmit:{
fn:doBeforeFormSubmit,
scope: this
},
doBeforeDialogShow : {
fn : doBeforeDialogShow,
scope : this
},
onSuccess : {
fn : function TsSendMailToAllMembers_success(response) {
YAHOO.Bubbling.fire(
"sendMailToAllMembersForm_success",
{
nodeRef : response.json.persistedObject
});
Alfresco.util.PopupManager.displayMessage({
text : this.msg("message.sendMailToAllMembersForm.success")
});
},
scope : this
},
onFailure : {
fn : function TsSendMailToAllMembers_failure(response) {
Alfresco.util.PopupManager.displayMessage({
text : this.msg("message.sendMailToAllMembersForm.failure")
});
},
scope : this
}
}).show();
},
onMembersLoaded: function TS_onMembersLoaded(response)
{
this.members = response.json;
this.updateMembersList(response.config.dataObj.htmlid);
},
updateMembersList : function TS_updateMembersList(containerId)
{
var div = Dom.get(containerId);
div.innerHTML = "<div class=\"memberDiv\">" +
"<input type=\"checkbox\" id=\"selectDeselectAllCb\" checked=\"true\" onclick=\"YAHOO.Bubbling.fire('selectDeselectAllChanged')\" class=\"memberCb\"/>" +
"<label for=\"selectDeselectAllCb\" class=\"memberLabel\">" +
this.msg('label.selectDeselectAll') + "</label>" +
"</div>";
for (var i=0; i<this.members.length; i++)
{
var member = this.members[i];
var avatar = Alfresco.constants.URL_CONTEXT + "/components/images/no-user-photo-64.png";
if (member.authority.avatar && member.avatar != "")
{
// exemple:
// api/node/workspace/SpacesStore/697ec77c-b881-4c16-82b6-4f80fea1514b/content/thumbnails/avatar
avatar = Alfresco.constants.PROXY_URI + member.authority.avatar + "?c=force";
}
div.innerHTML += "<div class=\"memberDiv\">" +
// "<img class=\"memberAvatar\" src=\"" + avatar + "\"/>" +
"<input type=\"checkbox\" id=\"cb_" + member.authority.userName + "\" checked=\"true\" onclick=\"YAHOO.Bubbling.fire('selectDeselectMemberChanged')\" class=\"memberCb\"/>" +
"<label for=\"cb_" + member.authority.userName + "\" class=\"memberLabel\">" +
member.authority.firstName + " " + member.authority.lastName + "</label>" +
"</div>";
}
},
selectDeselectAllChanged: function selectDeselectAllChanged(){
var selectDeselectAllCb = Dom.get('selectDeselectAllCb');
var checked = selectDeselectAllCb.checked;
var cbs = YAHOO.util.Selector.query("input[id^='cb_']");
for (var i=0, j=cbs.length; i<j; i++)
{
var cb = cbs[i];
cb.checked = checked;
}
},
selectDeselectMemberChanged: function selectDeselectMemberChanged(){
var selectDeselectAllCb = Dom.get('selectDeselectAllCb');
var cbs = YAHOO.util.Selector.query("input[id^='cb_']");
var firstChecked = false;
if (cbs[0] != null){
firstChecked = cbs[0].checked;
}
for (var i=0, j=cbs.length; i<j; i++)
{
var cb = cbs[i];
if (cb.checked === firstChecked){
continue;
}
else{
selectDeselectAllCb.checked = false;
return;
}
}
selectDeselectAllCb.checked = firstChecked;
},
/**
* Set messages for this component.
*
* @method setMessages
* @param obj {object} Object literal specifying a set of messages
* @return {Alfresco.SampleComponent} returns 'this' for method chaining
*/
setMessages: function SampleComponent_setMessages(obj)
{
Alfresco.util.addMessages(obj, this.name);
return this;
}
});
})();
Alfresco.module.geTsSendMailToAllMembersInstance = function()
{
var instanceId = "alfresco-TsSendMailToAllMembers-instance";
return Alfresco.util.ComponentManager.get(instanceId) || new Alfresco.module.TsSendMailToAllMembers(instanceId);
};
<#include "../component.head.inc">
<@link rel="stylesheet" type="text/css" href="${page.url.context}/res/modules/ts/ts.css" />
<@script type="text/javascript" src="${page.url.context}/res/modules/ts-abonnement-site.js"></@script>
<@script type="text/javascript" src="${page.url.context}/res/modules/ts-send-mail-to-all-members.js"></@script>
<script type="text/javascript">//<![CDATA[
new Alfresco.module.TsAbonnementSite("${args.htmlid}").setOptions(
{
siteId: "${profile.shortName}"
}).setMessages(${messages});
new Alfresco.module.TsSendMailToAllMembers("${args.htmlid}").setOptions(
{
siteId: "${profile.shortName}"
}).setMessages(${messages});
//]]></script>
<div id="${args.htmlid}-sendMailToAllMembersDialog"></div>
<div class="dashlet site-profile">
<div class="title">${msg("header.siteProfile")}</div>
<div class="body">
<div class="msg">
<#if profile.iconurl?exists && profile.iconurl != "">
<img src="/share/proxy/alfresco/api/node/${profile.iconurl}/content/thumbnails/avatar?c=force" height="60px" style="float:left;margin: 5px;"/>
</#if>
<h3><#if (profile.title != "")>${msg("text.welcome", profile.title)?html}<#else>${msg("text.welcome", profile.shortName)?html}</#if></h3>
<#if (profile.description != "")>
<p>${profile.description?html}</p>
</#if>
<#if profile.customProperties??>
<#list profile.customProperties?keys as prop>
<#assign customValue=profile.customProperties[prop].value>
<#if customValue?starts_with('alfresco-php://') == true>
<p><a href="${url.context}/proxy/alfresco-php/${customValue?substring(15)?html}" target="_blank" class="theme-color-1">${profile.customProperties[prop].title?html}</a></p>
<#else>
<p>
<span class="label">${profile.customProperties[prop].title?html}</span>
<span>${customValue?html}</span>
</p>
</#if>
</#list>
</#if>
<#if (sitemanagers?exists && sitemanagers?size > 0)>
<p>
<span class="label">${msg("label.siteAdmin")}</span>
<#list sitemanagers as sitemanager>
<#if sitemanager.authority.authorityType = 'USER'>
<a href="${url.context}/page/user/${sitemanager.authority.userName?url}/profile" class="theme-color-1">${sitemanager.authority.firstName?html}<#if sitemanager.authority.lastName != ""> ${sitemanager.authority.lastName?html}</#if></a><#if sitemanager_has_next>,</#if>
<#else>
<span>${sitemanager.authority.displayName?html}</span><#if sitemanager_has_next>,</#if>
</#if>
</#list>
</p>
</#if>
<p><span class="label">${msg("label.type")}</span> ${msg("text." + profile.type?lower_case)}</p>
<p><span class="label">${msg("label.visibility")}</span> ${msg("text." + (profile.visibility!"unknown")?lower_case)}</p>
<p><span class="label">${msg("ts-site-profile.siteMembersNbr")}</span> ${profile.siteMembersNbr?html}</p>
<p><span class="label">${msg("ts-site-profile.creationDate")}</span> ${profile.creationDate}</p>
<p>
<button id="${args.htmlid}-btn-sendMailToAllMembers" title='${msg("ts-site-profile.sendMailToAllMembers")}'>
<img class="mailBtn" src="${url.context}/res/modules/ts/images/email-icon.png"/></button>
<div id="${args.htmlid}-div-btn-abo" style="display:none;">
<button id="${args.htmlid}-btn-subscribeDaily" title='${msg("ts-site-profile.subscribeDaily")}'>
<img class="mailBtn" src="${url.context}/res/modules/ts/images/calendar-selection-day-icon.png"/></button>
<button id="${args.htmlid}-btn-subscribeWeekly" title='${msg("ts-site-profile.subscribeWeekly")}'>
<img class="mailBtn" src="${url.context}/res/modules/ts/images/calendar-selection-week-icon.png"/></button>
</div>
<div id="${args.htmlid}-div-btn-delete" style="display:none;">
<button id="${args.htmlid}-btn-delete">
<img class="mailBtn" src="" id="${args.htmlid}-img-btn-delete"/></button>
</div>
</p>
</div>
<div class="clear"></div>
</div>
</div>
/**
*版权所有(C)T&S。
*
*/
/**
*ts连接站点模块
*
*
*
*@namespace Alfresco.module
*@class Alfresco.module.TsAbonnementSite
*/
(功能()
{
var Dom=YAHOO.util.Dom,
Event=YAHOO.util.Event,
Element=YAHOO.util.Element,
冒泡,冒泡,
KeyListener=YAHOO.util.KeyListener
nodeRef=“”;
/**
*创建站点构造函数。
*
*@param htmlId{string}此组件的唯一id
*@return{Alfresco.CreateSite}新的DocumentList实例
*@constructor
*/
Alfresco.module.TsSendMailToAllMembers=函数(containerId)
{
var instance=Alfresco.util.ComponentManager.get(this.id);
如果(实例!==null)
{
抛出新错误(“Alfresco.module.TsSendMailToAllMembers的实例已存在。”);
}
Alfresco.module.TsSendMailToAllMembers.superclass.constructor.call(这是“Alfresco.module.TsSendMailToAllMembers”,containerId,[“按钮”,“容器”,“连接”,“选择器”,“json]”);
归还这个;
};
YAHOO.extend(Alfresco.module.TsSendMailToAllMembers、Alfresco.component.Base、,
{
成员:[],
选项:{
站点ID:“
},
onReady:函数TS_onReady()
{
this.widgets.sendMailToAllMembersButton=Alfresco.util.createYUIButton(this,“btn sendMailToAllMembers”,this.showSendMailForm);
this.widgets.sendMailToAllMembersButton.set(“className”,“mailBtn mailToAllMembersBtn”);
冒泡.on('selectDecelAllChanged',this.selectDecelAllChanged);
冒泡.on('selectDeclemberChanged',this.selectDeclemberChanged);
},
showSendMailForm:function()
{
//对话框显示前截取
var doBeforeDialogShow=函数TsSendMailToAllMembers\u doBeforeDialogShow(
p_表单,p_对话框){
Alfresco.util.populateHTML(
[p_dialog.id+“-dialogTitle”,this.msg(“label.sendMailToAllMembersForm.title”),
[p_dialog.id+“-dialogHeader”,this.msg(“label.sendMailToAllMembersForm.header”),
[p_dialog.id+“-members label”,this.msg(“label.sendMailToAllMembersForm.members”),
[p_dialog.id+“-subject label”,this.msg(“label.sendMailToAllMembersForm.subject”),
[p_dialog.id+“-body label”,this.msg(“label.sendMailToAllMembersForm.body”),
[p_dialog.id+“-ok label”,this.msg(“label.sendMailToAllMembersForm.btn.send.mail”),
[p_dialog.id+“-cancel label”,this.msg(“label.sendMailToAllMembersForm.btn.cancel”);
p_dialog.dialog.header.innerHTML=this.msg(“label.sendMailToAllMembersForm.dialog.title”);
get(p_dialog.id+“-shortName”).value=this.options.siteId;
tinyMCE.init({
模式:“精确”,
元素:p_dialog.id+“-body”,
将字体转换为跨度:false,
主题:"先进",,
宽度:“100%”,
主题高级按钮1:“粗体、斜体、下划线、|、粗线、粗线、|、前彩色、|、撤消、重做、删除格式”,
主题\高级\工具栏\位置:“顶部”,
主题\高级\工具栏\对齐:“左”,
主题\高级\状态栏\位置:“底部”,
主题\u高级\u大小调整:错误,
主题\高级\按钮2:空,
主题\高级\按钮3:空,
主题\u高级\u路径:错误,
语言:“fr”
});
Alfresco.util.Ajax.request(
{
url:Alfresco.constants.PROXY_URI+“api/sites/”+this.option