191 lines
4.0 KiB
JavaScript
191 lines
4.0 KiB
JavaScript
function encodeContentForLCA(str)
|
|
{
|
|
_$arComponents = {}; // Global JS array of components
|
|
_$compLength = 0; // Count of elements in _$arComponents
|
|
|
|
var arScripts = [];
|
|
var p = 0, i, bSlashed, bInString, ch, posnext, ti, quote_ch, mm=0, mm2=0;
|
|
while((p = str.indexOf("<?", p))>=0)
|
|
{
|
|
mm=0;
|
|
i = p + 2;
|
|
bSlashed = false;
|
|
bInString = false;
|
|
while(i<str.length-1)
|
|
{
|
|
i++;
|
|
ch = str.substr(i, 1);
|
|
|
|
if(!bInString)
|
|
{
|
|
//if it's not comment
|
|
if(ch == "/" && i+1<str.length)
|
|
{
|
|
//find end of php fragment php
|
|
posnext = str.indexOf("?>", i);
|
|
if(posnext==-1)
|
|
{
|
|
//if it's no close tag - so script is unfinished
|
|
p = str.length;
|
|
break;
|
|
}
|
|
posnext += 2;
|
|
|
|
|
|
ti = 0;
|
|
if(str.substr(i+1, 1)=="*" && (ti = str.indexOf("*/", i+2))>=0)
|
|
ti += 2;
|
|
else if(str.substr(i+1, 1)=="/" && (ti = str.indexOf("\n", i+2))>=0)
|
|
ti += 1;
|
|
|
|
if(ti>0)
|
|
{
|
|
//find begin - "i" and end - "ti" of comment
|
|
// check: what is coming sooner: "END of COMMENT" or "END of SCRIPT"
|
|
if(ti>posnext && str.substr(i+1, 1)!="*")
|
|
{
|
|
//if script is finished - CUT THE SCRIPT
|
|
arScripts.push([p, posnext, str.substr(p, posnext-p)]);
|
|
p = posnext;
|
|
break;
|
|
}
|
|
else
|
|
i = ti - 1; //End of comment come sooner
|
|
}
|
|
continue;
|
|
}
|
|
if(ch == "?" && i+1<str.length && str.substr(i+1, 1)==">")
|
|
{
|
|
i = i+2;
|
|
arScripts.push([p, i, str.substr(p, i-p)]);
|
|
p = i+1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//if(bInString && ch == "\\" && bSlashed)
|
|
if(bInString && ch == "\\")
|
|
{
|
|
bSlashed = true;
|
|
continue;
|
|
}
|
|
|
|
|
|
if(ch == "\"" || ch == "'")
|
|
{
|
|
if(bInString)
|
|
{
|
|
if(!bSlashed && quote_ch == ch)
|
|
bInString = false;
|
|
}
|
|
else
|
|
{
|
|
bInString = true;
|
|
quote_ch = ch;
|
|
}
|
|
}
|
|
bSlashed = false;
|
|
}
|
|
|
|
if(i>=str.length)
|
|
break;
|
|
|
|
p = i;
|
|
}
|
|
|
|
// Replace components2 by #COMPONENTXXXX#
|
|
if(arScripts.length>0)
|
|
{
|
|
var newstr = "";
|
|
var plast = 0, arPHPScript = [], arRes, arTemplate, arScript, str1, strParsed;
|
|
var c2 = '<?$APPLICATION->INCLUDECOMPONENT';
|
|
var c2len = c2.length;
|
|
for(i=0; i<arScripts.length; i++)
|
|
{
|
|
arScript = arScripts[i];
|
|
strParsed = false;
|
|
if (arScript[2].substr(0, c2len).toUpperCase() == c2)
|
|
{
|
|
var key = str_pad_left(++_$compLength, 4, '0');
|
|
_$arComponents[key] = arScript[2];
|
|
newstr += str.substr(plast, arScript[0] - plast) + '#COMPONENT' + String(key) + '#';
|
|
}
|
|
else
|
|
newstr += str.substr(plast, arScript[0] - plast) + arScript[2];
|
|
|
|
plast = arScript[1];
|
|
}
|
|
str = newstr + str.substr(plast);
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
function decodeContentFromLCA(str)
|
|
{
|
|
var replaceLCA = function(str, key)
|
|
{
|
|
var cCode = _$arComponents[key]; // Code of component: $APLICATION->IncludeComponent( .........
|
|
if (!cCode)
|
|
return '';
|
|
return cCode;
|
|
}
|
|
str = str.replace(/#COMPONENT(\d{4})#/ig, replaceLCA);
|
|
return str;
|
|
}
|
|
|
|
function str_pad_left (input, pad_length, pad_string)
|
|
{
|
|
input = String (input);
|
|
if (pad_string.length > 0)
|
|
{
|
|
var buffer = "";
|
|
var padi = 0;
|
|
pad_length = parseInt(pad_length);
|
|
for (var i = 0, z = pad_length - input.length; i < z; i++)
|
|
buffer += pad_string;
|
|
input = buffer + input;
|
|
}
|
|
return input;
|
|
}
|
|
|
|
function preview_template(ID, sess_id, sign)
|
|
{
|
|
if (window.GLOBAL_pMainObj)
|
|
{
|
|
var pMainObj = GLOBAL_pMainObj['CONTENT'];
|
|
if (pMainObj)
|
|
pMainObj.SaveContent();
|
|
}
|
|
|
|
var content = BX('bxed_CONTENT').value;
|
|
if(content.indexOf('#WORK_AREA#') == -1)
|
|
{
|
|
alert(messErrorWA);
|
|
return;
|
|
}
|
|
|
|
BX.showWait();
|
|
BX.ajax.post('/bitrix/admin/template_create_preview.php?ID='+ID,
|
|
{
|
|
CONTENT : decodeContentFromLCA(content),
|
|
STYLES : BX('__STYLES').value,
|
|
TEMPLATE_STYLES : BX('__TEMPLATE_STYLES').value,
|
|
sessid: sess_id
|
|
},
|
|
function()
|
|
{
|
|
BX.closeWait();
|
|
setTimeout(function()
|
|
{
|
|
if (window.__status)
|
|
window.open('/?bitrix_preview_site_template='+sign+'&bx_template_preview_mode=Y');
|
|
else if (window.strWarning)
|
|
alert(window.strWarning);
|
|
}, 10
|
|
);
|
|
|
|
}
|
|
);
|
|
}
|