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'
}
}