एक्सटेंशन और मिक्सिन

एक्सटेंशन ऐसे फ़ंक्शन होते हैं जो शुरू करने के दौरान ब्लॉक पर चलते हैं. ये आम तौर पर, ब्लॉक में कुछ कस्टम कॉन्फ़िगरेशन या व्यवहार जोड़ते हैं. मिक्सिन की मदद से, किसी ब्लॉक में प्रॉपर्टी या हेल्पर फ़ंक्शन जोड़े जा सकते हैं. हालांकि, उन्हें तुरंत नहीं चलाया जा सकता.

आपको एक्सटेंशन या मिक्सिन का इस्तेमाल सिर्फ़ तब करना होगा, जब JSON के साथ कोई ब्लॉक तय किया जाए. अगर किसी ब्लॉक को तय करने के लिए JavaScript का इस्तेमाल किया जाता है, तो init में सीधे तौर पर शुरुआती फ़ंक्शन को कॉल किया जा सकता है. साथ ही, सीधे तौर पर परिभाषा में तरीके या प्रॉपर्टी जोड़ी जा सकती हैं.

एक्सटेंशन

एक्सटेंशन ऐसे फ़ंक्शन होते हैं जो किसी खास टाइप के ब्लॉक के बनने के साथ ही उस पर काम करना शुरू कर देते हैं. उदाहरण के लिए, वे कस्टम कॉन्फ़िगरेशन (जैसे, ब्लॉक का टूलटिप सेट करना) या कस्टम व्यवहार (जैसे, ब्लॉक में इवेंट लिसनर जोड़ना) जोड़ सकते हैं.

// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
    'parent_tooltip_extension',
    function() { // this refers to the block that the extension is being run on
      var thisBlock = this;
      this.setTooltip(function() {
        var parent = thisBlock.getParent();
        return (parent && parent.getInputsInline() && parent.tooltip) ||
            Blockly.Msg['MATH_NUMBER_TOOLTIP'];
      });
    });

एक्सटेंशन को "रजिस्टर" करना ज़रूरी है, ताकि उन्हें किसी स्ट्रिंग की सेटिंग से जोड़ा जा सके. इसके बाद, इस स्ट्रिंग को अपने ब्लॉक टाइप के JSON परिभाषा की extensions प्रॉपर्टी में असाइन किया जा सकता है, ताकि ब्लॉक पर एक्सटेंशन लागू किया जा सके.

{
 //...,
 "extensions": ["parent_tooltip_extension",]
}

एक साथ कई एक्सटेंशन भी जोड़े जा सकते हैं. ध्यान दें कि extensions प्रॉपर्टी एक कलेक्शन होनी चाहिए, भले ही आपने सिर्फ़ एक एक्सटेंशन लागू किया हो.

{
  //...,
  "extensions": ["parent_tooltip_extension", "break_warning_extension"],
}

मिक्सिन

Blockly में, उन स्थितियों में भी आसानी से काम करने का तरीका उपलब्ध है जहां आपको किसी ब्लॉक में कुछ प्रॉपर्टी/हेल्पर फ़ंक्शन जोड़ने हैं, लेकिन उन्हें तुरंत नहीं चलाना है. यह सुविधा, मिक्सिन ऑब्जेक्ट को रजिस्टर करने की अनुमति देकर काम करती है. इसमें आपकी सभी अतिरिक्त प्रॉपर्टी/तरीके शामिल होते हैं. इसके बाद, मिक्सिन ऑब्जेक्ट को एक फ़ंक्शन में रैप किया जाता है. यह फ़ंक्शन, दिए गए ब्लॉक टाइप का कोई भी इंस्टेंस बनाने पर मिक्सिन लागू करता है.

Blockly.Extensions.registerMixin('my_mixin', {
  someProperty: 'a cool value',

  someMethod: function() {
    // Do something cool!
  }
))`

किसी दूसरे एक्सटेंशन की तरह ही, मिक्सिन से जुड़ी स्ट्रिंग कीवर्ड का रेफ़रंस, JSON में दिया जा सकता है.

{
 //...,
 "extensions": ["my_mixin"],
}