कॉपी करके चिपकाएं

कॉपी करके चिपकाने वाला सिस्टम, इन तीन चीज़ों से बना होता है: ICopyable ऑब्जेक्ट, ICopyData कॉपी किए गए ऑब्जेक्ट, और IPaster ऑब्जेक्ट, जो डेटा को कॉपी किए जा सकने वाले ऑब्जेक्ट में बदल सकते हैं. हर टाइप के ICopyable के लिए एक IPaster की ज़रूरत होती है, जो उस डेटा को चिपका सके.

ये सिस्टम, उपयोगकर्ता को संदर्भ मेन्यू के विकल्पों और कीबोर्ड शॉर्टकट की मदद से दिखाए जाते हैं.

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

कॉपी किए जा सकने वाले एट्रिब्यूट लागू करना

कॉपी किया जा सकने वाला ऑब्जेक्ट बनाने के लिए, आपको ICopyable इंटरफ़ेस लागू करना होगा.

चुना जा सकने वाला

ICopyable इंटरफ़ेस, ISelectable इंटरफ़ेस को बढ़ा देता है. इसका मतलब है कि आपको उन तरीकों और प्रॉपर्टी को भी लागू करना होगा.

चुना जा सकने वाला होना ज़रूरी है, क्योंकि कीबोर्ड शॉर्टकट चुने गए ऑब्जेक्ट को देखकर यह पता लगाते हैं कि क्या कॉपी करना है.

class MyCopyable implements ISelectable {
  constructor(workspace) {
    this.id = Blockly.utils.idGenerator.genUid();
    this.workspace = workspace;
  }

  select() {
    // Visually indicate this draggable is selected.
  }

  unselect() {
    // Visually indicate this draggable is not selected.
  }
}

कॉपी किया जा सकता है

ICopyable इंटरफ़ेस में सिर्फ़ एक तरीका toCopyData होता है. यह कॉपी किए जा सकने वाले ऑब्जेक्ट की स्थिति का JSON-सीरियलाइज़ेशन दिखाता है. इसका इस्तेमाल, कॉपी किए जा सकने वाले ऑब्जेक्ट को फिर से बनाने के लिए किया जा सकता है.

कॉपी किए गए डेटा में एक paster प्रॉपर्टी भी शामिल होनी चाहिए, जिसमें पेस्टर से जुड़ा रजिस्टर किया गया स्ट्रिंग-नाम होता है, जिसे इस कॉपी डेटा को चिपकाना चाहिए. पेस्टर के बारे में ज़्यादा जानकारी के लिए, पास्टर लागू करने का तरीका लेख पढ़ें.

class MyCopyable implements ICopyable {
  constructor(workspace, state) {
    this.workspace = workspace;
    this.myState = state;
  }

  toCopyData() {
    return {
      // This string matches the string used to register the paster.
      paster: 'MY_PASTER',
      state: this.myState,
    };
  }
}

पेस्टर लागू करें

पेस्टर बनाने के लिए, आपको IPaster इंटरफ़ेस लागू करना होगा. इसमें सिर्फ़ एक तरीका paste है, जिसमें चिपकाए जाने वाले आइटम का कॉपी डेटा, आइटम को चिपकाने के लिए फ़ाइल फ़ोल्डर, और एक वैकल्पिक कोऑर्डिनेट होता है. यह वह जगह है जहां आइटम को चिपकाया जा सकता है.

class MyPaster implements IPaster {
  paste(copyData, workspace, coordinate) {
    return new MyCopyable(workspace, copyData.state);
    // Optionally position the copyable at the passed coordinate.
    // Optionally select the copyable after it is pasted.
  }
}

रजिस्ट्रेशन

पास्टर लागू करने के बाद, आपको उसे रजिस्टर करना होगा, ताकि आप उसकी paster प्रॉपर्टी से, कॉपी किए गए डेटा से जुड़े पासर को ढूंढ सकें.

// This string matches the string assigned to the 'paster' property.
Blockly.clipboard.registry.register('MY_PASTER', new MyPaster());