1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 from muntjac.ui.abstract_component import AbstractComponent
17 from muntjac.ui.component import Event as ComponentEvent
18
19
21 """Listener that listens changes in URI fragment."""
22
24 raise NotImplementedError
25
26
27 _FRAGMENT_CHANGED_METHOD = getattr(IFragmentChangedListener, 'fragmentChanged')
28
29
31 """Experimental web browser dependent component for URI fragment (part
32 after hash mark "#") reading and writing.
33
34 Component can be used to workaround common ajax web applications pitfalls:
35 bookmarking a program state and back button.
36 """
37
38 CLIENT_WIDGET = None
39
40
48
49
50 - def addCallback(self, callback, eventType=None, *args):
59
60
68
69
78
79
87
88
89 - def paintContent(self, target):
90 super(UriFragmentUtility, self).paintContent(target)
91 value = self._fragment if self._fragment is not None else ''
92 target.addVariable(self, 'fragment', value)
93
94
99
100
102 """Gets currently set URI fragment.
103
104 To listen changes in fragment, hook a L{IFragmentChangedListener}.
105
106 Note that initial URI fragment that user used to enter the application
107 will be read after application init. It fires FragmentChangedEvent
108 only if it is not the same as on server side.
109
110 @return: the current fragment in browser uri or null if not known
111 """
112 return self._fragment
113
114
116 """Sets URI fragment. Optionally fires a L{FragmentChangedEvent}
117
118 @param newFragment:
119 id of the new fragment
120 @param fireEvent:
121 true to fire event
122 @see: L{FragmentChangedEvent}
123 @see: L{IFragmentChangedListener}
124 """
125 if ((newFragment is None and self._fragment is not None)
126 or (newFragment is not None
127 and newFragment != self._fragment)):
128 self._fragment = newFragment
129 if fireEvent:
130 fireEvent( FragmentChangedEvent(self) )
131
132 self.requestRepaint()
133
134
136 """Event fired when uri fragment changes."""
137
139 """Creates a new instance of UriFragmentReader change event.
140
141 @param source:
142 the Source of the event.
143 """
144 super(FragmentChangedEvent, self).__init__(source)
145
146
148 """Gets the UriFragmentReader where the event occurred.
149
150 @return: the Source of the event.
151 """
152 return self.getSource()
153