استخدام CDN
في الصفحات الثابتة التي يصعب فيها تثبيت الحزمة، يمكنك تحميل حزمة المتصفح وCSS الخاصين بـ NABI NOTE من CDN. يقرأ المثال أدناه إصدار الحزمة تلقائيًا وقت البناء وينشئ العناوين، ثم يركّب المحرر عبر الكائن العام NabiNote.
احفظ الشيفرة أدناه باسم وافتحها في متصفح — تعمل فورًا أمام عينيك.
<!doctype html>
<html lang="ar" dir="rtl">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>NABI NOTE</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nabi-note@1.6.1/dist/nabi.css">
<style>
html, body { height: 100%; margin: 0; }
/* في هذا المثال، يملأ المحرر ارتفاع المتصفح. اضبط الارتفاع ليناسب تخطيط موقعك. */
#app { height: 100vh; }
#editor { flex: 1; min-height: 0; overflow-y: auto; }
</style>
</head>
<body>
<div id="app" class="nabi">
<div id="chrome" class="nabi-toolbar">
<div class="nabi-toolbar-row">
<span id="tools"></span>
<div id="toolbar"></div>
</div>
<div id="context"></div>
</div>
<div id="editor" class="nabi-content"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/nabi-note@1.6.1/dist/browser/nabi-note.min.js"></script>
<script>
var N = NabiNote
var app = document.querySelector('#app')
var surface = document.querySelector('#editor')
// اختر أجنحة التحرير والملفات المستخدمة في هذا المثال.
// يحمّل هذا المثال الخطوط بلا زوائد والخطوط ذات الزوائد فقط.
// لاستخدام خط ثابت العرض أو خط يدوي، حمّل ملفات الخطوط المناسبة في الصفحة أيضًا.
// راجع وثائق «نوع الخط» لمعرفة التفاصيل.
var wings = N.wings().allBasic().use('save').use('open').use('tf', { values: ['sans', 'serif'] })
var made = N.createNabiWith(wings, {
locale: 'ar',
ask: {
message: function (text) { window.alert(text) },
confirm: function (text) { return window.confirm(text) }
}
})
var nabi = made.nabi
var registry = made.registry
N.mountSurface({ nabi: nabi, registry: registry, root: surface, locale: 'ar' })
N.mountPickedMark({ nabi: nabi, surface: surface })
var settle = N.watchSettle(document, { surface: surface })
var shared = { nabi: nabi, registry: registry, surface: surface, settle: settle, locale: 'ar' }
var history = N.mountLocalHistory({ nabi: nabi, storage: N.browserHistoryStorage(window) })
var file = N.mountFile({
nabi: nabi, registry: registry, store: N.browserFileStore(document),
name: function () { return 'note' }, locale: 'ar'
})
var toolbar = N.mountToolbar(Object.assign({}, shared, {
root: document.querySelector('#toolbar'),
file: file,
onHost: function (w) {
if (w !== 'localHistory') return
N.openHistoryPanel({
history: history, surface: surface, locale: 'ar', sessionId: history.sessionId,
render: function (record) {
return N.renderStoredHtml(JSON.parse(record.body), registry) || ''
}
})
}
}))
var context = N.mountContextToolbar(Object.assign({}, shared, { root: document.querySelector('#context') }))
N.mountHints({ toolbar: toolbar, context: context, root: document.querySelector('#chrome'), surface: surface })
N.mountViewTools({ nabi: nabi, surface: surface, root: app, container: document.querySelector('#tools'), locale: 'ar' })
nabi.setHtml('')
// يوضح هذا المثال جدولة عملية حفظ عند تغيّر المستند.
// nabi.onChange(function () { user_callback(nabi.getJson()) })
</script>
</body>
</html>نقاط يجب التحقق منها في NABI NOTE
- في كود النشر، استخدم الإصدار المثبّت نفسه لكل من CSS وJavaScript الخاص بالمتصفح. قد يتغير السلوك في يوم صدور إصدار جديد عند استخدام عنوان بلا إصدار مثل
latest. - تعرض حزمة المتصفح واجهة الجذر باسم
window.NabiNote. لا تتوفر حزم عامة منفصلة لـnabi-note/ssrوnabi-note/viewerوnabi-note/diff. - يعمل حفظ الملفات والسجل المحلي في المثال داخل متصفح المستخدم. إذا احتجت إلى حفظ على الخادم أو مزامنة حساب، فأرسل نتيجة
getJson()إلى واجهة API في تطبيقك. - عند إضافة الرفع، لا تكتفِ بـ wing
upload؛ اربط دالة النقل الفعلية وwings الصور أو الروابط اللازمة. يتحمل خادم الرفع مسؤولية التحقق من الملفات. - تتضمن حزمة المتصفح محلل HTML داخليًا. لذلك لا تحتاج إلى خيار parser منفصل أو API خاص لاستخدام
setHtml()أو فتح ملف HTML أو لصق HTML.
يختلف CDN في طريقة التحميل فقط. تنسيق الحفظ والتحقق من الإدخال متماثلان مع التثبيت عبر npm، لذا راجع أيضًا الاستخدام الأساسي.