बेहतर कस्टमाइज़ेशन

Blockly की मदद से, कुछ खास फ़ंक्शन को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, उनसे जुड़ी Blockly क्लास को बदलना होगा.

बदली जा सकने वाली क्लास

Blockly की इन क्लास को बदला जा सकता है:

Blockly क्लास इंटरफ़ेस रजिस्ट्रेशन के नाम
Blockly.dragging.Dragger Blockly.IDragger blockDragger
Blockly.ConnectionChecker Blockly.IConnectionChecker connectionChecker
Blockly.InsertionMarkerPreviewer Blockly.IConnectionPreviewer connectionPreviewer
Blockly.Flyout Blockly.IFlyout flyoutsVerticalToolbox
flyoutsHorizontalToolbox
Blockly.MetricsManager Blockly.IMetricsManager metricsManager
Blockly.blockRendering.Renderer* -- renderer
Blockly.Toolbox Blockly.IToolbox toolbox

* यह सभी रेंडरर के लिए बेस क्लास है. इसे या किसी मौजूदा रेंडरर को सबक्लास बनाया जा सकता है. नया रेंडरर बनाना देखें.

Blockly के इंटरफ़ेस, core/interfaces में तय किए गए हैं.

बदली जाने वाली क्लास बनाना

बदली जाने वाली क्लास बनाने के लिए, उससे जुड़े इंटरफ़ेस में फ़ंक्शन लागू करें. इन सभी फ़ंक्शन को किसी नई क्लास में लागू किया जा सकता है. इसके अलावा, Blockly क्लास को एक्सटेंड करके, सिर्फ़ उन फ़ंक्शन को बदला जा सकता है जिन्हें बदलना है. इसके लिए, सिर्फ़ यह ज़रूरी है कि आपने (या बेस क्लास ने) इंटरफ़ेस में सभी फ़ंक्शन लागू किए हों और इंटरफ़ेस पर टिप्पणियों में बताई गई सभी ज़रूरी शर्तों का पालन किया हो.

टाइप चेकर को यह बताने के लिए कि आपने कोई खास इंटरफ़ेस लागू किया है, अपनी क्लास को @implements {InterfaceName} JSDoc टैग (JavaScript में) या implements कीवर्ड (TypeScript में) के साथ एनोटेट करें.

बदली गई क्लास को इंजेक्ट करना

Blockly को अपनी बदली गई क्लास के बारे में बताने के लिए, Blockly.inject को पास किए गए कॉन्फ़िगरेशन के विकल्पों में plugins प्रॉपर्टी का इस्तेमाल करें. (इस प्रॉपर्टी के नाम के बावजूद, आपकी क्लास को Blockly को एक्सटेंड करने के लिए इस्तेमाल किए जाने वाले प्लग इन की तरह, npm के ज़रिए पैकेज और डिस्ट्रिब्यूट करने की ज़रूरत नहीं है.)

अपने सबक्लास को inject तरीके में पास किया जा सकता है.

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': CustomMetricsManagerClass
  }
}

इसके अलावा, Blockly.registry का इस्तेमाल करके अपनी क्लास रजिस्टर की जा सकती है. साथ ही, क्लास को इंजेक्ट करने के लिए रजिस्ट्री के नाम का इस्तेमाल किया जा सकता है. यह तब काम आता है, जब आपने अपने कॉन्फ़िगरेशन के विकल्पों को सिर्फ़ JSON के तौर पर सेव किया हो.

Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', SubClass);

Blockly.inject('blocklyDiv', {
  plugins: {
    'metricsManager': 'YOUR_NAME'
  }
}