মার্কডাউনে JavaScript ব্যবহার
যদিও মার্কডাউন মূলত টেক্সট ফরম্যাটিংয়ের জন্য একটি মার্কআপ ভাষা, আপনি ইন্টারঅ্যাক্টিভিটি এবং ডাইনামিক ফিচার যোগ করতে আপনার মার্কডাউন ডকুমেন্টে JavaScript ব্যবহার করতে পারেন।
সীমাবদ্ধতা বোঝা
স্ট্যান্ডার্ড মার্কডাউন পার্সার JavaScript কোড এক্সিকিউট করে না। তবে, মার্কডাউনের সাথে JavaScript ইন্টিগ্রেট করার বেশ কয়েকটি উপায় রয়েছে:
- HTML স্ক্রিপ্ট ট্যাগ: HTML ব্লকে সরাসরি JavaScript অন্তর্ভুক্ত করুন
- মার্কডাউন প্রসেসর: JavaScript এক্সিকিউশন সমর্থন করে এমন প্রসেসর ব্যবহার করুন
- স্ট্যাটিক সাইট জেনারেটর: বিল্ড-টাইম JavaScript প্রসেসিং ব্যবহার করুন
- ক্লায়েন্ট-সাইড রেন্ডারিং: মার্কডাউন HTML-এ রূপান্তরিত হওয়ার পরে JavaScript যোগ করুন
বেসিক JavaScript ইন্টিগ্রেশন
ইনলাইন স্ক্রিপ্ট ট্যাগ
আপনি HTML স্ক্রিপ্ট ট্যাগ ব্যবহার করে সরাসরি আপনার মার্কডাউনে JavaScript এম্বেড করতে পারেন:
# আমার ইন্টারঅ্যাক্টিভ ডকুমেন্ট
<script>
function greet() {
alert('মার্কডাউন থেকে হ্যালো!');
}
</script>
<button onclick="greet()">আমাকে ক্লিক করুন</button>এক্সটার্নাল স্ক্রিপ্ট
বাহ্যিক JavaScript ফাইল রেফারেন্স করুন:
<script src="https://cdn.example.com/script.js"></script>
<div id="dynamic-content"></div>সাধারণ ব্যবহারের ক্ষেত্রে
1. ইন্টারঅ্যাক্টিভ ফর্ম
# যোগাযোগ ফর্ম
<form id="contactForm">
<input type="text" id="name" placeholder="আপনার নাম">
<input type="email" id="email" placeholder="আপনার ইমেইল">
<button type="submit">জমা দিন</button>
</form>
<script>
document.getElementById('contactForm').addEventListener('submit', function(e) {
e.preventDefault();
const name = document.getElementById('name').value;
alert('ধন্যবাদ, ' + name + '!');
});
</script>2. ডাইনামিক কন্টেন্ট লোডিং
# সর্বশেষ পোস্ট
<div id="posts-container"></div>
<script>
fetch('/api/posts')
.then(response => response.json())
.then(posts => {
const container = document.getElementById('posts-container');
posts.forEach(post => {
container.innerHTML += `<h3>${post.title}</h3><p>${post.excerpt}</p>`;
});
});
</script>3. ডেটা ভিজ্যুয়ালাইজেশন
# সেলস চার্ট
<canvas id="salesChart" width="400" height="200"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('salesChart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels: ['জানুয়ারি', 'ফেব্রুয়ারি', 'মার্চ', 'এপ্রিল'],
datasets: [{
label: 'বিক্রয়',
data: [12, 19, 3, 5]
}]
}
});
</script>স্ট্যাটিক সাইট জেনারেটর ইন্টিগ্রেশন
Jekyll
Jekyll বিল্ড টাইমে JavaScript এক্সিকিউট করে না, কিন্তু আপনি লেআউটে এটি অন্তর্ভুক্ত করতে পারেন:
---
layout: default
---
{{ content }}
<script>
// আপনার JavaScript এখানে
</script>Gatsby
Gatsby MDX-এ React কম্পোনেন্ট সমর্থন করে:
import { useState } from 'react'
export const Counter = () => {
const [count, setCount] = useState(0)
return <button onClick={() => setCount(count + 1)}>গণনা: {count}</button>
}
# আমার ডকুমেন্ট
<Counter />Next.js
পূর্ণ React ইন্টিগ্রেশনের জন্য Next.js এর সাথে MDX ব্যবহার করুন:
import dynamic from 'next/dynamic'
const DynamicComponent = dynamic(() => import('../components/MyComponent'))
# ইন্টারঅ্যাক্টিভ কন্টেন্ট
<DynamicComponent />নিরাপত্তা বিবেচনা
XSS প্রতিরোধ
মার্কডাউনের সাথে JavaScript ব্যবহার করার সময় সর্বদা ব্যবহারকারীর ইনপুট স্যানিটাইজ করুন:
// খারাপ: সরাসরি HTML ইনজেকশন
element.innerHTML = userInput;
// ভালো: textContent ব্যবহার করুন অথবা স্যানিটাইজ করুন
element.textContent = userInput;
// অথবা
element.innerHTML = DOMPurify.sanitize(userInput);কন্টেন্ট সিকিউরিটি পলিসি
স্ক্রিপ্ট এক্সিকিউশন সীমাবদ্ধ করতে CSP হেডার বাস্তবায়ন করুন:
<meta http-equiv="Content-Security-Policy"
content="script-src 'self' https://trusted-cdn.com;">সেরা অনুশীলন
- JavaScript আলাদা রাখুন: সম্ভব হলে JavaScript এক্সটার্নাল ফাইলে সংরক্ষণ করুন
- প্রগ্রেসিভ এনহ্যান্সমেন্ট: JavaScript ছাড়াই কন্টেন্ট কাজ করে তা নিশ্চিত করুন
- CDN ব্যবহার করুন: ভালো ক্যাশিংয়ের জন্য জনপ্রিয় লাইব্রেরি CDN থেকে লোড করুন
- ইনলাইন স্ক্রিপ্ট কমিয়ে আনুন: ইনলাইন হ্যান্ডলারের পরিবর্তে ইভেন্ট ডেলিগেশন ব্যবহার করুন
- ডিপেন্ডেন্সি ডকুমেন্ট করুন: প্রয়োজনীয় JavaScript লাইব্রেরি স্পষ্টভাবে উল্লেখ করুন
উন্নত কৌশল
কাস্টম মার্কডাউন এক্সটেনশন
JavaScript হ্যান্ডল করে এমন কাস্টম মার্কডাউন প্রসেসর তৈরি করুন:
const md = require('markdown-it')();
md.use(require('markdown-it-container'), 'runnable', {
validate: params => params.trim() === 'runnable',
render: (tokens, idx) => {
if (tokens[idx].nesting === 1) {
return '<div class="runnable-code">';
} else {
return '</div><button onclick="runCode(this)">চালান</button>';
}
}
});WebAssembly ইন্টিগ্রেশন
উচ্চ-পারফরম্যান্স অ্যাপ্লিকেশনের জন্য মার্কডাউনকে WebAssembly এর সাথে একত্রিত করুন:
# ইমেজ প্রসেসিং ডেমো
<canvas id="canvas"></canvas>
<script>
WebAssembly.instantiateStreaming(fetch('image_processor.wasm'))
.then(module => {
// WebAssembly ফাংশন ব্যবহার করুন
const result = module.instance.exports.process_image(imageData);
});
</script>টুলস এবং লাইব্রেরি
মার্কডাউনের জন্য জনপ্রিয় JavaScript লাইব্রেরি
- Marked.js: এক্সটেন্সিবিলিটি সহ দ্রুত মার্কডাউন পার্সার
- Markdown-it: উচ্চ গতির প্লাগযোগ্য মার্কডাউন পার্সার
- Showdown: দ্বিমুখী মার্কডাউন কনভার্টার
- Remark: প্লাগিন দ্বারা পরিচালিত মার্কডাউন প্রসেসর
ইন্টারঅ্যাক্টিভ ডকুমেন্টেশন টুলস
- Docusaurus: React-ভিত্তিক ডকুমেন্টেশন জেনারেটর
- VuePress: Vue-চালিত স্ট্যাটিক সাইট জেনারেটর
- Docsify: হালকা ডকুমেন্টেশন জেনারেটর
- GitBook: আধুনিক ডকুমেন্টেশন প্ল্যাটফর্ম
উদাহরণ: সম্পূর্ণ ইন্টারঅ্যাক্টিভ ডকুমেন্ট
---
title: ইন্টারঅ্যাক্টিভ টিউটোরিয়াল
---
# JavaScript অ্যারে মেথড টিউটোরিয়াল
<style>
.example-output {
background: #f4f4f4;
padding: 10px;
margin: 10px 0;
border-left: 3px solid #007acc;
}
</style>
## নিজে চেষ্টা করুন
<input type="text" id="arrayInput" placeholder="সংখ্যা লিখুন: 1,2,3,4,5">
<button onclick="processArray()">প্রসেস করুন</button>
<div id="output" class="example-output"></div>
<script>
function processArray() {
const input = document.getElementById('arrayInput').value;
const numbers = input.split(',').map(Number);
const output = document.getElementById('output');
output.innerHTML = `
<p><strong>মূল:</strong> [${numbers}]</p>
<p><strong>দ্বিগুণ:</strong> [${numbers.map(n => n * 2)}]</p>
<p><strong>যোগফল:</strong> ${numbers.reduce((a, b) => a + b, 0)}</p>
`;
}
</script>উপসংহার
যদিও মার্কডাউন নিজে JavaScript এক্সিকিউট করে না, আপনি সমৃদ্ধ, ইন্টারঅ্যাক্টিভ ডকুমেন্ট তৈরি করতে দুটি প্রযুক্তিকে কার্যকরভাবে একত্রিত করতে পারেন। আপনার ব্যবহারের ক্ষেত্রে সবচেয়ে উপযুক্ত পদ্ধতি বেছে নিন এবং সর্বদা নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতাকে অগ্রাধিকার দিন।