แแแแแกแแแแแแแ, แแแฎแแแแแแแ. แแแแแแแ แฉแแแก แกแแแ แซแแแ แกแแ แแแ แแแแ
แแแแแแ แแแแ แแแฎแแแแก แแแแแแแก แแแแแแแแแ แฃแแ แคแแ แแ แแแแแงแแแแแแแ แแ แแแแก แแแชแแแแ, แ แแ แฉแแแ แแแแแ แแขแฃแแ แจแแแแแแแแ แแแแแแแขแแแ, แกแแแแขแแ แแกแ แแ แแแฅแขแ แแแแแฎแกแแแแ.
แ แ แแฅแแ แฃแแแ, แกแแแแ แฌแงแแ แแแแก แฉแแแฃแฆแ แแแแแ, แแแแแแฎแแแ, แกแแแแแ แแฆแแแก Chrome แแแแแ แแ แแแฃแ zip-แแ แฅแแแก แแแแคแแแฃแ แแชแแแแแ แแ แแฅ โblob:โ-แแ แแแฌแงแแแฃแแ แแแกแแแแ แแ แแแแแแ, แฃแค. แฃแแแ แชแฎแแแ แแแฎแแ, แ แแ แกแแ แแแกแ แแแแแ แแ แแคแแ แก แฌแแ แแแฅแแแแก, แคแแฅแขแแแ แแแแ, แแก แงแแแแแคแแ แ แแแแแแแ js-แแก แแแแ . แแแ แแแแช, zip แแ แฅแแแ แแแแแ แแ แแแฃแแแ แแแแแแขแแก, แแ แแฃแแแ แแก แแ แแแแแ Javascript-แแก แแแแ . แแแแ. แกแแแแแแแ แแแแจแแ, แ แแ แแ แแแฅแขแ
แแ แแแฅแขแแก แแแแฎแแ แชแแแแแแแก แจแแแแแ แแแแแฌแงแ แคแแฅแ แ แแแแแ, แแฃ แ แ แแแ แแแแขแแแ แแฅแแแแ. แแแแแแแแแก แแก แแ แแฃแแแแแ, แ แแ แแ แแแแแแแ แแแแแแฃแฎแแแ แแ แแแ แแแแก, แ แแ แแ แแแฅแขแ แฃแแแ แแแ แฉแแก แกแฃแคแแ แคแ แแแข-แแแ, แงแแแแแแแแ แ แแแฅ-แแแแแก แแแ แแจแ. แ แ แแฅแแ แฃแแแ, แฃแแแ แขแแแแกแ แแแแแกแแแแแ แแฅแแแแ nodejs-แแก แแแแฆแแแ แแ แแแกแ แแซแฃแแแแ แจแแฅแแแแก แแ แฅแแแ แแแแคแแแฃแ แแชแแแแแ แแแ แแแแแ แ แแแฃแแแแแก แแแแแงแแแแแแ.
แกแแแแแแแแแแจแ, แแแแ แ แแแ แแแแขแ แแ แแงแ. แฃแคแ แ แกแฌแแ แแ, แแฎแแแแ แแ แแ แแแแแฎแกแแแแ. แฉแแแ แฃแแแ แแแแแงแแแแ แแแแคแแแฃแ แแชแแแแ แแ แแแแแฆแแ แแแฃแแ, แ แแแแแแช แจแแแแแซแแแ แแแแแแแแแ แแ แกแแ แแแ แแก แแแแกแแแแ, แ แแแ แแแแแฆแแ zip แแ แฅแแแ.
แ แแแแแแแแ แขแแฅแกแขแฃแ แ แคแแแแ แแแฆแแแฃแ zip แแ แฅแแแจแ แกแแแแแแ แแฌแแแแแ, แคแแฅแขแแฃแ แแ แ แแแแแแแแ แแแแแแแแขแก. แแจแแแ แ แแแแแกแแแแแ แแงแ base64 แกแขแ แแฅแแแแก แแแฆแแแ แแแแแ แแ แแแฃแแ zip แแ แฅแแแแแแ แแ แแแแแแแแแ แแฃแคแแ แจแ, แกแแ แแแ แแ แงแแคแแแกแแก แแแแกแแแจแ แแ แซแแแแแแ.
echo 'base64string' | base64 --decode > config.zip
แฉแแแ แจแแแแแซแแแ แจแแแฅแแแแ แแแแแ zip แคแแแแ.
แแ แแแฅแขแแก แ แแกแฃแ แกแแแจแ แฉแแแ แแฎแแแแแ zip แแ แฅแแแแก แแแแแ แแ แแแแก แแแแแแก:
$scope.downloadZip = function() {
var zip = new JSZip();
var sourceCodes = $window.document.querySelectorAll('main .file .code.source');
for (var i = 0; i < sourceCodes.length; i++) {
var sourceCode = sourceCodes[i];
var name = sourceCode.dataset.filename;
var content = sourceCode.children[0].children[0].innerText;
if (!$scope.isSymlink() && name.match(/^sites-available//)) {
name = name.replace(/^sites-available//, 'sites-enabled/');
}
zip.file(name, content);
if (name.match(/^sites-available//)) {
zip.file(name.replace(/^sites-available//, 'sites-enabled/'), '../' + name, {
unixPermissions: parseInt('120755', 8),
});
}
}
zip.generateAsync({
type: 'blob',
platform: 'UNIX',
}).then(function(content) {
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_zip',
});
};
แงแแแแแคแแ แ แกแแแแแแ แแแ แขแแแแ, แแแแแแแแแแแก แแแแแงแแแแแแ
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
แกแแแแช แจแแแแแ แกแ แแ แแก zip แแ แฅแแแแก แจแแแแแแ แแแฆแแแฃแแ blob แแแแแฅแขแ.
แแแ แแ, แ แแช แฃแแแ แแแแแแแแแแแแ, แแงแ แแแก แแแแ แแแ แแแแแ แแ แแ แฆแแแแแแก แแแแแขแแแ แแ แ แแชแ แแแกแแ แแแแแฌแแแแฃแแแแแ, แแแฆแแแฃแ zip แแ แฅแแแก แแ แแฃแแแ แจแ แแ แจแแแแแแฎแแแแ, แแแแ แแ แแแกแแแ แแแฆแแแแ base64 แแแแก. แชแแขแแแ แฉแฎแฃแแแก แจแแแแแ, แแ แแแแแฆแ 2 แแแแแแ, แแ แแ แฉแแแแขแแแ แแแแก Zip-แแก แแแชแแแแ:
$scope.downloadZip = function() {
generateZip(function (content) {
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_zip',
});
};
$scope.downloadBase64 = function() {
generateZip(function (content) {
var reader = new FileReader();
reader.readAsDataURL(content);
reader.onloadend = function() {
var base64 = reader.result.replace(/^data:.+;base64,/, '');
// ะฒ ะฟะตัะตะผะตะฝะฝะพะน base64 ะบะฐะบ ัะฐะท ะฝัะถะฝัะน ะผะฝะต zip ะฐัั
ะธะฒ ะฒ ะฒะธะดะต base64 ัััะพะบะธ
}
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_base64',
});
};
แ แแแแ แช แแฅแแแ แจแแแแจแแแ, แแ แแแแแแแขแแแ แแแแแ zip แแ แฅแแแแก แแแแแ private generateZip แแแแแแแ แแ แ.แจ. แแก แแ แแก AngularJS แแ แแแขแแ แ แแแแแ แแชแแแก แแแแแฎแแแฃแ แแแแแก แแ แแ แแฎแแ แชแแแแแแแ แแแก แแแแแ แแแแแแก แกแแจแฃแแแแแแ. downloadZip-แแ แแแแแช แแแแแแแ saveAs, แ แแแแ แช แแแแแแแแแแ, แฎแแแ downloadBase64-แแ แแแแแ แแแแกแฎแแแแแแฃแแ แ แแ แแแแแแแ. แฉแแแ แแฅแแแแ FileReader แแแแแฅแขแก, แ แแแแแแช แฉแแแแแแแ แแแแแแ html5-แจแ แแ แฃแแแ แกแแแแแแ
position: absolute;
z-index: -1;
opacity: 0;
แ แแแแช แกแแจแฃแแแแแ แแแแชแ, แแแแแแแขแ แแแแแแแแ แแฎแแแแแแแแแแแ แแ แ แแแแฃแ แแ แแแแแขแแแแแแแ แแแ แแแแ แแแ. Voila, แแแแแแแแ แแแกแ แฃแแแแฃแแแ, แ แแชแ แฉแแแก แฆแแแแแก แแแแแญแแ แ, แแฃแคแแ แจแ แแแแแแกแแ แแกแแแ แฎแแแ:
echo 'base64string' | base64 --decode > config.zip
แ แแแแแแช แฃแแ แแแแ แฉแแกแแแ แแแแกแแแจแ แกแแ แแแ แแ แแ แแแจแแแแ แแแแแฆแ zip แแ แฅแแแ แงแแแแ แแแแคแแแฃแ แแชแแแ.
แแ, แ แ แแฅแแ แฃแแแ, แแแแฃแแแแแแ แแฎแแแแ แแแขแแ แก, แ แแแแแ... แแ แแแฅแขแ แแฅแขแแฃแ แ แแ แชแแชแฎแแแแ, แแกแฃแ แก แแแแฎแ แแแแแฎแแแแแแ แแแขแแ แแกแแแ แแ แแฅแแแแแก แฉแแแ แฆแแแแแ) แแแแแขแแ แแกแแแฃแแแแแแแก แแฅ แแ แแก
แงแแแแแก แแแแแแแ แ แแแแแแแแ แแแ)
แฌแงแแ แ: www.habr.com