in English

जावास्क्रिप्ट्

jQuery इत्यत्र निर्मितेन अस्माकं वैकल्पिकजावास्क्रिप्ट् प्लगिन्स् इत्यनेन सह Bootstrap इत्यस्य जीवनं आनयन्तु। प्रत्येकस्य प्लगिन्, अस्माकं आँकडानां तथा प्रोग्रामेटिक एपिआइ विकल्पानां विषये, इत्यादीनां विषये ज्ञातव्यम्।

व्यक्तिगतं वा संकलितं वा

प्लगिन् व्यक्तिगतरूपेण (Bootstrap इत्यस्य व्यक्तिगतस्य उपयोगेन js/dist/*.js), अथवा सर्वे एकदा एव उपयुज्य bootstrap.jsवा लघुकृतं वा bootstrap.min.js(उभयम् अपि न समाविष्टं) समाविष्टं कर्तुं शक्यते ।

यदि भवान् बण्डलर (Webpack, Rollup...) इत्यस्य उपयोगं करोति तर्हि भवान् तादृशानि /js/dist/*.jsसञ्चिकानि उपयोक्तुं शक्नोति ये UMD सज्जाः सन्ति ।

आश्रयाः

केचन प्लगिन्स् तथा CSS घटकाः अन्येषु प्लगिन्स् इत्यस्य उपरि निर्भराः सन्ति । यदि भवान् प्लगिन्स् व्यक्तिगतरूपेण समावेशयति तर्हि docs मध्ये एतानि आश्रयाणि अवश्यं पश्यतु । इदमपि ज्ञातव्यं यत् सर्वे प्लगिन्स् jQuery इत्यस्य उपरि निर्भराः सन्ति (अस्य अर्थः अस्ति यत् प्लगिन् सञ्चिकाभ्यः पूर्वं jQuery इत्येतत् अवश्यमेव समाविष्टं भवेत् ) । jQuery इत्यस्य के के संस्करणाः समर्थिताः सन्ति इति द्रष्टुं अस्माकं परामर्शं कुर्वन्तु ।package.json

अस्माकं dropdowns, popovers तथा tooltips अपि Popper.js इत्यस्य उपरि निर्भरं भवति ।

दत्तांशगुणाः

प्रायः सर्वाणि Bootstrap प्लगिन्स् केवलं HTML मार्गेण data attributes (JavaScript कार्यक्षमतायाः उपयोगस्य अस्माकं प्राधान्यमार्गः) सह सक्षमीकरणं विन्यस्तं च कर्तुं शक्यते । एकस्मिन् तत्त्वे केवलं एकस्य दत्तांशगुणसमूहस्य उपयोगं अवश्यं कुर्वन्तु (उदा., भवान् एकस्मात् बटन् तः टूल्टिप् तथा मोडल् ट्रिगर कर्तुं न शक्नोति ।)

परन्तु केषुचित् परिस्थितिषु एतत् कार्यं निष्क्रियं कर्तुं इष्टं भवेत् । data attribute API अक्षमीकरणाय, एतादृशेन सह नामस्थानं कृत्वा दस्तावेजे सर्वाणि घटनानि अनबाइण्ड् कुर्वन्तु data-api:

$(document).off('.data-api')

वैकल्पिकरूपेण, विशिष्टं प्लगिन् लक्ष्यं कर्तुं, केवलं प्लगिन् नाम नामस्थानरूपेण data-api नामस्थानेन सह एतादृशं समावेशयन्तु:

$(document).off('.alert.data-api')

चयनकर्तारः

सम्प्रति DOM तत्त्वानि पृच्छितुं वयं देशीयविधानानि उपयुञ्ज्महे querySelectorतथा querySelectorAllच कार्यप्रदर्शनकारणात्, अतः भवद्भिः वैधचयनकर्तृणां उपयोगः कर्तव्यः अस्ति । यदि भवान् विशेषचयनकर्तृणां उपयोगं करोति, यथा: collapse:Exampleतेभ्यः अवश्यं पलायनं कुर्वन्तु ।

घटनाः

बूटस्ट्रैप् अधिकांशस्य प्लगिन्स् इत्यस्य विशिष्टक्रियाणां कृते इष्टघटनानि प्रदाति । सामान्यतः ये अव्यय एवं भूतकाल में आते हैं - जहाँ अव्यय (ex. show) किसी घटना के आरम्भ में प्रेरित होता है, तथा उसका भूतकालरूप (ex. shown) किसी क्रिया के समाप्त होने पर प्रेरित होता है।

सर्वाणि अव्ययघटनानि preventDefault()कार्यक्षमतां प्रददति। एतेन क्रियायाः आरम्भात् पूर्वं निष्पादनं निवारयितुं क्षमता प्राप्यते । इवेण्ट् हन्ड्लर इत्यस्मात् false इति प्रत्यागच्छन् स्वयमेव अपि आह्वयति preventDefault()|

$('#myModal').on('show.bs.modal', function (e) {
  if (!data) {
    return e.preventDefault() // stops modal from being shown
  }
})

प्रोग्रामेटिक एपीआई

वयम् अपि मन्यामहे यत् भवान् सर्वान् Bootstrap प्लगिन्स् केवलं जावास्क्रिप्ट् एपिआइ मार्गेण उपयोक्तुं समर्थः भवेत् । सर्वे सार्वजनिक एपिआइ एकाः, श्रृङ्खलायोग्याः पद्धतयः सन्ति, तथा च कार्यं कृतं संग्रहं प्रत्यागच्छन्ति ।

$('.btn.danger').button('toggle').addClass('fat')

सर्वैः विधिभिः वैकल्पिकविकल्पवस्तुं, एकं स्ट्रिंग् यत् विधिविशेषं लक्ष्यते, अथवा किमपि न (यत् पूर्वनिर्धारितव्यवहारेन सह प्लगिन् आरभते) स्वीकुर्वीत:

$('#myModal').modal() // initialized with defaults
$('#myModal').modal({ keyboard: false }) // initialized with no keyboard
$('#myModal').modal('show') // initializes and invokes show immediately

प्रत्येकं प्लगिन् अपि एकस्मिन् Constructorगुणे स्वस्य कच्चा कन्स्ट्रक्टर् उजागरयति: $.fn.popover.Constructor. यदि भवान् कञ्चन विशेषं प्लगिन् उदाहरणं प्राप्तुम् इच्छति तर्हि प्रत्यक्षतया कस्मात् तत्त्वात् पुनः प्राप्तुम् इच्छति: $('[rel="popover"]').data('popover').

अतुल्यकालिक कार्य एवं संक्रमण

सर्वे प्रोग्रामेटिक एपिआइ मेथड् एसिंक्रोन्स् भवन्ति तथा च एकवारं संक्रमणस्य आरम्भं कृत्वा परन्तु तस्य समाप्तेः पूर्वं आह्वानकर्त्रे प्रत्यागच्छन्ति |

एकवारं संक्रमणं सम्पन्नं जातं चेत् क्रियायाः निष्पादनार्थं भवन्तः तत्सम्बद्धं घटनां श्रोतुं शक्नुवन्ति ।

$('#myCollapse').on('shown.bs.collapse', function (e) {
  // Action to execute once the collapsible area is expanded
})

तदतिरिक्तं संक्रमणघटकस्य उपरि एकं मेथड् आह्वानं उपेक्षितं भविष्यति |

$('#myCarousel').on('slid.bs.carousel', function (e) {
  $('#myCarousel').carousel('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
})

$('#myCarousel').carousel('1') // Will start sliding to the slide 1 and returns to the caller
$('#myCarousel').carousel('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!

पूर्वनिर्धारित सेटिंग्स्

Constructor.Defaultप्लगिन् इत्यस्य वस्तु परिवर्त्य भवान् प्लगिन् इत्यस्य पूर्वनिर्धारितसेटिंग्स् परिवर्तयितुं शक्नोति :

// changes default for the modal plugin's `keyboard` option to false
$.fn.modal.Constructor.Default.keyboard = false

न विग्रहः

कदाचित् अन्यैः UI frameworks इत्यनेन सह Bootstrap plugins इत्यस्य उपयोगः आवश्यकः भवति । एतेषु परिस्थितिषु नामस्थानस्य टकरावः यदा कदा भवितुं शक्नुवन्ति । यदि एतत् भवति तर्हि भवान् .noConflictयस्य प्लगिन् इत्यस्य मूल्यं पुनः प्रत्यागन्तुं इच्छति तत् आह्वयितुं शक्नोति ।

var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality

संस्करण संख्याएँ

Bootstrap इत्यस्य प्रत्येकस्य jQuery प्लगिन् इत्यस्य संस्करणं VERSIONप्लगिन् इत्यस्य कन्स्ट्रक्टर् इत्यस्य गुणद्वारा अभिगन्तुं शक्यते । यथा, टूल्टिप् प्लगिन् कृते :

$.fn.tooltip.Constructor.VERSION // => "4.5.3"

जावास्क्रिप्ट् अक्षमीकरणे विशेषः फॉलबैक् नास्ति

जावास्क्रिप्ट् अक्षमीकरणसमये बूटस्ट्रैप् इत्यस्य प्लगिन्स् विशेषतया ललितरूपेण न पतन्ति । यदि भवान् अस्मिन् सन्दर्भे उपयोक्तृ-अनुभवस्य चिन्तां करोति तर्हि स्वप्रयोक्तृभ्यः <noscript>स्थितिं व्याख्यातुं (तथा च जावास्क्रिप्ट् पुनः कथं सक्षमीकरणं कर्तव्यम् इति) उपयुञ्जीत, तथा/वा स्वकीयानि कस्टम्-फॉलबैक् योजयन्तु

तृतीयपक्षीयपुस्तकालयाः

बूटस्ट्रैप् आधिकारिकतया तृतीयपक्षस्य जावास्क्रिप्ट् पुस्तकालयानाम् समर्थनं न करोति यथा Prototype अथवा jQuery UI । अपि .noConflictच नामान्तरितघटनानां, संगततासमस्याः भवितुम् अर्हन्ति येषां समाधानं भवद्भिः स्वयमेव करणीयम् ।

उटिल्

Bootstrap इत्यस्य सर्वाणि JavaScript सञ्चिकाः निर्भराः सन्ति util.jsतथा च अन्येषां JavaScript सञ्चिकानां पार्श्वे एतत् समाविष्टं कर्तव्यम् अस्ति । यदि भवान् संकलितं (अथवा लघुकृतं) उपयुज्यते तर्हि bootstrap.jsएतत् समावेशयितुं आवश्यकता नास्ति—इदं पूर्वमेव अस्ति ।

util.jstransitionEndउपयोगिता कार्याणि तथा घटनानां कृते मूलभूतसहायकं तथा च CSS संक्रमण अनुकरणकं समाविष्टम् अस्ति । अन्यैः प्लगिन्स् द्वारा CSS संक्रमणसमर्थनस्य जाँचार्थं तथा लम्बमानसंक्रमणानि ग्रहीतुं तस्य उपयोगः भवति ।

सेनेटाइजर

Tooltips तथा Popovers अस्माकं अन्तर्निर्मित-सेनेटाइजरस्य उपयोगं कुर्वन्ति विकल्पान् सेनिटाइज् कर्तुं ये HTML स्वीकुर्वन्ति।

पूर्वनिर्धारितं whiteListमूल्यं निम्नलिखितम् अस्ति ।

var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
var DefaultWhitelist = {
  // Global attributes allowed on any supplied element below.
  '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
  a: ['target', 'href', 'title', 'rel'],
  area: [],
  b: [],
  br: [],
  col: [],
  code: [],
  div: [],
  em: [],
  hr: [],
  h1: [],
  h2: [],
  h3: [],
  h4: [],
  h5: [],
  h6: [],
  i: [],
  img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
  li: [],
  ol: [],
  p: [],
  pre: [],
  s: [],
  small: [],
  span: [],
  sub: [],
  sup: [],
  strong: [],
  u: [],
  ul: []
}

यदि भवान् अस्मिन् पूर्वनिर्धारिते नूतनानि मूल्यानि योजयितुम् इच्छति तर्हि भवान् whiteListनिम्नलिखितम् कर्तुं शक्नोति ।

var myDefaultWhiteList = $.fn.tooltip.Constructor.Default.whiteList

// To allow table elements
myDefaultWhiteList.table = []

// To allow td elements and data-option attributes on td elements
myDefaultWhiteList.td = ['data-option']

// You can push your custom regex to validate your attributes.
// Be careful about your regular expressions being too lax
var myCustomRegex = /^data-my-app-[\w-]+/
myDefaultWhiteList['*'].push(myCustomRegex)

यदि भवान् अस्माकं सेनेटाइजरं बाईपास कर्तुम् इच्छति यतोहि भवान् समर्पितं पुस्तकालयं उपयोक्तुं रोचते, उदाहरणार्थं DOMPurify , तर्हि भवान् निम्नलिखितम् कर्तव्यम्:

$('#yourTooltip').tooltip({
  sanitizeFn: function (content) {
    return DOMPurify.sanitize(content)
  }
})