index.html 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
  6. <style>
  7. body {
  8. max-width: 620px;
  9. margin: auto;
  10. font-family: Helvetica, arial, sans-serif;
  11. font-size: 14px;
  12. line-height: 1.6;
  13. padding-top: 10px;
  14. padding-bottom: 10px;
  15. background-color: white;
  16. padding: 30px;
  17. }
  18. body > *:first-child {
  19. margin-top: 0 !important;
  20. }
  21. body > *:last-child {
  22. margin-bottom: 0 !important;
  23. }
  24. a {
  25. color: #4183C4;
  26. }
  27. h1, h2, h3, h4, h5, h6 {
  28. margin: 20px 0 10px;
  29. padding: 0;
  30. font-weight: bold;
  31. -webkit-font-smoothing: antialiased;
  32. cursor: text;
  33. position: relative;
  34. }
  35. h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
  36. background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA09pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoMTMuMCAyMDEyMDMwNS5tLjQxNSAyMDEyLzAzLzA1OjIxOjAwOjAwKSAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OUM2NjlDQjI4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OUM2NjlDQjM4ODBGMTFFMTg1ODlEODNERDJBRjUwQTQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo5QzY2OUNCMDg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo5QzY2OUNCMTg4MEYxMUUxODU4OUQ4M0REMkFGNTBBNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsQhXeAAAABfSURBVHjaYvz//z8DJYCRUgMYQAbAMBQIAvEqkBQWXI6sHqwHiwG70TTBxGaiWwjCTGgOUgJiF1J8wMRAIUA34B4Q76HUBelAfJYSA0CuMIEaRP8wGIkGMA54bgQIMACAmkXJi0hKJQAAAABJRU5ErkJggg==) no-repeat 10px center;
  37. text-decoration: none;
  38. }
  39. h1 tt, h1 code {
  40. font-size: inherit;
  41. }
  42. h2 tt, h2 code {
  43. font-size: inherit;
  44. }
  45. h3 tt, h3 code {
  46. font-size: inherit;
  47. }
  48. h4 tt, h4 code {
  49. font-size: inherit;
  50. }
  51. h5 tt, h5 code {
  52. font-size: inherit;
  53. }
  54. h6 tt, h6 code {
  55. font-size: inherit;
  56. }
  57. h1 {
  58. font-size: 28px;
  59. color: black;
  60. text-align: center;
  61. }
  62. h6 {
  63. text-align: center;
  64. }
  65. h2 {
  66. font-size: 24px;
  67. border-bottom: 1px solid #cccccc;
  68. color: black;
  69. }
  70. h3 {
  71. font-size: 18px;
  72. }
  73. h4 {
  74. font-size: 16px;
  75. }
  76. h5 {
  77. font-size: 14px;
  78. }
  79. h6 {
  80. color: #777777;
  81. font-size: 14px;
  82. }
  83. p, blockquote, ul, ol, dl, li, table, pre {
  84. margin: 15px 0;
  85. }
  86. hr {
  87. background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAECAYAAACtBE5DAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OENDRjNBN0E2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OENDRjNBN0I2NTZBMTFFMEI3QjRBODM4NzJDMjlGNDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Q0NGM0E3ODY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Q0NGM0E3OTY1NkExMUUwQjdCNEE4Mzg3MkMyOUY0OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqqezsUAAAAfSURBVHjaYmRABcYwBiM2QSA4y4hNEKYDQxAEAAIMAHNGAzhkPOlYAAAAAElFTkSuQmCC) repeat-x 0 0;
  88. border: 0 none;
  89. color: #cccccc;
  90. height: 4px;
  91. padding: 0;
  92. }
  93. body > h2:first-child {
  94. margin-top: 0;
  95. padding-top: 0;
  96. }
  97. body > h1:first-child {
  98. margin-top: 0;
  99. padding-top: 0;
  100. }
  101. body > h1:first-child + h2 {
  102. margin-top: 0;
  103. padding-top: 0;
  104. }
  105. body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
  106. margin-top: 0;
  107. padding-top: 0;
  108. }
  109. a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
  110. margin-top: 0;
  111. padding-top: 0;
  112. }
  113. h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
  114. margin-top: 0;
  115. }
  116. li p.first {
  117. display: inline-block;
  118. }
  119. li {
  120. margin: 0;
  121. }
  122. ul, ol {
  123. padding-left: 30px;
  124. }
  125. ul :first-child, ol :first-child {
  126. margin-top: 0;
  127. }
  128. dl {
  129. padding: 0;
  130. }
  131. dl dt {
  132. font-size: 14px;
  133. font-weight: bold;
  134. font-style: italic;
  135. padding: 0;
  136. margin: 15px 0 5px;
  137. }
  138. dl dd {
  139. margin: 0 0 15px;
  140. padding: 0 15px;
  141. }
  142. blockquote {
  143. border-left: 2px solid #dddddd;
  144. padding: 0 15px;
  145. color: #777777;
  146. }
  147. blockquote > :first-child {
  148. margin-top: 0;
  149. }
  150. blockquote > :last-child {
  151. margin-bottom: 0;
  152. }
  153. table {
  154. padding: 0;
  155. border-collapse: collapse;
  156. }
  157. tr {
  158. border-top: 1px solid #cccccc;
  159. background-color: white;
  160. margin: 0;
  161. padding: 0;
  162. }
  163. tr:nth-child(2n) {
  164. background-color: #f8f8f8;
  165. }
  166. th {
  167. font-weight: bold;
  168. border: 1px solid #cccccc;
  169. text-align: left;
  170. margin: 0;
  171. padding: 6px 13px;
  172. }
  173. td {
  174. border: 1px solid #cccccc;
  175. text-align: left;
  176. margin: 0;
  177. padding: 6px 13px;
  178. }
  179. th :first-child, td :first-child {
  180. margin-top: 0;
  181. }
  182. th :last-child, td :last-child {
  183. margin-bottom: 0;
  184. }
  185. img {
  186. max-width: 100%;
  187. }
  188. code, tt {
  189. margin: 0 2px;
  190. padding: 0 5px;
  191. white-space: nowrap;
  192. border: 1px solid #eaeaea;
  193. background-color: #f8f8f8;
  194. border-radius: 3px;
  195. }
  196. pre code {
  197. margin: 0;
  198. padding: 0;
  199. white-space: pre;
  200. border: none;
  201. background: transparent;
  202. }
  203. pre {
  204. background-color: #303030;
  205. font-size: 13px;
  206. line-height: 19px;
  207. overflow: auto;
  208. padding: 6px 10px;
  209. }
  210. pre code {
  211. color: #f2f2f2;
  212. border: none;
  213. padding: 0;
  214. font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal;
  215. margin-bottom: 30px;
  216. font-size: 14px;
  217. }
  218. pre tt {
  219. background-color: transparent;
  220. border: none;
  221. }
  222. @media print {
  223. table, pre {
  224. page-break-inside: avoid;
  225. }
  226. }
  227. </style>
  228. <title>artDialog</title>
  229. </head>
  230. <body>
  231. <h1>artDialog</h1>
  232. <p><a href="http://aui.github.io/artDialog/">首页</a> &gt; <a href="http://aui.github.io/artDialog/doc/index.html">文档与示例</a></p>
  233. <hr />
  234. <p>artDialog —— 经典、优雅的网页对话框控件。</p>
  235. <ol>
  236. <li>支持普通与 12 方向气泡状对话框</li>
  237. <li>完善的焦点处理,自动焦点附加与回退</li>
  238. <li>支持 ARIA 标准</li>
  239. <li>面向未来:基于 HTML5 Dialog 的 API</li>
  240. <li>支持标准与模态对话框</li>
  241. <li>丰富且友好的编程接口</li>
  242. <li>能自适应内容尺寸</li>
  243. <li>仅 4kb (gzip)</li>
  244. </ol>
  245. <h2>文档导航</h2>
  246. <ul>
  247. <li><a href="#module">引入 artDialog</a></li>
  248. <li><a href="#quickref">快速参考</a>
  249. <ul>
  250. <li><a href="#quickref-basic">普通对话框</a></li>
  251. <li><a href="#quickref-modal">模态对话框</a></li>
  252. <li><a href="#quickref-bubble">气泡浮层</a></li>
  253. <li><a href="#quickref-button">添加按钮</a></li>
  254. <li><a href="#quickref-close">控制对话框关闭</a></li>
  255. <li><a href="#quickref-statusbar">给对话框左下脚添加复选框</a></li>
  256. <li><a href="#quickref-callback">点按钮不关闭对话框</a></li>
  257. <li><a href="#quickref-cancel">不显示关闭按钮</a></li>
  258. <li><a href="#quickref-iframe">创建 iframe 内容</a></li>
  259. </ul>
  260. </li>
  261. <li><a href="#api">方法</a>
  262. <ul>
  263. <li><a href="#api-show">show([anchor])</a></li>
  264. <li><a href="#api-showModal">showModal([anchor])</a></li>
  265. <li><a href="#api-close">close([result])</a></li>
  266. <li><a href="#api-remove">remove()</a></li>
  267. <li><a href="#api-content">content(html)</a></li>
  268. <li><a href="#api-title">title(text)</a></li>
  269. <li><a href="#api-width">width(value)</a></li>
  270. <li><a href="#api-height">height(value)</a></li>
  271. <li><a href="#api-reset">reset()</a></li>
  272. <li><a href="#api-button">button(args)</a></li>
  273. <li><a href="#api-focus">focus()</a></li>
  274. <li><a href="#api-blur">blur()</a></li>
  275. <li><a href="#api-addEventListener">addEventListener(type, callback)</a></li>
  276. <li><a href="#api-removeEventListener">removeEventListener(type, callback)</a></li>
  277. <li><a href="#api-dialog-get">dialog.get(id)</a></li>
  278. <li><a href="#api-dialog-getCurrent">dialog.getCurrent()</a></li>
  279. </ul>
  280. </li>
  281. <li><a href="#option">选项</a>
  282. <ul>
  283. <li>内容
  284. <ul>
  285. <li><a href="#option-title">title</a></li>
  286. <li><a href="#option-content">content</a></li>
  287. <li><a href="#option-statusbar">statusbar</a></li>
  288. </ul>
  289. </li>
  290. <li>按钮
  291. <ul>
  292. <li><a href="#option-ok">ok</a></li>
  293. <li><a href="#option-okValue">okValue</a></li>
  294. <li><a href="#option-cancel">cancel</a></li>
  295. <li><a href="#option-cancelValue">cancelValue</a></li>
  296. <li><a href="#option-cancelDisplay">cancelDisplay</a></li>
  297. <li><a href="#option-button">button</a></li>
  298. </ul>
  299. </li>
  300. <li>外观
  301. <ul>
  302. <li><a href="#option-width">width</a></li>
  303. <li><a href="#option-height">height</a></li>
  304. <li><a href="#option-skin">skin</a></li>
  305. <li><a href="#option-padding">padding</a></li>
  306. </ul>
  307. </li>
  308. <li>交互
  309. <ul>
  310. <li><a href="#option-fixed">fixed</a></li>
  311. <li><a href="#option-align">align</a></li>
  312. <li><a href="#option-quickClose">quickClose</a></li>
  313. <li><a href="#option-autofocus">autofocus</a></li>
  314. <li><a href="#option-zIndex">zIndex</a></li>
  315. </ul>
  316. </li>
  317. <li>事件
  318. <ul>
  319. <li><a href="#option-onshow">onshow</a></li>
  320. <li><a href="#option-onbeforeremove">onbeforeremove</a></li>
  321. <li><a href="#option-onremove">onremove</a></li>
  322. <li><a href="#option-onclose">onclose</a></li>
  323. <li><a href="#option-onfocus">onfocus</a></li>
  324. <li><a href="#option-onblur">onblur</a></li>
  325. <li><a href="#option-onreset">onreset</a></li>
  326. </ul>
  327. </li>
  328. <li>高级
  329. <ul>
  330. <li><a href="#option-id">id</a></li>
  331. </ul>
  332. </li>
  333. </ul>
  334. </li>
  335. <li><a href="#property">属性</a>
  336. <ul>
  337. <li><a href="#property-open">open</a></li>
  338. <li><a href="#property-returnValue">returnValue</a></li>
  339. </ul>
  340. </li>
  341. <li><a href="#other">其他</a>
  342. <ul>
  343. <li><a href="#other-skin">自定义样式</a></li>
  344. <li><a href="#other-grunt">源码构建</a></li>
  345. <li><a href="#other-upgrade">artDialog v5 升级 v6 参考</a></li>
  346. <li><a href="#other-support">支持</a></li>
  347. </ul>
  348. </li>
  349. </ul>
  350. <h2><span id="module">引入 artDialog</span></h2>
  351. <h3>1.直接引用</h3>
  352. <pre><code>&lt;script src="lib/jquery-1.10.2.js"&gt;&lt;/script&gt;
  353. &lt;link rel="stylesheet" href="css/ui-dialog.css"&gt;
  354. &lt;script src="dist/dialog-min.js"&gt;&lt;/script&gt;
  355. //..
  356. </code></pre>
  357. <h3>2.作为 RequireJS 或 SeaJS 的模块引入</h3>
  358. <pre><code>var dialog = require('./src/dialog');
  359. //..
  360. </code></pre>
  361. <p><strong>注意:</strong>内部依赖全局模块<code>require('jquery')</code>,请注意全局模块配置是否正确。<a href="../test/show.html">seajs加载示例</a></p>
  362. <blockquote><ul>
  363. <li>如果需要支持 <a href="#quickref-iframe">iframe</a> 内容与拖拽,请引用加强版 dialog-plus.js</li>
  364. <li>jquery 最低要求版本为<code>1.7+</code></li>
  365. </ul>
  366. </blockquote>
  367. <h2><span id="quickref">快速参考</span></h2>
  368. <h3><span id="quickref-basic">普通对话框</span></h3>
  369. <pre><code>var d = dialog({
  370. title: '欢迎',
  371. content: '欢迎使用 artDialog 对话框组件!'
  372. });
  373. d.show();
  374. </code></pre>
  375. <h3><span id="quickref-modal">模态对话框</span></h3>
  376. <pre><code>var d = dialog({
  377. title: 'message',
  378. content: '&lt;input autofocus /&gt;'
  379. });
  380. d.showModal();
  381. </code></pre>
  382. <h3><span id="quickref-bubble">气泡浮层</span></h3>
  383. <pre><code>var d = dialog({
  384. content: 'Hello World!',
  385. quickClose: true// 点击空白处快速关闭
  386. });
  387. d.show(document.getElementById('quickref-bubble'));
  388. </code></pre>
  389. <p><a href="../test/align.html">12 个方向定位演示</a></p>
  390. <h3><span id="quickref-button">添加按钮</span></h3>
  391. <p>1.确定与取消按钮:</p>
  392. <pre><code>var d = dialog({
  393. title: '提示',
  394. content: '按钮回调函数返回 false 则不许关闭',
  395. okValue: '确定',
  396. ok: function () {
  397. this.title('提交中…');
  398. return false;
  399. },
  400. cancelValue: '取消',
  401. cancel: function () {}
  402. });
  403. d.show();
  404. </code></pre>
  405. <p>2.指定更多按钮:</p>
  406. <p>请参考 <a href="#option-button"><code>button</code></a> 方法或参数。</p>
  407. <h3><span id="quickref-close">控制对话框关闭</span></h3>
  408. <pre><code>var d = dialog({
  409. content: '对话框将在两秒内关闭'
  410. });
  411. d.show();
  412. setTimeout(function () {
  413. d.close().remove();
  414. }, 2000);
  415. </code></pre>
  416. <h3><span id="quickref-statusbar">给对话框左下脚添加复选框</span></h3>
  417. <pre><code>var d = dialog({
  418. title: '欢迎',
  419. content: '欢迎使用 artDialog 对话框组件!',
  420. ok: function () {},
  421. statusbar: '&lt;label&gt;&lt;input type="checkbox"&gt;不再提醒&lt;/label&gt;'
  422. });
  423. d.show();
  424. </code></pre>
  425. <h3><span id="quickref-callback">点按钮不关闭对话框</span></h3>
  426. <p>按钮事件返回 false 则不会触发关闭。</p>
  427. <pre><code>var d = dialog({
  428. title: '欢迎',
  429. content: '欢迎使用 artDialog 对话框组件!',
  430. ok: function () {
  431. var that = this;
  432. this.title('正在提交..');
  433. setTimeout(function () {
  434. that.close().remove();
  435. }, 2000);
  436. return false;
  437. },
  438. cancel: function () {
  439. alert('不许关闭');
  440. return false;
  441. }
  442. });
  443. d.show();
  444. </code></pre>
  445. <h3><span id="quickref-cancel">不显示关闭按钮</span></h3>
  446. <pre><code>var d = dialog({
  447. title: '欢迎',
  448. content: '欢迎使用 artDialog 对话框组件!',
  449. cancel: false,
  450. ok: function () {}
  451. });
  452. d.show();
  453. </code></pre>
  454. <h3><span id="quickref-iframe">创建 iframe 内容</span></h3>
  455. <p>artDialog 提供了一个增强版用来支持复杂的 iframe 套嵌的页面,可以在顶层页面创建一个可供 iframe 访问的对话框创建方法,例如:</p>
  456. <pre><code>seajs.use(['dialog/src/dialog-plus'], function (dialog) {
  457. window.dialog = dialog;
  458. });
  459. //..
  460. </code></pre>
  461. <p>然后子页面就可以通过<code>top.dialog</code>控制对话框了。</p>
  462. <p><a href="../test/iframe/index.html">打开示例页面</a></p>
  463. <blockquote><p> 小提示:增强版的<a href="#option">选项</a>比标准版多了<code>url</code>、<code>oniframeload</code>这几个字段。</p></blockquote>
  464. <h2><span id="api">方法</span></h2>
  465. <p>若无特别说明,方法均支持链式调用。</p>
  466. <h3><span id="api-show">show([anchor])</span></h3>
  467. <p>显示对话框。</p>
  468. <p>默认居中显示,支持传入元素节点或者事件对象。</p>
  469. <ul>
  470. <li>参数类型为<code>HTMLElement</code>:可吸附到元素上,同时对话框将呈现气泡样式。</li>
  471. <li>参数类型为<code>Event Object</code>:根据<code>event.pageX</code>与<code>event.pageY</code>定位。</li>
  472. </ul>
  473. <h4>示例</h4>
  474. <pre><code>var d = dialog();
  475. d.content('hello world');
  476. d.show(document.getElementById('api-show'));
  477. </code></pre>
  478. <pre><code>var d = dialog({
  479. id: 'api-show-dialog',
  480. quickClose: true,
  481. content: '右键菜单'
  482. });
  483. $(document).on('contextmenu', function (event) {
  484. d.show(event);
  485. return d.destroyed;
  486. });
  487. </code></pre>
  488. <h3><span id="api-showModal">showModal([anchor])</span></h3>
  489. <p>显示一个模态对话框。</p>
  490. <p>其余特性与参数可参见<code>show([anchor])</code>方法。</p>
  491. <h4>示例</h4>
  492. <pre><code>var d = dialog({
  493. title: 'message',
  494. content: '&lt;input autofocus /&gt;'
  495. });
  496. d.showModal();
  497. </code></pre>
  498. <h3><span id="api-close">close([result])</span></h3>
  499. <p>关闭(隐藏)对话框。</p>
  500. <p>可接收一个返回值,可以参见 <a href="#property-returnValue">returnValue</a>。</p>
  501. <p><strong>注意</strong>:<code>close()</code>方法只隐藏对话框,不会在 DOM 中删除,删除请使用<code>remove()</code>方法。</p>
  502. <h3><span id="api-remove">remove()</span></h3>
  503. <p>销毁对话框。</p>
  504. <p><strong>注意</strong>:不同于<code>close([result])</code>方法,<code>remove()</code>方法会从 DOM 中移出对话框相关节点,销毁后的对话框无法再次使用。</p>
  505. <p>对话框按钮点击后默认会依次触发 <code>close()</code>、<code>remove()</code> 方法。如果想手动控制对话框关闭可以如下操作:</p>
  506. <pre><code>var d = dialog();
  507. // [..]
  508. d.close().remove();
  509. </code></pre>
  510. <h3><span id="api-content">content(html)</span></h3>
  511. <p>写入对话框内容。</p>
  512. <p><code>html</code>参数支持<code>String</code>、<code>HTMLElement</code>类型。</p>
  513. <h4>示例</h4>
  514. <p>传入字符串:</p>
  515. <pre><code>var d = dialog();
  516. d.content('hello world');
  517. d.show();
  518. </code></pre>
  519. <p>传入元素节点:</p>
  520. <pre><code>//..
  521. var elem = document.getElementById('test');
  522. dialog({
  523. content: elem,
  524. id: 'EF893L'
  525. }).show();
  526. </code></pre>
  527. <blockquote><p>v6.0.4 更新:隐藏元素将会自动显示,并且对话框卸载的时候会放回到<code>body</code>中</p></blockquote>
  528. <h3><span id="api-title">title(text)</span></h3>
  529. <p>写入对话框标题。</p>
  530. <h4>示例</h4>
  531. <pre><code>var d = dialog();
  532. d.title('hello world');
  533. d.show();
  534. </code></pre>
  535. <h3><span id="api-width">width(value)</span></h3>
  536. <p>设置对话框宽度。</p>
  537. <h3>示例</h3>
  538. <pre><code>dialog({
  539. content: 'hello world'
  540. })
  541. .width(320)
  542. .show();
  543. </code></pre>
  544. <h3><span id="api-height">height(value)</span></h3>
  545. <p>设置对话框高度。</p>
  546. <h3>示例</h3>
  547. <pre><code>dialog({
  548. content: 'hello world'
  549. })
  550. .height(320)
  551. .show();
  552. </code></pre>
  553. <h3><span id="api-reset">reset()</span></h3>
  554. <p>手动刷新对话框位置。</p>
  555. <p>通常动态改变了内容尺寸后需要刷新对话框位置。</p>
  556. <h3><span id="api-button">button(args)</span></h3>
  557. <p>自定义按钮。</p>
  558. <p>参数请参考 <a href="#option-button">选项<code>button</code></a>;同时支持传入 HTML 字符串填充按钮区域。</p>
  559. <h3><span id="api-focus">focus()</span></h3>
  560. <p>聚焦对话框(置顶)。</p>
  561. <h3><span id="api-blur">blur()</span></h3>
  562. <p>让对话框失去焦点。</p>
  563. <h3><span id="api-addEventListener">addEventListener(type, callback)</span></h3>
  564. <p>添加事件。</p>
  565. <p>支持的事件有:<code>show</code>、<code>close</code>、<code>beforeremove</code>、<code>remove</code>、<code>reset</code>、<code>focus</code>、<code>blur</code></p>
  566. <h3><span id="api-removeEventListener">removeEventListener(type, callback)</span></h3>
  567. <p>删除事件。</p>
  568. <h3><span id="api-dialog-get">dialog.get(id)</span></h3>
  569. <p>根据获取打开的对话框实例。</p>
  570. <p><strong>注意</strong>:这是一个静态方法。</p>
  571. <h3><span id="api-dialog-getCurrent">dialog.getCurrent()</span></h3>
  572. <p>获取当前(置顶)对话框实例。</p>
  573. <p><strong>注意</strong>:这是一个静态方法。</p>
  574. <h2><span id="option">配置参数</span></h2>
  575. <h3><span id="option-content">content</span></h3>
  576. <p>设置消息内容。</p>
  577. <h4>类型</h4>
  578. <p>String, HTMLElement</p>
  579. <h4>示例</h4>
  580. <p>传入字符串:</p>
  581. <pre><code>dialog({
  582. content: 'hello world!'
  583. }).show();
  584. </code></pre>
  585. <p>传入元素节点:</p>
  586. <pre><code>//..
  587. var elem = document.getElementById('test');
  588. dialog({
  589. content: elem,
  590. id: 'EF893L'
  591. }).show();
  592. </code></pre>
  593. <h3><span id="option-title">title</span></h3>
  594. <p>标题内容。</p>
  595. <h4>类型</h4>
  596. <p>String</p>
  597. <h4>示例</h4>
  598. <pre><code>dialog({
  599. title: 'hello world!'
  600. }).show();
  601. </code></pre>
  602. <h3><span id="option-statusbar">statusbar</span></h3>
  603. <p>状态栏区域 HTML 代码。</p>
  604. <p>可以实现类似“不再提示”的复选框。<strong>注意</strong>:必须有按钮才会显示。</p>
  605. <h4>类型</h4>
  606. <p>String</p>
  607. <h4>示例</h4>
  608. <pre><code>var d = dialog({
  609. title: '欢迎',
  610. content: '欢迎使用 artDialog 对话框组件!',
  611. ok: function () {},
  612. statusbar: '&lt;label&gt;&lt;input type="checkbox"&gt;不再提醒&lt;/label&gt;'
  613. });
  614. d.show();
  615. </code></pre>
  616. <h3><span id="option-ok">ok</span></h3>
  617. <p>确定按钮。</p>
  618. <p>回调函数<code>this</code>指向<code>dialog</code>对象,执行完毕默认关闭对话框,若返回 false 则阻止关闭。</p>
  619. <h4>类型</h4>
  620. <p>Function</p>
  621. <h4>示例</h4>
  622. <pre><code>dialog({
  623. ok: function () {
  624. this
  625. .title('消息')
  626. .content('hello world!')
  627. .width(130);
  628. return false;
  629. }
  630. }).show();
  631. </code></pre>
  632. <h3><span id="option-okValue">okValue</span></h3>
  633. <p>(默认值: <code>"ok"</code>) 确定按钮文本。</p>
  634. <h4>类型</h4>
  635. <p>String</p>
  636. <h4>示例</h4>
  637. <pre><code>dialog({
  638. okValue: '猛击我',
  639. ok: function () {
  640. this.content('hello world!');
  641. return false;
  642. }
  643. }).show();
  644. </code></pre>
  645. <h3><span id="option-cancel">cancel</span></h3>
  646. <p>取消按钮。</p>
  647. <p>取消按钮也等同于标题栏的关闭按钮,若值为<code>false</code>则不显示关闭按钮。回调函数<code>this</code>指向<code>dialog</code>对象,执行完毕默认关闭对话框,若返回<code>false</code>则阻止关闭。</p>
  648. <h4>类型</h4>
  649. <p>Function, Boolean</p>
  650. <h4>示例</h4>
  651. <pre><code>dialog({
  652. title: '消息',
  653. ok: function () {},
  654. cancel: function () {
  655. alert('取消');
  656. }
  657. }).show();
  658. </code></pre>
  659. <pre><code>dialog({
  660. title: '消息',
  661. content: '不显示关闭按钮',
  662. ok: function () {},
  663. cancel: false
  664. }).show();
  665. </code></pre>
  666. <h3><span id="option-cancelValue">cancelValue</span></h3>
  667. <p>(默认值: <code>"cancel"</code>) 取消按钮文本。</p>
  668. <h4>类型</h4>
  669. <p>String</p>
  670. <h4>示例</h4>
  671. <pre><code>dialog({
  672. cancelValue: '取消我',
  673. cancel: function () {
  674. alert('关闭');
  675. }
  676. }).show();
  677. </code></pre>
  678. <h3><span id="option-cancelDisplay">cancelDisplay</span></h3>
  679. <p>(默认值: <code>true</code>) 是否显示取消按钮。</p>
  680. <h4>类型</h4>
  681. <p>Boolean</p>
  682. <h4>示例</h4>
  683. <pre><code>dialog({
  684. title: '提示',
  685. content: '这是一个禁止关闭的对话框,并且没有取消按钮',
  686. cancel: function () {
  687. alert('禁止关闭');
  688. return false;
  689. },
  690. cancelDisplay: false
  691. }).show();
  692. </code></pre>
  693. <h3><span id="option-button">button</span></h3>
  694. <p>自定义按钮组。</p>
  695. <h4>类型</h4>
  696. <p>Array</p>
  697. <h4>选项</h4>
  698. <table>
  699. <thead>
  700. <tr>
  701. <th>名称 </th>
  702. <th> 类型 </th>
  703. <th> 描述</th>
  704. </tr>
  705. </thead>
  706. <tbody>
  707. <tr>
  708. <td>value </td>
  709. <td> String </td>
  710. <td> 按钮显示文本</td>
  711. </tr>
  712. <tr>
  713. <td>callback </td>
  714. <td> Function </td>
  715. <td> (可选) 回调函数<code>this</code>指向<code>dialog</code>对象,执行完毕默认关闭与销毁对话框(依次执行<code>close()</code>与<code>remove()</code>),若返回<code>false</code>则阻止关闭与销毁</td>
  716. </tr>
  717. <tr>
  718. <td>autofocus </td>
  719. <td> Boolean </td>
  720. <td> (默认值:<code>false</code>) 是否自动聚焦</td>
  721. </tr>
  722. <tr>
  723. <td>disabled </td>
  724. <td> Boolean </td>
  725. <td> (默认值: <code>false</code>) 是否禁用</td>
  726. </tr>
  727. </tbody>
  728. </table>
  729. <h4>示例</h4>
  730. <pre><code>dialog({
  731. button: [
  732. {
  733. value: '同意',
  734. callback: function () {
  735. this
  736. .content('你同意了');
  737. return false;
  738. },
  739. autofocus: true
  740. },
  741. {
  742. value: '不同意',
  743. callback: function () {
  744. alert('你不同意')
  745. }
  746. },
  747. {
  748. id: 'button-disabled',
  749. value: '无效按钮',
  750. disabled: true
  751. },
  752. {
  753. value: '关闭我'
  754. }
  755. ]
  756. }).show();
  757. </code></pre>
  758. <h3><span id="option-width">width</span></h3>
  759. <p>设置对话框 <strong>内容</strong> 宽度。</p>
  760. <h4>类型</h4>
  761. <p>String, Number</p>
  762. <h4>示例</h4>
  763. <pre><code>dialog({
  764. width: 460
  765. }).show();
  766. </code></pre>
  767. <pre><code>dialog({
  768. width: '20em'
  769. }).show();
  770. </code></pre>
  771. <h3><span id="option-height">height</span></h3>
  772. <p>设置对话框 <strong>内容</strong> 高度。</p>
  773. <h4>类型</h4>
  774. <p>String, Number</p>
  775. <h4>示例</h4>
  776. <pre><code>dialog({
  777. height: 460
  778. }).show();
  779. </code></pre>
  780. <pre><code>dialog({
  781. height: '20em'
  782. }).show();
  783. </code></pre>
  784. <h3><span id="option-skin">skin</span></h3>
  785. <p>设置对话框额外的<code>className</code>参数。</p>
  786. <p>多个<code>className</code>请使用空格隔开。</p>
  787. <h4>类型</h4>
  788. <p>String</p>
  789. <h4>示例</h4>
  790. <pre><code>//..
  791. dialog({
  792. skin: 'min-dialog tips'
  793. }).show();
  794. </code></pre>
  795. <h3><span id="option-padding">padding</span></h3>
  796. <p>(默认值: <em>继承 css 文件设置</em>) 设置消息内容与消息容器的填充边距,即 style <code>padding</code>属性</p>
  797. <h4>类型</h4>
  798. <p>String</p>
  799. <h4>示例</h4>
  800. <pre><code>dialog({
  801. content: 'hello world',
  802. padding: 0
  803. }).show();
  804. </code></pre>
  805. <h3><span id="option-fixed">fixed</span></h3>
  806. <p>(默认值: <code>false</code>) 开启固定定位。</p>
  807. <p>固定定位是 css2.1 <code>position</code>的一个属性,它能固定在浏览器某个地方,也不受滚动条拖动影响。IE6 与部分移动浏览器对其支持不好,内部会转成绝对定位。</p>
  808. <h4>类型</h4>
  809. <p>Boolean</p>
  810. <h4>示例</h4>
  811. <pre><code>dialog({
  812. fixed: true,
  813. title: '消息',
  814. content: '请拖动滚动条查看'
  815. }).show();
  816. </code></pre>
  817. <h3><span id="option-align">align</span></h3>
  818. <p>(默认值: <code>"bottom left"</code>) 设置对话框与其他元素的对齐方式。</p>
  819. <p>如果<code>show(elem)</code>与<code>showModal(elem)</code>传入元素,<code>align</code>参数方可生效,支持如下对齐方式:</p>
  820. <ul>
  821. <li><code>"top left"</code></li>
  822. <li><code>"top"</code></li>
  823. <li><code>"top right"</code></li>
  824. <li><code>"right top"</code></li>
  825. <li><code>"right"</code></li>
  826. <li><code>"right bottom"</code></li>
  827. <li><code>"bottom right"</code></li>
  828. <li><code>"bottom"</code></li>
  829. <li><code>"bottom left"</code></li>
  830. <li><code>"left bottom"</code></li>
  831. <li><code>"left"</code></li>
  832. <li><code>"left top"</code></li>
  833. </ul>
  834. <h3>类型</h3>
  835. <p>String</p>
  836. <h3>示例</h3>
  837. <pre><code>var d = dialog({
  838. align: 'left',
  839. content: 'Hello World!',
  840. quickClose: true
  841. });
  842. d.show(document.getElementById('option-align'));
  843. </code></pre>
  844. <p><a href="../test/align.html">12 个方向定位演示</a></p>
  845. <h3><span id="option-autofocus">autofocus</span></h3>
  846. <p>(默认值: <code>true</code>) 是否支持自动聚焦。</p>
  847. <h4>类型</h4>
  848. <p>Boolean</p>
  849. <h3><span id="option-quickClose">quickClose</span></h3>
  850. <p>(默认值: false) 是否点击空白出快速关闭。</p>
  851. <h4>类型</h4>
  852. <p>Boolean</p>
  853. <h3>示例</h3>
  854. <pre><code>var d = dialog({
  855. content: '点击空白处快速关闭',
  856. quickClose: true
  857. });
  858. d.show(document.getElementById('option-quickClose'));
  859. </code></pre>
  860. <h3><span id="option-zIndex">zIndex</span></h3>
  861. <p>(默认值: <code>1024</code>) 重置全局<code>zIndex</code>初始值,用来改变对话框叠加高度。</p>
  862. <p>比如有时候配合外部浮动层 UI 组件,但是它们可能默认<code>zIndex</code>没有对话框高,导致无法浮动到对话框之上,这个时候你就可以给对话框指定一个较小的<code>zIndex</code>值。</p>
  863. <p>请注意这是一个会影响到全局的配置,后续出现的对话框叠加高度将重新按此累加。</p>
  864. <h4>类型</h4>
  865. <p>Number</p>
  866. <h4>示例</h4>
  867. <pre><code>dialog({
  868. zIndex: 87
  869. }).show();
  870. </code></pre>
  871. <h3><span id="option-onshow">onshow</span></h3>
  872. <p>对话框打开的事件。</p>
  873. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  874. <h4>类型</h4>
  875. <p>Function</p>
  876. <h4>示例</h4>
  877. <pre><code>var d = dialog({
  878. content: 'loading..',
  879. onshow: function () {
  880. this.content('dialog ready');
  881. }
  882. });
  883. d.show();
  884. </code></pre>
  885. <h3><span id="option-onclose">onclose</span></h3>
  886. <p>对话框关闭后执行的事件。</p>
  887. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  888. <h4>类型</h4>
  889. <p>Function</p>
  890. <h4>示例</h4>
  891. <pre><code>var d = dialog({
  892. onclose: function () {
  893. alert('对话框已经关闭');
  894. },
  895. ok: function () {}
  896. });
  897. d.show();
  898. </code></pre>
  899. <h3><span id="option-onbeforeremove">onbeforeremove</span></h3>
  900. <p>对话框销毁之前事件。</p>
  901. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  902. <h4>类型</h4>
  903. <p>Function</p>
  904. <h3><span id="option-onremove">onremove</span></h3>
  905. <p>对话框销毁事件。</p>
  906. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  907. <h4>类型</h4>
  908. <p>Function</p>
  909. <h4>示例</h4>
  910. <pre><code>var d = dialog({
  911. onclose: function () {
  912. alert('对话框已经关闭');
  913. },
  914. onremove: function () {
  915. alert('对话框已经销毁');
  916. },
  917. ok: function () {}
  918. });
  919. d.show();
  920. </code></pre>
  921. <h3><span id="option-onfocus">onfocus</span></h3>
  922. <p>对话框获取焦点事件。</p>
  923. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  924. <h4>类型</h4>
  925. <p>Function</p>
  926. <h3><span id="option-onblur">onblur</span></h3>
  927. <p>对话框失去焦点事件。</p>
  928. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  929. <h4>类型</h4>
  930. <p>Function</p>
  931. <h3><span id="option-onreset">onreset</span></h3>
  932. <p>对话框位置重置事件。</p>
  933. <p>回调函数<code>this</code>指向<code>dialog</code>对象。</p>
  934. <h4>类型</h4>
  935. <p>Function</p>
  936. <h3><span id="option-id">id</span></h3>
  937. <p>设定对话框唯一标识。</p>
  938. <ol>
  939. <li>可防止重复 ID 对话框弹出。</li>
  940. <li>支持使用<code>dialog.get(id)</code>获取某个对话框的接口。</li>
  941. </ol>
  942. <h4>类型</h4>
  943. <p>String</p>
  944. <h4>示例</h4>
  945. <pre><code>dialog({
  946. id: 'id-demo',
  947. content: '再次点击运行看看'
  948. }).show();
  949. dialog.get('id-demo').title('8888888888');
  950. </code></pre>
  951. <h2><span id="property">属性</span></h2>
  952. <h3><span id="property-open">open</span></h3>
  953. <p>判断对话框是否被打开。</p>
  954. <h3><span id="property-returnValue">returnValue</span></h3>
  955. <p>对话框返回值。</p>
  956. <h4>示例</h4>
  957. <pre><code>var d = dialog({
  958. title: '消息',
  959. content: '&lt;input id="property-returnValue-demo" value="1" /&gt;',
  960. ok: function () {
  961. var value = $('#property-returnValue-demo').val();
  962. this.close(value);
  963. this.remove();
  964. }
  965. });
  966. d.addEventListener('close', function () {
  967. alert(this.returnValue);
  968. });
  969. d.show();
  970. </code></pre>
  971. <h2><span id="other">其他</span></h2>
  972. <h3><span id="other-skin">自定义样式</span></h3>
  973. <p>打开配置文件: src/dialog-config.js,其中<code>cssUir</code>字段是 css 文件的路径,<code>innerHTML</code>字段则是 artDialog 的模板。修改这两个字段即可很方便的设计属于自己的皮肤。</p>
  974. <p>一套皮肤可以添加不同的<code>className</code>实现多种状态,可参考 <a href="#option-skin">skin</a> 选项。</p>
  975. <h3><span id="other-grunt">源码构建</span></h3>
  976. <p>使用 <a href="http://gruntjs.cn">GruntJS</a> 在 artDialog 源码根目录执行即可。</p>
  977. <h3><span id="other-upgrade">artDialog v5 升级 v6 参考</span></h3>
  978. <p><a href="https://github.com/aui/artDialog/wiki/artDialog-v5%E5%8D%87%E7%BA%A7v6%E5%8F%82%E8%80%83">https://github.com/aui/artDialog/wiki/artDialog-v5%E5%8D%87%E7%BA%A7v6%E5%8F%82%E8%80%83</a></p>
  979. <h3><span id="other-support">支持</span></h3>
  980. <p>artDialog 是基于 <a href="https://github.com/aui/artDialog/blob/master/LICENSE.md">LGPL</a> 协议免费开源的程序,问题反馈可在 <a href="https://github.com/aui/artDialog/issues?state=open">Github issues</a> 上进行(为了保证效率,请务必描述清楚你的问题,例如包含 artDialog 版本号、浏览器版本等必要信息,有 demo 甚佳。不合格问题将可能会被关闭)。</p>
  981. <hr />
  982. <p><a href="https://github.com/aui/artDialog/blob/master/LICENSE.md">artDialog 商业授权</a></p>
  983. <script src="./js/jquery.js"></script>
  984. <p><link rel="stylesheet" href="./css/ui-dialog.css" /></p>
  985. <script src="./js/dialog-plus.js"></script>
  986. <p><link rel="stylesheet" href="./css/doc.css" /></p>
  987. <script src="./js/doc.js"></script>
  988. </body>
  989. </html>