AppleScript Action Sequence Builder
Generate reusable AppleScript templates by defining target applications, core actions, and custom logic blocks.
APPLESCRIPT AUTOMATION TEMPLATE
Script: | Target Apps:
Script Name
Automate Report Generation
Total Steps
0
Target Applications
0
Generated AppleScript Code
-- Configure your actions in the Action Builder tab to generate the script.
Define New Script Action
Current Action Sequence (0)
Script Metadata
No actions defined in the sequence yet.
'; document.getElementById('current-action-count').innerText = 0; return; } actions.forEach((action, index) => { const item = document.createElement('div'); item.className = 'aasb-task-entry'; item.innerHTML = `
${index + 1}. ${action.app}: ${action.desc}
`;
container.appendChild(item);
});
document.getElementById('current-action-count').innerText = actions.length;
}
// Helper to generate the final script code
function aasbGenerateScript() {
const scriptName = document.getElementById('inp-script-name').value;
const description = document.getElementById('inp-script-description').value;
const author = document.getElementById('inp-author').value;
const version = document.getElementById('inp-version').value;
let code = `(*\n`;
code += ` Script Name: ${scriptName}\n`;
code += ` Purpose: ${description}\n`;
code += ` Author: ${author}\n`;
code += ` Version: ${version}\n`;
code += ` Date: ${new Date().toLocaleDateString('en-US')}\n`;
code += `*)\n\n`;
code += `on run\n`;
code += ` -- SETTINGS (Modify these variables)\n`;
code += ` set report_path to (path to desktop folder as text)\n`;
code += ` set output_filename to "Generated_Report.pdf"\n\n`;
actions.forEach((action, index) => {
const lines = action.code.split('\n').filter(l => l.trim().length > 0);
code += ` -- ACTION ${index + 1}: ${action.desc} (Target: ${action.app})\n`;
if (action.logic) {
code += ` -- LOGIC NOTE: ${action.logic}\n`;
}
if (lines.length > 0) {
lines.forEach(line => {
code += ` ${line}\n`;
});
} else {
code += ` -- Placeholder for custom code targeting ${action.app}\n`;
}
code += `\n`;
});
code += `end run\n`;
return code;
}
function aasbUpdateDashboard() {
const scriptCode = aasbGenerateScript();
document.getElementById('out-code').innerText = scriptCode;
// Update stats and header info
const scriptName = document.getElementById('inp-script-name').value;
document.getElementById('out-script-name').innerText = scriptName;
document.getElementById('stat-total-tasks').innerText = actions.length;
document.getElementById('stat-target-apps').innerText = new Set(actions.map(a => a.app)).size;
document.getElementById('out-pdf-script-name').innerText = scriptName;
document.getElementById('out-pdf-apps').innerText = Array.from(new Set(actions.map(a => a.app))).join(', ');
}
function aasbDownloadPDF() {
aasbUpdateDashboard();
const element = document.getElementById('aasb-print-area');
// Show PDF header and hide controls
const headers = element.querySelectorAll('.pdf-header');
headers.forEach(h => h.style.display = 'block');
const controls = element.querySelectorAll('.pdf-hide');
controls.forEach(c => c.style.display = 'none');
// Ensure code block is readable in PDF
const codeOutput = document.getElementById('out-code');
codeOutput.style.backgroundColor = '#fff';
codeOutput.style.color = '#1f2937';
const opt = {
margin: 0.5,
filename: `${document.getElementById('inp-script-name').value.replace(/\s/g, '_')}_Script.pdf`,
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2 },
jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }
};
html2pdf().set(opt).from(element).save().then(function() {
// Revert changes after download
headers.forEach(h => h.style.display = 'none');
controls.forEach(c => c.style.display = 'flex');
codeOutput.style.backgroundColor = '#282c34';
codeOutput.style.color = '#abb2bf';
// Re-show button container that was hidden by pdf-hide class
document.querySelector('.aasb-btn-container').style.display = 'flex';
});
}
Note: ${action.logic || 'N/A'}
