कॉपी करके चिपकाने वाला सिस्टम तीन चीज़ों से मिलकर बना होता है, ICopyable
ऑब्जेक्ट, ICopyData
कॉपी किए गए ऑब्जेक्ट दिखाता है, और IPaster
ऑब्जेक्ट जो डेटा को कॉपी करने लायक ऑब्जेक्ट में बदल सकते हैं. हर तरह के ICopyable
के लिए, उससे जुड़ा IPaster
होना चाहिए, जो उस डेटा को चिपकाने की सुविधा देता हो.
ये सिस्टम, उपयोगकर्ता को कॉन्टेक्स्ट मेन्यू के विकल्पों और कीबोर्ड शॉर्टकट के ज़रिए दिखाए जाते हैं.
ऐसी बहुत कम स्थितियां होती हैं जिनमें आपको पसंद के मुताबिक कॉपी किया जा सकने वाला या कस्टम पेस्टर (उदाहरण के लिए, मल्टीसिलेक्ट प्लगिन या क्रॉस-टैब कॉपी पेस्ट प्लगिन) लागू करना हो. इसकी वजह यह है कि आम तौर पर, कॉपी किए जा सकने वाले ऑब्जेक्ट रेंडर किए जाते हैं और रेंडर किए गए नए ऑब्जेक्ट को Blockly में नहीं जोड़ा जा सकता. वर्कस्पेस में सिर्फ़ ब्लॉक, बबल, और वर्कस्पेस की टिप्पणियां रेंडर की जा सकती हैं.
कॉपी की जा सकने वाली
कॉपी किया जा सकने वाला ऑब्जेक्ट बनाने के लिए, आपको 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());