296 lines
9.5 KiB
JavaScript
296 lines
9.5 KiB
JavaScript
var snippets_js = true;
|
|
// ========================
|
|
window.arSnippets = {};
|
|
// ========================
|
|
|
|
function BXSnippetsTaskbar()
|
|
{
|
|
var pListCell;
|
|
var oTaskbar = this;
|
|
oTaskbar._arSnippets = [];
|
|
|
|
BXSnippetsTaskbar.prototype.OnTaskbarCreate = function ()
|
|
{
|
|
this.icon = 'snippets';
|
|
this.iconDiv.className = 'tb_icon bxed-taskbar-icon-' + this.icon;
|
|
this.pHeaderTable.setAttribute("__bxtagname", "_taskbar_cached");
|
|
this.oTaskbar = ar_BXTaskbarS["BXSnippetsTaskbar_" + this.pMainObj.name];
|
|
this.oTaskbar.pCellSnipp = this.oTaskbar.CreateScrollableArea(this.oTaskbar.pWnd);
|
|
|
|
try{
|
|
this.loadSnippets();
|
|
}catch(e) { _alert('BXSnippetsTaskbar: OnTaskbarCreate');}
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.loadSnippets = function(clear_cache)
|
|
{
|
|
var _this = this;
|
|
var onload = function()
|
|
{
|
|
_this.BuildList(window.arSnippets);
|
|
BX.closeWait();
|
|
};
|
|
|
|
var q = new JCHttpRequest();
|
|
q.Action = function(result){try{setTimeout(onload, 5);}catch(e){_alert('error: loadSnippets');};};
|
|
|
|
try{
|
|
q.Send(manage_snippets_path + '&templateID='+oTaskbar.pMainObj.templateID+'&target=load'+(clear_cache === true ? '&clear_snippets_cache=Y' : ''));
|
|
}catch(e){onload();}
|
|
};
|
|
|
|
|
|
BXSnippetsTaskbar.prototype.BuildList = function (__arElements)
|
|
{
|
|
this.oTaskbar.pMainObj.arSnippetsCodes = [];
|
|
var _this = this, oEl, i, l, _path;
|
|
this.__arGroups = {};
|
|
var addGroup = function(name,path)
|
|
{
|
|
_this.oTaskbar.AddElement({name:name,tagname:'',isGroup:true,childElements:[],icon:'',path:path,code:''},_this.oTaskbar.pCellSnipp,path);
|
|
};
|
|
|
|
for (var key in __arElements)
|
|
{
|
|
oEl = __arElements[key];
|
|
if (oEl.path != '')
|
|
{
|
|
arPath = oEl.path.split("/");
|
|
l = arPath.length;
|
|
for (i = 0; i < l; i++)
|
|
{
|
|
if (!this.__arGroups[i])
|
|
this.__arGroups[i] = {};
|
|
|
|
if(!this.__arGroups[i][arPath[i]])
|
|
{
|
|
this.__arGroups[i][arPath[i]] = true;
|
|
addGroup(arPath[i], (i == 0) ? '' : arPath[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
oEl.tagname = 'snippet';
|
|
oEl.isGroup = false;
|
|
oEl.icon = '/bitrix/images/fileman/htmledit2/snippet.gif';
|
|
oEl.path = oEl.path.replace("/", ",");
|
|
oEl.code = this.Remove__script__(oEl.code);
|
|
oEl.description = oEl.description;
|
|
oEl.title = oEl.title;
|
|
|
|
var c = "sn_"+Math.round(Math.random() * 1000000);
|
|
this.oTaskbar.pMainObj.arSnippetsCodes[c] = key;
|
|
oEl.params = {c : c};
|
|
|
|
this.oTaskbar.AddElement(oEl, this.oTaskbar.pCellSnipp, oEl.path);
|
|
}
|
|
this.oTaskbar.AddSnippet_button();
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.AddSnippet_button = function()
|
|
{
|
|
if (!oTaskbar)
|
|
oTaskbar = this;
|
|
|
|
var
|
|
id = "___add_snippet___"+this.oTaskbar.pMainObj.name,
|
|
oDiv = BX(id);
|
|
if (oDiv)
|
|
this.oTaskbar.pCellSnipp.removeChild(oDiv);
|
|
|
|
oDiv = this.oTaskbar.pCellSnipp.appendChild(BX.create("DIV", {props: {id: id, className: 'bxed-add-snip-cont'}}));
|
|
oDiv.appendChild(BX.create("A", {props: {href: 'javascript:void("")'}, text: BX_MESS.AddSnippet, events: {click: function(){oTaskbar.addSnippet(); return false;}}}));
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.Remove__script__ = function (str)
|
|
{
|
|
str = str.toString();
|
|
str = str.replace(/<script/ig, "<script");
|
|
str = str.replace(/<\/script/ig, "</script");
|
|
str = str.replace(/\\n/ig, "\n");
|
|
return str;
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.OnElementClick = function (oEl, arEl)
|
|
{
|
|
_pTaskbar = this.pMainObj.oPropertiesTaskbar;
|
|
|
|
if (!_pTaskbar.bActivated || !_pTaskbar.pTaskbarSet.bShowing)
|
|
return;
|
|
|
|
//****** DISPLAY TITLE *******
|
|
var
|
|
_this = this,
|
|
snippetName = arEl.name,
|
|
snippetTitle = arEl.title,
|
|
prCell,
|
|
maxLength = 70,
|
|
snippetShortTitle = (snippetTitle.length > maxLength) ? snippetTitle.substr(0, maxLength) + '...' : snippetTitle,
|
|
key = (arEl.path == '' ? '' : arEl.path.replace(',', '/') + '/')+arEl.name,
|
|
snippetCode = arSnippets[key].code,
|
|
snippetDesc = arSnippets[key].description;
|
|
|
|
var
|
|
tCompTitle = BX.create("TABLE", {props: {className: "componentTitle"}, style:{height: "96%"}}),
|
|
row = tCompTitle.insertRow(-1),
|
|
cell = row.insertCell(-1);
|
|
cell.innerHTML = "<table style='width:100%'><tr><td style='width:85%'><SPAN title='" + bxhtmlspecialchars(snippetTitle) + "' class='title'>" + bxhtmlspecialchars(snippetShortTitle) + " (" + snippetName+")</SPAN><BR /><SPAN class='description'>" + bxhtmlspecialchars(snippetDesc) + "</SPAN></td><td style='width:15%; padding-right: 20px; text-align: right;' align='right'><div style='width: 62px; float: right;'><span id='__edit_snip_but' class= 'iconkit_c' style='width: 29px; display:inline-block; height: 17px; background-position: -29px -62px;' title='"+BX_MESS.EditSnippet+"'></span> <span id='__del_snip_but' class= 'iconkit_c' style='width: 29px; height: 17px; background-position: 0px -62px; display:inline-block;' title='"+BX_MESS.DeleteSnippet+"'></span></td></tr></table>";
|
|
|
|
cell.className = "titlecell";
|
|
cell.width = "100%";
|
|
cell.align = "left";
|
|
row = tCompTitle.insertRow(-1);
|
|
cell = row.insertCell(-1);
|
|
cell.className = "bxcontentcell";
|
|
|
|
_tbl = cell.appendChild(document.createElement("TABLE"));
|
|
_tbl.style.width = "100%";
|
|
_tbl.style.height = "100%";
|
|
_r = _tbl.insertRow(-1);
|
|
|
|
var thumb = arSnippets[key].thumb;
|
|
if (thumb)
|
|
{
|
|
prCell = _r.insertCell(-1);
|
|
prCell.className = 'bx_snip_preview bx_snip_valign';
|
|
var thumb_src = BX_PERSONAL_ROOT + "/templates/"+arSnippets[key].template+"/snippets/images/"+(arEl.path == '' ? '' : (arEl.path.replace(',', '/')+'/'))+thumb;
|
|
var img = prCell.appendChild(document.createElement("IMG"));
|
|
img.src = thumb_src;
|
|
img.onerror = function(){this.parentNode.removeChild(this);};
|
|
}
|
|
|
|
_c = _r.insertCell(-1);
|
|
_c.style.width = "100%";
|
|
_c.className = "bx_snip_valign";
|
|
|
|
var _repl_tags = function(str)
|
|
{
|
|
str = str.replace(/</g,'<');
|
|
str = str.replace(/>/g,'>');
|
|
return str;
|
|
};
|
|
|
|
var _d = _c.appendChild(BX.create('DIV', {props: {className: 'bx_snip_code_preview'}, html: "<pre>"+_repl_tags(snippetCode)+"</pre>"}));
|
|
|
|
BX.cleanNode(_pTaskbar.pCellProps);
|
|
var par_w = parseInt(_pTaskbar.pCellProps.offsetWidth);
|
|
|
|
setTimeout(function (){_pTaskbar.pCellProps.appendChild(tCompTitle);}, 10);
|
|
setTimeout(function ()
|
|
{
|
|
var editBut = BX("__edit_snip_but");
|
|
var delBut = BX("__del_snip_but");
|
|
if (!editBut || !delBut)
|
|
return;
|
|
|
|
editBut.onclick = function(e){_this.editSnippet(arSnippets[key],oEl);};
|
|
delBut.onclick = function(e){_this.delSnippet(arSnippets[key],oEl);};
|
|
|
|
var w = parseInt(tCompTitle.offsetWidth);
|
|
if (!isNaN(par_w) && !isNaN(w) && par_w + 10 < w)
|
|
{
|
|
pr_w = prCell ? parseInt(prCell.offsetWidth) : 0;
|
|
_d.style.width = (par_w - (pr_w || 0) - 40) + 'px';
|
|
}
|
|
}, 100);
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.OnElementDragEnd = function(oEl)
|
|
{
|
|
var oTag = oTaskbar.pMainObj.GetBxTag(oEl);
|
|
if (oTag.tag != 'snippet')
|
|
return;
|
|
|
|
// Run it only when dropped into editor doc
|
|
if (oEl.ownerDocument != oTaskbar.pMainObj.pEditorDocument)
|
|
return oTaskbar.OnElementDragEnd(oTaskbar.pMainObj.pEditorDocument.body.appendChild(oEl.cloneNode(false)));
|
|
|
|
var
|
|
allParams = oTag.params,
|
|
html = oTaskbar.pMainObj.pParser.SystemParse(arSnippets[this.pMainObj.arSnippetsCodes[allParams.c]].code);
|
|
|
|
if (BX.browser.IsIE())
|
|
{
|
|
this.pMainObj.pEditorDocument.selection.clear();
|
|
this.pMainObj.insertHTML(html);
|
|
if (oEl && oEl.parentNode)
|
|
oEl.parentNode.removeChild(oEl);
|
|
}
|
|
else
|
|
{
|
|
var id = 'bx_editor_snippet_tmp';
|
|
this.pMainObj.insertHTML('<a id="' + id + '" href="#" _moz_editor_bogus_node="on">+</a>');
|
|
var pDoc = this.pMainObj.pEditorDocument;
|
|
setTimeout(function()
|
|
{
|
|
var pTmp = pDoc.getElementById(id);
|
|
if (pTmp)
|
|
{
|
|
pTmp.innerHTML = html;
|
|
setTimeout(function(){
|
|
var pTmp = pDoc.getElementById(id);
|
|
if (pTmp)
|
|
{
|
|
while(pTmp.firstChild)
|
|
pTmp.parentNode.insertBefore(pTmp.firstChild, pTmp);
|
|
if (pTmp.parentNode)
|
|
pTmp.parentNode.removeChild(pTmp);
|
|
}
|
|
}, 50);
|
|
}
|
|
}, 50);
|
|
oEl.parentNode.removeChild(oEl);
|
|
}
|
|
this.pMainObj.oPropertiesTaskbar.OnSelectionChange('always');
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.addSnippet = function()
|
|
{
|
|
this.pMainObj.OpenEditorDialog("snippets", false, 500, {bUseTabControl: true, mode: 'add', BXSnippetsTaskbar: oTaskbar, PHPGetParams: '&mode=add'});
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.editSnippet = function(oEl,elNode)
|
|
{
|
|
this.pMainObj.OpenEditorDialog("snippets", false, 500, {bUseTabControl: true, mode: 'edit', BXSnippetsTaskbar: oTaskbar, oEl: oEl, elNode: elNode, prop_taskbar: _pTaskbar.pCellProps});
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.delSnippet = function(oEl, elNode)
|
|
{
|
|
var _this = this;
|
|
var _ds = new JCHttpRequest();
|
|
_ds.Action = function(result)
|
|
{
|
|
setTimeout(function ()
|
|
{
|
|
if (window.operation_success)
|
|
{
|
|
//Clean properties panel
|
|
BX.cleanNode(_pTaskbar.pCellProps);
|
|
//Remove Element from list
|
|
var _id = elNode.parentNode.id;
|
|
var elTable = elNode.parentNode.parentNode.parentNode.parentNode;
|
|
elTable.parentNode.removeChild(elTable);
|
|
elTable = null;
|
|
}
|
|
}, 5
|
|
);
|
|
}
|
|
if (confirm(BX_MESS.DEL_SNIPPET_CONFIRM+' "'+oEl.title+'"?'))
|
|
{
|
|
window.operation_success = false;
|
|
_ds.Send(manage_snippets_path + '&templateID='+escape(oEl.template)+'&target=delete&name='+escape(oEl.name)+'&path='+escape(oEl.path.replace(',', '/'))+'&thumb='+escape(oEl.thumb));
|
|
}
|
|
};
|
|
|
|
BXSnippetsTaskbar.prototype.ClearCache = function(oEl, elNode)
|
|
{
|
|
BX.showWait();
|
|
BX.cleanNode(oTaskbar.pCellSnipp);
|
|
BX.cleanNode(oTaskbar.rootElementsCont);
|
|
window.arSnippets = {};
|
|
oTaskbar.loadSnippets(true);
|
|
};
|
|
}
|
|
|
|
oBXEditorUtils.addTaskBar('BXSnippetsTaskbar', 2, BX_MESS.SnippetsTB, [], 20);
|