<!DOCTYPE html>
<html lang='en'>
<head>
<title>jquery.git - jQuery JavaScript Library: https://github.com/jquery/jquery</title>
<meta name='generator' content='cgit v1.2.3'/>
<meta name='robots' content='index, nofollow'/>
<link rel='stylesheet' type='text/css' href='/cgit.css'/>
<link rel='shortcut icon' href='/favicon.ico'/>
<link rel='alternate' title='Atom feed' href='https://source.dussan.org/jquery.git/atom/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3' type='application/atom+xml'/>
</head>
<body>
<div id='cgit'><table id='header'>
<tr>
<td class='logo' rowspan='2'><a href='/'><img src='/cgit.png' alt='cgit logo'/></a></td>
<td class='main'><a href='/'>index</a> : <a href='/jquery.git/'>jquery.git</a></td><td class='form'><form method='get'>
<input type='hidden' name='showmsg' value='1'/><select name='h' onchange='this.form.submit();'>
<option value='1.12-stable'>1.12-stable</option>
<option value='2.2-stable'>2.2-stable</option>
<option value='3.6-stable'>3.6-stable</option>
<option value='3.x-stable'>3.x-stable</option>
<option value='broken-test'>broken-test</option>
<option value='dependabot/github_actions/github-actions-0b02fec6e3'>dependabot/github_actions/github-actions-0b02fec6e3</option>
<option value='dependabot/github_actions/github-actions-384b59e5c3' selected='selected'>dependabot/github_actions/github-actions-384b59e5c3</option>
<option value='dependabot/github_actions/github-actions-66959c3ab9'>dependabot/github_actions/github-actions-66959c3ab9</option>
<option value='dependabot/github_actions/github-actions-6951dec90a'>dependabot/github_actions/github-actions-6951dec90a</option>
<option value='dependabot/github_actions/github-actions-7574396d95'>dependabot/github_actions/github-actions-7574396d95</option>
<option value='dependabot/github_actions/github-actions-a2938ab9b9'>dependabot/github_actions/github-actions-a2938ab9b9</option>
<option value='dependabot/github_actions/github-actions-ced721f930'>dependabot/github_actions/github-actions-ced721f930</option>
<option value='dependabot/github_actions/github-actions-f50e11107c'>dependabot/github_actions/github-actions-f50e11107c</option>
<option value='dependabot/npm_and_yarn/form-data-4.0.4'>dependabot/npm_and_yarn/form-data-4.0.4</option>
<option value='dependabot/npm_and_yarn/multi-b97207525a'>dependabot/npm_and_yarn/multi-b97207525a</option>
<option value='dependabot/npm_and_yarn/rollup-4.22.4'>dependabot/npm_and_yarn/rollup-4.22.4</option>
<option value='jtr-test'>jtr-test</option>
<option value='main'>main</option>
<option value='mgol-patch-1'>mgol-patch-1</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>jQuery JavaScript Library: https://github.com/jquery/jquery</td><td class='sub right'>www-data</td></tr></table>
<table class='tabs'><tr><td>
<a href='/jquery.git/about/?h=dependabot/github_actions/github-actions-384b59e5c3'>about</a><a href='/jquery.git/?h=dependabot/github_actions/github-actions-384b59e5c3'>summary</a><a href='/jquery.git/refs/?h=dependabot/github_actions/github-actions-384b59e5c3'>refs</a><a class='active' href='/jquery.git/log/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;showmsg=1'>log</a><a href='/jquery.git/tree/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3'>tree</a><a href='/jquery.git/commit/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3'>commit</a><a href='/jquery.git/diff/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3'>diff</a><a href='/jquery.git/stats/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3'>stats</a></td><td class='form'><form class='right' method='get' action='/jquery.git/log/src/data/var/dataPriv.js'>
<input type='hidden' name='h' value='dependabot/github_actions/github-actions-384b59e5c3'/><input type='hidden' name='showmsg' value='1'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/jquery.git/log/?h=dependabot/github_actions/github-actions-384b59e5c3&amp;showmsg=1'>root</a>/<a href='/jquery.git/log/src?h=dependabot/github_actions/github-actions-384b59e5c3&amp;showmsg=1'>src</a>/<a href='/jquery.git/log/src/data?h=dependabot/github_actions/github-actions-384b59e5c3&amp;showmsg=1'>data</a>/<a href='/jquery.git/log/src/data/var?h=dependabot/github_actions/github-actions-384b59e5c3&amp;showmsg=1'>var</a>/<a href='/jquery.git/log/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;showmsg=1'>dataPriv.js</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th></th><th class='left'>Commit message (<a href='/jquery.git/log/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3'>Collapse</a>)</th><th class='left'>Author</th><th class='left'>Age</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
<tr class='logheader'><td class='commitgraph'>* </td><td class='logsubject'><a href='/jquery.git/commit/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;id=f75daab09102a4dd5107deadb55d4a169f86254a'>Core: Use named exports in `src/`</a></td><td>Michał Gołębiowski-Owczarek</td><td><span title='2023-09-12 02:27:19 +0200'>2023-09-12</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr class='nohover-highlight'><td class='commitgraph'><span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> </td>
<td colspan='5' class='logmsg'>
The `default` export is treated differently across tooling when transpiled
to CommonJS - tools differ on whether `module.exports` represents the full
module object or just its default export. Switch `src/` modules to named
exports for tooling consistency.

Fixes gh-5262
Closes gh-5292

</td></tr>
<tr class='logheader'><td class='commitgraph'>* </td><td class='logsubject'><a href='/jquery.git/commit/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;id=d0ce00cdfa680f1f0c38460bc51ea14079ae8b07'>Core: Migrate from AMD to ES modules 🎉</a></td><td>Michał Gołębiowski-Owczarek</td><td><span title='2019-11-18 21:15:03 +0100'>2019-11-18</span></td><td>1</td><td><span class='deletions'>-6</span>/<span class='insertions'>+2</span></td></tr>
<tr class='nohover-highlight'><td class='commitgraph'><span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> </td>
<td colspan='5' class='logmsg'>
Migrate all source AMD modules to ECMAScript modules. The final bundle
is compiled by a custom build process that uses Rollup under the hood.

Test files themselves are still loaded via RequireJS as that has to work in
IE 11.

Tests can now be run in "Load as modules" mode which replaces the previous
"Load with AMD" option. That option of running tests doesn't work in IE
and Edge as it requires support for dynamic imports.

Some of the changes required by the migration:
* check `typeof` of `noGlobal` instead of using the variable directly
  as it's not available when modules are used
* change the nonce module to be an object as ECMASscript module exports
  are immutable
* remove some unused exports
* import `./core/parseHTML.js` directly in `jquery.js` so that it's not
  being cut out when the `ajax` module is excluded in a custom compilation

Closes gh-4541

</td></tr>
<tr class='logheader'><td class='commitgraph'>* </td><td class='logsubject'><a href='/jquery.git/commit/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;id=305f193aa57014dc7d8fa0739a3fefd47166cd44'>Build: Put all AMD modules in "src/" in strict mode</a></td><td>Michał Gołębiowski</td><td><span title='2016-04-25 20:25:08 +0200'>2016-04-25</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+2</span></td></tr>
<tr class='nohover-highlight'><td class='commitgraph'><span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> </td>
<td colspan='5' class='logmsg'>
Fixes gh-3073


</td></tr>
<tr class='logheader'><td class='commitgraph'>* </td><td class='logsubject'><a href='/jquery.git/commit/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;id=10fdad742a2a6aa9f0e00b3e04fc5264797c53c7'>Build: Update jscs and lint files</a></td><td>Oleg Gaidarenko</td><td><span title='2015-09-07 20:03:50 +0300'>2015-09-07</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr class='nohover-highlight'><td class='commitgraph'><span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> 
<span class='column1'>|</span> </td>
<td colspan='5' class='logmsg'>
Fixes gh-2056


</td></tr>
<tr class='logheader'><td class='commitgraph'>* </td><td class='logsubject'><a href='/jquery.git/commit/src/data/var/dataPriv.js?h=dependabot/github_actions/github-actions-384b59e5c3&amp;id=c869a1ef8a031342e817a2c063179a787ff57239'>Build: update grunt-jscs-checker and pass with the new rules</a></td><td>Timmy Willison</td><td><span title='2014-07-17 10:25:59 -0700'>2014-07-17</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+5</span></td></tr>
<tr class='nohover-highlight'><td class='commitgraph'>  </td>
<td colspan='5' class='logmsg'>
</td></tr>
</table><ul class='pager'></ul></div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-08-01 19:05:52 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
ref='#n60'>60</a>
<a id='n61' href='#n61'>61</a>
<a id='n62' href='#n62'>62</a>
<a id='n63' href='#n63'>63</a>
<a id='n64' href='#n64'>64</a>
<a id='n65' href='#n65'>65</a>
<a id='n66' href='#n66'>66</a>
<a id='n67' href='#n67'>67</a>
<a id='n68' href='#n68'>68</a>
<a id='n69' href='#n69'>69</a>
<a id='n70' href='#n70'>70</a>
<a id='n71' href='#n71'>71</a>
<a id='n72' href='#n72'>72</a>
<a id='n73' href='#n73'>73</a>
<a id='n74' href='#n74'>74</a>
<a id='n75' href='#n75'>75</a>
<a id='n76' href='#n76'>76</a>
<a id='n77' href='#n77'>77</a>
<a id='n78' href='#n78'>78</a>
<a id='n79' href='#n79'>79</a>
<a id='n80' href='#n80'>80</a>
<a id='n81' href='#n81'>81</a>
<a id='n82' href='#n82'>82</a>
<a id='n83' href='#n83'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
<a id='n91' href='#n91'>91</a>
<a id='n92' href='#n92'>92</a>
<a id='n93' href='#n93'>93</a>
<a id='n94' href='#n94'>94</a>
<a id='n95' href='#n95'>95</a>
<a id='n96' href='#n96'>96</a>
<a id='n97' href='#n97'>97</a>
<a id='n98' href='#n98'>98</a>
<a id='n99' href='#n99'>99</a>
<a id='n100' href='#n100'>100</a>
<a id='n101' href='#n101'>101</a>
<a id='n102' href='#n102'>102</a>
<a id='n103' href='#n103'>103</a>
<a id='n104' href='#n104'>104</a>
<a id='n105' href='#n105'>105</a>
<a id='n106' href='#n106'>106</a>
<a id='n107' href='#n107'>107</a>
<a id='n108' href='#n108'>108</a>
<a id='n109' href='#n109'>109</a>
<a id='n110' href='#n110'>110</a>
<a id='n111' href='#n111'>111</a>
<a id='n112' href='#n112'>112</a>
<a id='n113' href='#n113'>113</a>
<a id='n114' href='#n114'>114</a>
<a id='n115' href='#n115'>115</a>
<a id='n116' href='#n116'>116</a>
<a id='n117' href='#n117'>117</a>
<a id='n118' href='#n118'>118</a>
<a id='n119' href='#n119'>119</a>
<a id='n120' href='#n120'>120</a>
<a id='n121' href='#n121'>121</a>
<a id='n122' href='#n122'>122</a>
<a id='n123' href='#n123'>123</a>
<a id='n124' href='#n124'>124</a>
<a id='n125' href='#n125'>125</a>
<a id='n126' href='#n126'>126</a>
<a id='n127' href='#n127'>127</a>
<a id='n128' href='#n128'>128</a>
<a id='n129' href='#n129'>129</a>
<a id='n130' href='#n130'>130</a>
<a id='n131' href='#n131'>131</a>
<a id='n132' href='#n132'>132</a>
<a id='n133' href='#n133'>133</a>
<a id='n134' href='#n134'>134</a>
<a id='n135' href='#n135'>135</a>
<a id='n136' href='#n136'>136</a>
<a id='n137' href='#n137'>137</a>
<a id='n138' href='#n138'>138</a>
<a id='n139' href='#n139'>139</a>
<a id='n140' href='#n140'>140</a>
<a id='n141' href='#n141'>141</a>
<a id='n142' href='#n142'>142</a>
<a id='n143' href='#n143'>143</a>
<a id='n144' href='#n144'>144</a>
<a id='n145' href='#n145'>145</a>
<a id='n146' href='#n146'>146</a>
<a id='n147' href='#n147'>147</a>
<a id='n148' href='#n148'>148</a>
<a id='n149' href='#n149'>149</a>
<a id='n150' href='#n150'>150</a>
<a id='n151' href='#n151'>151</a>
<a id='n152' href='#n152'>152</a>
<a id='n153' href='#n153'>153</a>
<a id='n154' href='#n154'>154</a>
<a id='n155' href='#n155'>155</a>
<a id='n156' href='#n156'>156</a>
<a id='n157' href='#n157'>157</a>
<a id='n158' href='#n158'>158</a>
<a id='n159' href='#n159'>159</a>
<a id='n160' href='#n160'>160</a>
<a id='n161' href='#n161'>161</a>
<a id='n162' href='#n162'>162</a>
<a id='n163' href='#n163'>163</a>
<a id='n164' href='#n164'>164</a>
<a id='n165' href='#n165'>165</a>
<a id='n166' href='#n166'>166</a>
<a id='n167' href='#n167'>167</a>
<a id='n168' href='#n168'>168</a>
<a id='n169' href='#n169'>169</a>
<a id='n170' href='#n170'>170</a>
<a id='n171' href='#n171'>171</a>
<a id='n172' href='#n172'>172</a>
<a id='n173' href='#n173'>173</a>
<a id='n174' href='#n174'>174</a>
<a id='n175' href='#n175'>175</a>
<a id='n176' href='#n176'>176</a>
<a id='n177' href='#n177'>177</a>
<a id='n178' href='#n178'>178</a>
<a id='n179' href='#n179'>179</a>
<a id='n180' href='#n180'>180</a>
<a id='n181' href='#n181'>181</a>
<a id='n182' href='#n182'>182</a>
<a id='n183' href='#n183'>183</a>
<a id='n184' href='#n184'>184</a>
<a id='n185' href='#n185'>185</a>
<a id='n186' href='#n186'>186</a>
<a id='n187' href='#n187'>187</a>
<a id='n188' href='#n188'>188</a>
<a id='n189' href='#n189'>189</a>
<a id='n190' href='#n190'>190</a>
<a id='n191' href='#n191'>191</a>
<a id='n192' href='#n192'>192</a>
<a id='n193' href='#n193'>193</a>
<a id='n194' href='#n194'>194</a>
<a id='n195' href='#n195'>195</a>
<a id='n196' href='#n196'>196</a>
<a id='n197' href='#n197'>197</a>
<a id='n198' href='#n198'>198</a>
<a id='n199' href='#n199'>199</a>
<a id='n200' href='#n200'>200</a>
<a id='n201' href='#n201'>201</a>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
<a id='n285' href='#n285'>285</a>
<a id='n286' href='#n286'>286</a>
<a id='n287' href='#n287'>287</a>
<a id='n288' href='#n288'>288</a>
<a id='n289' href='#n289'>289</a>
<a id='n290' href='#n290'>290</a>
<a id='n291' href='#n291'>291</a>
<a id='n292' href='#n292'>292</a>
<a id='n293' href='#n293'>293</a>
<a id='n294' href='#n294'>294</a>
<a id='n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
<a id='n321' href='#n321'>321</a>
<a id='n322' href='#n322'>322</a>
<a id='n323' href='#n323'>323</a>
<a id='n324' href='#n324'>324</a>
<a id='n325' href='#n325'>325</a>
<a id='n326' href='#n326'>326</a>
<a id='n327' href='#n327'>327</a>
<a id='n328' href='#n328'>328</a>
<a id='n329' href='#n329'>329</a>
<a id='n330' href='#n330'>330</a>
<a id='n331' href='#n331'>331</a>
<a id='n332' href='#n332'>332</a>
<a id='n333' href='#n333'>333</a>
<a id='n334' href='#n334'>334</a>
<a id='n335' href='#n335'>335</a>
<a id='n336' href='#n336'>336</a>
<a id='n337' href='#n337'>337</a>
<a id='n338' href='#n338'>338</a>
<a id='n339' href='#n339'>339</a>
<a id='n340' href='#n340'>340</a>
<a id='n341' href='#n341'>341</a>
<a id='n342' href='#n342'>342</a>
<a id='n343' href='#n343'>343</a>
<a id='n344' href='#n344'>344</a>
<a id='n345' href='#n345'>345</a>
<a id='n346' href='#n346'>346</a>
<a id='n347' href='#n347'>347</a>
<a id='n348' href='#n348'>348</a>
<a id='n349' href='#n349'>349</a>
<a id='n350' href='#n350'>350</a>
<a id='n351' href='#n351'>351</a>
<a id='n352' href='#n352'>352</a>
<a id='n353' href='#n353'>353</a>
<a id='n354' href='#n354'>354</a>
<a id='n355' href='#n355'>355</a>
<a id='n356' href='#n356'>356</a>
<a id='n357' href='#n357'>357</a>
<a id='n358' href='#n358'>358</a>
<a id='n359' href='#n359'>359</a>
<a id='n360' href='#n360'>360</a>
<a id='n361' href='#n361'>361</a>
<a id='n362' href='#n362'>362</a>
<a id='n363' href='#n363'>363</a>
<a id='n364' href='#n364'>364</a>
<a id='n365' href='#n365'>365</a>
<a id='n366' href='#n366'>366</a>
<a id='n367' href='#n367'>367</a>
<a id='n368' href='#n368'>368</a>
<a id='n369' href='#n369'>369</a>
<a id='n370' href='#n370'>370</a>
<a id='n371' href='#n371'>371</a>
<a id='n372' href='#n372'>372</a>
<a id='n373' href='#n373'>373</a>
<a id='n374' href='#n374'>374</a>
<a id='n375' href='#n375'>375</a>
<a id='n376' href='#n376'>376</a>
<a id='n377' href='#n377'>377</a>
<a id='n378' href='#n378'>378</a>
<a id='n379' href='#n379'>379</a>
<a id='n380' href='#n380'>380</a>
<a id='n381' href='#n381'>381</a>
<a id='n382' href='#n382'>382</a>
<a id='n383' href='#n383'>383</a>
<a id='n384' href='#n384'>384</a>
<a id='n385' href='#n385'>385</a>
<a id='n386' href='#n386'>386</a>
<a id='n387' href='#n387'>387</a>
<a id='n388' href='#n388'>388</a>
<a id='n389' href='#n389'>389</a>
<a id='n390' href='#n390'>390</a>
<a id='n391' href='#n391'>391</a>
<a id='n392' href='#n392'>392</a>
<a id='n393' href='#n393'>393</a>
<a id='n394' href='#n394'>394</a>
<a id='n395' href='#n395'>395</a>
<a id='n396' href='#n396'>396</a>
<a id='n397' href='#n397'>397</a>
<a id='n398' href='#n398'>398</a>
<a id='n399' href='#n399'>399</a>
<a id='n400' href='#n400'>400</a>
<a id='n401' href='#n401'>401</a>
<a id='n402' href='#n402'>402</a>
<a id='n403' href='#n403'>403</a>
<a id='n404' href='#n404'>404</a>
<a id='n405' href='#n405'>405</a>
<a id='n406' href='#n406'>406</a>
<a id='n407' href='#n407'>407</a>
<a id='n408' href='#n408'>408</a>
<a id='n409' href='#n409'>409</a>
<a id='n410' href='#n410'>410</a>
<a id='n411' href='#n411'>411</a>
<a id='n412' href='#n412'>412</a>
<a id='n413' href='#n413'>413</a>
<a id='n414' href='#n414'>414</a>
<a id='n415' href='#n415'>415</a>
<a id='n416' href='#n416'>416</a>
<a id='n417' href='#n417'>417</a>
<a id='n418' href='#n418'>418</a>
<a id='n419' href='#n419'>419</a>
<a id='n420' href='#n420'>420</a>
<a id='n421' href='#n421'>421</a>
<a id='n422' href='#n422'>422</a>
<a id='n423' href='#n423'>423</a>
<a id='n424' href='#n424'>424</a>
<a id='n425' href='#n425'>425</a>
<a id='n426' href='#n426'>426</a>
<a id='n427' href='#n427'>427</a>
<a id='n428' href='#n428'>428</a>
<a id='n429' href='#n429'>429</a>
<a id='n430' href='#n430'>430</a>
<a id='n431' href='#n431'>431</a>
<a id='n432' href='#n432'>432</a>
<a id='n433' href='#n433'>433</a>
<a id='n434' href='#n434'>434</a>
<a id='n435' href='#n435'>435</a>
<a id='n436' href='#n436'>436</a>
<a id='n437' href='#n437'>437</a>
<a id='n438' href='#n438'>438</a>
<a id='n439' href='#n439'>439</a>
<a id='n440' href='#n440'>440</a>
<a id='n441' href='#n441'>441</a>
<a id='n442' href='#n442'>442</a>
<a id='n443' href='#n443'>443</a>
<a id='n444' href='#n444'>444</a>
<a id='n445' href='#n445'>445</a>
<a id='n446' href='#n446'>446</a>
<a id='n447' href='#n447'>447</a>
<a id='n448' href='#n448'>448</a>
<a id='n449' href='#n449'>449</a>
<a id='n450' href='#n450'>450</a>
<a id='n451' href='#n451'>451</a>
<a id='n452' href='#n452'>452</a>
<a id='n453' href='#n453'>453</a>
<a id='n454' href='#n454'>454</a>
<a id='n455' href='#n455'>455</a>
<a id='n456' href='#n456'>456</a>
<a id='n457' href='#n457'>457</a>
<a id='n458' href='#n458'>458</a>
<a id='n459' href='#n459'>459</a>
<a id='n460' href='#n460'>460</a>
<a id='n461' href='#n461'>461</a>
<a id='n462' href='#n462'>462</a>
<a id='n463' href='#n463'>463</a>
<a id='n464' href='#n464'>464</a>
<a id='n465' href='#n465'>465</a>
<a id='n466' href='#n466'>466</a>
<a id='n467' href='#n467'>467</a>
<a id='n468' href='#n468'>468</a>
<a id='n469' href='#n469'>469</a>
<a id='n470' href='#n470'>470</a>
<a id='n471' href='#n471'>471</a>
<a id='n472' href='#n472'>472</a>
<a id='n473' href='#n473'>473</a>
<a id='n474' href='#n474'>474</a>
<a id='n475' href='#n475'>475</a>
<a id='n476' href='#n476'>476</a>
<a id='n477' href='#n477'>477</a>
<a id='n478' href='#n478'>478</a>
<a id='n479' href='#n479'>479</a>
<a id='n480' href='#n480'>480</a>
<a id='n481' href='#n481'>481</a>
<a id='n482' href='#n482'>482</a>
<a id='n483' href='#n483'>483</a>
<a id='n484' href='#n484'>484</a>
<a id='n485' href='#n485'>485</a>
<a id='n486' href='#n486'>486</a>
<a id='n487' href='#n487'>487</a>
<a id='n488' href='#n488'>488</a>
<a id='n489' href='#n489'>489</a>
<a id='n490' href='#n490'>490</a>
<a id='n491' href='#n491'>491</a>
<a id='n492' href='#n492'>492</a>
<a id='n493' href='#n493'>493</a>
<a id='n494' href='#n494'>494</a>
<a id='n495' href='#n495'>495</a>
<a id='n496' href='#n496'>496</a>
<a id='n497' href='#n497'>497</a>
<a id='n498' href='#n498'>498</a>
<a id='n499' href='#n499'>499</a>
<a id='n500' href='#n500'>500</a>
<a id='n501' href='#n501'>501</a>
<a id='n502' href='#n502'>502</a>
<a id='n503' href='#n503'>503</a>
<a id='n504' href='#n504'>504</a>
<a id='n505' href='#n505'>505</a>
<a id='n506' href='#n506'>506</a>
<a id='n507' href='#n507'>507</a>
<a id='n508' href='#n508'>508</a>
<a id='n509' href='#n509'>509</a>
<a id='n510' href='#n510'>510</a>
<a id='n511' href='#n511'>511</a>
<a id='n512' href='#n512'>512</a>
<a id='n513' href='#n513'>513</a>
<a id='n514' href='#n514'>514</a>
<a id='n515' href='#n515'>515</a>
<a id='n516' href='#n516'>516</a>
<a id='n517' href='#n517'>517</a>
<a id='n518' href='#n518'>518</a>
<a id='n519' href='#n519'>519</a>
<a id='n520' href='#n520'>520</a>
<a id='n521' href='#n521'>521</a>
<a id='n522' href='#n522'>522</a>
<a id='n523' href='#n523'>523</a>
<a id='n524' href='#n524'>524</a>
<a id='n525' href='#n525'>525</a>
<a id='n526' href='#n526'>526</a>
<a id='n527' href='#n527'>527</a>
<a id='n528' href='#n528'>528</a>
<a id='n529' href='#n529'>529</a>
<a id='n530' href='#n530'>530</a>
<a id='n531' href='#n531'>531</a>
<a id='n532' href='#n532'>532</a>
<a id='n533' href='#n533'>533</a>
<a id='n534' href='#n534'>534</a>
<a id='n535' href='#n535'>535</a>
<a id='n536' href='#n536'>536</a>
<a id='n537' href='#n537'>537</a>
<a id='n538' href='#n538'>538</a>
<a id='n539' href='#n539'>539</a>
<a id='n540' href='#n540'>540</a>
<a id='n541' href='#n541'>541</a>
<a id='n542' href='#n542'>542</a>
<a id='n543' href='#n543'>543</a>
<a id='n544' href='#n544'>544</a>
<a id='n545' href='#n545'>545</a>
<a id='n546' href='#n546'>546</a>
<a id='n547' href='#n547'>547</a>
<a id='n548' href='#n548'>548</a>
<a id='n549' href='#n549'>549</a>
<a id='n550' href='#n550'>550</a>
<a id='n551' href='#n551'>551</a>
<a id='n552' href='#n552'>552</a>
<a id='n553' href='#n553'>553</a>
<a id='n554' href='#n554'>554</a>
<a id='n555' href='#n555'>555</a>
<a id='n556' href='#n556'>556</a>
<a id='n557' href='#n557'>557</a>
<a id='n558' href='#n558'>558</a>
<a id='n559' href='#n559'>559</a>
<a id='n560' href='#n560'>560</a>
<a id='n561' href='#n561'>561</a>
<a id='n562' href='#n562'>562</a>
<a id='n563' href='#n563'>563</a>
<a id='n564' href='#n564'>564</a>
<a id='n565' href='#n565'>565</a>
<a id='n566' href='#n566'>566</a>
<a id='n567' href='#n567'>567</a>
<a id='n568' href='#n568'>568</a>
<a id='n569' href='#n569'>569</a>
<a id='n570' href='#n570'>570</a>
<a id='n571' href='#n571'>571</a>
<a id='n572' href='#n572'>572</a>
<a id='n573' href='#n573'>573</a>
<a id='n574' href='#n574'>574</a>
<a id='n575' href='#n575'>575</a>
<a id='n576' href='#n576'>576</a>
<a id='n577' href='#n577'>577</a>
<a id='n578' href='#n578'>578</a>
<a id='n579' href='#n579'>579</a>
<a id='n580' href='#n580'>580</a>
<a id='n581' href='#n581'>581</a>
<a id='n582' href='#n582'>582</a>
<a id='n583' href='#n583'>583</a>
<a id='n584' href='#n584'>584</a>
<a id='n585' href='#n585'>585</a>
<a id='n586' href='#n586'>586</a>
<a id='n587' href='#n587'>587</a>
<a id='n588' href='#n588'>588</a>
<a id='n589' href='#n589'>589</a>
<a id='n590' href='#n590'>590</a>
<a id='n591' href='#n591'>591</a>
<a id='n592' href='#n592'>592</a>
<a id='n593' href='#n593'>593</a>
<a id='n594' href='#n594'>594</a>
<a id='n595' href='#n595'>595</a>
<a id='n596' href='#n596'>596</a>
<a id='n597' href='#n597'>597</a>
<a id='n598' href='#n598'>598</a>
<a id='n599' href='#n599'>599</a>
<a id='n600' href='#n600'>600</a>
<a id='n601' href='#n601'>601</a>
<a id='n602' href='#n602'>602</a>
<a id='n603' href='#n603'>603</a>
<a id='n604' href='#n604'>604</a>
<a id='n605' href='#n605'>605</a>
<a id='n606' href='#n606'>606</a>
<a id='n607' href='#n607'>607</a>
<a id='n608' href='#n608'>608</a>
<a id='n609' href='#n609'>609</a>
<a id='n610' href='#n610'>610</a>
<a id='n611' href='#n611'>611</a>
<a id='n612' href='#n612'>612</a>
<a id='n613' href='#n613'>613</a>
<a id='n614' href='#n614'>614</a>
<a id='n615' href='#n615'>615</a>
<a id='n616' href='#n616'>616</a>
<a id='n617' href='#n617'>617</a>
<a id='n618' href='#n618'>618</a>
<a id='n619' href='#n619'>619</a>
<a id='n620' href='#n620'>620</a>
<a id='n621' href='#n621'>621</a>
<a id='n622' href='#n622'>622</a>
<a id='n623' href='#n623'>623</a>
<a id='n624' href='#n624'>624</a>
<a id='n625' href='#n625'>625</a>
<a id='n626' href='#n626'>626</a>
<a id='n627' href='#n627'>627</a>
<a id='n628' href='#n628'>628</a>
<a id='n629' href='#n629'>629</a>
<a id='n630' href='#n630'>630</a>
<a id='n631' href='#n631'>631</a>
<a id='n632' href='#n632'>632</a>
<a id='n633' href='#n633'>633</a>
<a id='n634' href='#n634'>634</a>
<a id='n635' href='#n635'>635</a>
<a id='n636' href='#n636'>636</a>
<a id='n637' href='#n637'>637</a>
<a id='n638' href='#n638'>638</a>
<a id='n639' href='#n639'>639</a>
<a id='n640' href='#n640'>640</a>
<a id='n641' href='#n641'>641</a>
<a id='n642' href='#n642'>642</a>
<a id='n643' href='#n643'>643</a>
<a id='n644' href='#n644'>644</a>
<a id='n645' href='#n645'>645</a>
<a id='n646' href='#n646'>646</a>
<a id='n647' href='#n647'>647</a>
<a id='n648' href='#n648'>648</a>
<a id='n649' href='#n649'>649</a>
<a id='n650' href='#n650'>650</a>
<a id='n651' href='#n651'>651</a>
<a id='n652' href='#n652'>652</a>
<a id='n653' href='#n653'>653</a>
<a id='n654' href='#n654'>654</a>
<a id='n655' href='#n655'>655</a>
<a id='n656' href='#n656'>656</a>
<a id='n657' href='#n657'>657</a>
<a id='n658' href='#n658'>658</a>
<a id='n659' href='#n659'>659</a>
<a id='n660' href='#n660'>660</a>
<a id='n661' href='#n661'>661</a>
<a id='n662' href='#n662'>662</a>
<a id='n663' href='#n663'>663</a>
<a id='n664' href='#n664'>664</a>
<a id='n665' href='#n665'>665</a>
<a id='n666' href='#n666'>666</a>
<a id='n667' href='#n667'>667</a>
<a id='n668' href='#n668'>668</a>
<a id='n669' href='#n669'>669</a>
<a id='n670' href='#n670'>670</a>
<a id='n671' href='#n671'>671</a>
<a id='n672' href='#n672'>672</a>
<a id='n673' href='#n673'>673</a>
<a id='n674' href='#n674'>674</a>
<a id='n675' href='#n675'>675</a>
<a id='n676' href='#n676'>676</a>
<a id='n677' href='#n677'>677</a>
<a id='n678' href='#n678'>678</a>
<a id='n679' href='#n679'>679</a>
<a id='n680' href='#n680'>680</a>
<a id='n681' href='#n681'>681</a>
<a id='n682' href='#n682'>682</a>
<a id='n683' href='#n683'>683</a>
<a id='n684' href='#n684'>684</a>
<a id='n685' href='#n685'>685</a>
<a id='n686' href='#n686'>686</a>
<a id='n687' href='#n687'>687</a>
<a id='n688' href='#n688'>688</a>
<a id='n689' href='#n689'>689</a>
<a id='n690' href='#n690'>690</a>
<a id='n691' href='#n691'>691</a>
<a id='n692' href='#n692'>692</a>
<a id='n693' href='#n693'>693</a>
<a id='n694' href='#n694'>694</a>
<a id='n695' href='#n695'>695</a>
<a id='n696' href='#n696'>696</a>
<a id='n697' href='#n697'>697</a>
<a id='n698' href='#n698'>698</a>
<a id='n699' href='#n699'>699</a>
<a id='n700' href='#n700'>700</a>
<a id='n701' href='#n701'>701</a>
<a id='n702' href='#n702'>702</a>
<a id='n703' href='#n703'>703</a>
<a id='n704' href='#n704'>704</a>
<a id='n705' href='#n705'>705</a>
<a id='n706' href='#n706'>706</a>
<a id='n707' href='#n707'>707</a>
<a id='n708' href='#n708'>708</a>
<a id='n709' href='#n709'>709</a>
<a id='n710' href='#n710'>710</a>
<a id='n711' href='#n711'>711</a>
<a id='n712' href='#n712'>712</a>
<a id='n713' href='#n713'>713</a>
<a id='n714' href='#n714'>714</a>
<a id='n715' href='#n715'>715</a>
<a id='n716' href='#n716'>716</a>
<a id='n717' href='#n717'>717</a>
<a id='n718' href='#n718'>718</a>
<a id='n719' href='#n719'>719</a>
<a id='n720' href='#n720'>720</a>
<a id='n721' href='#n721'>721</a>
<a id='n722' href='#n722'>722</a>
<a id='n723' href='#n723'>723</a>
<a id='n724' href='#n724'>724</a>
<a id='n725' href='#n725'>725</a>
<a id='n726' href='#n726'>726</a>
<a id='n727' href='#n727'>727</a>
<a id='n728' href='#n728'>728</a>
<a id='n729' href='#n729'>729</a>
<a id='n730' href='#n730'>730</a>
<a id='n731' href='#n731'>731</a>
<a id='n732' href='#n732'>732</a>
<a id='n733' href='#n733'>733</a>
<a id='n734' href='#n734'>734</a>
<a id='n735' href='#n735'>735</a>
<a id='n736' href='#n736'>736</a>
<a id='n737' href='#n737'>737</a>
<a id='n738' href='#n738'>738</a>
<a id='n739' href='#n739'>739</a>
<a id='n740' href='#n740'>740</a>
<a id='n741' href='#n741'>741</a>
<a id='n742' href='#n742'>742</a>
<a id='n743' href='#n743'>743</a>
<a id='n744' href='#n744'>744</a>
<a id='n745' href='#n745'>745</a>
<a id='n746' href='#n746'>746</a>
<a id='n747' href='#n747'>747</a>
<a id='n748' href='#n748'>748</a>
<a id='n749' href='#n749'>749</a>
<a id='n750' href='#n750'>750</a>
<a id='n751' href='#n751'>751</a>
<a id='n752' href='#n752'>752</a>
<a id='n753' href='#n753'>753</a>
<a id='n754' href='#n754'>754</a>
<a id='n755' href='#n755'>755</a>
<a id='n756' href='#n756'>756</a>
<a id='n757' href='#n757'>757</a>
<a id='n758' href='#n758'>758</a>
<a id='n759' href='#n759'>759</a>
<a id='n760' href='#n760'>760</a>
<a id='n761' href='#n761'>761</a>
<a id='n762' href='#n762'>762</a>
<a id='n763' href='#n763'>763</a>
<a id='n764' href='#n764'>764</a>
<a id='n765' href='#n765'>765</a>
<a id='n766' href='#n766'>766</a>
<a id='n767' href='#n767'>767</a>
<a id='n768' href='#n768'>768</a>
<a id='n769' href='#n769'>769</a>
<a id='n770' href='#n770'>770</a>
<a id='n771' href='#n771'>771</a>
<a id='n772' href='#n772'>772</a>
<a id='n773' href='#n773'>773</a>
<a id='n774' href='#n774'>774</a>
<a id='n775' href='#n775'>775</a>
<a id='n776' href='#n776'>776</a>
<a id='n777' href='#n777'>777</a>
<a id='n778' href='#n778'>778</a>
<a id='n779' href='#n779'>779</a>
<a id='n780' href='#n780'>780</a>
<a id='n781' href='#n781'>781</a>
<a id='n782' href='#n782'>782</a>
<a id='n783' href='#n783'>783</a>
<a id='n784' href='#n784'>784</a>
<a id='n785' href='#n785'>785</a>
<a id='n786' href='#n786'>786</a>
<a id='n787' href='#n787'>787</a>
<a id='n788' href='#n788'>788</a>
<a id='n789' href='#n789'>789</a>
<a id='n790' href='#n790'>790</a>
<a id='n791' href='#n791'>791</a>
<a id='n792' href='#n792'>792</a>
<a id='n793' href='#n793'>793</a>
<a id='n794' href='#n794'>794</a>
<a id='n795' href='#n795'>795</a>
<a id='n796' href='#n796'>796</a>
<a id='n797' href='#n797'>797</a>
<a id='n798' href='#n798'>798</a>
<a id='n799' href='#n799'>799</a>
<a id='n800' href='#n800'>800</a>
<a id='n801' href='#n801'>801</a>
<a id='n802' href='#n802'>802</a>
<a id='n803' href='#n803'>803</a>
<a id='n804' href='#n804'>804</a>
<a id='n805' href='#n805'>805</a>
<a id='n806' href='#n806'>806</a>
<a id='n807' href='#n807'>807</a>
<a id='n808' href='#n808'>808</a>
<a id='n809' href='#n809'>809</a>
<a id='n810' href='#n810'>810</a>
<a id='n811' href='#n811'>811</a>
<a id='n812' href='#n812'>812</a>
<a id='n813' href='#n813'>813</a>
</pre></td>
<td class='lines'><pre><code><style>pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */</style><div class="highlight"><pre><span></span><span class="cm">/*</span>
<span class="cm"> * Copyright 2000-2022 Vaadin Ltd.</span>
<span class="cm"> *</span>
<span class="cm"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;); you may not</span>
<span class="cm"> * use this file except in compliance with the License. You may obtain a copy of</span>
<span class="cm"> * the License at</span>
<span class="cm"> *</span>
<span class="cm"> * http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="cm"> *</span>
<span class="cm"> * Unless required by applicable law or agreed to in writing, software</span>
<span class="cm"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS, WITHOUT</span>
<span class="cm"> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the</span>
<span class="cm"> * License for the specific language governing permissions and limitations under</span>
<span class="cm"> * the License.</span>
<span class="cm"> */</span>

<span class="kn">package</span><span class="w"> </span><span class="nn">com.vaadin.v7.ui</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Collection</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Map</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">org.jsoup.nodes.Attributes</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">org.jsoup.nodes.Element</span><span class="p">;</span>

<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.event.FieldEvents.BlurEvent</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.event.FieldEvents.BlurListener</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.event.FieldEvents.FocusEvent</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.event.FieldEvents.FocusListener</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.server.PaintException</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.server.PaintTarget</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.ui.LegacyComponent</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.ui.declarative.DesignAttributeHandler</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.ui.declarative.DesignContext</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.event.FieldEvents.BlurNotifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.event.FieldEvents.FocusNotifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.event.FieldEvents.TextChangeEvent</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.event.FieldEvents.TextChangeListener</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.event.FieldEvents.TextChangeNotifier</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.shared.ui.textfield.AbstractTextFieldState</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">com.vaadin.v7.shared.ui.textfield.TextFieldConstants</span><span class="p">;</span>

<span class="nd">@Deprecated</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kd">class</span> <span class="nc">AbstractTextField</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">AbstractField</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="kd">implements</span>
<span class="w">        </span><span class="n">BlurNotifier</span><span class="p">,</span><span class="w"> </span><span class="n">FocusNotifier</span><span class="p">,</span><span class="w"> </span><span class="n">TextChangeNotifier</span><span class="p">,</span><span class="w"> </span><span class="n">LegacyComponent</span><span class="w"> </span><span class="p">{</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Null representation.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">nullRepresentation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;null&quot;</span><span class="p">;</span>
<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Is setting to null from non-null value allowed by setting with null</span>
<span class="cm">     * representation .</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">nullSettingAllowed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * The text content when the last messages to the server was sent. Cleared</span>
<span class="cm">     * when value is changed.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">lastKnownTextContent</span><span class="p">;</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * The position of the cursor when the last message to the server was sent.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">lastKnownCursorPosition</span><span class="p">;</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Flag indicating that a text change event is pending to be triggered.</span>
<span class="cm">     * Cleared by {@link #setInternalValue(Object)} and when the event is fired.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">textChangeEventPending</span><span class="p">;</span>

<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">isFiringTextChangeEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>

<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="n">TextChangeEventMode</span><span class="w"> </span><span class="n">textChangeEventMode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TextChangeEventMode</span><span class="p">.</span><span class="na">LAZY</span><span class="p">;</span>

<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">DEFAULT_TEXTCHANGE_TIMEOUT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">400</span><span class="p">;</span>

<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">textChangeEventTimeout</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">DEFAULT_TEXTCHANGE_TIMEOUT</span><span class="p">;</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Temporarily holds the new selection position. Cleared on paint.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">selectionPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Temporarily holds the new selection length.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">selectionLength</span><span class="p">;</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Flag used to determine whether we are currently handling a state change</span>
<span class="cm">     * triggered by a user. Used to properly fire text change event before value</span>
<span class="cm">     * change event triggered by the client side.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="n">changingVariables</span><span class="p">;</span>

<span class="w">    </span><span class="kd">protected</span><span class="w"> </span><span class="nf">AbstractTextField</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="kd">super</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">protected</span><span class="w"> </span><span class="n">AbstractTextFieldState</span><span class="w"> </span><span class="nf">getState</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">AbstractTextFieldState</span><span class="p">)</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getState</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">protected</span><span class="w"> </span><span class="n">AbstractTextFieldState</span><span class="w"> </span><span class="nf">getState</span><span class="p">(</span><span class="kt">boolean</span><span class="w"> </span><span class="n">markAsDirty</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">AbstractTextFieldState</span><span class="p">)</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getState</span><span class="p">(</span><span class="n">markAsDirty</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">beforeClientResponse</span><span class="p">(</span><span class="kt">boolean</span><span class="w"> </span><span class="n">initial</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="kd">super</span><span class="p">.</span><span class="na">beforeClientResponse</span><span class="p">(</span><span class="n">initial</span><span class="p">);</span>

<span class="w">        </span><span class="n">String</span><span class="w"> </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getValue</span><span class="p">();</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">value</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getNullRepresentation</span><span class="p">();</span>
<span class="w">        </span><span class="p">}</span>
<span class="w">        </span><span class="n">getState</span><span class="p">().</span><span class="na">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">paintContent</span><span class="p">(</span><span class="n">PaintTarget</span><span class="w"> </span><span class="n">target</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">PaintException</span><span class="w"> </span><span class="p">{</span>

<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">selectionPosition</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">target</span><span class="p">.</span><span class="na">addAttribute</span><span class="p">(</span><span class="s">&quot;selpos&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">selectionPosition</span><span class="p">);</span>
<span class="w">            </span><span class="n">target</span><span class="p">.</span><span class="na">addAttribute</span><span class="p">(</span><span class="s">&quot;sellen&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">selectionLength</span><span class="p">);</span>
<span class="w">            </span><span class="n">selectionPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hasListeners</span><span class="p">(</span><span class="n">TextChangeEvent</span><span class="p">.</span><span class="na">class</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">target</span><span class="p">.</span><span class="na">addAttribute</span><span class="p">(</span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">ATTR_TEXTCHANGE_EVENTMODE</span><span class="p">,</span>
<span class="w">                    </span><span class="n">getTextChangeEventMode</span><span class="p">().</span><span class="na">toString</span><span class="p">());</span>
<span class="w">            </span><span class="n">target</span><span class="p">.</span><span class="na">addAttribute</span><span class="p">(</span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">ATTR_TEXTCHANGE_TIMEOUT</span><span class="p">,</span>
<span class="w">                    </span><span class="n">getTextChangeTimeout</span><span class="p">());</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="cm">/*</span>
<span class="cm">                 * The field has be repainted for some reason (e.g. caption,</span>
<span class="cm">                 * size, stylename), but the value has not been changed since</span>
<span class="cm">                 * the last text change event. Let the client side know about</span>
<span class="cm">                 * the value the server side knows. Client side may then ignore</span>
<span class="cm">                 * the actual value, depending on its state.</span>
<span class="cm">                 */</span>
<span class="w">                </span><span class="n">target</span><span class="p">.</span><span class="na">addAttribute</span><span class="p">(</span>
<span class="w">                        </span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">ATTR_NO_VALUE_CHANGE_BETWEEN_PAINTS</span><span class="p">,</span>
<span class="w">                        </span><span class="kc">true</span><span class="p">);</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">changeVariables</span><span class="p">(</span><span class="n">Object</span><span class="w"> </span><span class="n">source</span><span class="p">,</span><span class="w"> </span><span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="n">Object</span><span class="o">&gt;</span><span class="w"> </span><span class="n">variables</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">changingVariables</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>

<span class="w">        </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>

<span class="w">            </span><span class="c1">// Sets the height set by the user when resize the &lt;textarea&gt;.</span>
<span class="w">            </span><span class="n">String</span><span class="w"> </span><span class="n">newHeight</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="p">)</span><span class="w"> </span><span class="n">variables</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="s">&quot;height&quot;</span><span class="p">);</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">newHeight</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">setHeight</span><span class="p">(</span><span class="n">newHeight</span><span class="p">);</span>
<span class="w">            </span><span class="p">}</span>

<span class="w">            </span><span class="c1">// Sets the width set by the user when resize the &lt;textarea&gt;.</span>
<span class="w">            </span><span class="n">String</span><span class="w"> </span><span class="n">newWidth</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="p">)</span><span class="w"> </span><span class="n">variables</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="s">&quot;width&quot;</span><span class="p">);</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">newWidth</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">setWidth</span><span class="p">(</span><span class="n">newWidth</span><span class="p">);</span>
<span class="w">            </span><span class="p">}</span>

<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">variables</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">VAR_CURSOR</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">Integer</span><span class="w"> </span><span class="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">Integer</span><span class="p">)</span><span class="w"> </span><span class="n">variables</span>
<span class="w">                        </span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">VAR_CURSOR</span><span class="p">);</span>
<span class="w">                </span><span class="n">lastKnownCursorPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">object</span><span class="p">.</span><span class="na">intValue</span><span class="p">();</span>
<span class="w">            </span><span class="p">}</span>

<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">variables</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">VAR_CUR_TEXT</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="cm">/*</span>
<span class="cm">                 * NOTE, we might want to develop this further so that on a</span>
<span class="cm">                 * value change event the whole text content don&#39;t need to be</span>
<span class="cm">                 * sent from the client to server. Just &quot;commit&quot; the value from</span>
<span class="cm">                 * currentText to the value.</span>
<span class="cm">                 */</span>
<span class="w">                </span><span class="n">handleInputEventTextChange</span><span class="p">(</span><span class="n">variables</span><span class="p">);</span>
<span class="w">            </span><span class="p">}</span>

<span class="w">            </span><span class="c1">// Sets the text</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">variables</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="s">&quot;text&quot;</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="o">!</span><span class="n">isReadOnly</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>

<span class="w">                </span><span class="c1">// Only do the setting if the string representation of the value</span>
<span class="w">                </span><span class="c1">// has been updated</span>
<span class="w">                </span><span class="n">String</span><span class="w"> </span><span class="n">newValue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="p">)</span><span class="w"> </span><span class="n">variables</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="s">&quot;text&quot;</span><span class="p">);</span>

<span class="w">                </span><span class="c1">// server side check for max length</span>
<span class="w">                </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">getMaxLength</span><span class="p">()</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span>
<span class="w">                        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">newValue</span><span class="p">.</span><span class="na">length</span><span class="p">()</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">getMaxLength</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">                    </span><span class="n">newValue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newValue</span><span class="p">.</span><span class="na">substring</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">getMaxLength</span><span class="p">());</span>
<span class="w">                </span><span class="p">}</span>
<span class="w">                </span><span class="kd">final</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">oldValue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getValue</span><span class="p">();</span>
<span class="w">                </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">newValue</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span>
<span class="w">                        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">oldValue</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">isNullSettingAllowed</span><span class="p">())</span>
<span class="w">                        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">newValue</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="n">getNullRepresentation</span><span class="p">()))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                    </span><span class="n">newValue</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">                </span><span class="p">}</span>
<span class="w">                </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">newValue</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">oldValue</span>
<span class="w">                        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">(</span><span class="n">newValue</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="o">!</span><span class="n">newValue</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="n">oldValue</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                    </span><span class="kt">boolean</span><span class="w"> </span><span class="n">wasModified</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">isModified</span><span class="p">();</span>
<span class="w">                    </span><span class="n">setValue</span><span class="p">(</span><span class="n">newValue</span><span class="p">,</span><span class="w"> </span><span class="kc">true</span><span class="p">);</span>

<span class="w">                    </span><span class="c1">// If the modified status changes, or if we have a</span>
<span class="w">                    </span><span class="c1">// formatter, repaint is needed after all.</span>
<span class="w">                    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wasModified</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">isModified</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w">                        </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">                    </span><span class="p">}</span>
<span class="w">                </span><span class="p">}</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">            </span><span class="n">firePendingTextChangeEvent</span><span class="p">();</span>

<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">variables</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">FocusEvent</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">fireEvent</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">FocusEvent</span><span class="p">(</span><span class="k">this</span><span class="p">));</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">variables</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="n">BlurEvent</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">fireEvent</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">BlurEvent</span><span class="p">(</span><span class="k">this</span><span class="p">));</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">changingVariables</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>

<span class="w">        </span><span class="p">}</span>

<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="n">Class</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="nf">getType</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">String</span><span class="p">.</span><span class="na">class</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Gets the null-string representation.</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * The null-valued strings are represented on the user interface by</span>
<span class="cm">     * replacing the null value with this string. If the null representation is</span>
<span class="cm">     * set null (not &#39;null&#39; string), painting null value throws exception.</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * The default value is string &#39;null&#39;.</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * @return the String Textual representation for null strings.</span>
<span class="cm">     * @see TextField#isNullSettingAllowed()</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getNullRepresentation</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">nullRepresentation</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Is setting nulls with null-string representation allowed.</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * If this property is true, writing null-representation string to text</span>
<span class="cm">     * field always sets the field value to real null. If this property is</span>
<span class="cm">     * false, null setting is not made, but the null values are maintained.</span>
<span class="cm">     * Maintenance of null-values is made by only converting the textfield</span>
<span class="cm">     * contents to real null, if the text field matches the null-string</span>
<span class="cm">     * representation and the current value of the field is null.</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * By default this setting is false</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * @return boolean Should the null-string represenation be always converted</span>
<span class="cm">     *         to null-values.</span>
<span class="cm">     * @see TextField#getNullRepresentation()</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">isNullSettingAllowed</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">nullSettingAllowed</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the null-string representation.</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * The null-valued strings are represented on the user interface by</span>
<span class="cm">     * replacing the null value with this string. If the null representation is</span>
<span class="cm">     * set null (not &#39;null&#39; string), painting null value throws exception.</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * The default value is string &#39;null&#39;</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * @param nullRepresentation</span>
<span class="cm">     *            Textual representation for null strings.</span>
<span class="cm">     * @see TextField#setNullSettingAllowed(boolean)</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setNullRepresentation</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">nullRepresentation</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">this</span><span class="p">.</span><span class="na">nullRepresentation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nullRepresentation</span><span class="p">;</span>
<span class="w">        </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the null conversion mode.</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * If this property is true, writing null-representation string to text</span>
<span class="cm">     * field always sets the field value to real null. If this property is</span>
<span class="cm">     * false, null setting is not made, but the null values are maintained.</span>
<span class="cm">     * Maintenance of null-values is made by only converting the textfield</span>
<span class="cm">     * contents to real null, if the text field matches the null-string</span>
<span class="cm">     * representation and the current value of the field is null.</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * By default this setting is false.</span>
<span class="cm">     * &lt;/p&gt;</span>
<span class="cm">     *</span>
<span class="cm">     * @param nullSettingAllowed</span>
<span class="cm">     *            Should the null-string representation always be converted to</span>
<span class="cm">     *            null-values.</span>
<span class="cm">     * @see TextField#getNullRepresentation()</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setNullSettingAllowed</span><span class="p">(</span><span class="kt">boolean</span><span class="w"> </span><span class="n">nullSettingAllowed</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">this</span><span class="p">.</span><span class="na">nullSettingAllowed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nullSettingAllowed</span><span class="p">;</span>
<span class="w">        </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">boolean</span><span class="w"> </span><span class="nf">isEmpty</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">isEmpty</span><span class="p">()</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">getValue</span><span class="p">().</span><span class="na">isEmpty</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Returns the maximum number of characters in the field. Value -1 is</span>
<span class="cm">     * considered unlimited. Terminal may however have some technical limits.</span>
<span class="cm">     *</span>
<span class="cm">     * @return the maxLength</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getMaxLength</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">getState</span><span class="p">(</span><span class="kc">false</span><span class="p">).</span><span class="na">maxLength</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the maximum number of characters in the field. Value -1 is</span>
<span class="cm">     * considered unlimited. Terminal may however have some technical limits.</span>
<span class="cm">     *</span>
<span class="cm">     * @param maxLength</span>
<span class="cm">     *            the maxLength to set</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setMaxLength</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">maxLength</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">getState</span><span class="p">().</span><span class="na">maxLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">maxLength</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Gets the number of columns in the editor. If the number of columns is set</span>
<span class="cm">     * 0, the actual number of displayed columns is determined implicitly by the</span>
<span class="cm">     * adapter.</span>
<span class="cm">     *</span>
<span class="cm">     * @return the number of columns in the editor.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getColumns</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">getState</span><span class="p">(</span><span class="kc">false</span><span class="p">).</span><span class="na">columns</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the number of columns in the editor. If the number of columns is set</span>
<span class="cm">     * 0, the actual number of displayed columns is determined implicitly by the</span>
<span class="cm">     * adapter.</span>
<span class="cm">     *</span>
<span class="cm">     * @param columns</span>
<span class="cm">     *            the number of columns to set.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setColumns</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">columns</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">columns</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">columns</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w">        </span><span class="p">}</span>
<span class="w">        </span><span class="n">getState</span><span class="p">().</span><span class="na">columns</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">columns</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Gets the current input prompt.</span>
<span class="cm">     *</span>
<span class="cm">     * @see #setInputPrompt(String)</span>
<span class="cm">     * @return the current input prompt, or null if not enabled</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getInputPrompt</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">getState</span><span class="p">(</span><span class="kc">false</span><span class="p">).</span><span class="na">inputPrompt</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the input prompt - a textual prompt that is displayed when the field</span>
<span class="cm">     * would otherwise be empty, to prompt the user for input.</span>
<span class="cm">     *</span>
<span class="cm">     * @param inputPrompt</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setInputPrompt</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">inputPrompt</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">getState</span><span class="p">().</span><span class="na">inputPrompt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inputPrompt</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/* ** Text Change Events ** */</span>

<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">firePendingTextChangeEvent</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">textChangeEventPending</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="o">!</span><span class="n">isFiringTextChangeEvent</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">isFiringTextChangeEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">            </span><span class="n">textChangeEventPending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">            </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">fireEvent</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">TextChangeEventImpl</span><span class="p">(</span><span class="k">this</span><span class="p">));</span>
<span class="w">            </span><span class="p">}</span><span class="w"> </span><span class="k">finally</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="n">isFiringTextChangeEvent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">false</span><span class="p">;</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">}</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">protected</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setInternalValue</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">newValue</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">changingVariables</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="o">!</span><span class="n">textChangeEventPending</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>

<span class="w">            </span><span class="cm">/*</span>
<span class="cm">             * TODO check for possible (minor?) issue (not tested)</span>
<span class="cm">             *</span>
<span class="cm">             * -field with e.g. PropertyFormatter.</span>
<span class="cm">             *</span>
<span class="cm">             * -TextChangeListener and it changes value.</span>
<span class="cm">             *</span>
<span class="cm">             * -if formatter again changes the value, do we get an extra</span>
<span class="cm">             * simulated text change event ?</span>
<span class="cm">             */</span>

<span class="w">            </span><span class="cm">/*</span>
<span class="cm">             * Fire a &quot;simulated&quot; text change event before value change event if</span>
<span class="cm">             * change is coming from the client side.</span>
<span class="cm">             *</span>
<span class="cm">             * If there are both value change and textChangeEvent in same</span>
<span class="cm">             * variable burst, it is a text field in non immediate mode and the</span>
<span class="cm">             * text change event &quot;flushed&quot; queued value change event. In this</span>
<span class="cm">             * case textChangeEventPending flag is already on and text change</span>
<span class="cm">             * event will be fired after the value change event.</span>
<span class="cm">             */</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">newValue</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span>
<span class="w">                    </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="o">!</span><span class="n">lastKnownTextContent</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="n">getNullRepresentation</span><span class="p">()))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="c1">// Value was changed from something to null representation</span>
<span class="w">                </span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getNullRepresentation</span><span class="p">();</span>
<span class="w">                </span><span class="n">textChangeEventPending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">            </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">newValue</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span>
<span class="w">                    </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="o">!</span><span class="n">newValue</span><span class="p">.</span><span class="na">equals</span><span class="p">(</span><span class="n">lastKnownTextContent</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="c1">// Value was changed to something else than null representation</span>
<span class="w">                </span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">newValue</span><span class="p">;</span>
<span class="w">                </span><span class="n">textChangeEventPending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">            </span><span class="n">firePendingTextChangeEvent</span><span class="p">();</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">        </span><span class="kd">super</span><span class="p">.</span><span class="na">setInternalValue</span><span class="p">(</span><span class="n">newValue</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setValue</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">newValue</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">ReadOnlyException</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="kd">super</span><span class="p">.</span><span class="na">setValue</span><span class="p">(</span><span class="n">newValue</span><span class="p">);</span>
<span class="w">        </span><span class="cm">/*</span>
<span class="cm">         * Make sure w reset lastKnownTextContent field on value change. The</span>
<span class="cm">         * clearing must happen here as well because TextChangeListener can</span>
<span class="cm">         * revert the original value. Client must respect the value in this</span>
<span class="cm">         * case. AbstractField optimizes value change if the existing value is</span>
<span class="cm">         * reset. Also we need to force repaint if the flag is on.</span>
<span class="cm">         */</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span>
<span class="w">            </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">        </span><span class="p">}</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">handleInputEventTextChange</span><span class="p">(</span><span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span><span class="w"> </span><span class="n">Object</span><span class="o">&gt;</span><span class="w"> </span><span class="n">variables</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="cm">/*</span>
<span class="cm">         * TODO we could vastly optimize the communication of values by using</span>
<span class="cm">         * some sort of diffs instead of always sending the whole text content.</span>
<span class="cm">         * Also on value change events we could use the mechanism.</span>
<span class="cm">         */</span>
<span class="w">        </span><span class="n">String</span><span class="w"> </span><span class="n">object</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="p">)</span><span class="w"> </span><span class="n">variables</span><span class="p">.</span><span class="na">get</span><span class="p">(</span><span class="n">TextFieldConstants</span><span class="p">.</span><span class="na">VAR_CUR_TEXT</span><span class="p">);</span>
<span class="w">        </span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">object</span><span class="p">;</span>
<span class="w">        </span><span class="n">textChangeEventPending</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the mode how the TextField triggers {@link TextChangeEvent}s.</span>
<span class="cm">     *</span>
<span class="cm">     * @param inputEventMode</span>
<span class="cm">     *            the new mode</span>
<span class="cm">     *</span>
<span class="cm">     * @see TextChangeEventMode</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setTextChangeEventMode</span><span class="p">(</span><span class="n">TextChangeEventMode</span><span class="w"> </span><span class="n">inputEventMode</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">textChangeEventMode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inputEventMode</span><span class="p">;</span>
<span class="w">        </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @return the mode used to trigger {@link TextChangeEvent}s.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="n">TextChangeEventMode</span><span class="w"> </span><span class="nf">getTextChangeEventMode</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">textChangeEventMode</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Different modes how the TextField can trigger {@link TextChangeEvent}s.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kd">enum</span><span class="w"> </span><span class="n">TextChangeEventMode</span><span class="w"> </span><span class="p">{</span>

<span class="w">        </span><span class="cm">/**</span>
<span class="cm">         * An event is triggered on each text content change, most commonly key</span>
<span class="cm">         * press events.</span>
<span class="cm">         */</span>
<span class="w">        </span><span class="n">EAGER</span><span class="p">,</span>
<span class="w">        </span><span class="cm">/**</span>
<span class="cm">         * Each text change event in the UI causes the event to be communicated</span>
<span class="cm">         * to the application after a timeout. The length of the timeout can be</span>
<span class="cm">         * controlled with {@link TextField#setTextChangeTimeout(int)}. Only the</span>
<span class="cm">         * last input event is reported to the server side if several text</span>
<span class="cm">         * change events happen during the timeout.</span>
<span class="cm">         * &lt;p&gt;</span>
<span class="cm">         * In case of a {@link ValueChangeEvent} the schedule is not kept</span>
<span class="cm">         * strictly. Before a {@link ValueChangeEvent} a {@link TextChangeEvent}</span>
<span class="cm">         * is triggered if the text content has changed since the previous</span>
<span class="cm">         * TextChangeEvent regardless of the schedule.</span>
<span class="cm">         */</span>
<span class="w">        </span><span class="n">TIMEOUT</span><span class="p">,</span>
<span class="w">        </span><span class="cm">/**</span>
<span class="cm">         * An event is triggered when there is a pause of text modifications.</span>
<span class="cm">         * The length of the pause can be modified with</span>
<span class="cm">         * {@link TextField#setTextChangeTimeout(int)}. Like with the</span>
<span class="cm">         * {@link #TIMEOUT} mode, an event is forced before</span>
<span class="cm">         * {@link ValueChangeEvent}s, even if the user did not keep a pause</span>
<span class="cm">         * while entering the text.</span>
<span class="cm">         * &lt;p&gt;</span>
<span class="cm">         * This is the default mode.</span>
<span class="cm">         */</span>
<span class="w">        </span><span class="n">LAZY</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addTextChangeListener</span><span class="p">(</span><span class="n">TextChangeListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">addListener</span><span class="p">(</span><span class="n">TextChangeListener</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">,</span><span class="w"> </span><span class="n">TextChangeEvent</span><span class="p">.</span><span class="na">class</span><span class="p">,</span>
<span class="w">                </span><span class="n">listener</span><span class="p">,</span><span class="w"> </span><span class="n">TextChangeListener</span><span class="p">.</span><span class="na">EVENT_METHOD</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @deprecated As of 7.0, replaced by</span>
<span class="cm">     *             {@link #addTextChangeListener(TextChangeListener)}</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addListener</span><span class="p">(</span><span class="n">TextChangeListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">addTextChangeListener</span><span class="p">(</span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeTextChangeListener</span><span class="p">(</span><span class="n">TextChangeListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">removeListener</span><span class="p">(</span><span class="n">TextChangeListener</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">,</span><span class="w"> </span><span class="n">TextChangeEvent</span><span class="p">.</span><span class="na">class</span><span class="p">,</span>
<span class="w">                </span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @deprecated As of 7.0, replaced by</span>
<span class="cm">     *             {@link #removeTextChangeListener(TextChangeListener)}</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeListener</span><span class="p">(</span><span class="n">TextChangeListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">removeTextChangeListener</span><span class="p">(</span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * The text change timeout modifies how often text change events are</span>
<span class="cm">     * communicated to the application when {@link #getTextChangeEventMode()} is</span>
<span class="cm">     * {@link TextChangeEventMode#LAZY} or {@link TextChangeEventMode#TIMEOUT}.</span>
<span class="cm">     *</span>
<span class="cm">     *</span>
<span class="cm">     * @see #getTextChangeEventMode()</span>
<span class="cm">     *</span>
<span class="cm">     * @param timeout</span>
<span class="cm">     *            the timeout in milliseconds</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setTextChangeTimeout</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">timeout</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">textChangeEventTimeout</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">timeout</span><span class="p">;</span>
<span class="w">        </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Gets the timeout used to fire {@link TextChangeEvent}s when the</span>
<span class="cm">     * {@link #getTextChangeEventMode()} is {@link TextChangeEventMode#LAZY} or</span>
<span class="cm">     * {@link TextChangeEventMode#TIMEOUT}.</span>
<span class="cm">     *</span>
<span class="cm">     * @return the timeout value in milliseconds</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getTextChangeTimeout</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">textChangeEventTimeout</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">class</span> <span class="nc">TextChangeEventImpl</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">TextChangeEvent</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">curText</span><span class="p">;</span>
<span class="w">        </span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">cursorPosition</span><span class="p">;</span>

<span class="w">        </span><span class="kd">private</span><span class="w"> </span><span class="nf">TextChangeEventImpl</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="n">AbstractTextField</span><span class="w"> </span><span class="n">tf</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="kd">super</span><span class="p">(</span><span class="n">tf</span><span class="p">);</span>
<span class="w">            </span><span class="n">curText</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tf</span><span class="p">.</span><span class="na">getCurrentTextContent</span><span class="p">();</span>
<span class="w">            </span><span class="n">cursorPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">tf</span><span class="p">.</span><span class="na">getCursorPosition</span><span class="p">();</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">        </span><span class="nd">@Override</span>
<span class="w">        </span><span class="kd">public</span><span class="w"> </span><span class="n">AbstractTextField</span><span class="w"> </span><span class="nf">getComponent</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="p">(</span><span class="n">AbstractTextField</span><span class="p">)</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getComponent</span><span class="p">();</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">        </span><span class="nd">@Override</span>
<span class="w">        </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getText</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="n">curText</span><span class="p">;</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">        </span><span class="nd">@Override</span>
<span class="w">        </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getCursorPosition</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="n">cursorPosition</span><span class="p">;</span>
<span class="w">        </span><span class="p">}</span>

<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Gets the current (or the last known) text content in the field.</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * Note the text returned by this method is not necessary the same that is</span>
<span class="cm">     * returned by the {@link #getValue()} method. The value is updated when the</span>
<span class="cm">     * terminal fires a value change event via e.g. blurring the field or by</span>
<span class="cm">     * pressing enter. The value returned by this method is updated also on</span>
<span class="cm">     * {@link TextChangeEvent}s. Due to this high dependency to the terminal</span>
<span class="cm">     * implementation this method is (at least at this point) not published.</span>
<span class="cm">     *</span>
<span class="cm">     * @return the text which is currently displayed in the field.</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">private</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getCurrentTextContent</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">lastKnownTextContent</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="n">lastKnownTextContent</span><span class="p">;</span>
<span class="w">        </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">Object</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getValue</span><span class="p">();</span>
<span class="w">            </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">text</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">                </span><span class="k">return</span><span class="w"> </span><span class="n">getNullRepresentation</span><span class="p">();</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">            </span><span class="k">return</span><span class="w"> </span><span class="n">text</span><span class="p">.</span><span class="na">toString</span><span class="p">();</span>
<span class="w">        </span><span class="p">}</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Selects all text in the field.</span>
<span class="cm">     *</span>
<span class="cm">     * @since 6.4</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">selectAll</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">String</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getValue</span><span class="p">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="s">&quot;&quot;</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">getValue</span><span class="p">();</span>
<span class="w">        </span><span class="n">setSelectionRange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="n">text</span><span class="p">.</span><span class="na">length</span><span class="p">());</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the range of text to be selected.</span>
<span class="cm">     *</span>
<span class="cm">     * As a side effect the field will become focused.</span>
<span class="cm">     *</span>
<span class="cm">     * @since 6.4</span>
<span class="cm">     *</span>
<span class="cm">     * @param pos</span>
<span class="cm">     *            the position of the first character to be selected</span>
<span class="cm">     * @param length</span>
<span class="cm">     *            the number of characters to be selected</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setSelectionRange</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">pos</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">length</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">selectionPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">;</span>
<span class="w">        </span><span class="n">selectionLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">length</span><span class="p">;</span>
<span class="w">        </span><span class="n">focus</span><span class="p">();</span>
<span class="w">        </span><span class="n">markAsDirty</span><span class="p">();</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Sets the cursor position in the field. As a side effect the field will</span>
<span class="cm">     * become focused.</span>
<span class="cm">     *</span>
<span class="cm">     * @since 6.4</span>
<span class="cm">     *</span>
<span class="cm">     * @param pos</span>
<span class="cm">     *            the position for the cursor</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setCursorPosition</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">pos</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">setSelectionRange</span><span class="p">(</span><span class="n">pos</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w">        </span><span class="n">lastKnownCursorPosition</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pos</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * Returns the last known cursor position of the field.</span>
<span class="cm">     *</span>
<span class="cm">     * &lt;p&gt;</span>
<span class="cm">     * Note that due to the client server nature or the GWT terminal, Vaadin</span>
<span class="cm">     * cannot provide the exact value of the cursor position in most situations.</span>
<span class="cm">     * The value is updated only when the client side terminal communicates to</span>
<span class="cm">     * TextField, like on {@link ValueChangeEvent}s and {@link TextChangeEvent}</span>
<span class="cm">     * s. This may change later if a deep push integration is built to Vaadin.</span>
<span class="cm">     *</span>
<span class="cm">     * @return the cursor position</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getCursorPosition</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">lastKnownCursorPosition</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addFocusListener</span><span class="p">(</span><span class="n">FocusListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">addListener</span><span class="p">(</span><span class="n">FocusEvent</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">,</span><span class="w"> </span><span class="n">FocusEvent</span><span class="p">.</span><span class="na">class</span><span class="p">,</span><span class="w"> </span><span class="n">listener</span><span class="p">,</span>
<span class="w">                </span><span class="n">FocusListener</span><span class="p">.</span><span class="na">focusMethod</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @deprecated As of 7.0, replaced by</span>
<span class="cm">     *             {@link #addFocusListener(FocusListener)}</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addListener</span><span class="p">(</span><span class="n">FocusListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">addFocusListener</span><span class="p">(</span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeFocusListener</span><span class="p">(</span><span class="n">FocusListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">removeListener</span><span class="p">(</span><span class="n">FocusEvent</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">,</span><span class="w"> </span><span class="n">FocusEvent</span><span class="p">.</span><span class="na">class</span><span class="p">,</span><span class="w"> </span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @deprecated As of 7.0, replaced by</span>
<span class="cm">     *             {@link #removeFocusListener(FocusListener)}</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeListener</span><span class="p">(</span><span class="n">FocusListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">removeFocusListener</span><span class="p">(</span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addBlurListener</span><span class="p">(</span><span class="n">BlurListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">addListener</span><span class="p">(</span><span class="n">BlurEvent</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">,</span><span class="w"> </span><span class="n">BlurEvent</span><span class="p">.</span><span class="na">class</span><span class="p">,</span><span class="w"> </span><span class="n">listener</span><span class="p">,</span>
<span class="w">                </span><span class="n">BlurListener</span><span class="p">.</span><span class="na">blurMethod</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @deprecated As of 7.0, replaced by {@link #addBlurListener(BlurListener)}</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">addListener</span><span class="p">(</span><span class="n">BlurListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">addBlurListener</span><span class="p">(</span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeBlurListener</span><span class="p">(</span><span class="n">BlurListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">removeListener</span><span class="p">(</span><span class="n">BlurEvent</span><span class="p">.</span><span class="na">EVENT_ID</span><span class="p">,</span><span class="w"> </span><span class="n">BlurEvent</span><span class="p">.</span><span class="na">class</span><span class="p">,</span><span class="w"> </span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/**</span>
<span class="cm">     * @deprecated As of 7.0, replaced by</span>
<span class="cm">     *             {@link #removeBlurListener(BlurListener)}</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Deprecated</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">removeListener</span><span class="p">(</span><span class="n">BlurListener</span><span class="w"> </span><span class="n">listener</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">removeBlurListener</span><span class="p">(</span><span class="n">listener</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/*</span>
<span class="cm">     * (non-Javadoc)</span>
<span class="cm">     *</span>
<span class="cm">     * @see com.vaadin.ui.AbstractField#readDesign(org.jsoup.nodes.Element ,</span>
<span class="cm">     * com.vaadin.ui.declarative.DesignContext)</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">readDesign</span><span class="p">(</span><span class="n">Element</span><span class="w"> </span><span class="n">design</span><span class="p">,</span><span class="w"> </span><span class="n">DesignContext</span><span class="w"> </span><span class="n">designContext</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="kd">super</span><span class="p">.</span><span class="na">readDesign</span><span class="p">(</span><span class="n">design</span><span class="p">,</span><span class="w"> </span><span class="n">designContext</span><span class="p">);</span>
<span class="w">        </span><span class="n">Attributes</span><span class="w"> </span><span class="n">attr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">design</span><span class="p">.</span><span class="na">attributes</span><span class="p">();</span>
<span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">attr</span><span class="p">.</span><span class="na">hasKey</span><span class="p">(</span><span class="s">&quot;maxlength&quot;</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">            </span><span class="n">setMaxLength</span><span class="p">(</span><span class="n">DesignAttributeHandler</span><span class="p">.</span><span class="na">readAttribute</span><span class="p">(</span><span class="s">&quot;maxlength&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">attr</span><span class="p">,</span>
<span class="w">                    </span><span class="n">Integer</span><span class="p">.</span><span class="na">class</span><span class="p">));</span>
<span class="w">        </span><span class="p">}</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/*</span>
<span class="cm">     * (non-Javadoc)</span>
<span class="cm">     *</span>
<span class="cm">     * @see com.vaadin.ui.AbstractField#getCustomAttributes()</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">protected</span><span class="w"> </span><span class="n">Collection</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="nf">getCustomAttributes</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="n">Collection</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">customAttributes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">super</span><span class="p">.</span><span class="na">getCustomAttributes</span><span class="p">();</span>
<span class="w">        </span><span class="n">customAttributes</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">&quot;maxlength&quot;</span><span class="p">);</span>

<span class="w">        </span><span class="c1">// prevent this from appearing in output</span>
<span class="w">        </span><span class="n">customAttributes</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">&quot;max-length&quot;</span><span class="p">);</span>
<span class="w">        </span><span class="n">customAttributes</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">&quot;cursor-position&quot;</span><span class="p">);</span>
<span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="n">customAttributes</span><span class="p">;</span>
<span class="w">    </span><span class="p">}</span>

<span class="w">    </span><span class="cm">/*</span>
<span class="cm">     * (non-Javadoc)</span>
<span class="cm">     *</span>
<span class="cm">     * @see com.vaadin.ui.AbstractField#writeDesign(org.jsoup.nodes.Element,</span>
<span class="cm">     * com.vaadin.ui.declarative.DesignContext)</span>
<span class="cm">     */</span>
<span class="w">    </span><span class="nd">@Override</span>
<span class="w">    </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">writeDesign</span><span class="p">(</span><span class="n">Element</span><span class="w"> </span><span class="n">design</span><span class="p">,</span><span class="w"> </span><span class="n">DesignContext</span><span class="w"> </span><span class="n">designContext</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">        </span><span class="kd">super</span><span class="p">.</span><span class="na">writeDesign</span><span class="p">(</span><span class="n">design</span><span class="p">,</span><span class="w"> </span><span class="n">designContext</span><span class="p">);</span>
<span class="w">        </span><span class="n">AbstractTextField</span><span class="w"> </span><span class="n">def</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">AbstractTextField</span><span class="p">)</span><span class="w"> </span><span class="n">designContext</span>
<span class="w">                </span><span class="p">.</span><span class="na">getDefaultInstance</span><span class="p">(</span><span class="k">this</span><span class="p">);</span>
<span class="w">        </span><span class="n">Attributes</span><span class="w"> </span><span class="n">attr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">design</span><span class="p">.</span><span class="na">attributes</span><span class="p">();</span>
<span class="w">        </span><span class="n">DesignAttributeHandler</span><span class="p">.</span><span class="na">writeAttribute</span><span class="p">(</span><span class="s">&quot;maxlength&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">attr</span><span class="p">,</span><span class="w"> </span><span class="n">getMaxLength</span><span class="p">(),</span>
<span class="w">                </span><span class="n">def</span><span class="p">.</span><span class="na">getMaxLength</span><span class="p">(),</span><span class="w"> </span><span class="n">Integer</span><span class="p">.</span><span class="na">class</span><span class="p">,</span><span class="w"> </span><span class="n">designContext</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>

<span class="p">}</span>
</pre></div>
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit v1.2.3</a> (<a href='https://git-scm.com/'>git 2.39.1</a>) at 2025-08-01 19:05:53 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
