blockly > FocusManager

FocusManager क्लास

हर पेज पर एक सिंगलटन, जो एक या उससे ज़्यादा IFocusableTrees में Blockly फ़ोकस को मैनेज करता है. साथ ही, इस फ़ोकस को डीओएम के साथ दोनों तरफ़ से सिंक करता है.

अगर कॉलर को पेज पर मौजूद चुनिंदा Blockly कॉम्पोनेंट के लिए, इनपुट फ़ोकस को साफ़ तौर पर बदलना है, तो उन्हें इस मैनेजर में फ़ोकस फ़ंक्शन का इस्तेमाल करना चाहिए.

मैनेजर की ज़िम्मेदारी, डीओएम से फ़ोकस इवेंट को मैनेज करने की होती है. ये इवेंट, पेज के एलिमेंट पर उपयोगकर्ताओं के क्लिक करने से हो सकते हैं. साथ ही, यह पक्का करना कि उनसे जुड़े IFocusableNodes को सक्रिय/नॉन-ऐक्टिव तौर पर हाइलाइट किया गया हो. यह उसी तरह से किया जाना चाहिए जिस तरह focusNode() को कॉल करने पर किया जाता है.

हस्ताक्षर:

export declare class FocusManager 

निर्माता

निर्माता मॉडिफ़ायर ब्यौरा
(constructor)(addGlobalEventListener) FocusManager क्लास का नया इंस्टेंस बनाता है

प्रॉपर्टी

प्रॉपर्टी मॉडिफ़ायर टाइप ब्यौरा
ACTIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(एलान नहीं किया गया)

IFocusableNode एलिमेंट को असाइन की गई सीएसएस क्लास, जिन पर फ़िलहाल DOM और Blockly फ़ोकस है.

इसका इस्तेमाल सीधे तौर पर कभी नहीं किया जाना चाहिए. इसके बजाय, FocusManager का इस्तेमाल करके यह पक्का करें कि नोड पर फ़ोकस चालू हो. यह फ़ोकस, डीओएम फ़ोकस की मदद से अपने-आप चालू हो सकता है या इस क्लास में दिए गए फ़ोकस* के अलग-अलग तरीकों से मैन्युअल तरीके से चालू किया जा सकता है.

हमारा सुझाव है कि इस क्लास के नाम का इस्तेमाल करके भी क्वेरी न करें. इसके बजाय, किसी खास नोड को ढूंढने के लिए, FocusableTreeTraverser या IFocusableTree के तरीकों का इस्तेमाल करें.

PASSIVE_FOCUS_NODE_CSS_CLASS_NAME

static

readonly

(एलान नहीं किया गया)

IFocusableNode एलिमेंट को असाइन की गई सीएसएस क्लास, जिन पर फ़िलहाल पैसिव फ़ोकस है.इसका मतलब है कि वे अपने रिलेटिव ट्री में सबसे हाल ही में फ़ोकस किए गए नोड थे--ACTIVE_FOCUS_NODE_CSS_CLASS_NAME देखें--और अगर उनके आस-पास के ट्री को फ़ोकस करने का अनुरोध किया जाता है, तो उन्हें फिर से फ़ोकस किया जाएगा. जैसे, नीचे दिए गए focusTree का इस्तेमाल करके.

इस कॉन्स्टेंट का सीधे तौर पर इस्तेमाल करने से जुड़ी सावधानियों और सीमाओं के बारे में जानने के लिए, ACTIVE_FOCUS_NODE_CSS_CLASS_NAME देखें. आम तौर पर, इसका इस्तेमाल कभी नहीं करना चाहिए.

तरीके

तरीका मॉडिफ़ायर ब्यौरा
focusNode(focusableNode)

यह डीओएम इनपुट को तय किए गए नोड पर फ़ोकस करता है और उसे 'फ़ोकस किया गया' के तौर पर मार्क करता है.

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

**अहम जानकारी**: अगर दिए गए नोड पर फ़ोकस नहीं किया जा सकता (उदाहरण के लिए, उसका canBeFocused() तरीका गलत नतीजा दिखाता है), तो उसे अनदेखा कर दिया जाएगा और फ़ोकस की मौजूदा स्थिति में कोई बदलाव नहीं होगा.

focusTree(focusableTree)

किसी खास IFocusableTree पर फ़ोकस करता है. इसका मतलब है कि ट्री के उस नोड पर फ़ोकस वापस लाया जा सकता है जिस पर फ़िलहाल फ़ोकस नहीं है या ट्री के रूट नोड पर फ़ोकस किया जा सकता है.

ध्यान दें कि अगर दिए गए ट्री में पहले से ही फ़ोकस किया गया कोई नोड है, तो इससे किसी मौजूदा फ़ोकस में कोई बदलाव नहीं होगा. हालांकि, अगर उस नोड पर पैसिव फ़ोकस है, तो उसे ऐक्टिव फ़ोकस पर वापस लाया जाएगा.

अन्य नोड पर पड़ने वाले असर के बारे में जानने के लिए, getFocusedNode देखें.

getFocusedNode()

फ़ोकस के साथ मौजूदा IFocusableNode दिखाता है. यह हमेशा फ़ोकस किए गए IFocusableTree से जुड़ा होता है. अगर कोई IFocusableNode नहीं है, तो यह null दिखाता है.

ध्यान दें कि यह फ़ंक्शन, IFocusableTree.getFocusedNode() के साथ बराबरी बनाए रखेगा. इसका मतलब है कि अगर किसी ट्री पर फ़ोकस है, लेकिन उसके किसी भी नॉन-रूट चाइल्ड पर फ़ोकस नहीं है, तो यह फ़ंक्शन null दिखाएगा, लेकिन getFocusedTree() नहीं दिखाएगा.

यह भी ध्यान रखें कि अगर फ़िलहाल इफ़ेमरल फ़ोकस कैप्चर किया गया है (उदाहरण के लिए, takeEphemeralFocus का इस्तेमाल करके), तो हो सकता है कि यहां दिखाए गए नोड पर फ़िलहाल डीओएम फ़ोकस न हो.

getFocusedTree()

फ़ोकस में मौजूद मौजूदा IFocusableTree दिखाता है. अगर फ़िलहाल कोई भी IFocusableTree फ़ोकस में नहीं है, तो शून्य दिखाता है.

यह भी ध्यान रखें कि अगर फ़िलहाल इफ़ेमरल फ़ोकस कैप्चर किया गया है (उदाहरण के लिए, takeEphemeralFocus का इस्तेमाल करके), तो हो सकता है कि यहां दिखाए गए ट्री में फ़िलहाल DOM फ़ोकस न हो.

getFocusManager() static

पेज-ग्लोबल FocusManager दिखाता है.

यह पक्का है कि फ़ंक्शन कॉल के दौरान, रिटर्न किया गया इंस्टेंस नहीं बदलेगा. हालांकि, पेज लोड होने पर यह बदल सकता है.

isRegistered(tree) यह बताता है कि दिए गए ट्री को registerTree का इस्तेमाल करके, इस मैनेजर में पहले से रजिस्टर किया जा चुका है या नहीं. साथ ही, यह भी बताता है कि unregisterTree का इस्तेमाल करके, ट्री को अब तक अनरजिस्टर नहीं किया गया है.
registerTree(tree)

फ़ोकस को अपने-आप मैनेज करने के लिए, नया IFocusableTree रजिस्टर करता है.

अगर ट्री में फ़िलहाल DOM फ़ोकस वाला कोई एलिमेंट है, तो इस मैनेजर की इंटरनल स्थिति पर तब तक कोई असर नहीं पड़ेगा, जब तक फ़ोकस किसी नए, मॉनिटर किए जा रहे एलिमेंट/नोड पर नहीं बदल जाता.

अगर दिया गया ट्री, इस मैनेजर में पहले से रजिस्टर है, तो यह फ़ंक्शन गड़बड़ी का मैसेज दिखाता है. isRegistered का इस्तेमाल उन मामलों में करें जहां यह पक्का नहीं किया जा सकता कि ट्री को रजिस्टर किया गया है या नहीं.

takeEphemeralFocus(focusableElement)

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

अहम जानकारी: रिटर्न किए गए LAMBDA फ़ंक्शन को *कॉल करना ज़रूरी* है. ऐसा न करने पर, पेज पर कहीं भी अपने-आप फ़ोकस नहीं होगा. हमारा सुझाव है कि आप लैम्ब्डा कॉल को उस यूज़र इंटरफ़ेस के बंद होने से जोड़ें जिससे जुड़ा है. इससे, अगर इनपुट को मैन्युअल तरीके से, कुछ समय के लिए दिखने वाले यूज़र इंटरफ़ेस के बाहर के किसी एलिमेंट में बदला जाता है, तो यूज़र इंटरफ़ेस बंद हो जाना चाहिए और अपने-आप इनपुट वापस आ जाना चाहिए. ध्यान दें कि इस लैम्ब्डा फ़ंक्शन को सिर्फ़ एक बार कॉल किया जाना चाहिए. इसके बाद के कॉल से गड़बड़ी का मैसेज दिखेगा.

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

unregisterTree(tree)

फ़ोकस मैनेजमेंट की सुविधा से, IFocusableTree को अनरजिस्टर करता है.

अगर ट्री में पहले से कोई फ़ोकस किया गया नोड है, तो उससे हाइलाइट हटा दिया जाएगा. इस फ़ंक्शन से, डीओएम फ़ोकस में कोई बदलाव नहीं होता.

अगर दिया गया ट्री फ़िलहाल इस मैनेजर में रजिस्टर नहीं है, तो यह फ़ंक्शन गड़बड़ी का मैसेज दिखाता है.